{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"1e8ef3e2-4420-4d38-ac49-6709781de93e","name":"Remita Interbank Service (RITS)","description":"These APIS are for Banks looking to leverage on Remita's Inter-bank services\n\n# Getting started\n\n1. Register a profile on Remita: You can visit www.remita.net to sign-up if you are not already registered as a merchant/biller on the platform.\n\n2. Implement our Remita Interbank Service using the demo credentials from the next section (If you have completed your implementation or have questions along the way, feel free to reach out to us at <infrastructure@systemspecs.com.ng>)\n\n\n# Environments\n\n### Test Environment\n```\nBASE URL\nhttps://remitademo.net/remita/exapp/api/v1/send/api\n\nCREDENTIALS\n- merchantId: DEMOMDA1234\n- apiKey: REVNT01EQTEyMzR8REVNT01EQQ\n- apiToken: bmR1ZFFFWEx5R2c2NmhnMEk5a25WenJaZWZwbHFFYldKOGY0bHlGZnBZQ1N5WEpXU2Y1dGt3PT0= \n- AES-128 Encryption Credential\n   * key: nbzjfdiehurgsxct\n   * iv: sngtmqpfurxdbkwj\n   * mode: CBC\n   * padding: Pkcs7\n```\n<br>\n\n\n### Live Environment\n```\nBASE URL\nhttps://login.remita.net/remita/exapp/api/v1/send/api\n\nCREDENTIALS\nWill be provisioned upon successful UAT with Remita\n```\n\nTo undertake UAT, kindly reach out to us at <infrastructure@systemspecs.com.ng>\n\n\n\n---\n\n# Other Useful Information\n#### Data Types\nAll of the API responses returned are in JSON format, with these data types defined below:\n\n|Type    | Description|\n| ----------- | ----------- |\n|string    | A UTF-8 encoded string|\n|number    | An integer|\n|datetime    | An ISO8601 encoded DateTime. All datetimes are returned in UTC with offset +00:00 |\n|decimal    | All monetary values are returned with up to two decimal places and may be positive (20.78) or negative (-32.50) |\n\n\n#### Data Length\n\n|Type    | Description|Length\n| ----------- | ----------- | ----------- |\n|Text fields    |string| max-length 255 characters\n|BVN    |integers starting with 1 or 2 |11 digits.\n|Account Number    | integers | 10 digits.\n\n\n---\n\n#### Paging\nFor endpoints that provide several records, the response may be paged depending on the total number of records that the server can return at a time. This means that to retrieve the full set of items for a given resource you may be required to make several requests.\n\n#### URL Parameters\n| Parameters | Description |\n|-------------|-------------|    \n|page|    The page number you wish to retrieve|\n|limit|The number of items to return in a page|\n|signature|Used to guarantee consistency of the data being returned|\n\n#### Response\n| Field    | Type | Description\n|-------------|-------------|-------------|    \n|responseData|array|The actual data items you have requested|\n|_meta|object|Key/value information that is not essential to understanding the resources returned but offers additional detail|\n|_links|array|A collection of links that you can use to navigate the paged data|\n\n##### _meta\n| Field    | Type | Description\n|-------------|-------------|-------------|    \n|totalNumberOfRecords |number |The total number of data items in the collection |\n|totalNumberOfPages |number |The number of pages in the collection |\n|pageNumber |number | The current page number|\n| pageSize|number |The current page size |\n\n##### _links\n| Field    | Type | Description\n|-------------|-------------|-------------|    \n|rel|string|The relation of the linked resource to the current resource |\n|href|string|The absolute URI of the related resource |\n\n##### Navigating through pages\n* If you are on the first page, the \"prev\" link will not be present in the response.\n* If you are at the final page, the \"next\" link will not be present in the response\n* If there are no pages and all data is returned neither \"prev\" or \"next\" links will be present in the response\n\n---\n\n#### Errors\nErrors in the API are expressed as a combination of HTTP status codes and an accompanying JSON body providing required detail where possible. You should be able to rely on the HTTP status code alone to determine the cause of the problem.\n\n##### Error Response Fields\n\n| Field    | Type |\n|-------------|-------------|    \n| message    | `string`    A human-readable message as to the specifics of the problem. For example, it may contain a detail description of what caused the problem |\n| status number | The HTTP status code used in the response |\n| errorCode    number    | The specific Open Banking Nigeria error code for the problem\n\n---\n\n#### Expansion Fields\nThis would help to pass on proprietary information or additional processing directives unique to the specific implementation.\n\nThe `expansionFields` are optional and are a collection which means multiple instances of these fields may be included in any message.\n\n#### Response Body Fields\n| Field |Type |Description |\n| ----------- | ----------- | ----------- |\n|id| string | A unique identifier for the extra field |\n|description| string | A description of the extra field |\n|type| string | A type of field but defined by the bank |\n|value| string | The value of the extra field |\n\nFor this documentation, the `expansionFields` will not be included in the Response Body Fields\n\n\n---\n#### Request Timestamp\nThe time stamp (or expiration time) you use in the request must be a dateTime object, with the complete date plus hours, minutes, and seconds (for more information, see http://www.w3.org/TR/xmlschema-2/#da- teTime). \n<br/>\nFor example: **2007-01-31T23:59:59Z** .\n<br/>\n\nAlthough it's not required, we recommend you provide the time stamp in the Coordinated Universal Time (Greenwich Mean Time) time zone.\nThe request automatically expires 5 minutes after the time stamp (in other words, Remita does not process a request if the request time stamp is more than 5 minutes earlier than the current time on Remita servers). Make sure your server's time is set correctly.\n\n> Important \n> <br/>\n> If you're using `.NET` you must not send overly specific time stamps, due to different interpretations of how extra time precision should be dropped.\n<br/>\n> To avoid overly specific time stamps, manually construct dateTime objects with no more than millisecond precision.\n\n---\n#### Signing Your Request (HMAC-SHA256)\n\nYour request signature is calculated using HMAC-SHA256(`API_KEY+REQUEST_ID+API_TOKEN`).\ni.e the values of headers are concatenated and the hashed using `HMAC-SHA256` algorithm.The result of\nthe has is passed along with your request in the `API_DETAILS_HASH` HTTP Header.\n\n`API_TOKEN` is a secret sent to you on sign up .\n> Ensure your `API_TOKEN` is <span style=\"color:red\">NEVER</span> shared with anyone.\n\n##### Sample Encryption and HMAC/One-Way Hashing Source Code\nThe Sample code for the HMAC/one-way hashing, and the two-way encryption and decryption, are availa- ble at the URL below.\nhttps://www.remita.net/developers/assets/sample-codes/EncryptionsCodesSampleMvn.zip\n\n---\n#### Idempotency\n\nRemita Wallet API supports idempotency for safely retrying `POST` transactions without accidentally performing the same operation twice. This is useful when an API call is disrupted, and you do not receive a response. For example, `request_time_out` or `response_received_too_late`. Therefore, if you do not get a response message for a transaction, you can retry the request with the same idempotency key, and you are guaranteed that no more than one transaction would be posted.\n\nTo perform an idempotent request, provide an additional Idempotency-Key: <key> header to the request.\n\nRemita Wallet API idempotency works by saving the resulting status code and body of the first request made for any given idempotency key, regardless of whether it succeeded or failed. Subsequent requests with the same key should return the same result, including Server (`500`) errors.\n\nAn idempotency key is a unique value generated by the Service Provide which the server uses to recognize subsequent transaction retries of the same request. It is up to the Service Provider to determine how these idempotency keys would be generated. Whatever it is, it must have enough entropy to avoid collisions.\n\nIdempotency keys would never expire, so a new request that is generated if a key is reused outside of that time frame would fail.\n\nResults are only saved if an API endpoint started executing. If incoming parameters failed validation, or the request conflicted with another that was executing concurrently, no idempotent result is saved because no API endpoint began execution. It is safe to retry these requests.\n\nAll `POST` requests accept idempotency keys and all transaction API calls must have idempotency keys. Sending idempotency keys in `GET` and `DELETE` requests has no effect and should be avoided, as these requests are idempotent by definition.\n\n\n# Libraries and Plugins\n\n| Language    | Repository | \n|-------------|-------------|\n|Java  | https://github.com/RemitaNet/rits-sdk-java |\n|PHP  | https://github.com/RemitaNet/rits-sdk-php |\n|Python  | https://github.com/RemitaNet/rits-sdk-python |\n|dotNet  | https://github.com/RemitaNet/rits-sdk-dotnet |","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"11423836","team":1039811,"collectionId":"1e8ef3e2-4420-4d38-ac49-6709781de93e","publishedId":"T17CDA3q","public":true,"publicUrl":"https://documenter-api.postman.tech/view/11423836/T17CDA3q","privateUrl":"https://go.postman.co/documentation/11423836-1e8ef3e2-4420-4d38-ac49-6709781de93e","customColor":{"top-bar":"FFFFFF","right-sidebar":"17997D","highlight":"E75F23"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2020-08-28T07:45:44.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/9768db4de5140d00a142b183dd70607f675e742751c60aa9af1742ead5e4192d","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/T17CDA3q"}