{"openapi":"3.0.0","info":{"description":"The SurePay API through Rabo Identity Services (RIS), offers an Account Check for organizations to\nvalidate IBAN and name combinations for both personal and business accounts.\n\n## Before you begin\n\nMake sure you have a working sandbox account in\nthe  [Rabobank developer portal](https://developer.rabobank.nl/).\nRead  [Get Started](https://developer.rabobank.nl/get-started)  to set up an account and register an\n**Application**.\n\n**NOTE**: To use these API(s), a valid  [TLS](https://developer.rabobank.nl/how-use-mutual-tls)\ncertificate is required.\n\n## Using the API\n\nAfter your account set up is complete, subscribe the **SurePay API** to your application.\n\n<div class=\"apiDocsBlock apiDocsBlock--warning \">  \n    <div class=\"apiDocsBlock__inner\">  \n    <span class=\"apiDocsBlock__icon\" aria-hidden=\"true\"></span>  \n        <div class=\"apiDocsBlock__content\">  \n        <p>You should create separate applications for the pre-production and production environments to efficiently differentiate the API traffic.</p>  \n        </div>  \n    </div>  \n</div>\n\n## Requests\n\nYou can initiate a transaction for the SurePay API with POST/surepay. All applicable data fields for\na specific transaction should be added to the body of the request.\n\n```json\nPOST https://api.rabobank.nl/openapi/ris/surepay\n```\n\nTo view the full list of POST parameters, go to:\n\n- POST/ris/surepay\n\n## Responses\n\n**POST /ris/surepay**\n\nTo view the POST parameters, read the endpoint description for POST /ris/surepay.\n\nThe following example request body for **IBAN Name Check - Natural Person - Match**:\n\n```json\n{\n    \"accountId\": {\n        \"value\": \"NL72SRPY0000000001\",\n        \"type\": \"IBAN\"\n    },\n    \"name\": \"David Alex Miller\"\n}\n```\n\nResults in the following example response body:\n\n```json\n{\n    \"nameMatchResult\": \"MATCH\",\n    \"dataUsedForMatching\": \"VERIFIED\",\n    \"account\": {\n        \"accountNumberValidation\": \"VALID\",\n        \"paymentPreValidation\": \"PASS\",\n        \"status\": \"ACTIVE\",\n        \"accountType\": \"NP\",\n        \"jointAccount\": false,\n        \"numberOfAccountHolders\": 1,\n        \"countryCode\": \"NL\",\n        \"accountAge\": \"SIX_MONTHS_TO_ONE_YEAR\"\n    },\n    \"scheme\": \"SurePay\"\n}\n```\n\nThe following example request body for **Company Check - Organization - Match**:\n\n```json\n{\n    \"accountId\": {\n        \"value\": \"NL77SRPY0000000008\",\n        \"type\": \"IBAN\"\n    },\n    \"name\": \"Budget Luxury Resorts\",\n    \"companyIds\": [\n        {\n            \"companyIdType\": \"NL_KVK\",\n            \"companyIdValue\": \"28347582\"\n        }\n    ]\n}\n```\n\nResults in the following example response body\n\n```json\n{\n    \"nameMatchResult\": \"MATCH\",\n    \"dataUsedForMatching\": \"VERIFIED\",\n    \"companyIds\": [\n        {\n            \"type\": \"NL_KVK\",\n            \"matchResult\": \"MATCH\"\n        }\n    ],\n    \"account\": {\n        \"accountNumberValidation\": \"VALID\",\n        \"paymentPreValidation\": \"WILL_FAIL\",\n        \"status\": \"INACTIVE\",\n        \"accountType\": \"ORG\",\n        \"jointAccount\": false,\n        \"numberOfAccountHolders\": 1,\n        \"countryCode\": \"NL\",\n        \"accountAge\": \"SIX_MONTHS_TO_ONE_YEAR\"\n    },\n    \"scheme\": \"SurePay\"\n}\n```\n\n<div class=\"apiDocsBlock apiDocsBlock--warning \">  \n    <div class=\"apiDocsBlock__inner\">  \n    <span class=\"apiDocsBlock__icon\" aria-hidden=\"true\"></span>  \n        <div class=\"apiDocsBlock__content\">  \n        <p>- Each response contains a X-Trace-Id header which can be used for troubleshooting failed transactions<br>- Certain fields may not be available in the response body, this depends on the availability in the source and the type of request. Read the response schema object to understand which fields can be part of the response body.</p>  \n\t\t<p></p> \n        </div>  \n    </div>  \n</div>\n\nAll responses are signed by Rabobank, to validate the response read [Validate signed responses](https://developer.rabobank.nl/validate-signed-responses) ","title":"Rabo Identity Services - SurePay","version":"1.32.0","x-api-id":"3496f15f-58e9-46a8-b6dd-1eb5416ed0b2","x-ibm-name":"rabo-identity-services-surepay"},"servers":[{"url":"https://api.rabobank.nl/openapi/","description":"Production server"},{"url":"https://api-sandbox.rabobank.nl/openapi/sandbox/","description":"Sandbox server"}],"paths":{"/ris/surepay":{"post":{"responses":{"200":{"content":{"application/json":{"examples":{"response":{"value":{"account":{"accountAge":"UNKNOWN","accountNumberValidation":"VALID","accountType":"NP","countryCode":"NL","jointAccount":false,"numberOfAccountHolders":1,"paymentPreValidation":"PASS","status":"ACTIVE"},"dataUsedForMatching":"VERIFIED","nameMatchResult":"MATCH","scheme":"SurePay"}}},"schema":{"$ref":"#/components/schemas/SurepayResponseDto"}}},"description":"Successful operation","headers":{"X-Trace-Id":{"description":"Correlation id per request/response for debug purpose","schema":{"type":"string"},"x-example":"ce3a4f7e8626e20b641b87338a0fa2c7f6dd069b48f38c06a004e3cf30596e97"}}},"400":{"content":{"application/json":{"examples":{"response":{"value":{"detail":"Invalid request content.","instance":"/ris/surepay","invalid-context":[{"field":"accountId","reason":"must not be null"}],"status":400,"title":"Bad Request","traceId":"40b664267dbf2e1cec98de4a733bbd01","type":"urn:ris:error:input-validation"}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing mandatory fields like accountId or name","headers":{"X-Trace-Id":{"description":"Correlation id per request/response for debug purpose","schema":{"type":"string"},"x-example":"ce3a4f7e8626e20b641b87338a0fa2c7f6dd069b48f38c06a004e3cf30596e97"}}},"401":{"content":{"application/json":{"examples":{"response":{"value":{"authorization-error":"Unauthorized","detail":"Failure while processing the request!","instance":"/ris/surepay","status":401,"title":"Unauthorized","traceId":"79c50d0b82206e76192f7de64d42e2d4","type":"urn:ris:error:unauthorized"}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized","headers":{"X-Trace-Id":{"description":"Correlation id per request/response for debug purpose","schema":{"type":"string"},"x-example":"ce3a4f7e8626e20b641b87338a0fa2c7f6dd069b48f38c06a004e3cf30596e97"}}},"500":{"content":{"application/json":{"examples":{"response":{"value":{"detail":"Failure while processing the request!","instance":"/ris/surepay","status":500,"title":"Internal Server Error","traceId":"327725e316216679503dd9667256e02f","type":"about:blank"}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"A general problem with the server.","headers":{"X-Trace-Id":{"description":"Correlation id per request/response for debug purpose","schema":{"type":"string"},"x-example":"ce3a4f7e8626e20b641b87338a0fa2c7f6dd069b48f38c06a004e3cf30596e97"}}}},"tags":["SurePay"],"operationId":"postAccountCheck","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurepayRequestDto"}}},"required":true},"summary":"Account Check"}},"/ris/surepay/keys":{"get":{"responses":{"200":{"content":{"application/json":{"examples":{"response":{"value":{"keys":[{"alg":"RS256","e":"AQAB","kid":"12345","kty":"RSA","n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx 4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMs tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2 QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbI SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqb w0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw"}]}}},"schema":{"$ref":"#/components/schemas/JwksResponse"}}},"description":"Integrity keys successfully retrieved","headers":{"X-Trace-Id":{"description":"Correlation id per request/response for debug purpose","schema":{"type":"string"},"x-example":"e4cacd420c949d4a21026366dbcdb0c4fbbdd2edad0ab58538efc8fab5e85939"}}}},"tags":["Keys"],"operationId":"getKeys","summary":"Retrieve Integrity Keys"}}},"components":{"schemas":{"ErrorResponse":{"properties":{"detail":{"description":"Detail of the error","example":"Failure while processing the request!","type":"string"},"instance":{"description":"Instance of the error","example":"/ris/resource/d5cc0517-4e2b-4e80-8442-46a5a130b03e","type":"string"},"status":{"description":"Status of the error","example":400,"format":"int32","type":"integer"},"title":{"description":"Tittle of the error","example":"Internal Server Error","type":"string"},"traceId":{"description":"Id of the error, so that it can be investigated on the persisted logs","example":"40b664267dbf2e1cec98de4a733bbd01","type":"string"},"type":{"description":"Type of the error","example":"urn:ris:error:input-validation","type":"string"}},"type":"object"},"JwksResponse":{"description":"JWKSet keys response","properties":{"keys":{"items":{"properties":{},"type":"object"},"type":"array"}},"required":["keys"],"type":"object"},"SurepayRequestAccountIdDto":{"description":"The type and identifier of the account, for example the IBAN type and the corresponding IBAN value","properties":{"type":{"description":"The account type","enum":["IBAN"],"example":"IBAN","type":"string"},"value":{"description":"The account value. It should have different formats based on the account type:\n- NL_KVK: [0-9]{8}\n- NL_KVK_BRANCH: [0-9]{12}\n- FR_SIREN: [0-9]{9}\n- FR_SIRET: [0-9]{14}\n- UK_CRN: (?:SC|OC|SO|NI|R|NC|RC|LP|SL|NL)[0-9]{6,7}|[0-9]{8}\n- EU_VAT: [A-Z]{1,2}.+","example":"NL69ABNA4435376989","pattern":"[A-Z]{2}[0-9]{2}[a-zA-Z0-9]{1,30}","type":"string"}},"required":["type","value"],"type":"object"},"SurepayRequestCompanyIdDto":{"description":"The type and identifier of the organisation, for example the KVK_NL type and the correponding KVK-number","properties":{"companyIdType":{"description":"The organisation identification code","enum":["NL_KVK","NL_KVK_BRANCH","FR_SIREN","EU_VAT","FR_SIRET","UK_CRN"],"example":"NL_KVK","type":"string"},"companyIdValue":{"description":"The organisation identifier","example":"12345678","type":"string"}},"required":["companyIdValue"],"type":"object"},"SurepayRequestDto":{"example":{"accountId":{"type":"IBAN","value":"NL87MOYO9876543212"},"name":"John Paul Waldo"},"properties":{"accountId":{"$ref":"#/components/schemas/SurepayRequestAccountIdDto"},"accountType":{"description":"The type of account. Possible values are:\n- ORG: for organisations\n- NP: for natural persons","enum":["ORG","NP"],"example":"ORG","type":"string"},"bic":{"description":"Describes the BIC code of the bank for SWIFT to route the request to. It is mandatory for AccountNumber account type","example":"RABONL2U","type":"string"},"companyIds":{"items":{"$ref":"#/components/schemas/SurepayRequestCompanyIdDto"},"type":"array"},"name":{"description":"Name of the account holder, as provided by the enduser. This can either be the name of a natural person or organisation name. Mandatory in case companyIds is not provided.","example":"Amazon","type":"string"}},"required":["accountId"],"type":"object"},"SurepayResponseAccountDto":{"properties":{"accountAge":{"description":"Describes the period (in weeks) since the account has been registered first. The account age result is returned in case the customer has opted for this service, otherwise the field won't be returned.","enum":["LESS_THAN_ONE_WEEK","ONE_WEEK_TO_ONE_MONTH","ONE_MONTH_TO_THREE_MONTHS","THREE_MONTHS_TO_SIX_MONTHS","SIX_MONTHS_TO_ONE_YEAR","GREATER_THAN_ONE_YEAR","UNKNOWN"],"example":"GREATER_THAN_ONE_YEAR","type":"string"},"accountNumberValidation":{"description":"The account validity. Possible values are:\n- VALID: account is an account that conforms to the standard.\n- NOT_VALID: account is an account that does not conform to the standards.","enum":["VALID","NOT_VALID"],"example":"VALID","type":"string"},"accountType":{"description":"The type of account. Possible values are:\n- ORG: for organisations\n- NP: for natural persons","enum":["NP","ORG","UNKNOWN"],"example":"NP","type":"string"},"accountTypeMatchResult":{"description":"Describes the result of the account type check","enum":["MATCH","NO_MATCH","COULD_NOT_MATCH"],"example":"MATCH","type":"string"},"city":{"description":"The residence city of the account holder. Only returned for banks that choose to disclose it","example":"Utrecht","type":"string"},"countryCode":{"description":"Two letter country code from the IBAN or derived based on account Id type. In ISO 3166-1 alpha-2 format.","example":"NL","type":"string"},"iban":{"description":"Contains the IBAN of the requested account","example":"NL69ABNA4435376989","type":"string"},"jointAccount":{"description":"Available in case of MATCH or CLOSE_MATCH and only when the bank chooses to disclose it. 'True' if there is more than 1 account holder. Otherwise, it's retrieved as 'False'.","example":false,"type":"boolean"},"numberOfAccountHolders":{"description":"Available in case of MATCH or CLOSE_MATCH and only when the bank chooses to disclose it. Contains the number of account holders. If this information is not available or in case the account type is UNKNOWN this field is not returne.","example":1,"format":"int32","type":"integer"},"optedOut":{"description":"Account has opted out of the Confirmation of Payee service. This can either be true or false","example":true,"type":"boolean"},"paymentPreValidation":{"description":"Returns the pre-validation status of the payment","enum":["PASS","WILL_FAIL","WARNING"],"example":"PASS","type":"string"},"status":{"description":"The status of the account. Possible values are:\n- ACTIVE: account is a valid account and supported for checks.\n- INACTIVE: account is a valid account marked by the account holding bank as inactive.\n- NOT_SUPPORTED: account status stands for an account that is valid but is not supported to perform any checks.\n- NOT_FOUND: account status stands for an account that is valid but could not be found in any of the connected data sources.\n- UNKNOWN: account status is for an account that is either found as part of DERIVED data or a NOT_VALID account.","enum":["ACTIVE","INACTIVE","NOT_SUPPORTED","NOT_FOUND","UNKNOWN"],"example":"ACTIVE","type":"string"},"switchingInformation":{"$ref":"#/components/schemas/SurepayResponseAccountSwitchingInfoDto"}},"type":"object"},"SurepayResponseAccountSwitchingInfoDto":{"description":"Only returned when the supported account is in a switching service.","properties":{"switchedToIban":{"description":"Contains the new IBAN, where the old account holder has switched to. Only returned when the account holder chooses to disclose it.","example":"NL69ABNA5435376989","type":"string"},"switchingServiceForAccount":{"description":"The status of the account that switched to another bank. Can be either ACTIVE or EXPIRED.","enum":["ACTIVE","EXPIRED"],"example":"ACTIVE","type":"string"}},"type":"object"},"SurepayResponseCompanyIdDto":{"description":"The type and match result of the company id, for example the KVK_NL type and MATCH","properties":{"matchResult":{"description":"Describes the result of the company id check","enum":["MATCH","NO_MATCH","COULD_NOT_MATCH"],"example":"MATCH","type":"string"},"type":{"description":"The organisation identification code","enum":["NL_KVK","NL_KVK_BRANCH","FR_SIREN","EU_VAT","FR_SIRET","UK_CRN"],"example":"NL_KVK","type":"string"}},"type":"object"},"SurepayResponseDto":{"properties":{"account":{"$ref":"#/components/schemas/SurepayResponseAccountDto"},"companyIds":{"items":{"$ref":"#/components/schemas/SurepayResponseCompanyIdDto"},"type":"array"},"dataUsedForMatching":{"description":"Indicates which data has been used for matching; Verified is data that exists at the beneficiary bank. Derived is data based on historical transactions.","enum":["VERIFIED","DERIVED"],"example":"VERIFIED","type":"string"},"nameMatchResult":{"description":"Describes the result of the account name check. Possible values are:\n- MATCH: when the provided name matches the value of the account holder name held by the source\n- CLOSE_MATCH: when the provided name closely resembles the value of the account holder name held by the source\n- NO_MATCH: when the provided name does not match the value of the account holder name held by the source\n- COULD_NOT_MATCH: when the provided name could not be matched against the source data\n- NAME_TOO_SHORT: when the provided name is too short to perform a match against the value of the account holder name held by the source","enum":["MATCH","CLOSE_MATCH","NO_MATCH","COULD_NOT_MATCH","NAME_TOO_SHORT"],"example":"NO_MATCH","type":"string"},"nameSuggestion":{"description":"If the nameMatchResult is a CLOSE_MATCH then the source can choose to disclose the actual account holder name for the sender to verify or update its records. Depending on the platform that SurePay is connected with and its regulations, it is possible that the name is not disclosed","example":"Wil Helmes","type":"string"},"scheme":{"description":"The supported platforms used for confirmation of payee. Possible values are:\n- SWIFT\n- COP_UK\n- SEPAMAIL\n- SurePay\n- Liink","enum":["SWIFT","COP_UK","SEPAMAIL","SurePay","Liink"],"example":"SurePay","type":"string"},"schemeData":{"description":"Contains the response information that SurePay receives based on the used scheme. In case the response is created based on the SurePay scheme then no schemeData is returned.","example":{},"properties":{},"type":"object"}},"type":"object"}},"securitySchemes":{"clientId":{"description":"ClientId as provided by the Rabobank developer portal.","in":"header","name":"X-IBM-Client-Id","type":"apiKey"}}},"security":[{"clientId":[]}],"x-components":{},"x-readme":{"explorer-enabled":false,"proxy-enabled":false}}