{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"44867d20-3d60-4819-bf44-d76197a36f76","name":"VALR API","description":"VALR provides a powerful API consisting of REST endpoints for transactional operations and a complementary WebSocket service providing streaming market, order, and balance updates.\n\nAccess to and use of the API is governed by our [Terms of Service](https://support.valr.com/hc/en-us/articles/360019021931-Terms-of-Service).\n\nIf you have any API questions, feedback, or recommendations please post a question via our [support center](https://support.valr.com/).\n\nWith our API, you can:\n\n- Access current and historic market data\n    \n- Submit trade orders\n    \n- Buy and sell over 60 cryptocurrencies\n    \n- Withdraw cryptocurrencies from your wallets\n    \n- Withdraw fiat from your VALR wallet\n    \n\n# Getting started\n\n---\n\nKeep the following in mind when developing against the VALR API:\n\n- Enable 2FA on your account. API Keys cannot be generated unless 2FA is enabled.\n    \n- All REST requests must be sent using the `application/json` content-type. Non-HTTPS requests are not allowed.\n    \n- All REST requests will result in HTTP response codes in the range 200-299, unless there is a server or infrastructure error. The API result will be wrapped in a JSON Result object.\n    \n- Receiving a response with an ID does not necessarily mean the order has been placed. If the response status is 202 Accepted, check the order status using either the Order Status REST API or the WebSocket API for real-time updates.\n    \n- Requests that are made to the Authenticated API without an API key will be rejected with an HTTP response code `403`.\n    \n- Any `POST`, `PUT` or `PATCH` HTTP request that is made without the `content-type: application/json` header will be rejected with an HTTP response code `403`.\n    \n\n# AI Agent Skill\n\nOur [AI Agent skill](https://github.com/valrdotcom/valr-agent-skills) gives AI coding agents the context and tools to interact with the VALR API — no prior knowledge of VALR's authentication scheme or endpoints required. It works with any agent that supports the [Agent Skills](https://agentskills.io) specification, including [OpenClaw](https://openclaw.ai/), [Claude Code](https://claude.com/product/claude-code), and others.\n\n# AI Support\n\n<img src=\"https://content.pstmn.io/369aa252-eff4-4c40-9a96-228e06b703e5/YXNrLWFpLnBuZw==\">\n\nTo explore our docs with AI support, [<b>CLICK HERE</b>](https://support.valr.com/hc/en-us?askai=true).\n\n# Authentication\n\n---\n\n## API Keys\n\nAuthenticating to the VALR API requires a valid API Key. API Keys have scoped permissions:\n\n- **View access** - This option grants the API Key permission only to view balances, orders, and other details of the account.\n    \n- **Trade** - This option grants the API Key permission to place buy and sell orders.\n    \n- **Transfer** - This option grants the API Key permission to transfer funds between primary and subaccounts.\n    \n- **Withdraw** - This option grants the API Key permission to programatically withdraw a currency to an address or a bank account you provide.\n    \n- **Link Bank Account** - This option grants the API Key permission to programmatically link bank accounts for fiat deposits and withdrawals.\n    \n\nIf you have enabled 2FA you can view existing API Keys or generate new API Keys with the appropriate permissions. Find the `API Keys` in the account drop-down menu. We strongly recommend minimizing the scope of any given API key to limit the impact of a compromised key/secret pair.\n\nThe generated API Key and the corresponding secret are each 64-character long and are made up of numbers and letters. An API Key/API Secret will look similar to the example provided below:\n\nExample API Key/API Secret: `b9fb68df5485639d03c3171cf6e49b89e52fd78d5c313819b9c592b59c689f33`\n\n### Notes on security: Secure your API Keys and API Secrets\n\nYour API Key identifies your account (think of it as a username) and the API Secret authenticates your account (think of it as a password). Please follow the instructions below to secure your API Key and API Secret:\n\n- Do not send your API Secret with your API requests. Only send the API Key.\n    \n- Do not share your API Secret or the API Key with anyone.\n    \n- Do not commit your API Secret into source control systems like github.\n    \n- If you lose your API Key or Secret, immediately delete it from your Setting page.\n    \n\nPlease take note that if your API Secret is compromised, your funds are at risk.\n\n## Request signing\n\nAuthenticated calls require you to send a request signature with every request. This signature should be re-generated for every request. The `request signature` is generated by first concatenating the following values in the order given below and creating a SHA512 HMAC hash using your API Secret:\n\n| Parameter | Description |\n| --- | --- |\n| timestamp | The current unix timestamp (in milliseconds) of this request |\n| verb | HTTP verb. Example: GET, POST, PUT or DELETE |\n| path | Request path excluding host name and including query string, e.g. /v1/account/balances |\n| body (optional) | HTTP Request body as a string (optional, if request has no body) |\n| subaccountId (optional) | The Id of a subaccount as a string. **Required when impersonating a subaccount.** |\n\nThe NodeJS example below has a method called `signRequest` that generates a `request signature` which must be passed along with every request that needs authentication:\n\n``` javascript\nconst crypto = require('crypto');\nfunction signRequest(apiSecret, timestamp, verb, path, body = '') {\n    return crypto\n      .createHmac(\"sha512\", apiSecret)\n      .update(timestamp.toString())\n      .update(verb.toUpperCase())\n      .update(path)\n      .update(body)\n      .digest(\"hex\");\n}\n\n ```\n\nGolang example:\n\n``` go\nfunc signRequest(apiSecret string, timestamp time.Time, verb string, path string, body string) string {\n    // Create a new Keyed-Hash Message Authentication Code (HMAC) using SHA512 and API Secret\n    mac := hmac.New(sha512.New, []byte(apiSecret))\n    // Convert timestamp to nanoseconds then divide by 1000000 to get the milliseconds\n    timestampString := strconv.FormatInt(timestamp.UnixNano()/1000000, 10)\n    mac.Write([]byte(timestampString))\n    mac.Write([]byte(strings.ToUpper(verb)))\n    mac.Write([]byte(path))\n    mac.Write([]byte(body))\n    // Gets the byte hash from HMAC and converts it into a hex string\n    return hex.EncodeToString(mac.Sum(nil))\n}\n\n ```\n\nC# example:\n\n``` csharp\nusing System;\nusing System.Text;\nusing System.Security.Cryptography;\npublic static \nstring signRequest(string apiKeySecret, string timestamp, string verb, string path, string body = \"\")\n{\n    var payload = timestamp + verb.ToUpper() + path + body;\n    byte[] payloadBytes = Encoding.UTF8.GetBytes(payload);\n    using (HMACSHA512 hmac = new HMACSHA512(Encoding.UTF8.GetBytes(apiKeySecret))) \n    {\n        byte[] hash = hmac.ComputeHash(payloadBytes);\n        return toHexString(hash);\n    }\n}\nprivate static \nstring toHexString(byte[] hash)\n{\n    StringBuilder result = new StringBuilder(hash.Length * 2);\n    foreach(var b in hash)\n    {\n        result.Append(b.ToString(\"x2\"));\n    }\n    return result.ToString();\n}\n/* Timestamp in milliseconds. \n * The same timestamp should be used to generate request signature\n * as well as sent along in the X-VALR-TIMESTAMP header of the request\n */\nprivate static \nstring getTimestamp()\n{\n    return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();\n}\n\n ```\n\nPython 3.x example:\n\n``` python\nimport time\nimport hashlib\nimport hmac\ndef sign_request(api_key_secret, timestamp, verb, path, body = \"\"):\n    \"\"\"Signs the request payload using the api key secret\n    api_key_secret - the api key secret\n    timestamp - the unix timestamp of this request e.g. int(time.time()*1000)\n    verb - Http verb - GET, POST, PUT or DELETE\n    path - path excluding host name, e.g. '/v1/withdraw\n    body - http request body as a string, optional\n    \"\"\"\n    payload = \"{}{}{}{}\".format(timestamp,verb.upper(),path,body)\n    message = bytearray(payload,'utf-8')\n    signature = hmac.new( bytearray(api_key_secret,'utf-8'), message, digestmod=hashlib.sha512).hexdigest()\n    return signature\n\n ```\n\nJava example:\n\n``` java\nimport javax.crypto.Mac;\nimport javax.crypto.spec.SecretKeySpec;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.time.Clock;\n    /**\n     * Signs the request payload using the api key secret\n     *\n     * @param apiKeySecret - the api key secret\n     * @param timestamp    - the unix timestamp of this request e.g. Clock.systemUTC().millis()\n     * @param verb         - Http verb - GET, POST, PUT or DELETE\n     * @param path         - path excluding host name, e.g. '/v1/withdraw'\n     * @param body         - http request body as a string, optional\n     * @return the signature of the request\n     */\n    public static String signRequest(String apiKeySecret, String timestamp, String verb, String path, String body) {\n        try {\n            Mac hmacSHA512 = Mac.getInstance(\"HmacSHA512\");\n            SecretKeySpec secretKeySpec = new SecretKeySpec(apiKeySecret.getBytes(), \"HmacSHA512\");\n            hmacSHA512.init(secretKeySpec);\n            hmacSHA512.update(timestamp.getBytes());\n            hmacSHA512.update(verb.toUpperCase().getBytes());\n            hmacSHA512.update(path.getBytes());\n            hmacSHA512.update(body.getBytes());\n            byte[] digest = hmacSHA512.doFinal();\n            return toHexString(digest);\n        } catch (NoSuchAlgorithmException | InvalidKeyException e) {\n            throw new RuntimeException(\"Unable to sign request\", e);\n        }\n    }\n    public static String toHexString(byte[] a) {\n        StringBuilder sb = new StringBuilder(a.length * 2);\n        for (byte b : a)\n            sb.append(String.format(\"\u0002x\", b));\n        return sb.toString();\n    }\n\n ```\n\n### Writing your own request signing method\n\nIf you choose to write your own method to generate a `request signature`, please use the following test data:\n\n| Parameter | Test value |\n| --- | --- |\n| timestamp | 1558014486185 |\n| verb | GET |\n| path | /v1/account/balances |\n| API Secret | 4961b74efac86b25cce8fbe4c9811c4c7a787b7a5996660afcc2e287ad864363 |\n\nIf you provide the above values, your method should generate the following HMAC SHA512 signature using your API Secret:\n\n`9d52c181ed69460b49307b7891f04658e938b21181173844b5018b2fe783a6d4c62b8e67a03de4d099e7437ebfabe12c56233b73c6a0cc0f7ae87e05f6289928`\n\n| Parameter | Test value |\n| --- | --- |\n| timestamp | 1558017528946 |\n| verb | POST |\n| path | /v1/orders/market |\n| body | {\"customerOrderId\":\"ORDER-000001\",\"pair\":\"BTCUSDC\",\"side\":\"BUY\",\"quoteAmount\":\"80000\"} |\n| API Secret | 4961b74efac86b25cce8fbe4c9811c4c7a787b7a5996660afcc2e287ad864363 |\n\nIf you provide the above values, your method should generate the following HMAC SHA512 signature using your API Secret:\n\n`09f536e3dfdad58443f16010a97a0a21ad27486b7b8d6d4103170d885410ed77f037f1fa628474190d4f5c08ca12c1acc850901f1c2e75c6d906ec3b32b008d0`\n\n## Making an authenticated API call\n\nFollow the instructions below to make an authenticated API call:\n\n1. Create a SHA512 HMAC hash using your API Secret and the values pertaining to your request (timestamp, HTTP verb, API path, body, subaccountId - when impersonating a subaccount) detailed above.\n    \n2. REST: Include the following headers in each request:\n    \n    - **X-VALR-API-KEY** : Your API Key\n        \n    - **X-VALR-SIGNATURE** : The `request signature` that was generated for your request (see point 1)\n        \n    - **X-VALR-TIMESTAMP** : The same timestamp used to generate the `request signature`\n        \n    - **X-VALR-SUB-ACCOUNT-ID** (Optional): A Primary account API key can impersonate a subaccount by specifying the subaccountId in this header. This allows the primary account to transact on the impersonated subaccount. Remember to add the subaccountId in the request signature as well.\n        \n3. WebSocket: Pass in the same three headers to the first call that establishes the WebSocket connection. (See `WebSocket API` section below for details)\n    \n\n## Run in Postman\n\nYou can run our API collection in Postman using the button \"Run in Postman\" above. This collection already includes the following items for your convenience:\n\n1. A pre-request script that runs before every request to generate your request signature and timestamp.\n    \n2. The three authentication headers pre-populated with the right environment variables for each request.\n    \n\nIn order to start with Postman, please create a new `Environment` in Postman and add two variables and name them `yourApiKey` and `yourApiSecret`. Provide appropriate initial values for these variables. That is, your Api Key and Api Secret for your account. Enable this environment while running your requests. That is all!\n\n(Optional): To impersonate an account add the **X-VALR-SUB-ACCOUNT-ID** header to the request. To add the **X-VALR-SUB-ACCOUNT-ID** header to **every** request, define the `yourSubAccountId` variable in your `Environment`. If you provide the header on the request and **also** define the environment variable, the header will take precedence. Note that some requests do not allow impersonation.\n\n### Details of the pre-request script\n\nThe pre-request script will populate the following two variables in your environment with the correct values:\n\n- `requestSignature`\n    \n- `requestTimestamp`\n    \n\nThe script is provided below for your convenience:\n\n``` javascript\n/* Pre-requisite\n==================\n1) Create a new Environment in Postman.\n2) Add two variables: \"yourApiKey\" and \"yourApiSecret\" to the Environment. Provide appropriate initial values for these variables. That is, the Api Key and Api Secret for your account.\n3) Enable this environment for your requests.\n4) For each request, this script generates the following two new environment variables:\n* requestSignature\n* requestTimestamp\n5) Ensure that the following three headers are sent with every request:\nX-VALR-API-KEY: {{yourApiKey}}\nX-VALR-SIGNATURE: {{requestSignature}}\nX-VALR-TIMESTAMP: {{requestTimestamp}}\nSubaccounts\n==================\nTo perform a request impersonating a specific subaccount, the subaccount ID must be provided. The ID can be determined by using `Account/Subaccounts/Retrieve Subaccounts`. Once the ID is determined, it can be added to the request by either adding the `X-VALR-SUB-ACCOUNT-ID` header, with the ID as value, to the request directly, or by adding the variable {{yourSubAccountId}} to the Postman Environment. If both are provided, the header has precedence. If the variable is provided it will be added to every request.\nPlease note: Requests that may only be performed on the Primary account will fail with a \"401: Unauthorized\" response if the subaccount ID is included.\n*/\nvar YOUR_API_KEY = postman.getEnvironmentVariable('yourApiKey');\nvar YOUR_API_SECRET = postman.getEnvironmentVariable('yourApiSecret');\nvar subAccountHeader = pm.request.headers.find((header) => header.key === 'X-VALR-SUB-ACCOUNT-ID' && !header.disabled)\nvar YOUR_SUB_ACCOUNT_ID = subAccountHeader ? subAccountHeader.value \n        : postman.getEnvironmentVariable('yourSubAccountId');\nvar requestTimestamp = (new Date()).getTime();\nfunction getPath(url) {\n    var pathRegex = /(?:.+?\\:\\/\\/.+?)?(\\/.+)/;\n    var result = url.match(pathRegex);\n    return result && result.length > 1 ? result[1] : ''; \n}\nfunction getHmacDigest(httpMethod, requestUrl, requestBody) {\n    var requestPath = getPath(requestUrl.toString());\n    if (httpMethod == 'GET' || !requestBody) {\n        requestBody = ''; \n    } \n    var requestData = [requestTimestamp, httpMethod.toUpperCase(), requestPath, requestBody, YOUR_SUB_ACCOUNT_ID].join(\"\");\n    var hmacDigest = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA512(requestData, YOUR_API_SECRET));\n    return hmacDigest;\n}\npostman.setEnvironmentVariable('requestSignature', getHmacDigest(pm.request.method, pm.request.url, pm.request.body));\npostman.setEnvironmentVariable('requestTimestamp', requestTimestamp);\nif (YOUR_SUB_ACCOUNT_ID && YOUR_SUB_ACCOUNT_ID > 0 && !subAccountHeader) {\n    pm.request.headers.add({ key: 'X-VALR-SUB-ACCOUNT-ID', value: `${YOUR_SUB_ACCOUNT_ID}` });\n}j\n\n ```\n\n# Rate limiting\n\n---\n\n**Rate Limits**\n\nRate limits depend on the connection type used. REST and WebSocket connections are governed differently, but all limits reset at the start of each minute.\n\n**REST (HTTP) API**\n\nREST requests are limited by both API key and IP address. Both limits apply at the same time.\n\n- **2000 requests per minute per API key.**\n    \n- **1200 requests per minute per IP address.**\n    \n\nIf either limit is exceeded, the request is rejected with:  \nHTTP Status Code  \n429 Too Many Requests\n\n**WebSockets**\n\nWebSocket rate limits are enforced per IP address only.\n\n- API key limits do not apply.\n    \n- All connections from the same IP share a single limit pool.\n    \n- Multiple bots or accounts on the same server will not increase throughput.\n    \n\nIf the WebSocket rate limit is exceeded, the server will send:\n\n{  \n\"type\": \"RATE_LIMIT_EXCEEDED\"  \n}\n\n**Reset Policy**\n\nAll limits reset every minute.\n\n- Example 1: You are allowed to do 1000 calls from 10:10:00 to 10:10:59. When the time changes to 10:11:00, the counter will be reset and will start over.\n    \n- Example 2: If the first request comes in at 10:10:30, the counter will be reset at 10:11:00.\n    \n\nTo ensure that users are able to place and cancel orders at a higher rate, per second rate limits are applied on certain API routes, with the limit reset at the start of the next second. Here the limits per IP and key do not apply:\n\n- Public calls v1:\n    \n    - Route: /v1/public/\\*\n        \n    - Method: `GET`\n        \n    - Rate limit: 30/m\n        \n- Public time v1:\n    \n    - Route: /v1/public/time\n        \n    - Method: `GET`\n        \n    - Rate limit: 20/s\n        \n- Public status v1:\n    \n    - Route: /v1/public/status\n        \n    - Method: `GET`\n        \n    - Rate limit: 20/s\n        \n- Public buckets v1:\n    \n    - Route: /v1/public/\\*/buckets\n        \n    - Method: `GET`\n        \n    - Rate limit: 20/s\n        \n- Batch orders v1:\n    \n    - Route /v1/batch/orders\n        \n    - Method: `POST`\n        \n    - Rate limit: 400/s\n        \n- Delete orders v1:\n    \n    - Route /v1/orders\n        \n    - Method: `DELETE`\n        \n    - Rate limit: 450/s\n        \n- Post orders v1:\n    \n    - Route /v1/orders\n        \n    - Method: `POST`\n        \n    - Rate limit: 400/s\n        \n- Batch orders v2:\n    \n    - Route /v2/orders/modify\n        \n    - Method: `PUT`\n        \n    - Rate limit: 400/s\n        \n- Loans v1:\n    \n    - Route /v1/loans/\\*\n        \n    - Method: `POST, PUT, DELETE`\n        \n    - Rate limit: 1/s\n        \n- Create sub account v1:\n    \n    - Route /v1/account/subaccount\n        \n    - Method: `POST`\n        \n    - Rate limit: 1/s\n        \n- Sub account transfer v1:\n    \n    - Route /v1/account/subaccount/transfer\n        \n    - Method: `POST`\n        \n    - Rate limit: 20/s\n        \n- WebSocket new clients:\n    \n    - Route: /ws\n        \n    - Rate limit: 60/m\n        \n- WebSocket account write:\n    \n    - Route: /ws/account\n        \n    - Place: 400 p/s\n        \n    - Cancel: 450p/s\n        \n    - Batch: 400p/s\n        \n    - Modify: 400p/s\n        \n\nWe may reduce limits when the system is under severe pressure.\n\n# Performance considerations\n\n---\n\n### WebSocket Efficiency\n\nWebSocket connections offer significantly faster data transmission than HTTP due to their persistent, open TCP socket. This allows for efficient, real-time communication.  \nBatching can further enhance performance, though the benefit is less pronounced with WebSockets compared to HTTP.\n\n### Optimal Order Book Updates\n\nThe OB_L1_DIFF WebSocket feed provides the most rapid updates for order book changes. Its smaller data packets minimize overhead for clients, servers, and network transmission.\n\n### Real-Time Order Execution\n\nA WebSocket connection is the fastest method for receiving order processing and status updates. Most unfiltered HTTP requests for order status are served from memory, but updates via WebSockets in normal conditions should still be superior.\n\n### Estimated Latency\n\nExcluding geographic distance and demand, the total round trip time from placing the order via WebSocket to receiving the order place outcome on a WebSocket connection should be approximately 8ms. This number is a rough estimate and can vary as we constantly update our service or due to other constraints.\n\n# Caching\n\nIn order to improve the latency of requests and reduce the load on servers, some GET requests are cached by default.  \nWe use the HTTP Cache-Control Header, which comprises one or more comma separated directives. These directives determine whether a GET response is cachable, and if so, the duration.\n\nHere's an example of an HTTP Response Header:\n\n`cache-control: max-age=60,public`\n\n- cache-control: max-age - defines the amount of time it takes for a cached copy of a resource to expire, in seconds.\n    \n- cache-control: public - means that a resource can be cached by any cache.\n    \n\nBelow are the GET endpoints that are cached, and their max-age in seconds.\n\n```\n*Public Routes*\n===============\n/marketsummary (60)\n/:currencypair/marketsummary (10)\n/currencies (60)\n/pairs(60)\n/:currencyPair/orderbook (30)\n/:currencyPair/orderbook/full (30)\n/:currencyPair/trades (30)\n/ordertypes (60)\n/:currencypair/ordertypes (60)\n*Authenticated Routes*\n======================\n/marketdata (1)\n/fiat/:currency/banks (600)\n/fiat/:currency/auto-buy (60)\n/portfolio (1)\n\n ```","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"7185612","team":331511,"collectionId":"44867d20-3d60-4819-bf44-d76197a36f76","publishedId":"S1Lr5XDq","public":true,"publicUrl":"https://docs.valr.com","privateUrl":"https://go.postman.co/documentation/7185612-44867d20-3d60-4819-bf44-d76197a36f76","customColor":{"top-bar":"FFFFFF","right-sidebar":"0D0F22","highlight":"1E4DF2"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/dbef17e2-5bc7-4f5e-a9dc-c41397e719ce/bG9nby1saWdodC5wbmc=","colors":{"top-bar":"16192F","right-sidebar":"0D0F22","highlight":"1E4DF2"}},{"name":"light","logo":"https://content.pstmn.io/ba9bb7ac-1665-46ed-8b81-cf1d9c602f4d/bG9nby1kYXJrLnBuZw==","colors":{"top-bar":"FFFFFF","right-sidebar":"0D0F22","highlight":"1E4DF2"}}]}},"version":"8.10.1","publishDate":"2025-06-30T14:05:06.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/ba9bb7ac-1665-46ed-8b81-cf1d9c602f4d/bG9nby1kYXJrLnBuZw==","logoDark":"https://content.pstmn.io/dbef17e2-5bc7-4f5e-a9dc-c41397e719ce/bG9nby1saWdodC5wbmc="}},"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/9ec256380f7b08c81d5e9494adc6df1a8e31f8250e05fde20920e48bb8557b43","favicon":"https://res.cloudinary.com/postman/image/upload/v1755880882/team/982e9897641375d373f706b59b8bf452.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://docs.valr.com/view/metadata/S1Lr5XDq"}