{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"bae0f9ed-3afa-4602-a08a-1235793d540b","name":"GLOBALG.A.P. Impact-Driven Approach API","description":"The purpose of this document is to provide technical details about the GLOBALG.A.P. Impact-Driven Approach API that enables connectivity between GLOBALG.A.P. and Farm Management Information Systems ( API partners). The document outlines the business processes supported by the API and details the specifications of security, communication, testing and implementation steps. To achieve a complete integration, development effort is required from clients, partners and third party actors who want to use GLOBALG.A.P. API.\n\n## Impact-Driven Approach API Documentation Change Log\n\n| Change | Date |\n| --- | --- |\n| Initial creation of the documentation | 30.6.2020 |\n| Updated Add energy use to convey amount of renewable energy used | 16.7.2020 |\n| Updated Add crop to also include GLOBALG.A.P. product categories | 16.7.2020 |\n| \"public_source\" for water, expected value should be m3 | 18.8.2020 |\n| Methods to get more detailed benchmark data added to GET Benchmark | 18.8.2020 |\n| Updated response for posting site now contains more geographical information (POST Add site) | 30.8.2020 |\n| Updated Add and Modify crop to include planting and harvesting dates to take crop rotation to better account | 21.12.2020 |\n| Updated documentation for instructions on recording of zero consumption of all indicators | 11.06.2021 |\n| Added modules for FV and Aquaculture and change in data structure on how producers could be registered | 03.03.2022 |\n| Combined module of PLANTS, New datapoints, New Input Consumption Metrics and change in data structure on how producers could be registered | 25.10.2023 |\n\n## Version\n\nGLOBALG.A.P. API current version is `2.0.0`. It is important to highlight this API is under continuous improvement. Therefore, both the API itself and this document might be subject to changes and revisions in the future.\n\n## Environments\n\n### PRODUCTION\n\nOfficial GLOBALG.A.P. Impact-Driven Approach IT Production environment: [https://data-driven.globalgap.org/](https://data-driven.globalgap.org/)\n\n### TEST\n\nA 1:1 replica environment for API development and testing purposes: [https://test-data-driven.globalgap.org/](https://test-data-driven.globalgap.org/)\n\n###BETA\n\nAll new developments related latest version of IDA Add-ons for example Fruits and vegetables and Aquaculture, is currently available in BETA [https://beta-data-driven.globalgap.org/](https://test-data-driven.globalgap.org/)\n\n## Target audience\n\nThe use of the GLOBALG.A.P. Impact-Driven Approach API for third parties is intended for applications development by our API partners , including distributed or non-distributed products and services that are related with some of the GLOBALG.A.P. business processes in some way.  \nThis document assumes the reader has a computer technical background and is familiar with JSON, Webservices, Rest APIs and similar technologies.\n\n## API use policy\n\nThese policies have been created to ensure our services integrity, to ensure the data derived from the Impact-Driven Approach API is not misused, and to make the development process easier to our customers and partners. GLOBALG.A.P. reserves the right to modify the location and definition of the API at any time. All the modification to API will be notified to the service providers (or partners)\n\n- GLOBALG.A.P. Impact-Driven Approach API use is restricted by the conditions described in this document.\n    \n- The redistribution of data from the GLOBALG.A.P. Impact-Driven Approach IT system (both test and production environments) is prohibited to any party other than the producer benchmarked: It is not the purpose to share data of individual producers (or producer groups) with anyone who is not the same producer (legal entity), or to share resulting information, based on the data, in a way that can expose individual or a group of growers or the sector as such. This data includes, but is not limited to, percentile data of individual producers or physical units derived from the Impact-Driven IT system and average consumption data of peer producers.\n    \n- The collection, aggregation and redistribution of data from GLOBALG.A.P. Impact-Driven Approach IT system is prohibited for any purpose outside the purpose of showing benchmarking data to an individual Producer where the benchmarking data concerns only the Producer in question.\n    \n- Additional requests made by third-party services on customers/partners behalf are strictly prohibited.\n    \n- API partners are not allowed to sell, share, transfer or distribute access codes.\n    \n- When displaying the benchmarking report to the producers, the API partners shall explicitly declare that the benchmarking data is received from GLOBALG.A.P. This shall be made visible to the end users (growers) in their user interface where the benchmarking reports are displayed.\n    \n- In case internal errors are recurrently received, the API partners shall take action to stop sending requests resulting in errors and get in contact with Customer Support of GLOBALG.A.P. to identify and solve the issue.\n    \n- We offer a Test system for the implementation of the Impact-Driven Approach IT API and API partners are asked to make use of this for this purpose. The use of the test environment is meant for the development and testing of the API connection and is bound by the same conditions as the Production environment.\n    \n- The account used for the Impact-Driven Approach API shall be registered with appropriate contact data (phone and email) in order to allow us contacting that person for technical matters.\n    \n- GLOBALG.A.P. does not guarantee the availability of any data, functionality or feature provided by or through the API.\n    \n- To use the GLOBALG.A.P. Impact-Driven Approach API, it is necessary to have prior explicit authorization of GLOBALG.A.P. Any attempt of using the API without authorization from GLOBALG.A.P. is strictly prohibited.\n    \n- Any violation of the policies described above leads to API access revocation, GLOBALG.A.P. could also take any legal actions if necessary.\n    \n\n## API Limits\n\n- It is strictly forbidden use this API for bulk requests, any detected type of bulk use may lead to API access revocation.\n    \n- Both the number of simultaneous access to the API and the number of operations and errors generated are properly monitored and limited to avoid a misuse of our systems. Going beyond the established limits may result in a temporal blocking.\n    \n\n## Authorization\n\n### JSON Web Token (JWT)\n\nJSON Web Token (JWT) is an open standard [RFC 7519](https://tools.ietf.org/html/rfc7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.\n\nJSON Web Token structure consist of three parts separed by dots \".\", which are:\n\n- Header\n    \n- Payload\n    \n- Signature\n    \n\n#### Header\n\nThe header typically consists of two parts: the type of the token, which is JWT, and the signing algorithm being used, such as HMAC SHA256 or RSA.\n\nA example header:\n\n``` json\n{\n  \"alg\": \"HS256\",\n  \"typ\": \"JWT\"\n}\n\n ```\n\nThis JSON in Base64Url encoded to form the firs part of JWT token\n\n#### Payload\n\nThe second part of the JWT is the payload, which contains the claims. Claims are statements abount an entity and additional data. There are three types of claims:\n\n- Registered: These are a set of predefine claims which are not madatory but recommended. Some of the are:\n    - iss (issuer)\n        \n    - iat (issued at)\n        \n    - exp (expiration time)\n        \n    - sub (subject)\n        \n    - aud (audience)\n        \n- Public: These can be defined at will by those using JWTs. But to avoid collisions they should be defined in the IANA JSON Web Token Registry or be defined as a URI that contains a collision resistant namespace.\n    \n- Private: These are the personalized claims created to share information between the two parties\n    \n\nA example payload:\n\n``` json\n{\n  \"fmis\": \"10190910\",\n  \"ggn\": \"0000001000001\",\n}\n\n ```\n\nThe payload is then Base64Url encoded to form the second part of the JWT.\n\n**NOTE**: In order to recognize the service provider (or API partner (service provider or) (Farm Management Software) the fmis id is needed to be used in the payload of JWT. This id will be given to registered partners of GLOBALG.A.P. In order to recognize the producer whose data concerns, a GGN will be needed to be in the payload. A GGN (GLOBALG.A.P. number) is a unique identifier of producers and each producer associated with a GLOBALG.A.P. standard will have a GGN. In case, a producer also has registered GLN number. A producer shall consult his Certification body for which number shall he use to register in GLOBALG.A.P. IDA system.  \nThere will be 3 different cases of payload based on producer’s profile.\n\n### 1.Individual Producer\n\nIn case a producer is an individual producer, payload example would be\n\n``` json\n{\n  \"fmis\": \"10190910\",\n  \"ggn\": \"0000001000001\"\n}\n\n ```\n\n### 2.Producer Group\n\nWhen producer group is aggregating data for the entire producer group.\n\nHint: API partners can ask end-user question in their user-interface to differentiate whether GGN entered by the user belongs to individual GGN or PG-GGN. Please also refer to Note.In case a producer is a producer group, payload example would be\n\n``` json\n{\n\"fmis\": \"10190910\",\n\"pg-ggn\": \"0000001000001\"\n}\n\n ```\n\n### 3\\. Producer group member\n\nIn case producer is a group member of a producer group, then he shall provide both his individual GGN number and also his producer group’s GGN. Payload example would be below. This payload example is for when producer is entering data as a member of the producer group.\n\n``` json\n{\n  “fmis”: “10190910”,\n  “ggn”: “123456789123”,\n  “pg-ggn”: “0000001000001”\n}\n\n ```\n\nNote: Please note that these above scenarios might change for every product producer is growing. Producer might produce a product as a producer group and he might produce a product as an individual producer. Henceforth, the payload would change for different scenarios as this payload provide certain information to the GLOBALG.A.P. IDA system to not only distinguish them as an individual producer or a producer group but also distinguish if the data recorded are aggregated data of a producer group or individual data of a producer.. It is recommended that this payload information must be verified in the user-interface before adding a new crop/specie for the end-user(producer).\n\n#### Signature\n\nTo create the signature part you have to take the encoded header, the encoded payload, a secret, the algorithm specified in the header, and sign that.\n\n``` code\nHMACSHA256(\n  base64UrlEncode(header) + \".\" +\n  base64UrlEncode(payload),\n  secret\n)\n\n ```\n\nThe signature is used to verify the message wasn't changed along the way, and, in the case of tokens signed with a private key, it can also verify that the sender of the JWT is who it says it is\n\nA example JWT:\n\n``` jwt\neyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbWlzIjoiMTIzMTIzIiwiZ2duIjoiVGVzdDEyMyJ9.66pO-mlHF7k8MOWjOtvQT4999oJeiegZFeO7Iiy0fDI\n\n ```\n\nWhenever the user wants to access a protected route or resource, the user agent should send the JWT, typically in the Authorization header using the Bearer schema. The content of the header should look like the following:\n\n``` html\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbWlzIjoiMTIzMTIzIiwiZ2duIjoiVGVzdDEyMyJ9.66pO-mlHF7k8MOWjOtvQT4999oJeiegZFeO7Iiy0fDI\n\n ```\n\n### Bearer Authentication\n\nBearer authentication (also called token authentication) is an HTTP authentication scheme that involves security tokens called bearer tokens. The name “Bearer authentication” can be understood as “give access to the bearer of this token.” The bearer token is a cryptic string, usually generated by the server in response to a login request. The client must send this token in the Authorization header when making requests to protected resources.\n\n## Response codes\n\nBased in [RFC2616](https://tools.ietf.org/html/rfc2616). Each message contains a header with an HTTP code that categorizes the message in order to automate its processing. The first digit of the Status-Code defines the class of response. The last two digits do not have any categorization role. There are 5 values for the first digit:\n\n- **1xx:** Informational - Request received, continuing process.\n    \n- **2xx:** Success - The action was successfully received, understood, and accepted.\n    \n- **3xx:** Redirection - Further action must be taken in order to complete the request.\n    \n- **4xx:** Client Error - The request contains bad syntax or cannot be fulfilled.\n    \n- **5xx:** Server Error - The server failed to fulfill an apparently valid request.\n    \n\nThese are described in the following table along with their numerical values:\n\n| numerical code | reason |\n| --- | --- |\n| [100](https://tools.ietf.org/html/rfc2616#section-10.1.1) | Continue |\n| [101](https://tools.ietf.org/html/rfc2616#section-10.1.2) | Switching Protocols |\n| [200](https://tools.ietf.org/html/rfc2616#section-10.2.1) | OK |\n| [201](https://tools.ietf.org/html/rfc2616#section-10.2.2) | Created |\n| [202](https://tools.ietf.org/html/rfc2616#section-10.2.3) | Accepted |\n| [203](https://tools.ietf.org/html/rfc2616#section-10.2.4) | Non-Authoritative Information |\n| [204](https://tools.ietf.org/html/rfc2616#section-10.2.5) | No Content |\n| [205](https://tools.ietf.org/html/rfc2616#section-10.2.6) | Reset Content |\n| [206](https://tools.ietf.org/html/rfc2616#section-10.2.7) | Partial Content |\n| [300](https://tools.ietf.org/html/rfc2616#section-10.3.1) | Multiple Choices |\n| [301](https://tools.ietf.org/html/rfc2616#section-10.3.2) | Moved Permanently |\n| [302](https://tools.ietf.org/html/rfc2616#section-10.3.3) | Found |\n| [303](https://tools.ietf.org/html/rfc2616#section-10.3.4) | See Other |\n| [304](https://tools.ietf.org/html/rfc2616#section-10.3.5) | Not Modified |\n| [305](https://tools.ietf.org/html/rfc2616#section-10.3.6) | Use Proxy |\n| [307](https://tools.ietf.org/html/rfc2616#section-10.3.8) | Temporary Redirect |\n| [400](https://tools.ietf.org/html/rfc2616#section-10.4.1) | Bad Request |\n| [401](https://tools.ietf.org/html/rfc2616#section-10.4.2) | Unauthorized |\n| [402](https://tools.ietf.org/html/rfc2616#section-10.4.3) | Payment Required |\n| [403](https://tools.ietf.org/html/rfc2616#section-10.4.4) | Forbidden |\n| [404](https://tools.ietf.org/html/rfc2616#section-10.4.5) | Not Found |\n| [405](https://tools.ietf.org/html/rfc2616#section-10.4.6) | Method Not Allowed |\n| [406](https://tools.ietf.org/html/rfc2616#section-10.4.7) | Not Acceptable |\n| [407](https://tools.ietf.org/html/rfc2616#section-10.4.8) | Proxy Authentication Required |\n| [408](https://tools.ietf.org/html/rfc2616#section-10.4.9) | Request Time-out |\n| [409](https://tools.ietf.org/html/rfc2616#section-10.4.10) | Conflict |\n| [410](https://tools.ietf.org/html/rfc2616#section-10.4.11) | Gone |\n| [411](https://tools.ietf.org/html/rfc2616#section-10.4.12) | Length Required |\n| [412](https://tools.ietf.org/html/rfc2616#section-10.4.13) | Precondition Failed |\n| [413](https://tools.ietf.org/html/rfc2616#section-10.4.14) | Request Entity Too Large |\n| [414](https://tools.ietf.org/html/rfc2616#section-10.4.15) | Request-URI Too Large |\n| [415](https://tools.ietf.org/html/rfc2616#section-10.4.16) | Unsupported Media Type |\n| [416](https://tools.ietf.org/html/rfc2616#section-10.4.17) | Requested range not satisfiable |\n| [417](https://tools.ietf.org/html/rfc2616#section-10.4.18) | Expectation Failed |\n| [500](https://tools.ietf.org/html/rfc2616#section-10.5.1) | Internal Server Error |\n| [501](https://tools.ietf.org/html/rfc2616#section-10.5.2) | Not Implemented |\n| [502](https://tools.ietf.org/html/rfc2616#section-10.5.3) | Bad Gateway |\n| [503](https://tools.ietf.org/html/rfc2616#section-10.5.4) | Service Unavailable |\n| [504](https://tools.ietf.org/html/rfc2616#section-10.5.5) | Gateway Time-out |\n| [505](https://tools.ietf.org/html/rfc2616#section-10.5.6) | HTTP Version not supported |\n\n## Date Conventions\n\n### ISO-8601\n\nThis is specified using the syntax description notation defined in [ABNF](https://tools.ietf.org/html/rfc3339#ref-ABNF).\n\n| Common Name | Format | Example |\n| --- | --- | --- |\n| date-fullyear | 4DIGIT | 2019 |\n| date-month | 2DIGIT | 01-12 |\n| date-mday | 2DIGIT | 01-28, 01-29, 01-30, 01-31 based on month/year |\n| time-hour | 2DIGIT | 00-23 |\n| time-minute | 2DIGIT | 00-59 |\n| time-second | 2DIGIT | 00-58, 00-59, 00-60 based on leap second rules |\n| time-secfrac | \".\" 1\\*DIGIT |  |\n| time-numoffset | (\"+\" / \"-\") time-hour \":\" time-minute | +7:00 |\n| time-offset | \"Z\" / time-numoffset |  |\n| partial-time | time-hour \":\" time-minute \":\" time-second \\[time-secfrac\\] | 23:08:15 |\n| full-date | date-fullyear \"-\" date-month \"-\" date-mday | 2019-01-11 |\n| full-time | partial-time time-offset | 14:35+7:00 |\n| date-time | full-date \"T\" full-time | 2019-01-11T14:35+7:00 |\n\n## Query Parameters\n\nQuery parameters are name/value pairs specified after the resource path, as prescribed in [RFC 3986](https://tools.ietf.org/html/rfc3986).  \nQuery string parameters appear after a question mark (?) in the endpoint. The question mark followed by the parameters and their values is referred to as the “query string.” In the query string, each parameter is listed one right after the other with an ampersand (&) separating them. The order of the query string parameters does not matter.\n\nFor example:\n\n- `https://data-driven.globalgap.org/v1/crops/?limit=3&offset=5&sort_by=name&sort_order=desc`\n    \n- `https://data-driven.globalgap.org/v1/crops/?limit=23`\n    \n\nHowever, with path parameters, the order does matter. If the parameter is part of the actual endpoint (not added after the query string), you usually describe this value in the description of the endpoint itself.\n\n## Units of measurement\n\n| id | Code | Description | Use in module |\n| --- | --- | --- | --- |\n| 1 | m2 | Area | Crop, Site |\n| 2 | ha | Area | Crop, Site |\n| 3 | kg | Amount (AI & fertilizer) | Active Ingredient, Fertilizers |\n| 4 | m3 | Amount (water) | Water |\n| 5 | kWh | Amount (energy) | Energy |\n| 6 | kg/m2 | Intensity (AI & fertilizer) | Benchmark |\n| 7 | kg/ha | Intensity (AI & fertilizer) | Benchmark |\n| 8 | m3/m2 | Intensity (water use) | Benchmark |\n| 9 | m3/ha | Intensity (water use) | Benchmark |\n| 10 | kWh/m2 | Intensity (energy use) | Benchmark |\n| 11 | kWh/ha | Intensity (energy use) | Benchmark |\n| 12 | t | Tonne of species | All |\n\n## Production Types\n\n| ID | **Name** | **Description** |\n| --- | --- | --- |\n| 1 | Covered | Covered crops |\n| 2 | Open field | Open field |\n\n## Functional logic of the Impact-Driven Approach API\n\nThe Impact-Driven API has been designed so that relevant data points can be captured directly from producers' Farm Management Software (FMS) using the API protocols documented in this document. The API has been structured to capture farm level data for product categories such as Flower and Ornamentals, Fruit and Vegetables and Aquaculture. The data points may vary as per the guidelines of GLOBALG.A.P. IDA Add-on for each product category. Please refer to respective folders in this documentation for more details on the data points and how registration of site (s) and crop(s) / batch (es) can be implemented.\n\nIn order to record farm level inputs for Flower and Ornamentals and Fruit and Vegetables through GLOBALG.A.P. Impact-Driven API, FMS shall first need to register information on **physicalsite,** **site** and **crop** of each producers. The Physical site is real physical site. Physical site is to  \nbe included for future integration of producer’s master data sharing between different GLOBALG.A.P. systems. In case of Aquaculture producers, FMS shall first need to register **physicalsite** , **site** and **batch** information. These are the building blocks of producer’s data. Once the crop/batch has been created and assigned to a site, the recording of farm level inputs can begin.\n\n**System Compliance**  \nAs per the General Rules and guidelines of GLOBALG.A.P. Impact-Driven Approach Add-on, producers are required to record data at least once a month. This implies that API partners shall send farm level input consumption metric data, at least, once a calendar month. The API partners can also automatically transfer the data as soon as it has been recorded by the producer in their Farm Management Software but this section defines the minimum frequency of transferring the metric related data to GLOBALG.A.P. Considering real-life scenarios, not all metrics are needed to be recorded every month. Please refer to each metric to see their minimum frequency of recording.\n\n**System Compliance Monitoring**  \nGLOBALG.A.P. Impact Driven Approach IT system is designed to monitor above system compliance. GLOBALG.A.P. will share the report with Certification Bodies every month to let them know if producer is sharing data on a monthly basis or not. Certification Bodies will only get reports for the producers they are responsible to audit the IDA Add-ons with. Failing to adhere to compliance, producers may receive sanctions. As per the rules, the producer shall have window of 10 calendar days to digitally register the input consumption metrics data for the previous calendar month after this calendar month has ended. Input consumption metrics can, nevertheless, be reported retroactively for the missing months.\n\n**Zero Input Consumption**\n\nFor the months when there is no input consumption in any agricultural production at farm level, API partners need to ensure that zero input consumption shall be recorded by the producer. In order to achieve this and for better user experience, a zero button shall be implemented.\n\n**Recording of Zero Consumption in the GLOBALG.A.P. Impact-Driven Approach API**\n\nThe recording of the zero consumption of all the input consumption metrics of each GLOBALG.A.P. Add-on ( IDA Add-on FV, IDA Add-on Aquaculture, IDA Add-on FO) needs to be done explicitly by the producer in months when there is no input been made at farm/site. This is to ensure that GLOBALG.A.P. remains aware of who are actively recording producers.\n\nSuggestion:  \nTherefore, recording of Zero consumption of any metric can be done in a user-friendly way with a call to action button next to the month/year selector for producers. On the click of that button, the API partners will call the respective POST methods of metric and will record zero amount.\n\n**Benchmark**\n\nThe GLOBALG.A.P. Data-Driven IT system is also designed to return **benchmark** data so that the Farm Management Software used by the producer can convert that data to a **benchmark report**. The benchmark data received via the GLOBALG.A.P. Data-Driven API will contain aggregated data based criteria the producer can choose for the producer to understand what is his/her use intensity of farm level inputs within a sample of peer producers. See \"Benchmark\" for more information.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"12988393","collectionId":"bae0f9ed-3afa-4602-a08a-1235793d540b","publishedId":"UVktpYgP","public":true,"publicUrl":"https://api-data-doc.globalgap.org","privateUrl":"https://go.postman.co/documentation/12988393-bae0f9ed-3afa-4602-a08a-1235793d540b","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"}}]}},"version":"8.10.0","publishDate":"2023-11-14T10:42:57.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/8d5b40f39e27d9b2e2811ca3ea66d3d43eaec249546a729d5c6135c3be1aa4fa","favicon":"https://globalgap.org/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://api-data-doc.globalgap.org/view/metadata/UVktpYgP"}