{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"26ff3c98-c9a9-4115-bdd7-019342f8c9ec","name":"B2B Digital Goods Platform for Client","description":"<img src=\"https://cdn.ralali.id/assets/ralali.png\" alt=\"ralali logo\">\n\n# API Documentation\n\n# Changelog\n\n| Version | Date | Remarks | Author |\n| --- | --- | --- | --- |\n| v1.0-RC1 | 2021-10-05 | Initial Draft | Daud & Irwansyah |\n| v1.0 | 2021-10-14 | Initial Release | Daud & Irwansyah |\n\n# 1\\. Introduction\n\nRalali's B2B Digital Goods Platform helps your business to accept digital goods transactions, by providing a capability for selling digital products, such as mobile top-up credit, bill payments, electricity tokens, etc.\n\nYou can try our platform, in our Sandbox Environment, via RESTful APIs that we have provided. We also provide dummy data for your development purpose in that environment.  \nWhen you're ready to launch, you can easily switch to our Production Environment by changing the Base URL and the Credentials.\n\nPlease, follow our guidelines below.\n\n# 2\\. Preparation\n\nFor accessing our environment we need to know who you are, so you need an `API Key` for us to verifying that you are an authorized client. The API key must be in the `Authorization` header for each request that you send to our server.\n\nFor our POST endpoints, you also need `client_secret_key` for creating a `Signature` that you need to add in your requests' header. Read the Signature section for how to create the signature.\n\nIf you do not have any of those keys, please contact our Account Managers or Business Representatives.\n\nAlso, please inform us your service's **IP Address**, because we need to whitelist your **IP Address** in both environment **development** and **production**, so that your service can access our endpoints.\n\n| Endpoint | Authorization | Signature |\n| --- | --- | --- |\n| POST Inquiry | ✅ | ✅ |\n| POST Transaction | ✅ | ✅ |\n| GET Balance Info | ✅ | ❌ |\n| GET List Product | ✅ | ❌ |\n| GET Transaction Status | ✅ | ❌ |\n\n## 2.1. Environments\n\nWe provide two environments: **Sandbox** and **Production**. For your development purpose, you must use the Sandbox environment.\n\n| Environment | API Base URL |\n| --- | --- |\n| Sandbox | [https://sandbox-b2b.ralali.xyz/digital](https://sandbox-b2b.ralali.xyz/digital) |\n| Production | [https://b2b.ralali.com/digital](https://b2b.ralali.com/digital) |\n\nNotes:\n\n- In the Sandbox Environment, the transactions will be proceed by using dummy data, it is not actual purchase.\n    \n- The API Keys for each environment are different.\n    \n- Each environment is isolated, so any changes in the Sandbox Environment will not affect the Production Environment, vice-versa.\n    \n\n## 2.2. API Keys\n\nYou'll need your API keys for integration, and we will provide you API Keys for Sandbox to set up the integration.  \nAPI Keys for production will be sent after integration success.\n\nThink of your secret key like a password:\n\n- Store it securely\n    \n- Don't share it with anyone outside of your organization\n    \n- Don't put it in any code on your website or in a URL that someone could find\n    \n\nIf you have any questions about the integration or expect more integration to fulfill your business needs, don't hesitate to contact us.\n\n## 2.3. Authentication\n\nEach request that you send to our platform, **MUST BE** Authenticated by adding an `Authorization` header in your requests with your API key as the value.\n\n```\nAuthorization: <client_api_key>\n\n ```\n\n## 2.4. Signature\n\nFor the POST endpoints, each request that sent by the client **MUST** have a `Signature` on the HTTP request header. Without a Valid Signature, the transactions will not be proceed.\n\n```\nAuthorization: <client_api_key>\nSignature: <client_signature>\n\n ```\n\nRalali will generate a unique value of client_secret_key, and it will be given after the onboarding process.  \nThe encrypted string structure as below:\n\n- String: minify(jsonBodyRequest)\n    \n- The String should be encrypted using HMAC_SHA256 where the client_secret_key as the encryption key\n    \n\nBelow, are some examples of how to generate a signature in Go, PHP, JavaScript, and Python.\n\n**Go Example:**\n\n```\npackage main\nimport (\n    \"crypto/hmac\"\n    \"crypto/sha256\"\n    \"encoding/hex\"\n    \"fmt\"\n)\nfunc main() {\n    clientSecretKey := \"7i8rJXPSRSAqLvo5sxWJ4CNZCmxidKoj\" // DO NOT hard-code your Client Secret Key! This is just an example \n    payload := `{\"client_reference_id\":\"DG-11212998888121\",\"customer_id\":\"8888801470615200\",\"customer_phone_number\":\"08968234923\",\"product_code\":\"BPJS\",\"category_code\":\"bpjs\",\"month\":1}`\n    signature := HMAC256(payload, clientSecretKey)\n    fmt.Println(signature)\n}\nfunc HMAC256(plain, secret string) string {\n    key := []byte(secret)\n    h := hmac.New(sha256.New, key)\n    h.Write([]byte(plain))\n    return hex.EncodeToString(h.Sum(nil))\n}\n\n ```\n\n**PHP Example:**\n\n```\n$clientSecretKey = \"7i8rJXPSRSAqLvo5sxWJ4CNZCmxidKoj\"; // DO NOT hard-code your Client Secret Key! This is just an example \n$payload = '{\"client_reference_id\":\"DG-11212998888121\",\"customer_id\":\"8888801470615200\",\"customer_phone_number\":\"08968234923\",\"product_code\":\"BPJS\",\"category_code\":\"bpjs\",\"month\":1}';\n$signature = hash_hmac(\"sha256\", $payload, $clientSecretKey);\necho $signature;\n\n ```\n\n**JavaScript Example:**\n\n```\nimport CryptoJS from \"crypto-js\";\nvar inp = `{\"client_reference_id\":\"DG-11212998888121\",\"customer_id\":\"8888801470615200\",\"customer_phone_number\":\"08968234923\",\"product_code\":\"BPJS\",\"category_code\":\"bpjs\",\"month\":1}`;\nvar payload = JSON.stringify(JSON.parse(inp));\nvar clientSecretKey = '7i8rJXPSRSAqLvo5sxWJ4CNZCmxidKoj'; // DO NOT hard-code your Client Secret Key! This is just an example \nvar hash = CryptoJS.HmacSHA256(payload, clientSecretKey);\nvar hexHash = hash.toString(CryptoJS.enc.Hex);\nconsole.log(hexHash);\n\n ```\n\n**Python Example:**\n\n```\nimport hashlib\nimport hmac\nclientSecretKey = '7i8rJXPSRSAqLvo5sxWJ4CNZCmxidKoj' // DO NOT hard-code your Client Secret Key! This is just an example \nsignature = hmac.new(\n    bytes(clientSecretKey, 'UTF-8'),\n    msg=bytes('{\"client_reference_id\":\"DG-11212998888121\",\"customer_id\":\"8888801470615200\",\"customer_phone_number\":\"08968234923\",\"product_code\":\"BPJS\",\"category_code\":\"bpjs\",\"month\":1}', 'UTF-8'),\n    digestmod=hashlib.sha256\n).hexdigest()\nprint(signature)\n\n ```\n\n# 3\\. Making Your First API Call\n\nMaking your first API call tests that your `api_key` is valid and your server IP address has been whitelisted by us. To do that you can send a GET request to `https://b2b.ralali.com/digital/echo` with the **Authorization header**.  \nYou should get an **HTTP 200 OK** response that acknowledges that your request has been accepted on our side.\n\n```\ncurl --location --request GET 'https://b2b.ralali.com/digital/echo' \\\n--header 'Content-Type: application/json' \\\n--header &#x27;Authorization: <client_api_key>&#x27;\n\n ```\n\n# 4\\. Getting Started\n\nNow that you've already successfully making your first API call, it's time to start creating your digital goods transactions through our platform.\n\n## 4.1. Creating a Transaction\n\nGenerally, there are three endpoints that you need to hit for creating a digital goods transaction:\n\n1. **POST Inquiry**\n    \n2. **POST Transaction**\n    \n3. **GET Transaction Status**\n    \n\nHowever, you do not need to send **POST Inquiry** for some product categories, such as `Pulsa Prabayar` and `Paket Data`, for more details, look at our products description.\n\n<img src=\"https://cdn.ralali.id/assets/dgap/DGAP_Normal-Flow.png\" alt=\"DGAP - Normal Flow\">\n\n**Notes**:\n\n- **The POST Transaction** endpoint is an **asynchronous process** and it always return **TRANSACTION_PROCESSING** response name, thus you **MUST** check the transaction status via **GET Transaction Status** endpoint after you hit the **POST Transaction** to know the latest status of the transactions.\n    \n- We also provide a **Callback Mechanism** for instantly update the transactions status on your side. Please read the Callbacks section.\n    \n- If you get **VALIDATION_FAILURE** or **INSUFFICIENT_BALANCE** response name from our platform. You can directly set the transaction status on your side to be `failed`, other than that **MUST** check the status transaction via the **GET Transaction Status** endpoint.\n    \n\n## 4.2. Handling Unexpected Responses\n\nWhile you are sending a request through **POST Transaction** but you do not receive a response from our platform, or you receive an unknown or unexpected response payload from our side that is not documented in this documentation, then you **MUST** check the transaction status by sending a request through **GET Transaction Status** endpoint.\n\n<img src=\"https://cdn.ralali.id/assets/dgap/DGAP_Timeout-Flow.png\" alt=\"DGAP - Timeout Flow\">\n\nYou should check the field `name` on the response's body to determine when and how long you should re-hit our API for checking the transaction status. Please refer to the table below.\n\n| Response Name | Repeat Time-to-live (minimum) |\n| --- | --- |\n| DATA_NOT_FOUND | 6 minutes |\n| INTERNAL_FAILURE | 5 days |\n| Empty/Unknown Response Body | 5 days |\n\nAs long as you get those Response Names above, you should re-hit our `GET Transaction Status` endpoint until the Time-to-live (TTL) reached or Partner can contact our support to reach detail information.\n\nFor `DATA_NOT_FOUND`, if it reached the TTL, it is safe to assuming that the transaction is `failed` because the transaction is not recorded in our platform.\n\nHowever, for other Response Names, such as `INTERNAL_FAILURE` or Empty/Unknown Response Body, **DO NOT SET THE TRANSACTIONS' STATUS TO 'FAILED' OR 'SUCCESS' ON YOUR SIDE**. Please contact us for doing the reconciliation process, because we need to manually confirm the transaction status in our platform.\n\n# 5\\. Miscellaneous\n\n## 5.1. Message Formats\n\nOur API follows the HTTP/1.1 Status Codes standard ([RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231)) to indicate the success or failure of the requests. See more details about HTTP Status Codes here: [httpstatuses.com](https://httpstatuses.com).\n\nThe body of the response will be in JSON format:\n\n**200 Success**\n\n``` json\n{\n  \"name\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"data\": {}\n}\n\n ```\n\n**401 Unauthorized**\n\n``` json\n{\n  \"name\": \"AUTHENTICATION_FAILURE\",\n  \"message\": \"Authentication failed due to invalid authentication credentials or a missing Authorization header.\"\n}\n\n ```\n\nSome errors will return error hints to provide further information:\n\n**400 Bad Request**\n\n``` JSON\n{\n  \"name\": \"VALIDATION_FAILURE\",\n  \"message\": \"The given data was invalid.\",\n  \"errors\": {\n    \"key\": [\n      \"Error Description 1\",\n      \"Error Description 2\",\n    ]\n  }\n}\n\n ```\n\n## 5.2. Response Names\n\nEvery response from our platform is in JSON format and has `name` field. The value of the `name` field represents the information of your request. Below is the possible value of the `name` field.\n\n| Response Name | HTTP Status Code | Description |\n| --- | --- | --- |\n| SUCCESS | 200 | The request has succeeded |\n| TRANSACTION_PROCESSING | 200 | The transaction is currently being processed |\n| TRANSACTION_FAILED | 200 | The transaction is failed |\n| TRANSACTION_PENDING | 200 | The transaction is pending |\n| DATA_NOT_FOUND | 422 | The requested data is not found |\n| UNPROCESSABLE_ENTITY | 422 | The request cannot be processed |\n| REQUEST_TIMEOUT | 408 | The server did not receive a complete request message within the time that it was prepared to wait |\n| INTERNAL_FAILURE | 500 | The server encountered an unexpected condition that prevented it from fulfilling the request |\n| INSUFFICIENT_BALANCE | 422 | Your deposit balance is not enough |\n| CUSTOMER_NOT_FOUND | 422 | The Customer ID is not found. For example, invalid phone numbers or invalid PLN's Customer ID |\n| PRODUCT_UNDER_MAINTENANCE | 422 | The product is under maintenance |\n| PRODUCT_INQUIRY_NOT_REQUIRE | 422 | The product does not require an inquiry |\n| ALREADY_PAID | 422 | The bill already paid, this response name only for inquiry response |\n| INQUIRY_FAILURE | 422 | The Inquiry failure |\n| VALIDATION_FAILURE | 400 | The request payload is invalid |\n| AUTHENTICATION_FAILURE | 401 | The Authorization header is invalid |\n| SIGNATURE_FAILURE | 401 | The Signature header is invalid |\n\n## 5.3. Callbacks\n\nWe also provide a **Callback Mechanism** for instantly update the transactions status on your side. We will hit your Callback URL when there is any status-update of your transactions.\n\nPlease inform your Callback URL to us, so that we can activate your Callback Mechanism. The Callback URL **MUST BE POST** HTTP request method. And don't forget to whitelist our IP address, so that we'll be able to hit your Callback URL.\n\n**Headers**\n\n| Key | Value | Description |\n| --- | --- | --- |\n| Content-Type | application/json | To indicated the original media type of the resource. For this endpoint, the value is always application/json |\n| Signature | {payload_signature} | A signature that we generated using the `data` field from the request body. You **MUST** validate this signature for making sure that this request is originate from us and there is no man-in-the-middle. To validate the signature you should generate a signature using the `data` field value then compare the result with this signature. Read Signature section for more details. |\n\nBelow is the request body format that we will send to your service:\n\n| Field Name | Data Type | Description |\n| --- | --- | --- |\n| id | string | The transaction ID from our platform, it consists of a 19-digit number. |\n| client_id | integer | Your unique client ID. |\n| client_channel_id | integer | Your unique channel ID. |\n| client_reference_id | string | Reference ID that you had sent to our platform for a transaction. |\n| product_code | string | A unique Product Code of a Digital Goods product. |\n| product_name | string | A product name of a Digital Goods product. |\n| customer_id | string | A Customer ID / No Pelanggan |\n| customer_penalty_fee | float | Penalty fee of the customer's bill. |\n| amount | float | The price of the transaction before admin fee and penalty fee. |\n| admin_fee | float | Administration fee for the customer's transaction. |\n| total_amount | float | The total price of the transaction after admin fee and penalty fee. |\n| category_code | string | A unique category code of a Digital Goods product. |\n| status | string | The status of the transaction. |\n| remark | string | A remark of a transaction. For instance: `Payment BPJS kesehatan` |\n| status_remark | string | A remark about the transaction status. For instance: `Mohon cek kembali nomor yang Anda masukkan dan coba lagi` |\n| created_at | string | The creation date time of a transaction. |\n| serial_number | string | A serial number |\n| redeem_data | object | Collection of data for redeeming the digital goods transaction. |\n| redeem_data.secret | string | (Optional) A secret code that customer need to use for redeeming a digital goods value, such as PLN Token or Voucher Codes. |\n| redeem_data.instruction | string | (Optional) Instruction of how to use/redeem the digital goods value. |\n| redeem_data.expired_date | string | (Optional) The expired date of a digital goods product. Format: `YYYY-MM-DD hh:mm:ss` |\n| redeem_data.receipts | array | Receipt data of the transaction. |\n| title | string | Title of the receipt data. |\n| value | string | Value of the receipt data. |\n\n**Request Body Example:**\n\n``` json\n{\n    \"id\": \"1443856472256548864\",\n    \"client_id\": 10240,\n    \"client_channel_id\": 116,\n    \"client_reference_id\": \"DG-11212998888121\",\n    \"product_code\": \"BPJS\",\n    \"product_name\": \"BPJS kesehatan\",\n    \"customer_id\": \"8888801470615200\",\n    \"customer_penalty_fee\": 0,\n    \"amount\": 918000,\n    \"admin_fee\": 2500,\n    \"total_amount\": 920500,\n    \"category_code\": \"bpjs\",\n    \"status\": \"success\",\n    \"remark\": \"Payment BPJS kesehatan\",\n    \"status_remark\": \"success\",\n    \"created_at\": \"2021-10-01 15:33:03\",\n    \"serial_number\": \"02476100001625939691\",\n    \"redeem_data\": {\n        \"receipts\": [\n            {\n                \"title\": \"Nomor Kontrak\",\n                \"value\": \"8888801470615200\"\n            },\n            {\n                \"title\": \"Nama Pelanggan\",\n                \"value\": \"Jhon Doe\"\n            },\n            {\n                \"title\": \"Jumlah Tagihan\",\n                \"value\": \"76.500,00\"\n            },\n            {\n                \"title\": \"Biaya Administrasi\",\n                \"value\": \"2.500,00\"\n            },\n            {\n                \"title\": \"No. VA Keluarga\",\n                \"value\": \"0000202006171006\"\n            },\n            {\n                \"title\": \"NO. VA Kepala Keluarga\",\n                \"value\": \"8888801470615200\"\n            },\n            {\n                \"title\": \"Periode\",\n                \"value\": \"01 bulan\"\n            },\n            {\n                \"title\": \"No. VA Keluarga\",\n                \"value\": \"1 orang\"\n            }\n        ]\n    }\n}\n\n ```\n\n## 5.4. Person In Charge (PIC)\n\n| Responsibilty | PIC | Contact |\n| --- | --- | --- |\n| Technical Digital Goods | Daud Simbolon | [daud.simbolon@ralali.com](https://mailto:daud.simbolon@ralali.com) |\n| Infrastructure | Muhammad Iqbal | [muhammad.iqbal@ralali.com](https://mailto:muhammad.iqbal@ralali.com) |","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"5393837","collectionId":"26ff3c98-c9a9-4115-bdd7-019342f8c9ec","publishedId":"UV5XhH4j","public":true,"publicUrl":"https://docs-b2b-digital.ralali.io","privateUrl":"https://go.postman.co/documentation/5393837-26ff3c98-c9a9-4115-bdd7-019342f8c9ec","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-single-column","customisation":null,"version":"8.10.1","publishDate":"2021-10-21T06:51:31.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"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/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":"https://ralali.io/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://docs-b2b-digital.ralali.io/view/metadata/UV5XhH4j"}