{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"f4499ae9-c802-403c-b30a-adde8530acd2","name":"InByte API Service","description":"StartFragment\n\n# InByte API\n\n**Version:** 1.1  \n**Base URL:** `https://inbyte.ng/v2/api`**Protocol:** HTTPS only\n\nInByte is a Nigerian VTU (Virtual Top-Up) platform that lets you purchase mobile data bundles, airtime, and manage wallet operations programmatically via this REST API.\n\n---\n\n## Quick Start\n\n1. **Generate an API key** — log into your InByte dashboard, go to **Settings → API Access → Generate new key**, give it a name (e.g. `\"Production server\"`), and copy the key shown. **This is the only time you'll see the full key** — InByte only stores a hash of it after this point, so if you lose it, revoke it and generate a new one. There's no \"reveal\" or \"reset\" option.\n    \n2. **Find your User ID** — your 10-digit phone number, no leading `0` and no country code (e.g. `08160271109` → `8160271109`). It's shown on the same Settings page.\n    \n3. **Make your first call:**\n    \n\n``` bash\ncurl https://inbyte.ng/v2/api/balance \\\n  -H \"x-user-id: 8160271109\" \\\n  -H \"x-api-key: inbyte_live_your_key_here\"\n\n ```\n\n``` json\n{ \"success\": true, \"balance\": 1250.00 }\n\n ```\n\nThat's it — no OAuth flow, no token refresh, no client secrets. Every request just carries these two headers.\n\n---\n\n## Authentication\n\n| Header | Type | Description |\n| --- | --- | --- |\n| `x-user-id` | `string` | Your 10-digit phone number, e.g. `8160271109` (no leading zero, no country code) |\n| `x-api-key` | `string` | A key generated from your dashboard. Starts with `inbyte_live_`. |\n\n### Getting and managing your API key\n\nAPI keys are fully self-service — there's no support ticket required:\n\n- **Generate:** Dashboard → Settings → API Access → _Generate new key_. Name it something that identifies where it's used (e.g. `\"Order bot\"`, `\"Inventory sync\"`) — you can hold multiple keys at once, which makes it easy to revoke one integration's access without breaking the others.\n    \n- **Reveal:** Only happens once, at creation. InByte stores a one-way hash of your key, not the key itself — this is intentional and can't be changed, so treat the one-time reveal as your only backup.\n    \n- **Revoke:** Dashboard → Settings → API Access → _Revoke_, next to any key. Takes effect **immediately** — any request using that key fails from that moment on, no propagation delay.\n    \n- **Last used:** Each key's row shows when it was last used, so you can spot a key that should've been revoked a while ago.\n    \n\nThere is currently no way to rotate a key in place — revoking and generating a new one is the rotation flow.\n\n### Authentication failure responses\n\n| Scenario | HTTP Status | Response |\n| --- | --- | --- |\n| Missing `x-user-id` | `401` | `{ \"success\": false, \"message\": \"Missing required header: x-user-id.\" }` |\n| Missing `x-api-key` | `401` | `{ \"success\": false, \"message\": \"Missing required header: x-api-key.\" }` |\n| Both missing | `401` | `{ \"success\": false, \"message\": \"Missing required headers: x-user-id and x-api-key.\" }` |\n| Key doesn't exist / never generated | `403` | `{ \"success\": false, \"message\": \"Invalid credentials.\" }` |\n| Key was revoked | `403` | `{ \"success\": false, \"message\": \"Invalid credentials.\" }` |\n| Key is valid but `x-user-id` doesn't match the account it belongs to | `403` | `{ \"success\": false, \"message\": \"Invalid credentials.\" }` |\n\nNote that all `403` cases return the same generic message deliberately — the API doesn't distinguish \"wrong key\" from \"revoked key\" from \"mismatched user\" in the response body, so a bad actor probing for valid userIds or key states can't learn anything from the error text. If you're debugging your own integration and get an unexplained `403`, check (in order): is the key still active in your dashboard, does the `x-user-id` you're sending match the account that generated the key, and did you copy the whole key including the `inbyte_live_` prefix.\n\n---\n\n## Response Format\n\nAll responses are JSON. Every response includes a `success` boolean as the first field so you can always branch on it without inspecting HTTP status codes.\n\n``` json\n// Success shape\n{\n  \"success\": true,\n  ...                  // endpoint-specific fields\n}\n// Error shape\n{\n  \"success\": false,\n  \"message\": \"Human-readable explanation of what went wrong.\"\n}\n\n ```\n\n### HTTP Status Codes\n\n| Code | Meaning |\n| --- | --- |\n| `200` | Request succeeded |\n| `400` | Bad request — missing field, wrong PIN, invalid network, insufficient balance |\n| `401` | Missing authentication header(s) |\n| `403` | Invalid credentials (bad, revoked, or mismatched API key) |\n| `404` | Resource not found (user, bundle) |\n| `500` | Server or provider error — see `message` field for detail |\n\n---\n\n## Transaction PIN\n\nThe `/data` and `/airtime` endpoints require a 4-digit transaction PIN (`pin` field in the request body). This is separate from both your account password and your API key — it's the same PIN you'd use confirming a purchase in the WhatsApp or Telegram bot. If you haven't set one yet, it's configured from Dashboard → Settings → Security.\n\n**Design note for integrators:** since the PIN travels in the request body on every purchase call, make sure your integration stores it as a secret with the same care as the API key itself — not in logs, not in client-side code, not in version control.\n\n---\n\n## Wallet & Refund Guarantee\n\nAll purchases are deducted from your InByte wallet balance. The deduction is **atomic** — meaning even if two purchases happen at the same time, your balance will never go negative due to a race condition.\n\nIf a purchase is submitted to a provider and the provider returns a failure, **your wallet is automatically refunded in full** before the error response is sent. You will never be charged for a failed purchase.\n\n### Integration note: no idempotency support yet\n\nThere is currently no idempotency-key mechanism on `/data` or `/airtime`. If your client times out waiting for a response and retries the same purchase, the API has no way to recognize it as a duplicate — it will attempt a **second** purchase. If your integration retries on timeout, either:\n\n- Check `/api/transactions` for a matching recent entry before retrying, or\n    \n- Check `/api/balance` to confirm whether the deduction already happened\n    \n\nbefore firing the same request again. This is a known gap, not a documented feature — treat retries as your responsibility to de-duplicate for now.\n\n### No rate limiting\n\nAs of this version, the API does not enforce rate limits. Please still be a good citizen — cache `/api/bundles` responses on your side (bundle prices don't change every second) rather than polling it before every purchase.\n\n---\n\n## Endpoints\n\n---\n\n### `GET /api/balance`\n\nReturns your current wallet balance in NGN.\n\n**No request body required.**\n\n``` bash\ncurl https://inbyte.ng/v2/api/balance \\\n  -H \"x-user-id: 8160271109\" \\\n  -H \"x-api-key: inbyte_live_your_key_here\"\n\n ```\n\n**Example response:**\n\n``` json\n{\n  \"success\": true,\n  \"balance\": 1250.00\n}\n\n ```\n\n**Use this endpoint to:**\n\n- Display available balance before initiating a purchase\n    \n- Confirm a deduction after a transaction\n    \n\n---\n\n### `POST /api/bundles`\n\nReturns available data bundles, grouped by bundle type and sorted cheapest-first within each group. Disabled bundles are excluded automatically.\n\n**Request body:**\n\n``` json\n{\n  \"network\": \"mtn\"\n}\n\n ```\n\n| Field | Type | Required | Description |\n| --- | --- | --- | --- |\n| `network` | `string` | No | Filter by network: `mtn`, `airtel`, `glo`, `9mobile`. **Omit entirely to get all four networks in one call.** |\n\n``` bash\ncurl -X POST https://inbyte.ng/v2/api/bundles \\\n  -H \"x-user-id: 8160271109\" \\\n  -H \"x-api-key: inbyte_live_your_key_here\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"network\": \"mtn\"}'\n\n ```\n\n**Example response:**\n\n``` json\n{\n  \"success\": true,\n  \"bundles\": {\n    \"mtn\": {\n      \"count\": 14,\n      \"grouped\": {\n        \"sme\": [\n          {\n            \"bundleId\":   \"mtn-1gb-sme\",\n            \"bundleName\": \"1GB SME\",\n            \"validity\":   \"30 Days\",\n            \"salePrice\":  280,\n            \"dataType\":   \"SME\"\n          }\n        ],\n        \"gifting\": [ \"...\" ],\n        \"cg\":      [ \"...\" ]\n      }\n    }\n  }\n}\n\n ```\n\n**Error response (no active bundles at all):**\n\n``` json\n{ \"success\": false, \"message\": \"No active bundles found.\" }\n\n ```\n\n> \n\n**Important:** Save the `bundleId` from this response — it's required when calling `POST /api/data`. Bundle IDs and prices can change, so don't hardcode them long-term; re-fetch periodically.\n\n \n  \n\n**Bundle types you may see:**\n\n| Key | Full name |\n| --- | --- |\n| `sme` | SME Data |\n| `sme1` / `sme2` | SME variants |\n| `cg` | Corporate Gifting |\n| `gifting` | Gifting Data |\n| `extra` | Extra Data |\n| `promo` | Promotional |\n| `social` | Social Bundle |\n\n---\n\n### `POST /api/data`\n\nPurchases a mobile data bundle and sends it to a recipient phone number.\n\n**Request body:**\n\n``` json\n{\n  \"bundleId\":    \"mtn-1gb-sme\",\n  \"network\":     \"mtn\",\n  \"phoneNumber\": \"08160271109\",\n  \"pin\":         \"1234\"\n}\n\n ```\n\n| Field | Type | Required | Description |\n| --- | --- | --- | --- |\n| `bundleId` | `string` | Yes | The `bundleId` from `POST /api/bundles` |\n| `network` | `string` | Yes | `mtn`, `airtel`, `glo`, or `9mobile` — must match the network the bundle belongs to |\n| `phoneNumber` | `string` | Yes | 11-digit Nigerian number of the recipient (can be different from your own number) |\n| `pin` | `string` | Yes | Your 4-digit transaction PIN |\n\n``` bash\ncurl -X POST https://inbyte.ng/v2/api/data \\\n  -H \"x-user-id: 8160271109\" \\\n  -H \"x-api-key: inbyte_live_your_key_here\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"bundleId\": \"mtn-1gb-sme\",\n    \"network\": \"mtn\",\n    \"phoneNumber\": \"08160271109\",\n    \"pin\": \"1234\"\n  }'\n\n ```\n\n**Success response:**\n\n``` json\n{\n  \"success\":        true,\n  \"message\":        \"1GB SME sent to 08160271109 successfully.\",\n  \"transactionRef\": \"DATA|29110FFB-F7D8-442F-81C4-7661A9F95EB8\",\n  \"newBalance\":     970.00\n}\n\n ```\n\n**Possible error responses:**\n\n``` json\n{ \"success\": false, \"message\": \"Incorrect PIN.\" }\n{ \"success\": false, \"message\": \"Bundle not found.\" }\n{ \"success\": false, \"message\": \"This bundle is currently unavailable.\" }\n{ \"success\": false, \"message\": \"Insufficient wallet balance. Required: ₦280, Available: ₦50.\" }\n{ \"success\": false, \"message\": \"Missing required fields: phoneNumber, pin.\" }\n// Provider-side failure — wallet is automatically refunded\n{ \"success\": false, \"message\": \"Purchase failed at provider. Your wallet has been refunded.\" }\n// Hard provider exception — wallet was never charged\n{ \"success\": false, \"message\": \"Provider error. Your wallet was not charged.\" }\n\n ```\n\n**How the purchase flow works:**\n\n1. Your PIN is verified\n    \n2. The bundle is looked up and confirmed active\n    \n3. Your balance is checked — if insufficient, the request stops here (no deduction)\n    \n4. Your wallet is deducted atomically\n    \n5. The request is sent to the data provider\n    \n6. If the provider fails → your wallet is refunded in full before the response is sent\n    \n7. The transaction is saved to your history\n    \n\n---\n\n### `POST /api/airtime`\n\nPurchases airtime and sends it to a recipient phone number.\n\n**Request body:**\n\n``` json\n{\n  \"network\":     \"mtn\",\n  \"amount\":      200,\n  \"phoneNumber\": \"08160271109\",\n  \"pin\":         \"1234\"\n}\n\n ```\n\n| Field | Type | Required | Description |\n| --- | --- | --- | --- |\n| `network` | `string` | Yes | `mtn`, `airtel`, `glo`, or `9mobile` |\n| `amount` | `number` | Yes | Amount in NGN. Must be a positive number. |\n| `phoneNumber` | `string` | Yes | 11-digit Nigerian number of the recipient |\n| `pin` | `string` | Yes | Your 4-digit transaction PIN |\n\n``` bash\ncurl -X POST https://inbyte.ng/v2/api/airtime \\\n  -H \"x-user-id: 8160271109\" \\\n  -H \"x-api-key: inbyte_live_your_key_here\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"network\": \"mtn\",\n    \"amount\": 200,\n    \"phoneNumber\": \"08160271109\",\n    \"pin\": \"1234\"\n  }'\n\n ```\n\n**Success response:**\n\n``` json\n{\n  \"success\":        true,\n  \"message\":        \"₦200 MTN airtime sent to 08160271109 successfully.\",\n  \"transactionRef\": \"AIRT1781780460231\",\n  \"newBalance\":     800.00\n}\n\n ```\n\n**Possible error responses:**\n\n``` json\n{ \"success\": false, \"message\": \"Incorrect PIN.\" }\n{ \"success\": false, \"message\": \"Amount must be a positive number.\" }\n{ \"success\": false, \"message\": \"Invalid network \\\"etl\\\". Valid options: mtn, airtel, glo, 9mobile.\" }\n{ \"success\": false, \"message\": \"Insufficient wallet balance. Required: ₦200, Available: ₦50.\" }\n{ \"success\": false, \"message\": \"Missing required fields: amount, pin.\" }\n// Provider failure — wallet refunded\n{ \"success\": false, \"message\": \"Airtime purchase failed. Your wallet has been refunded.\" }\n\n ```\n\nThe purchase flow is the same as `/api/data` — balance is checked before deduction, and a provider failure triggers an automatic refund.\n\n---\n\n### `GET /api/transactions`\n\nReturns your transaction history, newest first. At most 20 records are stored per user — older ones are automatically pruned after each new purchase.\n\n**Query parameters:**\n\n| Parameter | Type | Required | Description |\n| --- | --- | --- | --- |\n| `limit` | `number` | No | How many records to return. Default `20`. Maximum `20`. Example: `?limit=10` |\n\n``` bash\ncurl \"https://inbyte.ng/v2/api/transactions?limit=10\" \\\n  -H \"x-user-id: 8160271109\" \\\n  -H \"x-api-key: inbyte_live_your_key_here\"\n\n ```\n\n**Example response:**\n\n``` json\n{\n  \"success\": true,\n  \"count\": 2,\n  \"transactions\": [\n    {\n      \"transactionRef\":       \"DATA|29110FFB-F7D8-442F-81C4-7661A9F95EB8\",\n      \"transaction_category\": \"DATA PURCHASE\",\n      \"transaction_type\":     \"DEBIT\",\n      \"amount\":               280,\n      \"prev_bal\":             1250.00,\n      \"new_bal\":              970.00,\n      \"status\":               \"success\",\n      \"service\":              \"1GB SME to 08160271109\",\n      \"channel\":              \"API\",\n      \"createdAt\":            1781673930215\n    },\n    {\n      \"transactionRef\":       \"AIRT1781673000000\",\n      \"transaction_category\": \"AIRTIME PURCHASE\",\n      \"transaction_type\":     \"DEBIT\",\n      \"amount\":               200,\n      \"prev_bal\":             1450.00,\n      \"new_bal\":              1250.00,\n      \"status\":               \"success\",\n      \"service\":              \"MTN ₦200 airtime to 08160271109\",\n      \"channel\":              \"API\",\n      \"createdAt\":            1781670000000\n    }\n  ]\n}\n\n ```\n\n**Transaction fields explained:**\n\n| Field | Description |\n| --- | --- |\n| `transactionRef` | Unique reference for this transaction, sourced from the provider where possible |\n| `transaction_category` | `DATA PURCHASE`, `AIRTIME PURCHASE`, or `WALLET FUNDING` |\n| `transaction_type` | `DEBIT` for purchases, `CREDIT` for wallet funding |\n| `amount` | NGN amount involved in this transaction |\n| `prev_bal` | Your wallet balance before this transaction |\n| `new_bal` | Your wallet balance after this transaction |\n| `status` | `success` or `fail` |\n| `service` | Human-readable description of what was purchased and for whom |\n| `channel` | Where the order originated. Purchases made through this API are always `API`. |\n| `createdAt` | Unix timestamp in milliseconds |\n\n**Empty history response:**\n\n``` json\n{ \"success\": true, \"count\": 0, \"transactions\": [] }\n\n ```\n\n---\n\n## Quick Reference\n\n| Method | Endpoint | Auth | Body |\n| --- | --- | --- | --- |\n| `GET` | `/api/balance` | Required | None |\n| `POST` | `/api/bundles` | Required | `{ network? }` |\n| `POST` | `/api/data` | Required | `{ bundleId, network, phoneNumber, pin }` |\n| `POST` | `/api/airtime` | Required | `{ network, amount, phoneNumber, pin }` |\n| `GET` | `/api/transactions` | Required | None (`?limit` query) |\n\n---\n\n## Troubleshooting Checklist\n\nBefore reaching out for support, check:\n\n- \\[ \\] Both `x-user-id` and `x-api-key` headers are present on **every** request, including `GET` calls\n    \n- \\[ \\] `x-user-id` is 10 digits, no leading `0`, no `234` prefix\n    \n- \\[ \\] The API key includes the full `inbyte_live_` prefix and hasn't been truncated in copy/paste\n    \n- \\[ \\] The key hasn't been revoked (check Dashboard → Settings → API Access)\n    \n- \\[ \\] `Content-Type: application/json` is set on `POST` requests with a body\n    \n- \\[ \\] The transaction PIN sent matches what's configured in Dashboard → Settings → Security — not your account password\n    \n\n---\n\n## Changelog\n\n**2.1** — Self-service API key management. Keys are now generated, named, and revoked directly from the dashboard (Settings → API Access) instead of requiring a support request. Multiple keys per account are supported. Keys are shown once at creation and never again — only a hash is retained. Revocation is now immediate.\n\n**2.0** — Initial public release: `/balance`, `/bundles`, `/data`, `/airtime`, `/transactions`.\n\n---\n\n## Support\n\nFor PIN resets or general integration issues, reach out via the InByte platform or contact the development team directly. API key generation and revocation no longer require contacting support — see [Getting and managing your API key](https://claude.ai/chat/d5543705-12f6-4cdd-a993-ac62a3bf203b#getting-and-managing-your-api-key) above.\n\nEndFragment","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"38716395","team":17088398,"collectionId":"f4499ae9-c802-403c-b30a-adde8530acd2","publishedId":"2sBXwwn7Wf","public":true,"publicUrl":"https://documenter-api.postman.tech/view/38716395/2sBXwwn7Wf","privateUrl":"https://go.postman.co/documentation/38716395-f4499ae9-c802-403c-b30a-adde8530acd2","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"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":"FF6C37"}}]}},"version":"8.12.6","publishDate":"2026-06-23T11:54:43.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/4c1e06059e2e8773bed3845a16363f33f360640985a2ab87b44b9233e5782a0d","favicon":""},"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://documenter.gw.postman.com/view/metadata/2sBXwwn7Wf"}