Download OpenAPI specification:Download
CRING! is SPE's Digital Payment & Transaction Platform that provides a unified platform for integrating digital payment and financial transaction services.
CRING! enables businesses, merchants, financial institutions, and partners to integrate various payment and transaction services through standardized APIs, while providing a centralized portal for operational and integration management.
CRING! supports both Payment Facilitator and Payment Aggregator business models, allowing partners to access services based on their business requirements and integration needs.
CRING! consists of two main components:
The CRING! API provides programmatic access to payment and financial transaction services.
Through the API, partners can integrate services such as:
API integration is available through SNAP or Non-SNAP depending on the product and integration configuration.
The CRING! Portal provides a centralized interface for managing and monitoring the integration.
The portal may be used for:
The Portal complements the API integration by providing visibility and operational capabilities without requiring all activities to be performed through APIs.
CRING! provides two API integration types:
| Integration Type | Description |
|---|---|
| SNAP | API integration that follows the SNAP (Standar Nasional Open API Pembayaran) standard. |
| Non-SNAP | API integration that uses CRING! and/or banking partner-specific integration standards outside the SNAP standard. |
The available integration type depends on the product and banking service being integrated.
A product may be available through SNAP, Non-SNAP, or both.
Important
Authentication, request headers, signature requirements, and other integration requirements may differ between SNAP and Non-SNAP APIs.
Always refer to the relevant product documentation to determine the applicable integration type and requirements.
CRING! supports two business models:
In the Payment Facilitator model, CRING! provides payment and transaction services directly to clients through its platform and connected banking partners.
The client integrates with CRING! APIs according to the services required by its business.
In the Payment Aggregator model, CRING! enables clients to provide payment and transaction capabilities to their own merchants, partners, or downstream users.
The integration model and available services may differ depending on the client's business configuration.
CRING! provides multiple payment and financial transaction services.
| Service | Description | Integration |
|---|---|---|
| Virtual Account | Virtual Account services for payment collection. | SNAP / Non-SNAP |
| QRIS | QRIS payment services for digital payment collection. | SNAP / Non-SNAP |
| Fund Transfer | Fund transfer and disbursement services. | SNAP / Non-SNAP |
| Bank Account Validation | Account information validation and inquiry services. | Non-SNAP |
| RDL | Rekening Dana Lender services. | Non-SNAP |
At a high level, the integration involves:
Partner / Client
|
| API Request
v
CRING! API
|
| Process & Route
v
Banking / Financial Partner
|
| Response
v
CRING! API
|
| API Response
v
Partner / Client
CRING! supports different authentication mechanisms depending on the API integration type and product.
CRING! provides two integration types:
Because SNAP and Non-SNAP APIs may use different authentication mechanisms, credentials, headers, and security requirements, always refer to the authentication method specified for the product you are integrating.
Security Requirement
All CRING! API requests must be made over HTTPS. Requests sent over plain HTTP will be rejected.
| Integration Type | Authentication Approach | Key Security Mechanism |
|---|---|---|
| SNAP | SNAP-compliant authentication | B2B Access Token, Request Signature, Timestamp, and SNAP headers |
| Non-SNAP | Product-specific authentication | OAuth 2.0 |
Important
SNAP and Non-SNAP APIs do not necessarily use the same authentication mechanism, credentials, headers, or security requirements.
Non-SNAP APIs use authentication mechanisms defined by CRING! and/or the applicable banking partner.
The authentication mechanism may differ between products and banking integrations.
For Non-SNAP APIs using OAuth 2.0, CRING! uses the Client Credentials Grant to obtain a short-lived access token.
The general authentication flow is:
Client
|
| client_id + client_secret
v
CRING! Authentication Endpoint
|
| Access Token
v
Client
|
| Authorization: Bearer <access_token>
v
CRING! API
Before accessing Non-SNAP APIs, you must obtain the credentials required for authentication from CRING! after completing the onboarding process.
The credentials consist of:
| Credential | Description |
|---|---|
client_id |
Unique identifier assigned to the client. |
client_secret |
Confidential credential used to authenticate the client. |
Client credentials can be obtained through the CRING! Portal based on the client's access permissions and configuration.
Security Notice
Keep your
client_secretconfidential. Do not expose it in source code, public repositories, client-side applications, or logs.
Send a POST request to the token endpoint.
POST {{baseUrl}}/auth/token
Host: {{baseUrl}}
Content-Type: application/json
Authorization: Basic <base64(client_id:client_secret)>
The Authorization header uses HTTP Basic Authentication.
The value is generated by encoding:
client_id:client_secret
using Base64.
{
"grantType": "client_credentials"
}
Example response:
{
"responseCode": "20000",
"responseMessage": "Successful",
"accessToken": "eyJhbGciOi...",
"tokenType": "Bearer",
"expiresIn": 900,
"additionalInfo": {}
}
| Parameter | Type | Description |
|---|---|---|
responseCode |
String | Indicates the result of the token request. |
responseMessage |
String | Description of the response result. |
accessToken |
String | Access token used to authorize subsequent API requests. |
tokenType |
String | Token type used in the authorization header. Typically Bearer. |
expiresIn |
Integer | Token validity period in seconds. |
additionalInfo |
Object | Additional information returned by the authentication service, if applicable. |
Include the access token in subsequent API requests:
Authorization: Bearer <access_token>
The expiresIn field indicates the token validity period in seconds.
For example, expiresIn: 900 means the token is valid for 900 seconds (15 minutes).
When the access token expires, request a new access token using the configured client credentials.
Note
The Client Credentials Grant does not require a user session or refresh token. When the access token expires, the client obtains a new access token using its
client_idandclient_secret.
CRING! SNAP APIs follow the authentication requirements defined by SNAP (Standar Nasional Open API Pembayaran).
SNAP authentication uses asymmetric cryptography to authenticate the client and protect API requests.
The authentication process consists of:
The general flow is:
Merchant / Client
|
| Client Key
| Timestamp
| Signature
v
CRING! B2B Token Endpoint
|
| B2B Access Token
v
Merchant / Client
|
| Bearer Token
| SNAP Headers
| Request Signature
v
CRING! SNAP API
Before using SNAP API authentication, the merchant must register an RSA public key with CRING!.
The key pair consists of:
The private key is never shared with CRING!.
The authentication process works as follows:
Merchant
|
| Generate RSA Key Pair
|
+---- Private Key
| |
| +---- Stored securely by Merchant
|
+---- Public Key
|
v
CRING! Partner Portal
|
v
CRING! stores Public Key
CRING! uses the registered public key to verify signatures generated using the merchant's private key.
This ensures that only a merchant holding the corresponding private key can generate a valid signature.
| Item | Requirement |
|---|---|
| Algorithm | RSA |
| Minimum Key Size | 2048-bit |
| Private Key Format | PKCS#8 PEM |
| Signature Algorithm | SHA256withRSA |
| Public Key | Must be registered with CRING! |
| Private Key | Must be securely stored by the merchant |
Security Notice
The private key must never be shared with CRING!, exposed in source code, committed to a repository, or included in application logs.
The B2B access token is required to authenticate API requests to CRING! SNAP APIs.
The SNAP token request is authenticated using an asymmetric signature.
POST {{baseUrl}}/v1.0/access-token/b2b
| Header | Required | Value | Description |
|---|---|---|---|
Content-Type |
Yes | application/json |
Request body format. |
X-TIMESTAMP |
Yes | yyyy-MM-ddTHH:mm:ssTZD |
Current local time in ISO 8601 format. |
X-CLIENT-KEY |
Yes | <client_key> |
Client key / merchant identifier registered with CRING!. |
X-SIGNATURE |
Yes | <base64_signature> |
Asymmetric signature generated using SHA256withRSA. |
Content-Type: application/json
X-TIMESTAMP: 2026-08-09T07:49:00+07:00
X-CLIENT-KEY: 962489e9-de5d-4eb7-92a4-b07d44d64bf5
X-SIGNATURE: <base64_signature>
{
"grantType": "client_credentials"
}
| Field | Type | Required | Description |
|---|---|---|---|
grantType |
String | Yes | OAuth 2.0 grant type. Must be client_credentials for B2B authentication. |
The X-SIGNATURE header is generated using the merchant's private key.
CRING! uses SHA256withRSA, based on RSA PKCS#1 v1.5 with SHA-256.
StringToSign = {ClientKey}|{Timestamp}
Signature = Base64(
RSA_SHA256_Sign(
StringToSign,
PrivateKey
)
)
For example:
ClientKey:
962489e9-de5d-4eb7-92a4-b07d44d64bf5
Timestamp:
2026-08-09T07:49:00+07:00
The resulting string to sign is:
962489e9-de5d-4eb7-92a4-b07d44d64bf5|2026-08-09T07:49:00+07:00
The string is then signed using the merchant's RSA private key and SHA-256.
The resulting binary signature is Base64 encoded and sent through the X-SIGNATURE header.
Generate the current local time using ISO 8601 format:
yyyy-MM-ddTHH:mm:ssTZD
Example:
2026-08-09T07:49:00+07:00
The timestamp must be current and within the allowed time window configured by CRING!.
Concatenate the client key and timestamp using |:
{ClientKey}|{Timestamp}
Example:
962489e9-de5d-4eb7-92a4-b07d44d64bf5|2026-08-09T07:49:00+07:00
Sign the string using:
Encode the resulting binary signature using Base64.
The result becomes the value of:
X-SIGNATURE: <base64_signature>
POST {{baseUrl}}/auth/token
Host: {{baseUrl}}
Content-Type: application/json
X-TIMESTAMP: 2026-08-09T07:49:00+07:00
X-CLIENT-KEY: 962489e9-de5d-4eb7-92a4-b07d44d64bf5
X-SIGNATURE: <base64_signature>
{
"grantType": "client_credentials"
}
When the request is successfully authenticated, CRING! returns a B2B access token.
{
"responseCode": "2007300",
"responseMessage": "Successful",
"accessToken": "eyJhbGciOi...",
"tokenType": "Bearer",
"expiresIn": "900",
"additionalInfo": {}
}
After obtaining the B2B access token, include it as a Bearer token when calling CRING! SNAP APIs.
Authorization: Bearer <access_token>
SNAP API requests may also require additional headers depending on the applicable API.
Example:
Authorization: Bearer eyJhbGciOi...
X-TIMESTAMP: 2026-08-09T07:50:00+07:00
X-SIGNATURE: <generated_signature>
X-PARTNER-ID: <partner_id>
X-EXTERNAL-ID: 123456789
CHANNEL-ID: 95221
Content-Type: application/json
Important
The headers required for API requests after authentication may differ from the headers used to obtain the B2B access token.
Refer to the specific SNAP API reference for the complete request header requirements.
For SNAP transaction APIs, request signing may also be required.
The signature generation mechanism depends on the applicable SNAP API specification.
The API-specific documentation defines:
Always use the signature rules defined by the relevant API.
The B2B access token is a short-lived credential.
The expiresIn field indicates the validity period in seconds.
For example:
{
"expiresIn": "900"
}
means the token is valid for 900 seconds (15 minutes).
When the token expires, request a new B2B access token.
Important
The
X-SIGNATUREmust be freshly generated for every B2B access token request using the currentX-TIMESTAMP.
To maintain secure communication:
X-SIGNATURE for every token request.X-TIMESTAMP.X-CLIENT-KEY matches the client key registered with CRING!.import (
"crypto"
"crypto/rand"
"crypto/rsa"
"crypto/sha256"
"crypto/x509"
"encoding/base64"
"encoding/pem"
)
privateKeyPEM := `-----BEGIN PRIVATE KEY-----
YourPrivateKey
-----END PRIVATE KEY-----`
clientKey := "YourClientKey"
timestamp := "2026-08-09T07:49:00+07:00"
// 1. Build string to sign
dataToSign := clientKey + "|" + timestamp
// 2. Parse private key (PKCS#8)
block, _ := pem.Decode([]byte(privateKeyPEM))
if block == nil {
panic("failed to decode PEM block")
}
privKeyInterface, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
panic(err)
}
privKey, ok := privKeyInterface.(*rsa.PrivateKey)
if !ok {
panic("not an RSA private key")
}
// 3. Hash using SHA-256
hash := sha256.New()
hash.Write([]byte(dataToSign))
hashed := hash.Sum(nil)
// 4. Sign using RSA PKCS#1 v1.5
signature, err := rsa.SignPKCS1v15(
rand.Reader,
privKey,
crypto.SHA256,
hashed,
)
if err != nil {
panic(err)
}
// 5. Encode signature to Base64
signatureBase64 := base64.StdEncoding.EncodeToString(signature)
println(signatureBase64)
<?php
$privateKey = '-----BEGIN PRIVATE KEY-----
YourPrivateKey
-----END PRIVATE KEY-----';
$clientKey = 'YourClientKey';
$timestamp = '2026-08-09T07:49:00+07:00';
// 1. Build string to sign
$dataToSign = $clientKey . '|' . $timestamp;
// 2. Sign using RSA-SHA256 (PKCS#1 v1.5)
$signatureBinary = '';
openssl_sign(
$dataToSign,
$signatureBinary,
$privateKey,
OPENSSL_ALGO_SHA256
);
// 3. Encode signature to Base64
$signatureBase64 = base64_encode($signatureBinary);
echo $signatureBase64;
?>
1. Generate RSA Key Pair
|
+---- Private Key → Merchant
|
+---- Public Key → Register in CRING! Portal
|
v
2. Generate X-TIMESTAMP
|
v
3. Build StringToSign
{ClientKey}|{Timestamp}
|
v
4. Sign using Private Key
SHA256withRSA
|
v
5. Base64 Encode Signature
|
v
6. Request B2B Access Token
X-CLIENT-KEY
X-TIMESTAMP
X-SIGNATURE
|
v
7. CRING! Verifies Signature
using Registered Public Key
|
v
8. B2B Access Token
|
v
9. Call SNAP API
Authorization: Bearer <token>
|
v
10. CRING! SNAP API
Authentication-related errors may occur when:
client_id is invalid.client_secret is invalid.Refer to Error Handling for general error handling guidance and the relevant product documentation for product-specific response codes.
Regardless of the integration type, clients should:
client_secret securely.client_secret, private keys, signing keys, or access tokens.X-EXTERNAL-ID for each request.X-TIMESTAMP for each request.CRING! APIs use standard HTTP status codes and product-specific response codes to communicate the result of an API request.
The error handling mechanism may vary depending on the product, integration type, and banking partner. This section provides the general error handling principles applicable across CRING! APIs.
For product-specific response codes, refer to the Response Codes section within the relevant product documentation.
When processing a CRING! API response, clients should consider the following information:
HTTP Status Code
Indicates the HTTP-level result of the request.
Response Code
Provides more specific information about the API or business result.
Response Message
Provides a human-readable description of the response.
Transaction Status
For transaction-based APIs, indicates the current state of the transaction.
Important
A successful HTTP response does not always mean that the underlying transaction has been successfully completed.
For transaction APIs, clients should evaluate the transaction status in addition to the HTTP status and response code.
CRING! follows standard HTTP status codes.
| HTTP Status | General Meaning |
|---|---|
2xx |
Request was successfully received or processed |
4xx |
Request or client-side condition could not be processed |
5xx |
Server or upstream service error |
Common HTTP status codes include:
| HTTP Status | Description |
|---|---|
200 |
Request successfully processed |
201 |
Resource successfully created |
202 |
Request accepted and processing may still be in progress |
400 |
Invalid request |
401 |
Authentication failed or missing |
403 |
Request is not permitted or transaction cannot be processed |
404 |
Resource or transaction not found |
409 |
Request conflicts with the current state |
429 |
Too many requests |
500 |
Internal server error |
502 |
Upstream service error |
503 |
Service temporarily unavailable |
504 |
Gateway or upstream service timeout |
The actual HTTP status codes supported may vary depending on the product and integration type.
In addition to the HTTP status code, CRING! APIs may return a response code that provides more specific information about the result.
Response codes may represent conditions such as:
The response code format and definitions may differ between products and integration types.
For example, different API integrations may use different response code structures.
Therefore, clients should always refer to the product-specific Response Codes documentation when implementing error handling.
The response structure may vary depending on the API product and integration type.
A response may contain information such as:
{
"responseCode": "4000000",
"responseMessage": "Invalid Request",
"data": null
}
Some API may provide additional information:
{
"responseCode": "4000000",
"responseMessage": "Invalid Request",
"errors": [
{
"field": "accountNumber",
"message": "Invalid account number"
}
]
}
This section describes the general conventions and recommended practices for integrating with CRING! APIs.
The guidelines apply across CRING! API products unless otherwise specified in the relevant product documentation.
CRING! APIs use standard HTTP methods according to the operation being performed.
| Method | Usage |
|---|---|
GET |
Retrieve information |
POST |
Create or initiate a transaction |
PUT |
Update an existing resource |
PATCH |
Partially update an existing resource |
DELETE |
Remove or deactivate a resource |
The applicable HTTP method is specified in each API endpoint reference.
API requests may require standard and product-specific headers.
Common headers may include:
| Header | Description |
|---|---|
Content-Type |
Specifies the format of the request body |
Accept |
Specifies the expected response format |
Authorization |
Contains authentication information |
X-Request-ID |
Unique identifier for tracking an API request |
X-External-ID |
Client-provided external reference, where applicable |
Additional headers may be required depending on the product and integration type.
For SNAP APIs, refer to the corresponding API documentation for SNAP-specific headers and requirements.
CRING! APIs generally use JSON as the request and response format.
{
"example": "value"
}
{
"responseCode": "2000000",
"responseMessage": "Successful",
"data": {}
}
CRING! provides a Payment Simulator as part of the Sandbox environment to help developers test and validate their API integrations without processing real financial transactions.
The Payment Simulator can be used to simulate transaction scenarios for CRING! products and APIs, including both SNAP and Non-SNAP integrations.
It allows developers to validate integration flows, test transaction scenarios, and verify system behavior before moving to the Production environment.
The Payment Simulator can be used to:
The Payment Simulator is available in the CRING! Sandbox environment.
It applies to APIs across CRING! products, whether the integration uses SNAP or Non-SNAP, based on the applicable product configuration.
No real financial transactions are processed through the simulator.
Note
The Payment Simulator is intended for Sandbox testing only. Simulation results do not represent real financial transactions.
Access the CRING! Payment Simulator through the following link:
Developers can use the simulator together with the corresponding API documentation to test their integration flow.
The videos below are provided as sample demonstrations of how the Payment Simulator can be used.
They are intended as examples and do not represent the complete functionality or all products supported by the Payment Simulator.
Sample demonstration of a Virtual Account payment simulation:
Sample demonstration of a QRIS payment simulation:
Note
The videos above are sample demonstrations only. Available simulation scenarios may vary depending on the product, API, and Sandbox configuration.
CRING Non-SNAP Authentication provides a standard mechanism for clients to authenticate and obtain access tokens before accessing protected CRING APIs.
The authentication process uses client credentials issued by CRING. Clients must provide valid credentials to obtain an access token, which is then used to authorize subsequent API requests.
The following table summarizes the response codes returned by the Authentication Non-SNAP service.
| HTTP Code | Response Code | Response Message | Description |
|---|---|---|---|
200 |
20000 |
Successful |
The authentication request was processed successfully. |
400 |
40000 |
General Request Failed |
The request could not be processed due to a general request error, including message parsing failure. |
400 |
40001 |
Invalid Field Format |
One or more request fields contain an invalid format. |
400 |
40002 |
Invalid Mandatory Field |
A mandatory field is missing or contains an invalid value or format. |
401 |
40100 |
Unauthorized |
Authentication failed due to an invalid API credential, failed OAuth authentication, failed Client Secret verification, forbidden client access to the API, or an unknown client. |
401 |
40101 |
Invalid Token |
The provided authentication token is invalid or cannot be verified. |
403 |
40304 |
Unauthorized Client |
The specified Client Key could not be found or is not authorized to access the API. |
422 |
42201 |
Invalid Route |
The requested API route or endpoint is invalid or not supported. |
500 |
50000 |
General Error |
An unexpected system error occurred while processing the request. |
500 |
50001 |
Internal Server Error |
An internal error occurred within the authentication service. |
504 |
50400 |
Timeout |
A timeout occurred while processing the request or communicating with a required service. |
The HTTP response codes can be grouped based on the result of the request:
2xx — Success
The authentication request was processed successfully.
4xx — Client Error
The request could not be processed due to invalid request data, authentication failure, unauthorized access, invalid client credentials, or an invalid route.
5xx — Server Error
The request could not be completed due to an internal system error or timeout.
The Response Code provides a more specific identifier for the result of the authentication request.
For example:
20000 = Successful
40001 = Invalid Field Format
40101 = Invalid Token
50001 = Internal Server Error
To access CRING NON SNAP services, obtain an access token using the client_credentials grant type.
| Authorization required | string Basic authorization header.\n The value is generated by encoding the combination of client_id and client_secret using Base64 format. Format:
Example: If:
|
| grantType required | string "client_credentials": The client requests an access token using only its client credentials (or other supported authentication methods) to access protected resources under its control, as defined in OAuth 2.0 (RFC 6749 & RFC 6750). |
{- "grantType": "client_credentials"
}{- "responseCode": "20000",
- "responseMessage": "Successful",
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZjFmM2Q3ZS1kOTA3LTRkOWItODJlNC02Y2IxZGYxOTBlOWUiLCJjbGllbnRJZCI6IjZhZTk1N2M0LTI4NjMtNDcxMy1hY2NlLWJhMTJkZTYzNmNmYyIsIm5iZiI6MTYxMTQ2ODg1NiwiZXhwIjoxNjExNDY5NzU2LCJpYXQiOjE2MTE2NDY4ODU2fQ",
- "tokenType": "Bearer",
- "expiresIn": 900,
- "additionalInfo": { }
}CRING uses digital signature mechanisms to authenticate merchant requests in accordance with the SNAP (Standar Nasional Open API Pembayaran) standard. The signature is generated by the merchant using the credential provided or registered during onboarding and must be sent in the X-SIGNATURE request header.
CRING uses two different signature mechanisms to authenticate requests based on the type of API being accessed:
Both signatures are generated by the merchant locally and sent to CRING through the X-SIGNATURE request header.
Important: CRING does not provide a Generate Signature API. The merchant must generate the applicable signature before sending the request.
| Signature | Used For | Algorithm | Credential |
|---|---|---|---|
| Signature Access Token | Access Token B2B request | RSA SHA-256 | RSA Private Key |
| Signature Service | SNAP Service API request | HMAC-SHA512 | Client Secret |
Signature Access Token is used to authenticate requests for obtaining a SNAP Access Token B2B.
CRING uses asymmetric cryptography (RSA) with SHA-256, following the SNAP signing standard.
The merchant owns and manages the RSA key pair:
Merchant CRING
│ │
├── Generate RSA Key Pair │
│ │
├── Keep Private Key │
│ │
└── Register Public Key ────────────► │
│
└── Store Public Key
The Private Key must never be shared with CRING. CRING uses the registered Public Key to verify the signature received from the merchant.
Build the string to sign:
StringToSign = {ClientKey}|{Timestamp}
Example:
962489e9-de5d-4eb7-92a4-b07d44d64bf5|2025-01-01T23:59:59+07:00
Sign the string using RSA SHA-256 and the merchant's Private Key:
Signature = Base64(
RSA_SHA256_Sign(
StringToSign,
PrivateKey
)
)
The resulting Base64-encoded signature is sent through the X-SIGNATURE header.
X-SIGNATURE: {Base64Signature}
| Data | Description |
|---|---|
ClientKey |
Merchant identifier provided by CRING |
Timestamp |
Current timestamp in yyyy-MM-ddTHH:mm:ssTZD format |
Private Key |
Merchant RSA Private Key in PKCS#8 PEM format |
The
Timestampused to generate the signature must be exactly the same as the value sent in theX-TIMESTAMPrequest header.
Signature Service is used to authenticate requests to SNAP Service APIs after the merchant has obtained the Access Token.
CRING uses symmetric signing with HMAC-SHA512. The merchant generates the signature using the Client Secret provided by CRING.
The request information is processed in the following sequence:
HTTP Method
+
Endpoint URL
+
Request Body
+
Timestamp
│
▼
SHA-256 Request Body
│
▼
Build String to Sign
│
▼
HMAC-SHA512
│
▼
Base64 Signature
│
▼
X-SIGNATURE
│
▼
CRING
For requests with a request body, convert the JSON into a single-line representation and hash it using SHA-256.
Example request body:
{
"partnerServiceId": "98130003",
"startDate": "2024-08-03",
"startTime": "14:56:11+07:00",
"endDate": "2024-08-04",
"endTime": "14:56:11+07:00"
}
Convert it into a single-line JSON string:
{"partnerServiceId": "98130003", "startDate": "2024-08-03", "startTime": "14:56:11+07:00", "endDate": "2024-08-04", "endTime": "14:56:11+07:00"}
Then calculate the SHA-256 hash and encode the result as lowercase hexadecimal:
069a81f985277e7aade3f503088cde559ba09ea0603e00a568aed10a3d8f1920
For requests without a body, use an empty string ("") as the LowercaseHashedRequestBody.
Use the following pattern:
{HTTPMethod}:{EndpointUrl}:{LowercaseHashedRequestBody}:{Timestamp}
Example:
POST:/v1/transfer:069a81f985277e7aade3f503088cde559ba09ea0603e00a568aed10a3d8f1920:2025-01-01T23:59:59+07:00
Sign the resulting string using HMAC-SHA512 with the merchant's Client Secret:
Signature = Base64(
HMAC-SHA512(
StringToSign,
ClientSecret
)
)
Send the resulting Base64-encoded signature through the X-SIGNATURE header:
X-SIGNATURE: {Base64Signature}
The
Timestampused to generate the signature must be exactly the same as the value sent in theX-TIMESTAMPrequest header.
| Data | Description |
|---|---|
HTTPMethod |
HTTP method of the SNAP service request, such as POST or GET |
EndpointUrl |
Relative URL path of the SNAP service endpoint |
LowercaseHashedRequestBody |
SHA-256 hash of the request body in lowercase hexadecimal, or empty string when no body exists |
Timestamp |
Current timestamp, identical to the X-TIMESTAMP header |
Client Secret |
Secret credential provided by CRING |
Use the signature mechanism based on the API being called:
Merchant
│
▼
API being called?
│
┌─────────┴─────────┐
│ │
▼ ▼
Access Token B2B SNAP Service API
│ │
▼ ▼
Signature Access Signature Service
Token
│ │
RSA SHA-256 HMAC-SHA512
│ │
└─────────┬─────────┘
▼
X-SIGNATURE
│
▼
CRING
X-TIMESTAMP request header.X-SIGNATURE value must be Base64-encoded.Before sending callback requests, CRING obtains an access token from the merchant's system. The merchant must provide a callback authentication endpoint that allows CRING to obtain a valid access token.
Unlike the Access Token B2B endpoint provided by CRING, this endpoint is provided and managed by the merchant.
POST {clientBaseUrl}/v1.0/access-token/b2b
Where {clientBaseUrl} is the base URL of the merchant's system.
Example:
POST https://merchant.example.com/v1.0/access-token/b2b
The endpoint is called by CRING before sending callback requests to the merchant.
CRING
│
│ 1. Request callback access token
│ POST /v1.0/access-token/b2b
│
▼
Merchant
│
│ 2. Verify X-CLIENT-KEY,
│ X-TIMESTAMP and X-SIGNATURE
│
│ 3. Generate / return access token
│
▼
CRING
│
│ 4. Use returned token
│ Authorization: Bearer {accessToken}
│
▼
Merchant Callback API
| Header | Required | Description |
|---|---|---|
Content-Type |
Yes | Request body format. Must be application/json. |
X-TIMESTAMP |
Yes | Current timestamp in ISO 8601 format. |
X-CLIENT-KEY |
Yes | Client identifier registered by the merchant for callback authentication. |
X-SIGNATURE |
Yes | Base64-encoded asymmetric signature generated using the merchant's RSA Private Key. |
Example:
Content-Type: application/json
X-TIMESTAMP: 2025-01-01T23:59:59+07:00
X-CLIENT-KEY: 962489e9-de5d-4eb7-92a4-b07ad44d64bf5
X-SIGNATURE: {Base64Signature}
The merchant must verify the signature before processing the authentication request.
The signing data is:
StringToSign = {ClientKey}|{Timestamp}
The signature is generated using:
Signature = Base64(
RSA_SHA256_Sign(
StringToSign,
PrivateKey
)
)
The X-TIMESTAMP and X-CLIENT-KEY values used for signature verification must match the values received in the request headers.
The request body uses application/json:
{
"grantType": "client_credentials"
}
| Field | Type | Required | Description |
|---|---|---|---|
grantType |
string | Yes | Must be client_credentials. |
Upon successful authentication, the merchant returns an access token to CRING.
The access token will be used by CRING as a Bearer token when sending subsequent callback requests to the merchant.
{
"responseCode": "2007300",
"responseMessage": "Successful",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"tokenType": "Bearer",
"expiresIn": "900",
"additionalInfo": {}
}
| Field | Type | Required | Description |
|---|---|---|---|
responseCode |
string | Yes | Response code indicating the result of the callback authentication request. |
responseMessage |
string | Yes | Description of the authentication request result. |
accessToken |
string | Yes | Access token issued by the merchant for authenticating subsequent callback requests from CRING. |
tokenType |
string | Yes | Type of access token. The value is Bearer. |
expiresIn |
string | Yes | Access token validity period in seconds. |
additionalInfo |
object | No | Additional information related to the authentication response. |
After successfully obtaining the access token, CRING uses the token to authenticate callback requests to the merchant.
The token is sent using the Authorization header:
Authorization: Bearer {accessToken}
Example:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
{clientBaseUrl} is determined by the merchant.X-SIGNATURE before issuing an access token.expiresIn.Bearer token on subsequent callback requests.This section lists the HTTP response codes returned by the SNAP Authentication service when processing Access Token B2B requests.
The response code indicates the result of the request, while the response message provides a more specific description of the outcome. All response codes in this section belong to Service Code 73.
| HTTP Code | Response Message | Description | Service Code |
|---|---|---|---|
200 |
Successful |
Access token generated successfully. | 73 |
400 |
Bad Request |
Invalid request body or failed message parsing. | 73 |
400 |
Invalid Field Format {fieldName} |
One or more fields have an invalid format. {fieldName} identifies the field with the invalid format. |
73 |
400 |
Invalid Mandatory Field {fieldName} |
A required field is missing or contains an invalid value. {fieldName} identifies the affected mandatory field. |
73 |
401 |
Unauthorized. [reason] |
Client authentication failed due to an invalid Client ID, Client Secret, Signature, API Key, or unauthorized access. [reason] provides additional information about the authentication failure. |
73 |
404 |
Partner Not Found |
The specified partner or client identifier cannot be found. | 73 |
429 |
Too Many Requests |
The rate limit for access token requests has been exceeded. | 73 |
500 |
General Error |
An unexpected system error occurred while processing the request. | 73 |
500 |
Internal Server Error |
An internal failure occurred within the authentication service. | 73 |
500 |
External Server Error |
An external dependency, such as a database, HSM, or authentication service, failed while processing the request. | 73 |
504 |
Timeout |
A timeout occurred while communicating with the authentication service. | 73 |
The HTTP response codes can be grouped based on the result of the request:
2xx — Success
The request was processed successfully and the access token was generated.
4xx — Client Error
The request could not be processed because of invalid request data, missing mandatory fields, authentication failure, an unknown partner, or exceeded rate limits.
5xx — Server Error
The request could not be completed because of an unexpected internal failure, external dependency failure, or timeout.
Some response messages contain placeholders that provide additional context:
{fieldName}Used to identify the request field that caused the validation error.
Example:
Invalid Field Format grantType
or:
Invalid Mandatory Field grantType
[reason]Used to provide additional information about an authentication failure.
Example:
Unauthorized. Invalid Signature
To access CRING SNAP services, obtain an access token using the client_credentials grant type.
Service Code: 73
The generated access token must be included as a Bearer token in the Authorization header for subsequent requests to protected SNAP services.
| Content-Type required | string Example: application/json Specifies the media type of the request body. Example:
|
| X-TIMESTAMP required | string Current timestamp used to generate the signature. Format:
Example:
|
| X-CLIENT-KEY required | string Client Key assigned to the merchant by CRING. Example:
|
| X-SIGNATURE required | string Base64-encoded RSA SHA-256 signature generated using the merchant's Private Key. The signature is generated from the following string:
Then sign the StringToSign using RSA SHA-256 with the merchant's Private Key:
Example:
The |
| grantType required | string Grant type used to obtain the Access Token B2B. Must be set to |
{- "grantType": "client_credentials"
}{- "responseCode": "2007300",
- "responseMessage": "Successful",
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZjFmM2Q3ZS1kOTA3LTRkOWItODJlNC02Y2IxZGYxOTBlOWUiLCJjbGllbnRJZCI6IjZhZTk1N2M0LTI4NjMtNDcxMy1hY2NlLWJhMTJkZTYzNmNmYyIsIm5iZiI6MTYxMTQ2ODg1NiwiZXhwIjoxNjExNDY5NzU2LCJpYXQiOjE2MTE2NDY4ODU2fQ",
- "tokenType": "Bearer",
- "expiresIn": "900",
- "additionalInfo": { }
}is a payment collection service that enables businesses to receive payments through a unique Virtual Account number assigned to a customer or transaction.
Each payment is automatically identified and reconciled based on the Virtual Account number, eliminating the need for manual payment verification and simplifying the collection process.
CRING! provides Virtual Account Credit services through two business models: Payment Facilitator and Payment Aggregator, allowing clients to choose the integration model that best suits their business needs.
Key Benefits
For Payment Facilitator clients, VA Credit is currently available through:
For Payment Aggregator clients, VA Credit is currently available through:
Virtual Account Credit is available for both Payment Facilitator and Payment Aggregator clients. However, the supported banking partners differ by business model.
| Business Model | Supported Banks |
|---|---|
| Payment Facilitator | Bank BNI, Bank BTN, Bank Permata |
| Payment Aggregator | Bank BRI |
Important
Payment Facilitator and Payment Aggregator do not have the same banking partner coverage. The available bank depends on the client's business model and configuration.
Refer to the relevant API section for the specific bank and integration flow supported by your client configuration.
Virtual Account Credit API for Non-SNAP integration with Bank BNI.
This service allows merchants to create Virtual Account numbers issued by Bank BNI.
The following table summarizes the response codes you may encounter when using CRING's Non-SNAP APIs. Each code indicates the result of the request and provides information about the potential cause.
| HTTP Code | Response Code | Response Message |
|---|---|---|
200 |
20000 |
Successful |
202 |
20200 |
Transaction Still in Progress |
202 |
20201 |
Data Not Found |
400 |
40000 |
General request failed error, including message parsing failure. |
400 |
40001 |
Invalid Field Format |
400 |
40002 |
Missing or invalid format on mandatory field |
400 |
40003 |
Improper datetime field implementation |
400 |
40004 |
Incomplete/Invalid Parameter(s) |
400 |
40005 |
Billing Type Does Not Match Billing Amount |
400 |
40006 |
Invalid Expiry Date/Time |
400 |
40007 |
IDR Currency Cannot Have Billing Amount with Decimal Fraction |
400 |
40008 |
VA Number Should Not Be Defined When Billing Number Is Set |
400 |
40009 |
Invalid Billing Type |
400 |
40010 |
Customer Name Cannot Be Used |
400 |
40011 |
Invalid Content-Type Header |
401 |
40100 |
General unauthorized error, including invalid API credentials, OAuth failure, Client Secret verification failure, forbidden client access, or unknown client. |
401 |
40101 |
Invalid Token |
401 |
40102 |
IP Address Not Allowed or Wrong Client ID |
403 |
40300 |
Transaction Expired |
403 |
40302 |
Exceeds Transaction Limit |
403 |
40304 |
Invalid Permission(s) |
403 |
40314 |
Insufficient Funds |
404 |
40400 |
Service Not Found |
404 |
40401 |
Transaction Not Found |
404 |
40402 |
Invalid Billing Number |
404 |
40403 |
Invalid VA Number |
404 |
40404 |
Billing Not Found |
404 |
40412 |
Invalid Bill/Virtual Account |
404 |
40413 |
Invalid Amount |
404 |
40414 |
The Bill Has Been Paid |
404 |
40418 |
Inconsistent Request |
404 |
40420 |
Amount Cannot Be Changed |
404 |
40421 |
VA Number Is in Use |
404 |
40422 |
Billing Number Is in Use |
405 |
40500 |
Request Function Is Not Supported |
409 |
40900 |
Conflict |
409 |
40901 |
Duplicate Reference Number |
409 |
40902 |
Duplicate Transaction |
409 |
40903 |
Duplicate Billing ID |
422 |
42203 |
The Given Data Was Invalid |
429 |
42900 |
Too Many Requests |
429 |
42901 |
Too Many Inquiry Requests per Hour |
500 |
50000 |
General Error |
500 |
50001 |
Internal Server Error |
500 |
50002 |
Technical Failure |
500 |
50003 |
Unexpected Error |
500 |
50004 |
System Is Temporarily Offline |
500 |
50005 |
Service Not Defined |
500 |
50006 |
Failed to Send SMS Payment |
500 |
50007 |
SMS Payment Can Only Be Used with Fixed Payment |
500 |
50008 |
Billing Type Not Supported for This Client ID |
504 |
50400 |
Timeout |
This service is used by merchants to send transaction data. In return, the merchant will receive a BNI Virtual Account. CRING! will provide the Virtual Account Number through BNI E-Collection V2.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| expiredDate required | string <date-time> Date and time when the Virtual Account expires and can no longer be used. The value must be at least 5 minutes later than the current server time (example: "2025-11-09T21:05:00+07:00") and no more than 50 years from now (example: "2075-11-09T21:00:00+07:00"). | ||||||||||||||
| amount required | string [ 1 .. 14 ] characters Virtual Account amount. Data only integer value without decimal and/or thousand separators. (ISO4217) | ||||||||||||||
| virtualAccountTrxType required | string Identifier payment type that must be:
| ||||||||||||||
| customerName required | string <= 30 characters Customer Name | ||||||||||||||
| customerPhone | string <= 30 digit characters Customer Phone number | ||||||||||||||
| customerEmail | string <email> Customer Email | ||||||||||||||
| accountType | string Identifier virtual account type that must be filled by | ||||||||||||||
| numberSuffix | string [ 1 .. 8 ] characters Suffix for Virtual Account Number | ||||||||||||||
| additionalInfo | object |
{- "expiredDate": "2022-01-01T00:00:00+07:00",
- "amount": 1000000,
- "virtualAccountTrxType": "va-closed-payment",
- "customerName": "John Doe",
- "customerPhone": "0818404379",
- "customerEmail": "john@customer.co.id",
- "accountType": "credit",
- "numberSuffix": "08184043",
- "additionalInfo": { }
}{- "responseCode": "20000",
- "responseMessage": "Successful",
- "paymentId": "5031794d2dda4b7ab054d4204cd56a32",
- "customerName": "John Doe",
- "customerPhone": "0818404379",
- "customerEmail": "john@customer.co.id",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "amount": 1000000,
- "trxId": "8e94695879e3400ca785b64db21bbb18",
- "virtualAccount": "8277770818404379",
- "virtualAccountTrxType": "va-closed-payment",
- "accountType": "credit",
- "desc": ""
}This service used by merchant to update transaction data.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| expiredDate required | string The expiration date and time of the Virtual Account. It must not be earlier than January 1, 2000 (example: "2000-01-01T00:00:00Z") and must not exceed 50 years from the current server time (example: "2075-11-09T21:00:00+07:00"). Once expired, the Virtual Account can no longer be used. |
| paymentId required | string Unique ID generated by system for this object |
| amount | string [ 1 .. 14 ] characters Virtual Account amount. Data only integer value without decimal and/or thousand separators. (ISO4217) |
| customerName | string <= 30 characters Customer Name |
| customerPhone | string <= 30 digit characters Customer Phone number |
| customerEmail | string <email> Customer Email |
| additionalInfo | object |
{- "expiredDate": "2030-05-10T23:59:59+07:00",
- "paymentId": "5031794d2dda4b7ab054d4204cd56a32",
- "amount": 1000000,
- "customerName": "John Doe",
- "customerPhone": "0818404379",
- "customerEmail": "john@customer.co.id",
- "additionalInfo": { }
}{- "responseCode": "20000",
- "responseMessage": "Successful",
- "paymentId": "5031794d2dda4b7ab054d4204cd56a32",
- "customerName": "John Doe",
- "customerPhone": "0818404379",
- "customerEmail": "john@customer.co.id",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "amount": 1000000,
- "trxId": "8e94695879e3400ca785b64db21bbb18",
- "virtualAccount": "8277770818404379",
- "virtualAccountTrxType": "va-closed-payment",
- "statusPaid": "paid",
- "accountType": "credit",
- "desc": ""
}This service used by merchant to get latest transaction data.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| paymentId required | string Unique ID generated by system for this object |
{- "paymentId": "5031794d2dda4b7ab054d4204cd56a32"
}{- "responseCode": "20000",
- "responseMessage": "Successful",
- "paymentId": "5031794d2dda4b7ab054d4204cd56a32",
- "customerName": "John Doe",
- "customerPhone": "0818404379",
- "customerEmail": "john@customer.co.id",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "amount": 1000000,
- "trxId": "8e94695879e3400ca785b64db21bbb18",
- "virtualAccount": "8277770818404379",
- "virtualAccountTrxType": "va-closed-payment",
- "status": "2",
- "accountType": "credit",
- "desc": "",
- "createdDate": "2022-01-01T00:00:00+07:00",
- "updatedDate": "2022-01-01T00:00:00+07:00"
}/callback_url = URL in client server
This service will call API client as payment.
Triggered when user pays the bill in bank. CRING will send callback payment notification after VA Paid.
Below request body will be send from CRING related for All Bank.
A notification is considered as success if and only if response from the callback URL indicated HTTP code 200.
CRING will send retry callback up to 5 times for each minutes if HTTP code is not 200.
| paymentId required | string Unique ID generated by system for this object | ||||||||||||||
| customerName | string <= 30 characters Customer Name | ||||||||||||||
| customerPhone | string <= 30 digit characters Customer Phone number | ||||||||||||||
| customerEmail | string <email> Customer Email | ||||||||||||||
| expiredDate | string <date-time> Date and time when the Virtual Account expires and can no longer be used. The value must be at least 5 minutes later than the current server time (example: "2025-11-09T21:05:00+07:00") and no more than 50 years from now (example: "2075-11-09T21:00:00+07:00"). | ||||||||||||||
| amount | string [ 1 .. 14 ] characters Virtual account amount | ||||||||||||||
| trxId required | string Transaction ID. Generated by system, it unique. | ||||||||||||||
| virtualAccount required | string Virtual Account Number, Generated by system with | ||||||||||||||
| virtualAccountTrxType required | string Identifier payment type that must be:
| ||||||||||||||
| statusPaid required | string Payment status | ||||||||||||||
| accountType | string Account type payment | ||||||||||||||
| desc | string Additional Info | ||||||||||||||
| paymentAmount | string Amount of payment | ||||||||||||||
| cumulativePaymentAmount | string [ 1 .. 14 ] characters Amount of payment as Acumulative (depends of | ||||||||||||||
| paymentNtb | number Journal Number from Bank | ||||||||||||||
| paymentDate | string <date-time> Date of the payment payed | ||||||||||||||
| datetimePaymentIso8601 | string <date-time> Date time of payment | ||||||||||||||
| createdDate | string <date-time> Date of the payment created |
{- "paymentId": "5031794d2dda4b7ab054d4204cd56a32",
- "customerName": "John Doe",
- "customerPhone": "0818404379",
- "customerEmail": "john@customer.co.id",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "amount": 1000000,
- "trxId": "8e94695879e3400ca785b64db21bbb18",
- "virtualAccount": "8277770818404379",
- "virtualAccountTrxType": "va-closed-payment",
- "statusPaid": "paid",
- "accountType": "credit",
- "desc": "",
- "paymentAmount": 1000000,
- "cumulativePaymentAmount": 1000000,
- "paymentNtb": "784224",
- "paymentDate": "2023-05-30 09:13:01",
- "datetimePaymentIso8601": "2022-01-01T00:00:00+07:00",
- "createdDate": "2022-01-01T00:00:00+07:00"
}{- "responseCode": "20000",
- "responseMessage": "Successful"
}Virtual Account Credit API for Non-SNAP integration across supported banks.
Supported Banks
| Code | Name |
|---|---|
| 002 | BANK RAKYAT INDONESIA (BRI) |
| 009 | BANK NEGARA INDONESIA (BNI) |
| 013 | BANK PERMATA |
| 200 | BANK TABUNGAN NEGARA (BTN) |
The following table summarizes the response codes you may encounter when using CRING's Virtual Account Non-SNAP APIs Multi Bank. Each code indicates the result of the request and provides information about the potential cause.
| Bank | Http Code | Service Code | Case Code | Response Code | Response Message |
|---|---|---|---|---|---|
| Bank BTN, Permata, BRI, BNI (New) | 200 | any | 00 | 200XX00 | Successful |
| Bank BTN, Permata, BRI, BNI (New) | 400 | any | 00 | 400XX00 | Bad Request / Parsing Error |
| Bank BTN, Permata, BRI, BNI (New) | 400 | any | 01 | 400XX01 | Invalid Field Format |
| Bank BTN, Permata, BRI, BNI (New) | 400 | any | 02 | 400XX02 | Invalid Mandatory Field |
| Bank BTN, BNI (New), BRI | 401 | any | 00 | 401XX00 | Unauthorized |
| Bank BTN, BNI (New), BRI | 401 | any | 01 | 401XX01 | Invalid Token (B2B) |
| Bank BTN, BNI (New), BRI | 401 | any | 02 | 401XX02 | Invalid Customer Token |
| Bank BTN, BNI (New), BRI | 401 | any | 03 | 401XX03 | Token Not Found (B2B) |
| Bank BTN, BNI (New), BRI | 403 | any | 00 | 403XX00 | Transaction Expired |
| Bank BTN, BNI (New), BRI | 403 | any | 02 | 403XX02 | Exceeds Transaction Amount Limit |
| Bank BTN, BNI (New), BRI | 403 | any | 04 | 403XX04 | Activity Count Limit Exceeded |
| Bank BTN, BNI (New), BRI | 403 | any | 05 | 403XX05 | Do Not Honor |
| Bank BTN, BNI (New), BRI | 403 | any | 09 | 403XX09 | Dormant Account |
| Bank BTN, BNI (New), BRI | 403 | any | 10 | 403XX10 | Need To Set Token Limit |
| Bank BTN, BNI (New), BRI | 403 | any | 14 | 403XX14 | Insufficient Funds |
| Bank BTN, Permata, BRI, BNI (New) | 403 | any | 15 | 403XX15 | Transaction Not Permitted. [reason] |
| Bank BTN, BNI (New), BRI | 403 | any | 16 | 403XX16 | Suspend Transaction |
| Bank BTN, BNI (New), BRI | 403 | any | 17 | 403XX17 | Token Limit Exceeded |
| Bank BTN, BNI (New), BRI | 403 | any | 18 | 403XX18 | Inactive Card/Account/Customer |
| Bank BTN, BNI (New), BRI | 403 | any | 21 | 403XX21 | Set Limit Not Allowed |
| Bank BTN, BNI (New), BRI | 403 | any | 22 | 403XX22 | Token Limit Invalid |
| Bank BTN, BNI (New), BRI | 404 | any | 00 | 404XX00 | Invalid Transaction Status |
| Bank BTN, BNI (New), BRI | 404 | any | 01 | 404XX01 | Transaction Not Found |
| Bank BTN, BNI (New), BRI | 404 | any | 02 | 404XX02 | Invalid Routing |
| Bank BTN, BNI (New), BRI | 404 | any | 03 | 404XX03 | Bank Not Supported By Switch |
| Bank BTN, BNI (New), BRI | 404 | any | 04 | 404XX04 | Transaction Canceled |
| Bank BTN, BNI (New), BRI | 404 | any | 07 | 404XX07 | Journey Not Found |
| Bank BTN, BNI (New), BRI | 404 | any | 11 | 404XX11 | Invalid Card/Account/Customer [info]/Virtual Account |
| Bank BTN, Permata, BRI, BNI (New) | 404 | any | 12 | 404XX12 | Invalid Bill/Virtual Account [Reason] |
| Bank BTN, Permata, BRI, BNI (New) | 404 | any | 13 | 404XX13 | Invalid Amount |
| Bank BTN, Permata, BRI, BNI (New) | 404 | any | 14 | 404XX14 | Paid Bill |
| Bank BTN, BNI (New), BRI | 404 | any | 16 | 404XX16 | Partner Not Found |
| Bank BTN, BNI (New), BRI | 404 | any | 19 | 404XX19 | Invalid Bill/Virtual Account |
| Bank BTN, BNI (New), BRI | 409 | any | 00 | 409XX00 | Conflict |
| Bank BTN, BNI (New), BRI | 409 | any | 01 | 409XX01 | Duplicate partnerReferenceNo |
| Bank BTN, BNI (New), BRI | 500 | any | 00 | 500XX00 | General Error |
| Bank BTN, BNI (New), BRI | 500 | any | 01 | 500XX01 | Internal Server Error |
| Bank BTN, BNI (New), BRI | 500 | any | 02 | 500XX02 | External Server Error |
This service allows merchants to create Virtual Account numbers across multiple supported banks by submitting transaction and billing information. Upon successful processing, CRING returns the generated Virtual Account number associated with the transaction.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
Successful
| bankCode required | string Bank code for BANK BTN is | ||||||||
| virtualAccountName required | string <= 30 characters virtual account name customer | ||||||||
| virtualAccountEmail | string virtual account email customer | ||||||||
| virtualAccountPhone | string <= 30 characters virtual account phone customer. Only allowed 62xxxxxxx format. | ||||||||
| virtualAccountTrxType required | string Identifier virtualAccountTrxType that must be followed:
| ||||||||
required | object | ||||||||
| customerNo | string Unique number for the customer. This number will be generated as a suffix in Virtual Account.
| ||||||||
| expiredDate required | string <date-time> Date and time when the Virtual Account expires and can no longer be used. The value must be at least 5 minutes later than the current server time (example: "2025-11-09T21:05:00+07:00") and no more than 50 years from now (example: "2075-11-09T21:00:00+07:00"). | ||||||||
object |
{- "bankCode": "200",
- "virtualAccountName": "John Doe",
- "virtualAccountEmail": "john@mail.com",
- "virtualAccountPhone": "628888888881",
- "virtualAccountTrxType": "va-closed-payment",
- "totalAmount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "customerNo": "12345678901",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "additionalInfo": {
- "description": "credit",
- "payment": "bill payment",
- "paymentCode": "BP0001"
}
}{- "responseCode": "2002700",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "bankCode": "200",
- "trxId": "1299e43112754fc4938666e59fc52f08",
- "virtualAccountNo": "9902630512345678901",
- "virtualAccountName": "John Doe",
- "virtualAccountEmail": "john@mail.com",
- "virtualAccountPhone": "628888888881",
- "totalAmount": {
- "value": "350000.00",
- "currency": "IDR"
}
}, - "virtualAccountTrxType": "va-closed-payment",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "additionalInfo": {
- "description": "credit",
- "payment": "bill payment",
- "paymentCode": "BP0001"
}
}This service allows merchants to update only for Virtual Account Credit BANK BTN. It is only applicable to Virtual Accounts that have no successful payment transactions and are still active (not expired).
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| bankCode required | string Bank code for BANK BTN is | ||||||||
| trxId required | string Transaction Id from response create Virtual Account | ||||||||
| virtualAccountName required | string <= 30 characters virtual account name customer | ||||||||
| virtualAccountEmail | string virtual account email customer | ||||||||
| virtualAccountPhone | string <= 30 digit characters virtual account phone customer. Only allowed 62xxxxxxx format. | ||||||||
| virtualAccountTrxType required | string Identifier virtualAccountTrxType that must be followed:
| ||||||||
required | object | ||||||||
| expiredDate required | string The expiration date and time of the Virtual Account. It must not be earlier than January 1, 2000 (example: "2000-01-01T00:00:00Z") and must not exceed 50 years from the current server time (example: "2075-11-09T21:00:00+07:00"). Once expired, the Virtual Account can no longer be used. | ||||||||
object |
{- "bankCode": "200",
- "trxId": "1299e43112754fc4938666e59fc52f08",
- "virtualAccountName": "John Doe",
- "virtualAccountEmail": "john@mail.com",
- "virtualAccountPhone": "628888888881",
- "virtualAccountTrxType": "va-closed-payment",
- "totalAmount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "expiredDate": "2030-05-10T23:59:59+07:00",
- "additionalInfo": {
- "description": "credit",
- "payment": "bill payment",
- "paymentCode": "BP0001"
}
}{- "responseCode": "2002800",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "bankCode": "200",
- "trxId": "1299e43112754fc4938666e59fc52f08",
- "virtualAccountName": "John Doe",
- "virtualAccountEmail": "john@mail.com",
- "virtualAccountPhone": "628888888881",
- "totalAmount": {
- "value": "350000.00",
- "currency": "IDR"
}
}, - "virtualAccountTrxType": "va-closed-payment",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "additionalInfo": {
- "description": "credit",
- "payment": "bill payment",
- "paymentCode": "BP0001"
}
}This service is used by merchants to obtain information from the Virtual Account number that has been created.
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| bankCode required | string Bank code for BANK BTN is |
| virtualAccountNo required | string Virtual Account number |
| trxId required | string Unique ID generated by system when Virtual Account number has been created. |
{- "bankCode": "200",
- "virtualAccountNo": "9190000499880126971199003",
- "trxId": "1299e43112754fc4938666e59fc52f08"
}{- "responseCode": "2002600",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "partnerServiceId": "95122",
- "customerNo": "000101190009",
- "virtualAccountNo": "9190000499880126971199003",
- "virtualAccountName": "John Doe",
- "totalAmount": {
- "value": "350000.00",
- "currency": "IDR"
}
}, - "inquiryStatus": "00",
- "statusDescription": "Active",
- "virtualAccountTrxType": "va-closed-payment",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "additionalInfo": {
- "description": "credit",
- "payment": "bill payment",
- "paymentCode": "BP0001",
- "currentAccountNo": "",
- "paidBill": "0",
- "paymentDate": ""
}
}This service is used to only for Virtual Account Credit BANK BNI (NEW). This service will be inquire the status and payment details of a BANK BNI Virtual Account using the Virtual Account number.
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| bankCode required | string Bank code. Refer to Bank Code (Bank Code). Currently only bankCode |
| virtualAccountNo required | string Virtual Account number |
{- "bankCode": "009",
- "virtualAccountNo": "9190000499880126971199003"
}{- "responseCode": "2002600",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "virtualAccountNo": "9190000499880126971199003",
- "virtualAccountName": "John Doe",
- "inquiryRequestId": "6a3e55a1a2b242c86d09d061",
- "paymentRequestId": "kd7e55a1a2b242c86d09f372",
- "billDetails": [
- {
- "additionalInfo": {
- "virtualAccountName": "John Doe",
- "virtualAccountEmail": "john.doe@mail.com",
- "virtualAccountPhone": "6287717445223",
- "cumulativePaymentAmount": {
- "value": "580000.00",
- "currency": "IDR"
}, - "trxId": "90201245641246515652",
- "journalNum": "828342"
}
}
]
}
}This service is used for Virtual Account Credit by merchants to make the Virtual Account status deleted and can no longer be used for payments.
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| bankCode required | string Bank Code for BANK BTN is |
| virtualAccountNo required | string Virtual Account number |
| trxId required | string Transaction id generated by system when Virtual Account number has been created. |
{- "bankCode": "200",
- "virtualAccountNo": "9190000499880126971199003",
- "trxId": "3845526792745904557"
}{- "responseCode": "2003100",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "bankCode": "200",
- "virtualAccountNo": "9190000499880126971199003",
- "trxId": "3845526792745904557"
}
}/callback_url = URL in client server
This service will call API client as payment.
Triggered when user pays the bill in bank. CRING will send callback payment notification after VA Paid.
Below request body will be send from CRING related for All Bank.
A notification is considered as success if and only if response from the callback URL indicated HTTP code 200.
CRING will send retry callback up to 5 times for each minutes if HTTP code is not 200.
| paymentId required | string Unique ID generated by system for this object | ||||||||||||||
| customerName | string <= 30 characters Customer Name | ||||||||||||||
| customerPhone | string <= 30 digit characters Customer Phone number | ||||||||||||||
| customerEmail | string <email> Customer Email | ||||||||||||||
| expiredDate | string <date-time> Date and time when the Virtual Account expires and can no longer be used. The value must be at least 5 minutes later than the current server time (example: "2025-11-09T21:05:00+07:00") and no more than 50 years from now (example: "2075-11-09T21:00:00+07:00"). | ||||||||||||||
| amount | string [ 1 .. 14 ] characters Virtual account amount | ||||||||||||||
| trxId required | string Transaction ID. Generated by system, it unique. | ||||||||||||||
| virtualAccount required | string Virtual Account Number, Generated by system with | ||||||||||||||
| virtualAccountTrxType required | string Identifier payment type that must be:
| ||||||||||||||
| statusPaid required | string Payment status | ||||||||||||||
| accountType | string Account type payment | ||||||||||||||
| desc | string Additional Info | ||||||||||||||
| paymentAmount | string Amount of payment | ||||||||||||||
| cumulativePaymentAmount | string [ 1 .. 14 ] characters Amount of payment as Acumulative (depends of | ||||||||||||||
| paymentNtb | number Journal Number from Bank | ||||||||||||||
| paymentDate | string <date-time> Date of the payment payed | ||||||||||||||
| datetimePaymentIso8601 | string <date-time> Date time of payment | ||||||||||||||
| createdDate | string <date-time> Date of the payment created |
{- "paymentId": "5031794d2dda4b7ab054d4204cd56a32",
- "customerName": "John Doe",
- "customerPhone": "0818404379",
- "customerEmail": "john@customer.co.id",
- "expiredDate": "2022-01-01T00:00:00+07:00",
- "amount": 1000000,
- "trxId": "8e94695879e3400ca785b64db21bbb18",
- "virtualAccount": "8277770818404379",
- "virtualAccountTrxType": "va-closed-payment",
- "statusPaid": "paid",
- "accountType": "credit",
- "desc": "",
- "paymentAmount": 1000000,
- "cumulativePaymentAmount": 1000000,
- "paymentNtb": "784224",
- "paymentDate": "2023-05-30 09:13:01",
- "datetimePaymentIso8601": "2022-01-01T00:00:00+07:00",
- "createdDate": "2022-01-01T00:00:00+07:00"
}{- "responseCode": "20000",
- "responseMessage": "Successful"
}Virtual Account Credit API for SNAP integration across supported banks.
Supported Banks
Supported Services
The following services are supported for Virtual Account Credit integration.
| Service | Service Code |
|---|---|
| Payment Notification Virtual Account Credit | 25 |
| Inquiry Status Virtual Account Credit | 26 |
| Create Virtual Account Credit | 27 |
| Update Virtual Account Credit | 28 |
| Inquiry Virtual Account Credit | 30 |
| Delete Virtual Account Credit | 31 |
Type of Virtual Account
| Code | Type | Banks | Usage |
|---|---|---|---|
C |
Closed Payment | BTN, Permata, BNI, BRI | va-closed-payment- Fixed payment with exact amount, paid once. |
O |
Open Payment | BTN, BRI, BNI | va-open-payment - Any amount, paid once. |
I |
Partial Payment | BTN | va-partial-payment - Multiple payments allowed until fully paid. |
| Code | Name |
|---|---|
| 002 | BANK RAKYAT INDONESIA (BRI) |
| 009 | BANK NEGARA INDONESIA (BNI) |
| 013 | BANK PERMATA |
| 200 | BANK TABUNGAN NEGARA (BTN) |
The following table summarizes the response codes you may encounter when using CRING's Virtual Account SNAP APIs. Each code indicates the result of the request and provides information about the potential cause.
| HTTP Code | Response Code | Response Message | Description | Service |
|---|---|---|---|---|
| 200 | 2002500 |
Successful | Request processed successfully. | 25 |
| 200 | 2002600 |
Successful | Request processed successfully. | 26 |
| 200 | 2002700 |
Successful | Request processed successfully. | 27 |
| 200 | 2002800 |
Successful | Request processed successfully. | 28 |
| 200 | 2003000 |
Successful | Request processed successfully. | 30 |
| 200 | 2003100 |
Successful | Request processed successfully. | 31 |
| 202 | 2022500 |
Request In Progress | Request is still being processed asynchronously. | 25 |
| 202 | 2022600 |
Request In Progress | Request is still being processed asynchronously. | 26 |
| 202 | 2022700 |
Request In Progress | Request is still being processed asynchronously. | 27 |
| 202 | 2022800 |
Request In Progress | Request is still being processed asynchronously. | 28 |
| 202 | 2023000 |
Request In Progress | Request is still being processed asynchronously. | 30 |
| 202 | 2023100 |
Request In Progress | Request is still being processed asynchronously. | 31 |
| 400 | 4002500 |
Bad Request | Invalid request or failed message parsing. | All |
| 400 | 4002501 |
Invalid Field Format {fieldName} |
One or more fields have an invalid format. | All |
| 400 | 4002502 |
Invalid Mandatory Field {fieldName} |
Required field is missing or invalid. | All |
| 401 | 4012500 |
Unauthorized | Authentication or authorization failed. | All |
| 403 | 4032500 |
Transaction Expired | The transaction has expired. | All |
| 403 | 4032501 |
Activity Count Limit Exceeded | Request exceeds the allowed transaction frequency. | All |
| 403 | 4032502 |
Merchant Blacklisted | Merchant is suspended or not allowed to access the API. | All |
| 403 | 4032503 |
Merchant Limit Exceed | Merchant transaction limit has been exceeded. | 25, 27 |
| 404 | 4042500 |
Invalid Transaction Status | The transaction status is invalid for the requested operation. | 26, 28, 31 |
| 404 | 4042501 |
Transaction Not Found | Transaction cannot be found. | 26, 28, 31 |
| 404 | 4042502 |
Invalid Merchant | Merchant does not exist or is inactive. | 27, 28, 30, 31 |
| 404 | 4042503 |
Invalid Virtual Account | Virtual Account number is invalid, suspended, blocked, or expired. | All |
| 404 | 4042504 |
Invalid Amount | Payment amount does not match the expected amount. | 25, 27 |
| 404 | 4042505 |
Paid Bill | The Virtual Account has already been paid. | 25 |
| 404 | 4042506 |
Inconsistent Request | Request parameters are inconsistent with the existing transaction. | 27, 28 |
| 405 | 4052500 |
Requested Function Is Not Supported | Requested operation is not supported. | All |
| 409 | 4092500 |
Conflict | Duplicate X-EXTERNAL-ID within the same day. |
All |
| 409 | 4092501 |
Duplicate Partner Reference Number | The transaction with the same partnerReferenceNo has already been processed successfully. |
27 |
| 429 | 4292500 |
Too Many Requests | Rate limit exceeded. | All |
| 500 | 5002500 |
General Error | Unexpected system error. | All |
| 500 | 5002501 |
Internal Server Error | Internal server failure occurred. | All |
| 500 | 5002502 |
External Server Error | Downstream service or external system failure. | All |
| 504 | 5042500 |
Timeout | Timeout occurred while communicating with the external system. | All |
This service allows merchants to create Virtual Account numbers across multiple supported banks by submitting transaction and billing information. Upon successful processing, CRING returns the generated Virtual Account number associated with the transaction.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
Successful
| partnerServiceId required | string = 8 characters Partner service ID assigned to the merchant. Must contain 8 characters. | ||||||||||||
| customerNo required | string = 11 characters Unique customer number used as part of the Virtual Account identification. | ||||||||||||
| virtualAccountName required | string <= 30 characters Name of the Virtual Account holder. | ||||||||||||
| virtualAccountEmail | string Email address of the Virtual Account holder. | ||||||||||||
| virtualAccountPhone | string <= 30 characters Phone number of the Virtual Account holder. | ||||||||||||
| trxId | string Transaction ID generated by merchant. | ||||||||||||
| virtualAccountTrxType required | string Identifier virtualAccountTrxType that must be followed:
| ||||||||||||
required | object | ||||||||||||
| expiredDate required | string Expiry date of the Virtual Account in ISO 8601 format. | ||||||||||||
required | object |
{- "partnerServiceId": "07700001",
- "customerNo": "12345678910",
- "virtualAccountName": "John Doe",
- "virtualAccountEmail": "john.doe@mail.com",
- "virtualAccountPhone": "628917457821",
- "trxId": "1122344",
- "virtualAccountTrxType": "C",
- "totalAmount": {
- "value": "100000000.00",
- "currency": "IDR"
}, - "expiredDate": "2026-02-05T21:31:26+07:00",
- "additionalInfo": {
- "bankCode": "200",
- "description": "sample description",
- "payment": "invoiceXgh2477",
- "paymentCode": "sample paycode"
}
}{- "responseCode": "2002700",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "partnerServiceId": "07700001",
- "customerNo": "12345678910",
- "virtualAccountNo": "0770000112345678910",
- "virtualAccountName": "John Doe",
- "virtualAccountEmail": "john.doe@gmail.com",
- "virtualAccountPhone": "6287781721777",
- "trxId": "1122344",
- "totalAmount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "virtualAccountTrxType": "C",
- "expiredDate": "2024-01-01T13:59:59+07:00",
- "additionalInfo": {
- "bankCode": "200",
- "description": "sample description",
- "payment": "invoiceXgh2477",
- "paymentCode": "sample paycode"
}
}
}This service allows merchants to update an existing Virtual Account. It is only applicable to Virtual Accounts that have no successful payment transactions and are still active (not expired).
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerServiceId required | string Partner service ID assigned to the merchant. | ||||||||||||
| customerNo required | string = 11 characters Unique customer number used as part of the Virtual Account identification. | ||||||||||||
| virtualAccountNo required | string Existing Virtual Account Number to be updated. | ||||||||||||
| virtualAccountName required | string <= 30 characters Updated Virtual Account holder name. | ||||||||||||
| trxId required | string Unique transaction identifier. | ||||||||||||
| virtualAccountEmail | string Updated customer email address. | ||||||||||||
| virtualAccountPhone | string Updated customer phone number. | ||||||||||||
| virtualAccountTrxType required | string Enum: "C" "O" "I" Virtual Account transaction type.
| ||||||||||||
required | object | ||||||||||||
| expiredDate required | string Expiry date of the Virtual Account in ISO 8601 format. | ||||||||||||
object Additional partner-specific information. |
{- "partnerServiceId": "12345678",
- "customerNo": "12345678910",
- "virtualAccountNo": "1234567812345678910",
- "virtualAccountName": "John Doe Updated",
- "trxId": "INV-20260630-0001",
- "virtualAccountEmail": "john.updated@example.com",
- "virtualAccountPhone": "6281234567890",
- "virtualAccountTrxType": "C",
- "totalAmount": {
- "value": "300000.00",
- "currency": "IDR"
}, - "expiredDate": "2026-02-05T21:31:26+07:00",
- "additionalInfo": {
- "bankCode": "200",
- "description": "billing payment customer",
- "payment": "bill payment",
- "paymentCode": "BP0001"
}
}{- "responseCode": "2002800",
- "responseMessage": "Request has been processed successfully",
- "virtualAccountData": {
- "partnerServiceId": "12345678",
- "customerNo": "12345678910",
- "virtualAccountNo": "1234567812345678910",
- "virtualAccountName": "John Doe Updated",
- "virtualAccountEmail": "john.updated@example.com",
- "virtualAccountPhone": "6281234567890",
- "trxId": "INV-20260630-0001",
- "totalAmount": {
- "value": "300000.00",
- "currency": "IDR"
}, - "virtualAccountTrxType": "C",
- "expiredDate": "2026-07-02T23:59:59+07:00",
- "lastUpdateDate": "2026-06-30T15:45:03+07:00",
- "additionalInfo": {
- "bankCode": "200",
- "description": "billing payment customer",
- "payment": "bill payment",
- "paymentCode": "BP0001"
}
}
}This service is used by merchants to obtain information from the Virtual Account number that has been created.
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerServiceId required | string = 8 characters Partner service ID assigned to the merchant. |
| customerNo required | string = 11 characters Unique customer number used as part of the Virtual Account identification. |
| virtualAccountNo required | string <= 19 characters Virtual Account number. |
| trxId required | string Unique transaction identifier. |
required | object |
{- "partnerServiceId": "12345678",
- "customerNo": "12345678910",
- "virtualAccountNo": "1234567812345678910",
- "trxId": "1122344",
- "additionalInfo": {
- "bankCode": "200"
}
}{- "responseCode": "2003000",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "partnerServiceId": "12345678",
- "customerNo": "12345678910",
- "virtualAccountNo": "1234567812345678910",
- "virtualAccountName": "John Doe",
- "trxId": "1122344",
- "totalAmount": {
- "value": "100000000.00",
- "currency": "IDR"
}, - "virtualAccountTrxType": "C",
- "expiredDate": "2023-05-24T19:36:00+07:00",
- "additionalInfo": {
- "bankCode": "200",
- "inquiryStatus": "00",
- "statusDescription": "Active",
- "description": "sample description",
- "payment": "invoiceXgh2477",
- "paymentCode": "sample paycode",
- "currentAccountNo": "",
- "paidBill": "0",
- "paymentDate": ""
}
}
}This service is used to only for Virtual Account Credit BANK BNI. This service will be inquire the status and payment details of a BANK BNI Virtual Account using the Virtual Account number.
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerServiceId required | string <= 8 characters Partner service ID assigned to the merchant. |
| customerNo required | string [ 8 .. 20 ] characters Unique customer number used as part of the Virtual Account identification. |
| virtualAccountNo required | string <= 28 characters Virtual Account number consisting of partnerServiceId (8 digits with left-padding space) and customerNo (up to 20 digits). Min Virtual Account length 11 digit and max 28 digit. |
| inquiryRequestId | string <= 128 characters Unique identifier generated from the Inquiry request. Conditional. For use case Bill stored in Partner. If not provided, the API will return an array of transactions based on virtualAccountNo. |
| paymentRequestId | string <= 128 characters Unique identifier generated by the PJP from the Payment request. |
object Additional information for custom use cases that are not provided by SNAP. |
{- "partnerServiceId": "12345678",
- "customerNo": "01234567891011121318",
- "virtualAccountNo": "1234567801234567891011121318",
- "inquiryRequestId": "abcdef-123456-abcdef",
- "paymentRequestId": "abcdef-123456-abcdef",
- "additionalInfo": {
- "trxDateInit": ""
}
}{- "responseCode": "2002600",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "partnerServiceId": "12345678",
- "customerNo": "01234567891011121318",
- "virtualAccountNo": "1234567801234567891011121318",
- "inquiryRequestId": "abcdef-123456-abcdef",
- "paymentRequestId": "abcdef-123456-abcdef",
- "trxDateTime": "2023-07-14T10:39:29+07:00",
- "billDetails": [
- {
- "billCode": "02",
- "billNo": "711429949",
- "billName": "Jean Lueilwitz",
- "billAmount": {
- "value": "100000.00",
- "currency": "IDR"
}
}
], - "additionalInfo": {
- "journalNum": "019043",
- "cumulativePaymentAmount": {
- "value": "725000.00",
- "currency": "IDR"
}
}
}
}This service is used for Virtual Account Credit by merchants to make the Virtual Account status deleted and can no longer be used for payments.
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerServiceId required | string = 8 characters Partner service identifier. |
| customerNo required | string = 11 characters Customer number. |
| virtualAccountNo required | string = 19 characters Virtual Account number. |
| trxId | string Transaction ID generated by the system when the Virtual Account number was created. |
object Additional information for custom use cases that are not provided by SNAP. |
{- "partnerServiceId": "12345678",
- "customerNo": "12345678910",
- "virtualAccountNo": "1234567812345678910",
- "trxId": "1122344",
- "additionalInfo": {
- "bankCode": "200"
}
}{- "responseCode": "2003100",
- "responseMessage": "Successful",
- "virtualAccountData": {
- "partnerServiceId": "12345678",
- "customerNo": "12345678910",
- "virtualAccountNo": "1234567812345678910",
- "trxId": "1122344",
- "additionalInfo": {
- "bankCode": "200"
}
}
}/callback_url = URL in client server
This service will call API client as payment.
Triggered when user pays the bill in bank. CRING will send callback payment notification after VA Paid.
Below request body will be send from CRING related for All Bank.
A notification is considered as success if and only if response from the callback URL indicated HTTP code 200.
CRING will send retry callback up to 5 times for each minutes if HTTP code is not 200.
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerServiceId required | string <= 8 characters Partner service ID assigned to the merchant. Consists of 8 digits with left-padding space. Used together with customerNo or virtualAccountNo. |
| customerNo required | string Unique customer number, min and max length belong to Bank's requirement. Used together with partnerServiceId to identify the Virtual Account. |
| virtualAccountNo required | string Virtual Account number consisting of partnerServiceId, min and max length belong to Bank's requirement. |
| virtualAccountName | string <= 255 characters Customer name. |
| virtualAccountPhone | string <= 30 characters Customer's phone number. Format: 62xxxxxxxxxxxxx. |
| virtualAccountEmail | string <= 255 characters Customer email. |
| trxId | string Transaction identifier generated by the system. |
| paymentRequestId | string <= 128 characters Payment request identifier generated from the Payment request. |
| channelCode | integer Channel code used for the payment transaction. |
| hashedSourceAccountNo | string Hashed source account number used for the payment transaction. |
| sourceBankCode | string Source bank code. |
required | object Paid amount received for the Virtual Account. |
object Total amount from the Inquiry response. | |
| trxDateTime | string <date-time> Date and time of the latest payment. following the ISO-8601 standard. |
| referenceNo | string <= 15 characters Transaction identifier on Service Provider System. |
| journalNum | string <= 6 characters Journal number. |
| flagAdvise | string <= 1 characters Status indicating whether this is a retry notification. |
object Additional information. |
{- "partnerServiceId": "12345678",
- "customerNo": "12345678910",
- "virtualAccountNo": "1234567812345678910",
- "virtualAccountName": "John Doe",
- "virtualAccountPhone": "628917457821",
- "virtualAccountEmail": "john.doe@mail.com",
- "trxId": "1122344",
- "paymentRequestId": "",
- "channelCode": 6011,
- "hashedSourceAccountNo": "00001237",
- "sourceBankCode": "200",
- "paidAmount": {
- "value": "562000.00",
- "currency": "IDR"
}, - "totalAmount": {
- "value": "562000.00",
- "currency": "IDR"
}, - "trxDateTime": "2025-08-18T10:57:15+07:00",
- "referenceNo": "013005",
- "journalNum": "000151",
- "flagAdvise": "N",
- "additionalInfo": {
- "paymentStatus": "Success",
- "deviceId": "123453",
- "channel": "mobilephone"
}
}{- "responseCode": "2002500",
- "responseMessage": "Successful",
- "virtualAccountdata": {
- "partnerServiceId": "12345678",
- "customerNo": "12345678910",
- "virtualAccountNo": "1234567812345678910",
- "virtualAccountName": "John Doe",
- "paymentRequestId": "",
- "partnerReferenceNo": "abcdef-123456-abcdef",
- "trxDateTime": "2025-08-18T10:57:15+07:00",
- "paymentFlagStatus": "00"
}
}QRIS (Quick Response Code Indonesian Standard) — a standardized QR code system mandated by Bank Indonesia to facilitate seamless and interoperable QR-based payments across Indonesia.
This means that merchant QRIS issued via CRING! will be processed through these banks as acquirers, ensuring compatibility with a wide range of customer payment applications and wallets across Indonesia.
CRING! currently supports QRIS acquiring via the following banks:
| Code | Name |
|---|---|
| 008 | BANK MANDIRI |
| 200 | BANK TABUNGAN NEGARA |
| 503 | BANK NATIONAL NOBU |
| Bank | Http Code | Service Code | Case Code | Response Code | Response Message |
|---|---|---|---|---|---|
| Bank BTN, NOBU | 200 | any | 00 | 200XX00 | Successful |
| Bank Mandiri | 200 | any | 00 | 200XX00 | The request is approved. |
| Bank NOBU | 202 | any | 00 | 202XX00 | Request In Progress |
| Bank BTN | 400 | any | 00 | 400XX00 | Bad Request / Parsing Error |
| Bank Mandiri | 400 | any | 00 | 400XX00 | Format Error |
| Bank Mandiri | 400 | any | 00 | 400XX00 | General request failed error, including message parsing failed |
| Bank BTN, NOBU | 400 | any | 01 | 400XX01 | Invalid Field Format |
| Bank Mandiri | 400 | any | 01 | 400XX01 | Invalid Field |
| Bank BTN, NOBU | 400 | any | 02 | 400XX02 | Invalid Mandatory Field |
| Bank Mandiri | 400 | any | 11 | 400XX11 | Message Format Error |
| Bank Mandiri | 400 | any | 14 | 400XX14 | Invalid Field |
| Bank Mandiri | 400 | any | QD | 400XXQD | Invalid Parameter |
| Bank BTN, NOBU | 401 | any | 00 | 401XX00 | Unauthorized |
| Bank Mandiri | 401 | any | 00 | 401XX00 | General Unauthorize |
| Bank BTN, NOBU | 401 | any | 01 | 401XX01 | Invalid Token (B2B) |
| Bank NOBU | 401 | any | 01 | 401XX01 | Access Token Invalid |
| Bank BTN | 401 | any | 02 | 401XX02 | Invalid Customer Token |
| Bank BTN | 401 | any | 03 | 401XX03 | Token Not Found (B2B) |
| Bank BTN | 401 | any | 04 | 401XX04 | Customer Token Not Found |
| Bank BTN | 403 | any | 00 | 403XX00 | Transaction Expired |
| Bank Mandiri | 403 | any | 01 | 403XX01 | Feature Not Allowed |
| Bank Mandiri | 403 | any | 02 | 403XX02 | Exceeds Transaction Amount Limit |
| Bank BTN | 403 | any | 04 | 403XX04 | Activity Count Limit Exceeded |
| Bank BTN | 403 | any | 05 | 403XX05 | Do Not Honor |
| Bank Mandiri | 403 | any | 05 | 403XX05 | Do not Honor |
| Bank NOBU | 403 | any | 03 | 403XX03 | Suspected Fraud |
| Bank NOBU | 403 | any | 06 | 403XX06 | Feature Not Allowed (Cut Off) |
| Bank BTN | 403 | any | 09 | 403XX09 | Dormant Account |
| Bank BTN | 403 | any | 10 | 403XX10 | Need To Set Token Limit |
| Bank BTN | 403 | any | 14 | 403XX14 | Insufficient Funds |
| Bank Mandiri | 403 | any | 14 | 403XX14 | Insufficient Funds |
| Bank BTN | 403 | any | 15 | 403XX15 | Transaction Not Permited |
| Bank BTN | 403 | any | 16 | 403XX16 | Suspend Transaction |
| Bank BTN | 403 | any | 17 | 403XX17 | Token Limit Exceeded |
| Bank BTN | 403 | any | 18 | 403XX18 | Inactive Card/Account/Customer |
| Bank BTN | 403 | any | 21 | 403XX21 | Set Limit Not Allowed |
| Bank BTN | 403 | any | 22 | 403XX22 | Token Limit Invalid |
| Bank NOBU | 403 | 47 | 02 | 4034702 | Exceeds Transaction Amount Limit |
| Bank NOBU | 403 | 47 | 15 | 4034715 | Exceeds QR Validity Time Limit |
| Bank BTN | 404 | any | 00 | 404XX00 | Invalid Transaction Status |
| Bank Mandiri | 404 | any | 00 | 404XX00 | Invalid Transaction |
| Bank BTN | 404 | any | 01 | 404XX01 | Transaction Not Found |
| Bank Mandiri | 404 | any | 01 | 404XX01 | Transaction Not Found |
| Bank BTN | 404 | any | 02 | 404XX02 | Invalid Routing |
| Bank BTN | 404 | any | 03 | 404XX03 | Bank Not Supported By Switch |
| Bank BTN | 404 | any | 04 | 404XX04 | Transaction Cancelled |
| Bank Mandiri | 404 | any | 04 | 404XX04 | Transaction Cancelled |
| Bank BTN | 404 | any | 07 | 404XX07 | Journey Not Found |
| Bank Mandiri | 404 | any | 08 | 404XX08 | Invalid Merchant |
| Bank BTN | 404 | any | 11 | 404XX11 | Invalid Card/Account/Customer info/Virtual Account |
| Bank BTN | 404 | any | 12 | 404XX12 | Invalid Bill/Virtual Account |
| Bank BTN | 404 | any | 13 | 404XX13 | Invalid Amount |
| Bank Mandiri | 404 | any | 13 | 404XX13 | Invalid Amount |
| Bank BTN | 404 | any | 14 | 404XX14 | Paid Bill |
| Bank BTN | 404 | any | 16 | 404XX16 | Partner Not Found |
| Bank Mandiri | 404 | any | 17 | 404XX17 | Terminal Invalid |
| Bank Mandiri | 404 | any | 18 | 404XX18 | Inconsistent Request |
| Bank BTN | 404 | any | 19 | 404XX19 | Invalid Bill/Virtual Account |
| Bank NOBU | 404 | 47 | 13 | 4044713 | Invalid Amount |
| Bank NOBU | 404 | 51 | 01 | 4045101 | Transaction Not Found |
| Bank BTN | 409 | any | 00 | 409XX00 | Conflict |
| Bank BTN | 409 | any | 01 | 409XX01 | Duplicate partnerReferenceNo |
| Bank NOBU | 409 | any | 01 | 409XX01 | Conflict |
| Bank BTN | 429 | any | 00 | 429XX00 | Too Many Requests |
| Bank BTN | 500 | any | 00 | 500XX00 | General Error |
| Bank Mandiri | 500 | any | 00 | 500XX00 | Undefined Error |
| Bank Mandiri | 500 | any | 00 | 500XX00 | General Error |
| Bank NOBU | 500 | any | 00 | 500XX00 | General Error |
| Bank BTN | 500 | any | 01 | 500XX01 | Internal Server Error |
| Bank Mandiri | 500 | any | 01 | 500XX01 | Internal Server Error |
| Bank NOBU | 500 | any | 01 | 500XX01 | Internal Server Error |
| Bank BTN | 500 | any | 02 | 500XX02 | External Server Error |
| Bank Mandiri | 500 | any | 02 | 500XX02 | External Server Error |
| Bank NOBU | 500 | any | 02 | 500XX02 | External Server Error |
| Bank NOBU | 504 | any | 00 | 504XX00 | Timeout |
| Bank Mandiri | 504 | any | 00 | 504XX00 | Timeout Transaction |
Generate QRIS Code is used by merchants to generate a QRIS (Quick Response Code Indonesian Standard) code for accepting payments via supported acquirer banks.
Merchants can initiate a QR code creation request by submitting the required transaction and merchant data.
The generated QR can be either static or dynamic, depending on your business needs and integration setup.
📥 Request Requirements must contain the following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| acquirerCode required | string Acquirer Code for BANK BTN is |
| type required | string QR Type. Only accepted D for Dynamic dan S for Static. Bank BTN accepted type D or S |
required | object |
| terminalId | string <= 16 characters Optional for BANK BTN. Terminal Id for QR Dynamic If there is no request value, it will automatically be generated from the system as A01 and for QR static will be generated as auto increment value start from 001, 002, etc. |
| channelName | string Optional. Channel name only accepted for Bank BTN. |
| tipType | string Optional. Type of Tip, value must be "01" for apps request customer filled tip amount, "02" for QR set fixed tip amount or "03" for QR set tip amount on percentage. |
| tipValue | string Optional. Amount of tip, this field will be mandatory if tipType was filled with "02" or "03". If tipType "02" then must be filled with amount follow rules of tip_type use 2 digits behind dot. |
| additionalInfo | string Optional Additional Info. Max length 100 characters. |
{- "acquirerCode": "200",
- "type": "D",
- "amount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "terminalId": "A01",
- "channelName": "API",
- "tipType": "02",
- "tipValue": "1000.00",
- "additionalInfo": "Additional Info"
}{- "responseCode": "2004700",
- "responseMessage": "Successful",
- "partnerReferenceNo": "2020102900000000000001",
- "referenceNo": "2020102977770000000009",
- "qrCode": "00020101021226650013ID.CO.BTN.WWW0118936002001559920025021541123455992 \r\n00250303UKE51440014ID.CO.QRIS.WWW0215ID20222215193350303UKE52045992535100 \r\n005802ID5914AmandaFlorist6008SURABAYA61056018662120948800703A016304B0 D1",
- "merchantName": "PT Maju Jaya",
- "terminalId": "A01"
}This service used by merchant to check payment status QR based on reference number.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| acquirerCode required | string Acquirer Code. Refer to Acquirer Code (Acquirer Code). |
| partnerReferenceNo required | string Partner Reference Number from generate QR. |
| referenceNo | string Reference Number from generate QR. |
{- "acquirerCode": "200",
- "partnerReferenceNo": "2020102900000000000001",
- "referenceNo": "2020102977770000000009"
}{- "responseCode": "2005100",
- "responseMessage": "Successful",
- "partnerReferenceNo": "2020102900000000000001",
- "referenceNo": "2020102977770000000009",
- "transactionStatusDesc": "success",
- "paidTime": "2020-10-20T17:56:57+07:00",
- "amount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "additionalInfo": {
- "customerNumber": "9595610000004712",
- "merchantId": "00007100010926",
- "issuerName": "BTN",
- "customerName": "John",
- "merchantPAN": "19007100010926"
}
}This endpoint is used to receive webhook notifications from CRING! when a customer client makes a payment via QRIS. The webhook is triggered when the payment is processed by the bank and forwarded to the client's system. The notification is considered successful only if the response returned to CRING! has a HTTP code of 200.
If the response does not return HTTP code 200, CRING! will retry sending the notification up to 5 times, with an interval of 1 minute between each attempt.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| transactionId | string Transaction id. Optional field to identify transaction. |
| originalReferenceNo | string Reference Number. A unique number has been generated from BANK. |
| originalPartnerReferenceNo required | string A unique number generated by CRING! when the QR is created. This reference number is used to track the transaction from the moment the QR code is generated until the payment notification is received. Ensure to store this reference securely, as it will be included in the webhook notification when the payment is processed. |
| latestTransactionStatus | string Transaction status code |
| transactionStatusDesc | string Transaction status description |
| customerNumber | string Customer number |
| accountType | string Account Type of Client |
object | |
object |
{- "transactionId": "cb267ae5-4e9c-4a08-9a88-b031f1bddcff",
- "originalReferenceNo": "2020102977770000000009",
- "originalPartnerReferenceNo": "2020102900000000000001",
- "latestTransactionStatus": "00",
- "transactionStatusDesc": "success",
- "customerNumber": "93600911372344659",
- "accountType": "Savings Account",
- "amount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "additionalInfo": {
- "referenceId": "3714130924",
- "merchantId": "00007100010926",
- "terminalId": "213141251124",
- "issuerName": "BTN",
- "customerName": "John",
- "merchantPAN": "19007100010926"
}
}{- "responseCode": "20000",
- "responseMessage": "Successful"
}The QRIS API enables Partners to generate Merchant Presented Mode (MPM) QR codes, query payment status, and receive payment notifications through the SNAP interface. The API supports secure QRIS payment processing by validating requests, processing payment transactions, and providing transaction status updates in accordance with the SNAP standard.
| Service Code | Service |
|---|---|
| 47 | Generate QR MPM |
| 51 | Query Payment |
| 52 | Payment Notification QR |
| HTTP Code | Response Message | Description | Service Code |
|---|---|---|---|
| 200 | Successful | Request processed successfully. | All |
| 202 | Request In Progress | Request is still being processed asynchronously. | 47, 51, 52 |
| 400 | Bad Request | Invalid request or failed message parsing. | All |
| 400 | Invalid Field Format {fieldName} |
One or more fields have an invalid format. | All |
| 400 | Invalid Mandatory Field {fieldName} |
Required field is missing or invalid. | All |
| 401 | Unauthorized | Authentication or authorization failed. | All |
| 401 | Invalid Token (B2B) | Access token is invalid or has expired. | All |
| 401 | Token Not Found (B2B) | Access token cannot be found. | All |
| 403 | Transaction Expired | QR transaction has expired before completion. | 47, 51 |
| 403 | Exceeds Transaction Amount Limit | Payment amount exceeds the allowed limit. | 47 |
| 403 | Suspected Fraud | Transaction is suspected to be fraudulent. | 47, 52 |
| 403 | Activity Count Limit Exceeded | Transaction frequency limit exceeded. | All |
| 403 | Do Not Honor | Transaction is declined by the issuer. | 52 |
| 403 | Insufficient Funds | Customer has insufficient balance. | 52 |
| 403 | Transaction Not Permitted | QR payment is not permitted. | 47, 52 |
| 403 | Suspend Transaction | Transaction has been suspended. | 47, 51, 52 |
| 403 | Merchant Blacklisted | Merchant is suspended from accessing the API. | All |
| 403 | Merchant Limit Exceed | Merchant transaction limit exceeded. | 47 |
| 403 | Account Limit Exceed | Customer account transaction limit exceeded. | 52 |
| 404 | Invalid Transaction Status | Transaction status is invalid for the requested operation. | 51, 52 |
| 404 | Transaction Not Found | QR transaction cannot be found. | 51, 52 |
| 404 | Transaction Cancelled | Transaction has been cancelled by the customer. | 51, 52 |
| 404 | Invalid Merchant | Merchant does not exist or is inactive. | All |
| 404 | Invalid Card/Account/Customer | Customer account is invalid or unavailable. | 52 |
| 404 | Invalid Amount | Payment amount is invalid. | 47 |
| 404 | Partner Not Found | Partner identifier cannot be found. | All |
| 404 | Inconsistent Request | Request parameters are inconsistent with an existing transaction. | 47, 51 |
| 405 | Requested Function Is Not Supported | Requested operation is not supported. | All |
| 409 | Conflict | Duplicate X-EXTERNAL-ID within the same day. |
All |
| 409 | Duplicate Partner Reference Number | The transaction with the same partnerReferenceNo has already been processed successfully. |
47 |
| 429 | Too Many Requests | Rate limit exceeded. | All |
| 500 | General Error | Unexpected system error. | All |
| 500 | Internal Server Error | Internal server failure occurred. | All |
| 500 | External Server Error | External dependency failure occurred. | All |
| 504 | Timeout | Timeout occurred while communicating with the downstream system. | All |
This service is used by the merchant to generate a QRIS QR Code in Merchant Presented Mode (MPM) format, following the SNAP (Standar Nasional Open API Pembayaran) standard issued by Bank Indonesia and governed by ASPI (Asosiasi Sistem Pembayaran Indonesia).
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerReferenceNo required | string <= 64 characters Unique transaction reference number generated by the partner system. Max 64 characters. Must match X-EXTERNAL-ID header. |
required | object Required when additionalInfo.type is "D" (Dynamic QR). Not required for Static QR. |
| terminalId | string <= 16 characters Optional for BANK BTN. Terminal Id for QR Dynamic If there is no request value, it will automatically be generated from the system as A01 and for QR static will be generated as auto increment value start from 001, 002, etc.. |
| validityPeriod | string QR code expiration date and time in ISO-8601 format. |
required | object |
{- "partnerReferenceNo": "2025102900000000000001",
- "amount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "terminalId": "001",
- "validityPeriod": "2025-07-03T12:08:56+07:00",
- "additionalInfo": {
- "acquirerCode": "200",
- "type": "D",
- "channel": "API",
- "tipType": "02",
- "tipValue": "1000.00"
}
}{- "responseCode": "2004700",
- "responseMessage": "Successful",
- "referenceNo": "2020102977770000000009",
- "partnerReferenceNo": "2020102900000000000001",
- "qrContent": "00020101021226650013ID.CO.BTN.WWW0118936002001559920025021541123455992 \r\n00250303UKE51440014ID.CO.QRIS.WWW0215ID20222215193350303UKE52045992535100 \r\n005802ID5914AmandaFlorist6008SURABAYA61056018662120948800703A016304B0 D1",
- "merchantName": "PT Maju Jaya",
- "terminalId": "A01"
}Endpoint to inquire the status of a QRIS MPM payment transaction. This API follows the SNAP ASPI (BI SNAP) standard with Service Code 51.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| originalReferenceNo | string <= 64 characters Reference Number. A unique number has been generated from BANK. |
| originalPartnerReferenceNo required | string <= 64 characters A unique number generated by CRING! when the QR is created. This reference number is used to track the transaction from the moment the QR code is generated until the payment notification is received. Ensure to store this reference securely, as it will be included in the webhook notification when the payment is processed. |
| serviceCode required | string SNAP Service Code. Must be "47" for QR MPM inquiry. |
required | object |
{- "originalReferenceNo": "2020102977770000000009",
- "originalPartnerReferenceNo": "2020102900000000000001",
- "serviceCode": "47",
- "additionalInfo": {
- "acquirerCode": "200",
- "deviceId": "",
- "channel": "API"
}
}{- "responseCode": "2005100",
- "responseMessage": "Successful",
- "originalPartnerReferenceNo": "2020102900000000000001",
- "originalReferenceNo": "2020102977770000000009",
- "serviceCode": "47",
- "latestTransactionStatus": "00",
- "transactionStatusDesc": "success",
- "paidTime": "2020-10-20T17:56:57+07:00",
- "amount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "additionalInfo": {
- "deviceId": "",
- "channel": ""
}
}This endpoint is called by CRING to notify the merchant system about the latest status of a QRIS MPM transaction. The merchant system must respond with an acknowledgement.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| originalPartnerReferenceNo | string Partner Reference Number. A unique number has been generated from CRING. |
| originalReferenceNo | string Reference Number. A unique number has been generated from BANK. |
| latestTransactionStatus | string Current status of the transaction. |
| transactionStatusDesc | string Transaction Status Description |
| customerNumber | string Customer's phone number or identifier |
| accountType | string Type of customer account (e.g. tabungan) |
object | |
object |
{- "originalPartnerReferenceNo": "2020102900000000000001",
- "originalReferenceNo": "2020102977770000000009",
- "latestTransactionStatus": "00",
- "transactionStatusDesc": "success",
- "customerNumber": "6281388370001",
- "accountType": "tabungan",
- "amount": {
- "value": "350000.00",
- "currency": "IDR"
}, - "additionalInfo": {
- "deviceId": "",
- "channel": "API",
- "referenceId": "3714130924",
- "merchantId": "00007100010926",
- "terminalId": "213141251124",
- "issuerName": "BTN",
- "customerName": "John Doe",
- "merchantPAN": "19007100010926"
}
}{- "responseCode": "2005200",
- "responseMessage": "Successful",
- "additionalInfo": {
- "deviceId": "",
- "channel": ""
}
}CRING! supports Transfer transactions via:
This feature allows partners to send funds securely and efficiently through the CRING! system.
Transfer can be executed manually through the CRING! portal. Use case:
Transfer can be executed via API. Use case:
All transfer requests require:
This section provides the list of bank identifiers and routing codes used for interbank transfer transactions.
| Field | Description |
|---|---|
Bank Code |
A 3-digit national bank code used to identify the destination bank. Examples: 008 (Bank Mandiri), 014 (BCA), 009 (BNI). |
SKN Code |
Bank routing code used for transactions processed through the SKNBI (Sistem Kliring Nasional Bank Indonesia) network. |
RTGS |
Bank routing code used for transactions processed through the RTGS (Real Time Gross Settlement) network. |
| Bank Name | Bank Code | SKN Code | RTGS |
|---|---|---|---|
| PT BANK RAKYAT INDONESIA (Persero) Tbk | 002 | 0020307 | BRINIDJA |
| PT BANK NEGARA INDONESIA 1946 (Persero) Tbk | 009 | 0090010 | BNINIDJA |
| PT BANK MANDIRI (Persero) Tbk | 008 | 0080017 | BMRIIDJA |
| PT. BANK OCBC NISP TBK UNIT USAHA SYARIAH | 028 | 0289928 | SYONIDJ1 |
| PT BANK CIMB NIAGA TBK - UUS | 022 | 0229920 | SYNAIDJ1 |
| PT BANK DANAMON INDONESIA Tbk - UUS | 011 | 0119920 | SYBDIDJ1 |
| PT BANK PERMATA Tbk - UUS | 013 | 0139926 | SYBBIDJ1 |
| STANDARD CHARTERED BANK | 050 | 0500306 | SCBLIDJX |
| PT. BANK RABOBANK INTERNATIONAL INDONESIA | 089 | 0890016 | RABOIDJA |
| PT PAN INDONESIA BANK TBK | 019 | 0190017 | PINBIDJA |
| PT BANK OCBC NISP Tbk | 028 | 0280024 | NISPIDJA |
| PT. BANK MIZUHO INDONESIA | 048 | 0480303 | MHCCIDJA |
| PT BANK CHINA CONSTRUCTION BANK INDONESIA | 036 | 0360300 | MCORIDJA |
| PT. BANK MAYAPADA | 097 | 0970017 | MAYAIDJA |
| PT BANK MAYBANK INDONESIA TBK | 016 | 0160131 | IBBKIDJA |
| THE HONGKONG AND SHANGHAI BC | 087 | 0870010 | HSBCIDJA |
| DEUTSCHE BANK AG | - | 0670304 | DEUTIDJA |
| PT. BANK DBS INDONESIA | 046 | 0460307 | DBSBIDJA |
| CITIBANK | 031 | 0310305 | CITIIDJX |
| PT. BANK JTRUST | 095 | 0950011 | CICTIDJA |
| JPMORGAN CHASE BANK, NA | - | 0320308 | CHASIDJX |
| PT BANK CENTRAL ASIA Tbk | 014 | 0140397 | CENAIDJA |
| PT. BANK RESONA PERDANIA | 047 | 0470300 | BPIAIDJA |
| THE BANK OF TOKYO MITSUBISHI UFJ LTD. | 042 | 0420305 | BOTKIDJX |
| BANK OF AMERICA , NA | 033 | 0330301 | BOFAID2X |
| PT. BANK BNP PARIBAS INDONESIA | 057 | 0570307 | BNPAIDJA |
| PT BANK CIMB NIAGA TBK | 022 | 0220026 | BNIAIDJA |
| THE BANGKOK BANK PCL | - | 0400309 | BKKBIDJA |
| BANK OF CHINA LIMITED | 069 | 0690300 | BKCHIDJA |
| PT BANK DANAMON INDONESIA Tbk | 011 | 0110042 | BDINIDJA |
| PT. BANK CAPITAL INDONESIA | 054 | 0540308 | BCIAIDJA |
| PT BANK UOB INDONESIA | 023 | 0230016 | BBIJIDJA |
| PT BANK PERMATA Tbk | 013 | 0130475 | BBBAIDJA |
| PT. BANK BUMI ARTA | 076 | 0760010 | BBAIIDJA |
| ARTHA GRAHA | 037 | 0370028 | ARTGIDJA |
| PT BANK ARTA NIAGA KENCANA | 020 | 0200033 | - |
| PT. ANZ PANIN BANK | 061 | 0610306 | ANZBIDJX |
| PT. BANK ANTAR DAERAH | 088 | 0880055 | ANTDIDJD |
| ABN AMRO BANK NV. | 052 | 0520302 | ABNAIDJA |
| PT. BANK IFI SYARIAH | 093 | 0930031 | - |
| PT. BANK IFI | 093 | 0930015 | - |
| BANK NEO COMMERCE | 490 | 4900012 | YUDBIDJ1 |
| PT. BANK VICTORIA INTERNATIONAL | 566 | 5660018 | VICTIDJ1 |
| PT. BANK PEMBANGUNAN DAERAH DIY SYARIAH | 112 | 1129922 | SYYKIDJ1 |
| PT. BPD SULAWESI SELATAN DAN SULAWESI BARAT UNIT USAHA SYARIAH | 126 | 1269947 | SYWSIDJ1 |
| PT. BANK SINARMAS UNIT USAHA SYARIAH | 153 | 1539923 | SYTBIDJ1 |
| PT. BANK PEMBANGUNAN DAERAH SUMUT | 117 | 1179927 | SYSUIDJ1 |
| PT. BPD SUMATERA SELATAN DAN BANGKA BELITUNG UNIT USAHA SYARIAH | 120 | 1209923 | SYSSIDJ1 |
| PT BANK NAGARI UUS | 118 | 1189933 | SYSBIDJ1 |
| PT.BANK PEMBANGUNAN DAERAH KALTIM SYARIAH | 124 | 1249925 | SYKTIDJ1 |
| PT BANK PEMBANGUNAN DAERAH KALIMANTAN SELATAN SYARIAH | 122 | 1229929 | SYKSIDJ1 |
| PT.BPD KALIMANTAN BARAT UNIT USAHA SYARIAH | 123 | 1239922 | SYKBIDJ1 |
| PT. BANK JAWA TIMUR UUS | 114 | 1149928 | SYJTIDJ1 |
| PT. BPD JAWA TENGAH UNIT USAHA SYARIAH | 113 | 1139925 | SYJGIDJ1 |
| PT. BANK JABAR BANTEN UUS | 425 | 4250018 | SYJBIDJ1 |
| PT. BANK PEMBANGUNAN DAERAH DKI JAKARTA SYARIAH | 111 | 1119916 | SYDKIDJ1 |
| PT. BANK TABUNGAN NEGARA (Persero) SYARIAH | 200 | 2009928 | SYBTIDJ1 |
| PT. BPD ISTIMEWA ACEH SYARIAH | 116 | 1169924 | SYACIDJ1 |
| PT. BANK SYARIAH VICTORIA | 405 | 4050072 | SWAGIDJ1 |
| PT. BANK TABUNGAN PENSIUNAN NASIONAL Tbk | 213 | 2130017 | SUNIIDJA |
| PT BANK SEABANK INDONESIA TBK | 535 | 5350014 | SSPIIDJA |
| PT BANK MANDIRI TASPEN | 564 | 5640012 | SIHBIDJ1 |
| PT. BANK KB BUKOPIN SYARIAH | 521 | 5210031 | SDOBIDJ1 |
| PT. BANK SINARMAS | 153 | 1530016 | SBJKIDJA |
| BANK SAHABAT SAMPOERNA | 523 | 5230011 | SAHMIDJA |
| PT BANK BTPN SYARIAH | 547 | 5470017 | PUBAIDJ1 |
| PT.PRIMA MASTER BANK | 520 | 5200012 | PMASIDJ1 |
| PT. BANK PEMBANGUNAN DAERAH DIY | 112 | 1120015 | PDYKIDJ1 |
| PT. BANK PEMBANGUNAN SULAWESI UTARA | 127 | 1270017 | PDWUIDJ1 |
| PT. BANK SULSELBAR | 126 | 1260027 | PDWSIDJA |
| PT.BANK PEMBANGUNAN DAERAH SULAWESI TENGGARA | 135 | 1350018 | PDWRIDJ1 |
| PT.BANK PEMBANGUNAN DAERAH SULAWESI TENGAH | 134 | 1340015 | PDWGIDJ1 |
| PT. BANK PEMBANGUNAN DAERAH SUMUT | 117 | 1170010 | PDSUIDJ1 |
| PT. BANK NAGARI | 118 | 1180013 | PDSBIDJ1 |
| PT.BANK PEMBANGUNAN DAERAH RIAU | 119 | 1190016 | PDRIIDJA |
| BANK PEMBANGUNAN DAERAH NUSA TENGGARA TIMUR | 130 | 1300013 | PDNTIDJA |
| PT. BANK PEMBANGUNAN DAERAH NTB | 128 | 1280010 | PDNBIDJ1 |
| PT.BANK PEMBANGUNAN DAERAH MALUKU | 131 | 1310016 | PDMLIDJ1 |
| PT.BANK PEMBANGUNAN DAERAH LAMPUNG | 121 | 1210051 | PDLPIDJ1 |
| PT.BANK PEMBANGUNAN DAERAH KALIMANTAN TIMUR | 124 | 1240018 | PDKTIDJ1 |
| PT BANK PEMBANGUNAN DAERAH KALIMANTAN SELATAN | 122 | 1220012 | PDKSIDBB |
| PT. BANK PEMBANGUNAN DAERAH KALTENG | 125 | 1250011 | PDKGIDJ1 |
| PT.BANK PEMBANGUNAN DAERAH KALIMANTAN BARAT | 123 | 1230015 | PDKBIDJ1 |
| PT. BANK PEMBANGUNAN JAWA TIMUR | 114 | 1140383 | PDJTIDJ1 |
| PT.BANK PEMBANGUNAN DAERAH JAMBI | 115 | 1150014 | PDJMIDJ1 |
| PT. BANK PEMBANGUNAN DAERAH JAWA TENGAH | 113 | 1130348 | PDJGIDJ1 |
| Bank BJB | 110 | 1100019 | PDJBIDJA |
| PT.BANK PEMBANGUNAN DAERAH PAPUA | 132 | 1320019 | PDIJIDJ1 |
| PT. BPD BENGKULU | 133 | 1330012 | PDBKIDJ1 |
| PT. BANK PEMBANGUNAN DAERAH BANTEN, TBK | 137 | 1370014 | PDBBIDJ1 |
| PT. BANK PEMBANGUNAN DAERAH ISTIMEWA ACEH | 116 | 1160017 | PDACIDJ1 |
| PT. BANK NUSANTARA PARAHYANGAN | 145 | 1450015 | NUPAIDJ6 |
| PT BANK ALADIN SYARIAH TBK | 947 | 9470301 | NETBIDJA |
| PT. BANK MUAMALAT INDONESIA | 147 | 1470011 | MUABIDJA |
| PT. BANK MITRANIAGA | - | 4910015 | MGABIDJ1 |
| PT. BANK MEGA Tbk. | 426 | 4260121 | MEGAIDJA |
| PT BANK SHINHAN INDONESIA | 152 | 1520013 | MEEKIDJ1 |
| PT. BANK MESTIKA DHARMA | 151 | 1510049 | MEDHIDS1 |
| PT. BANK MAYBANK SYARIAH INDONESIA | 16 | 9470301 | MBBEIDJA |
| PT. BANK MASPION INDONESIA | 157 | 1570018 | MASDIDJ1 |
| PT. BANK AMAR INDONESIA, TBK | 531 | 5310012 | LOMAIDJ1 |
| PT. Bank OKE Indonesia, Tbk | 526 | 5260010 | LMANIDJ1 |
| PT. BANK NATIONALNOBU | 503 | 5030017 | LFIBIDJ1 |
| PT. BANK JASA JAKARTA | 472 | 4720014 | JSABIDJ1 |
| PT BANK JAGO TBK | 542 | 5420012 | JAGBIDJA |
| PT. BANK INDOMONEX | 498 | 4980016 | IDMOIDJ1 |
| PT. BANK ICBC INDONESIA | 164 | 1640061 | ICBKIDJA |
| PT BANK IBK INDONESIA TBK | 945 | 9450305 | IBKOIDJA |
| PT. BANK INA PERDANA | 513 | 5130014 | IAPTIDJA |
| PT ALLO BANK INDONESIA TBK | 567 | 5670011 | HRDAIDJ1 |
| PT. BANK KEB HANA INDONESIA | 484 | 4840017 | HNBNIDJA |
| PT. BANK HIBANK INDONESIA | 553 | 5530012 | HBNIIDJA |
| PT. BANK GANESHA | 161 | 1610017 | GNESIDJA |
| PT. BANK FAMA INTERNATIONAL | - | 5620029 | FAMAIDJ1 |
| PT. BANK CHINATRUST INDONESIA | 949 | 9490307 | CTCBIDJA |
| PT. BANK SYARIAH MEGA INDONESIA | 506 | 5060016 | BUTGIDJ1 |
| PT. KROM BANK INDONESIA TBK | 459 | 4590011 | BUSTIDJ1 |
| PT. BANK MNC INTERNATIONAL Tbk. | 485 | 4850010 | BUMIIDJA |
| PT. BANK TABUNGAN NEGARA (Persero) | 200 | 2000150 | BTANIDJA |
| PT.BANK BCA SYARIAH | 536 | 5360017 | BSYAIDJA |
| PT. BANK PEMBANGUNAN DAERAH SUMATERA SELATAN | 120 | 1200016 | BSSPIDSP |
| PT. BANK SYARIAH INDONESIA | 451 | 4510017 | BSMDIDJA |
| PT BANK WOORI SAUDARA INDONESIA 1906 | 212 | 2120027 | BSDRIDJA |
| PT. BANK MULTIARTA SENTOSA | 548 | 5480010 | BMSEIDJA |
| PT BANK OF INDIA INDONESIA TBK | 146 | 1460047 | BKIDIDJA |
| PT. BANK INDEX SELINDO | 555 | 5550018 | BIDXIDJA |
| PT. BANK COMMONWEALTH | 950 | 9500307 | BICNIDJA |
| PT. BANK PEMBANGUNAN DAERAH DKI JAKARTA | 111 | 1110012 | BDKIIDJ1 |
| PT. BANK KB BUKOPIN TBK | 441 | 4410010 | BBUKIDJA |
| PT BANK DIGITAL BCA | 501 | 5010011 | BBLUIDJA |
| PT. QNB INDONESIA | 167 | 1670015 | AWANIDJA |
| PT. BANK PANIN DUBAI SYARIAH | 517 | 5170016 | ARFAIDJ1 |
| PT BANK RAKYAT INDONESIA AGRONIAGA TBK | 494 | 4940014 | AGTBIDJA |
| PT. BANK PEMBANGUNAN DAERAH BALI | 129 | 1290013 | ABALIDBS |
The Transfer API enables Merchants to perform secure fund transfer transactions. The API supports account inquiry, transfer initiation, transfer authorization, and transaction status inquiry for both intra-bank and interbank transfers.
| Bank | Http Code | Service Code | Case Code | Response Code | Response Message |
|---|---|---|---|---|---|
| Bank BNI | 200 | 15 | 00 | 2001500 | Successful (Internal Account Inquiry) |
| Bank BNI | 200 | 16 | 00 | 2001600 | Successful (External Account Inquiry) |
| Bank BNI | 200 | 17 | 00 | 2001700 | Successful (Transfer Intrabank) |
| Bank BNI | 200 | 18 | 00 | 2001800 | Successful (Transfer Interbank) |
| Bank BNI | 200 | 22 | 00 | 2002200 | Successful (Transfer RTGS) |
| Bank BNI | 200 | 23 | 00 | 2002300 | Successful (Transfer SKNBI) |
| Bank BNI | 200 | 36 | 00 | 2003600 | Successful (Transaction Status Inquiry) |
| Bank BNI | 400 | 15 | 01 | 4001501 | Invalid Fieldname Format (Internal Account Inquiry) |
| Bank BNI | 400 | 16 | 01 | 4001601 | Invalid Fieldname Format (External Account Inquiry) |
| Bank BNI | 400 | 17 | 01 | 4001701 | Invalid Fieldname Format (Transfer Intrabank) |
| Bank BNI | 400 | 18 | 01 | 4001801 | Invalid Fieldname Format (Transfer Interbank) |
| Bank BNI | 400 | 22 | 01 | 4002201 | Invalid Fieldname Format (Transfer RTGS) |
| Bank BNI | 400 | 23 | 01 | 4002301 | Invalid Fieldname Format (Transfer SKNBI) |
| Bank BNI | 400 | 36 | 01 | 4003601 | Invalid Fieldname Format (Transaction Status Inquiry) |
| Bank BNI | 400 | 00 | 02 | 4000002 | Invalid Mandatory Field (Balance Inquiry) |
| Bank BNI | 400 | 14 | 02 | 4001402 | Invalid Mandatory Field (Bank Statement) |
| Bank BNI | 400 | 15 | 02 | 4001502 | Invalid Mandatory Field (Internal Account Inquiry) |
| Bank BNI | 400 | 16 | 02 | 4001602 | Invalid Mandatory Field (External Account Inquiry) |
| Bank BNI | 400 | 17 | 02 | 4001702 | Invalid Mandatory Field (Transfer Intrabank) |
| Bank BNI | 400 | 18 | 02 | 4001802 | Invalid Mandatory Field (Transfer Interbank) |
| Bank BNI | 400 | 22 | 02 | 4002202 | Invalid Mandatory Field (Transfer RTGS) |
| Bank BNI | 400 | 23 | 02 | 4002302 | Invalid Mandatory Field (Transfer SKNBI) |
| Bank BNI | 400 | 36 | 02 | 4003602 | Invalid Mandatory Field (Transaction Status Inquiry) |
| Bank BNI | 401 | any | 00 | 401XX00 | Unauthorized IP Address (Any Service) |
| Bank BNI | 403 | 15 | 09 | 4031509 | Dormant Account (Internal Account Inquiry) |
| Bank BNI | 403 | 15 | 16 | 4031516 | Suspend Transaction (Internal Account Inquiry) |
| Bank BNI | 403 | 15 | 18 | 4031518 | Inactive Card/Account/Customer (Internal Account Inquiry) |
| Bank BNI | 403 | 17 | 14 | 4031714 | Insufficient Funds (Intrabank Transfer) |
| Bank BNI | 403 | 17 | 16 | 4031716 | Suspend Transaction (Intrabank Transfer) |
| Bank BNI | 403 | 18 | 14 | 4031814 | Insufficient Funds (Interbank Transfer) |
| Bank BNI | 403 | 18 | 16 | 4031816 | Suspend Transaction (Interbank Transfer) |
| Bank BNI | 403 | 22 | 06 | 4032206 | Feature Not Allowed At This Time (RTGS Transfer) |
| Bank BNI | 403 | 22 | 14 | 4032214 | Insufficient Funds (RTGS Transfer) |
| Bank BNI | 403 | 22 | 16 | 4032216 | Suspend Transaction (RTGS Transfer) |
| Bank BNI | 403 | 23 | 06 | 4032306 | Feature Not Allowed At This Time (SKNBI Transfer) |
| Bank BNI | 403 | 23 | 14 | 4032314 | Insufficient Funds (SKNBI Transfer) |
| Bank BNI | 403 | 23 | 16 | 4032316 | Suspend Transaction (SKNBI Transfer) |
| Bank BNI | 403 | 17 | 15 | 4031715 | Transaction Not Permitted (Intrabank Transfer) |
| Bank BNI | 403 | 36 | 15 | 4033615 | Transaction Not Permitted (Transaction Status Inquiry) |
| Bank BNI | 403 | 36 | 16 | 4033616 | Suspend Transaction (Transaction Status Inquiry) |
| Bank BNI | 404 | 15 | 11 | 4041511 | Invalid Card/Account/Customer (Internal Account Inquiry) |
| Bank BNI | 404 | 17 | 00 | 4041700 | Invalid Transaction Status (Intrabank Transfer) |
| Bank BNI | 404 | 17 | 14 | 4041714 | Paid Bill (Intrabank Transfer) |
| Bank BNI | 404 | 18 | 00 | 4041800 | Invalid Transaction Status (Interbank Transfer) |
| Bank BNI | 404 | 22 | 14 | 4042214 | Paid Bill (RTGS Transfer) |
| Bank BNI | 404 | 23 | 00 | 4042300 | Invalid Transaction Status (SKNBI Transfer) |
| Bank BNI | 404 | 36 | 01 | 4043601 | Transaction Not Found (Transaction Status Inquiry) |
| Bank BNI | 404 | 36 | 13 | 4043613 | Invalid Amount (Transaction Status Inquiry) |
This service is used to perform account inquiry before request transfer.
It allows merchants to check the validity of a beneficiary account number, either through internal inquiry / BNI account number (if bankCode is not provided) or external inquiry / another BNI account number (if bankCode is provided).
The generated inquiryId from this API must be used as the key reference in the transfer request, ensuring that the transfer is based on validated inquiry data.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| accountNo required | string Account Number that used to be beneficiary transfer. |
| bankCode | string
For another beneficary bank code then can be filled with bank code from Bank Code For BI-Fast, Kliring and RTGS, bankCode can be filled with below code from BI-Fast, Kliring and RTGS example: when transfer type |
{- "accountNo": "115471119",
- "bankCode": "014"
}{- "responseCode": "2001100",
- "responseMessage": "Successful",
- "inquiryId": "1ce4a232-a2d7-4bb9-8049-7a7dcc880733",
- "referenceNo": "2020102977770000000009",
- "partnerReferenceNo": "202401110000000000076",
- "accountNo": "0115476117",
- "accountName": "Yories Yolanda",
- "bankCode": "002",
- "bankName": "Bank BRI",
- "currency": "IDR",
- "additionalInfo": {
- "accountType": "DEP",
- "accountCurrency": "IDR",
- "accountBalance": 64479037738,
- "customerName": "Bpk SEGAF ALKAFF",
- "status": "BUKA"
}
}This API is used by merchants or clients to initiate a fund transfer request. The source of fund transfer must be from your corporate's own deposit account that filled on onboarding form.
The beneficiary may be any account within any Bank. In return merchant will get status.
Supported transfer types:
intrabank → within the same bank BNI between source account and beneficiary account
interbank → between different bank between source account and beneficiary account
bifast → instant payment network
rtgs → large-value clearing system
sknbi → national clearing system
Depending on the client onboarding configuration, the transfer process can:
Require code OTP approval (two-step process: generate code OTP → approve), or
Be executed directly without code OTP.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| inquiryId required | string Unique ID generated from inquiry account. Must be used as reference for the request transfer process. |
| type required | string When using intrabank or beneficary bank is |
| beneficiaryAccountNo required | string Account Number that used to be beneficiary transfer. |
object | |
| remark | string Description for transfer. |
{- "inquiryId": "1ce4a232-a2d7-4bb9-8049-7a7dcc880733",
- "type": "intrabank",
- "beneficiaryAccountNo": "115471119",
- "amount": {
- "value": "10000",
- "currency": "IDR"
}, - "remark": "Payment for billing"
}{- "responseCode": "2001700",
- "responseMessage": "Successful",
- "requestId": "65e66257-a530-41e2-bb36-9a47858f5602",
- "statusRequest": "Need Approval With Code"
}The Inquiry Transfer Status API is used to check the latest transaction status of a previously initiated transfer.
This endpoint helps merchants or integrated systems verify whether a transfer has been successfully processed, is still pending, or has failed.
It is especially useful for reconciling payment records, ensuring transaction traceability, and handling asynchronous notifications or timeouts from the network.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| partnerReferenceNo required | string Unique reference number generated by CRING during the transfer request. Used to identify the transaction. |
| referenceNo | string Internal reference number generated by the system during the transfer process. Optional if partnerReferenceNo is provided. |
{- "partnerReferenceNo": "202412171647300092",
- "referenceNo": "389319"
}{- "responseCode": "2001100",
- "responseMessage": "Successful",
- "inquiryId": "1ce4a232-a2d7-4bb9-8049-7a7dcc880733",
- "referenceNo": "2020102977770000000009",
- "partnerReferenceNo": "202401110000000000076",
- "accountNo": "0115476117",
- "accountName": "Yories Yolanda",
- "bankCode": "002",
- "bankName": "Bank BRI",
- "currency": "IDR",
- "additionalInfo": {
- "accountType": "DEP",
- "accountCurrency": "IDR",
- "accountBalance": 64479037738,
- "customerName": "Bpk SEGAF ALKAFF",
- "status": "BUKA"
}
}This service is used to generate a code or One-Time Password (OTP) required to approve transfer.
The OTP serves as an additional layer of security to verify the identity of the client before executing the transaction.
Depending on the client’s onboarding configuration, OTP validation may be mandatory or optional.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| requestId required | string Unique identifier of the transfer request. |
{- "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6"
}{- "responseCode": "20001",
- "responseMessage": "Request has been processed successfully",
- "code": "273231",
- "expiresIn": "300"
}This service is used to approve a transfer request that has been initiated through the transfer API using optional code OTP or approval validation based on the client’s onboarding configuration.
The approval process ensures that the transfer has been verified and authorized before being executed by the system.
Only transfers with a valid requestId can be approved.
Once approved, the system will continue the transfer process and update its status accordingly.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| requestId required | string Unique identifier of the transfer request. |
| code | string The code generated from the Generate Code (OTP) request. Optional — only required if the client is configured to use OTP-based transfer approval. |
{- "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6",
- "code": "273231"
}{- "responseCode": "20001",
- "responseMessage": "Request has been processed successfully"
}This endpoint is used to reject a transfer request that was previously created and is awaiting approval.
It allows clients or authorized users to cancel or decline a pending transfer before it is executed.
A rejection may occur due to reasons such as invalid transaction details, failed internal verification, user decision, or policy-based restrictions.
Once rejected, the transfer cannot be reactivated and must be reinitiated if needed.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| requestId required | string Unique identifier of the transfer request. |
| reason | string Reason or note describing why the transfer is rejected. |
{- "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6",
- "reason": "Incorrect amount transfer"
}{- "responseCode": "20001",
- "responseMessage": "Request has been processed successfully"
}The Transfer API enables Merchants to perform secure fund transfer transactions through the SNAP interface. The API supports account inquiry, transfer initiation, transfer authorization, and transaction status inquiry for both intra-bank and interbank transfers. All requests are authenticated and validated in accordance with the SNAP security standards to ensure secure, reliable, and traceable fund transfer processing.
| Service | Service Code |
|---|---|
| Internal Account Inquiry | 15 |
| External Account Inquiry | 16 |
| Transfer Intrabank | 17 |
| Transfer Interbank | 18 |
| Transfer RTGS | 19 |
| Transfer SKN | 23 |
| Transfer Status Inquiry | 36 |
| Transfer Generate Code | 91 |
| Transfer Action | 92 |
| HTTP Code | Response Message | Description | Service Code |
|---|---|---|---|
| 200 | Successful | Request processed successfully. | All |
| 202 | Request In Progress | Request is still being processed asynchronously in Bank. | 17,18,19,23,91,92 |
| 400 | Bad Request | Invalid request or failed message parsing. | All |
| 400 | Invalid Field Format {fieldName} |
One or more fields have an invalid format. | All |
| 400 | Invalid Mandatory Field {fieldName} |
Required field is missing or invalid. | All |
| 401 | Unauthorized | Authentication or authorization failed. | All |
| 401 | Invalid Token (B2B) | Access token is invalid or has expired. | All |
| 401 | Token Not Found (B2B) | Access token cannot be found. | All |
| 403 | Transaction Expired | Transaction has expired. | 91,92 |
| 403 | Exceeds Transaction Amount Limit | Transfer amount exceeds the permitted transaction limit. | 17,18,19,23 |
| 403 | Suspected Fraud | Transaction is suspected as fraudulent. | 17,18,19,23 |
| 403 | Activity Count Limit Exceeded | Transaction frequency limit has been exceeded. | 17,18,19,23 |
| 403 | Do Not Honor | Source account is restricted or unavailable. | 15,16,17,18,19,23 |
| 403 | Insufficient Funds | Insufficient balance in the source account. | 17,18,19,23 |
| 403 | Transaction Not Permitted | Transfer transaction is not permitted. | 17,18,19,23 |
| 403 | Suspend Transaction | Transaction has been suspended. | 17,18,19,23 |
| 403 | Merchant Blacklisted | Merchant is suspended from using the API. | All |
| 403 | Merchant Limit Exceed | Merchant transaction limit exceeded. | 17,18,19,23 |
| 403 | Account Limit Exceed | Account transaction limit exceeded. | 17,18,19,23 |
| 404 | Invalid Transaction Status | Transaction status is invalid for the requested operation. | 36,91,92 |
| 404 | Transaction Not Found | Transaction cannot be found. | 36,91,92 |
| 404 | Invalid Routing | Destination routing is invalid. | 18,19,23 |
| 404 | Bank Not Supported By Switch | Destination bank is not supported. | 18,19,23 |
| 404 | Invalid Merchant | Merchant does not exist or is inactive. | All |
| 404 | No Issuer | Destination financial institution cannot be identified. | 18,19,23 |
| 404 | Invalid Card/Account/Customer | Destination account is invalid or cannot be found. | 15,16,17,18,19,23 |
| 404 | Invalid Amount | Requested transfer amount is invalid. | 17,18,19,23 |
| 404 | Partner Not Found | Partner identifier cannot be found. | All |
| 404 | Inconsistent Request | Request parameters are inconsistent with an existing transaction having the same partner reference number. | 17,18,19,23 |
| 405 | Requested Function Is Not Supported | Requested operation is not supported. | All |
| 405 | Requested Operation Is Not Allowed | Requested operation is not allowed in the current transaction state. | 91,92 |
| 409 | Conflict | Duplicate X-EXTERNAL-ID within the same day. |
All |
| 409 | Duplicate Partner Reference Number | The transaction with the same partnerReferenceNo has already been processed successfully. |
17,18,19,23 |
| 429 | Too Many Requests | Rate limit exceeded. | All |
| 500 | General Error | Unexpected system error. | All |
| 500 | Internal Server Error | Internal server failure occurred. | All |
| 500 | External Server Error | External dependency failure occurred. | All |
| 504 | Timeout | Timeout occurred while communicating with the downstream system. | All |
Sends an internal account inquiry request to validate a beneficiary account before initiating an internal transfer. This endpoint is used to confirm that the destination account can be identified and to retrieve the account information needed for downstream transfer processing.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerReferenceNo | string <= 64 characters Unique reference number generated by CRING during the transfer request. Used to identify the transaction. |
| beneficiaryAccountNo required | string Account Number that used to be beneficiary transfer. |
object |
{- "partnerReferenceNo": "202412171647300092",
- "beneficiaryAccountNo": "115471119",
- "additionalInfo": {
- "deviceId": "",
- "channel": ""
}
}{- "responseCode": "2001500",
- "responseMessage": "Request has been processed successfully",
- "referenceNo": "2020102977770000000009",
- "partnerReferenceNo": "2020102900000000000001",
- "beneficiaryAccountName": "Yories Yolanda",
- "beneficiaryAccountNo": "888801000157508",
- "beneficiaryAccountStatus": "Rekening aktif",
- "beneficiaryAccountType": "D",
- "currency": "IDR",
- "additionalInfo": {
- "deviceId": "12345679237",
- "channel": "mobilephone",
- "inquiryId": "766db122-f034-4034-bce5-efb1e582993f"
}
}Sends an external account inquiry request to validate a beneficiary account before initiating an external transfer. This endpoint is used to confirm that the destination account can be identified and to retrieve the account information needed for downstream transfer processing.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| beneficiaryBankCode required | string Destination Bank Code, see |
| beneficiaryAccountNo required | string Account Number that used to be beneficiary transfer. |
| partnerReferenceNo | string <= 64 characters Unique reference number generated by CRING during the transfer request. Used to identify the transaction. |
object |
{- "beneficiaryBankCode": "014",
- "beneficiaryAccountNo": "115471119",
- "partnerReferenceNo": "202412171647300092",
- "additionalInfo": {
- "deviceId": "",
- "channel": ""
}
}{- "responseCode": "2001500",
- "responseMessage": "Request has been processed successfully",
- "referenceNo": "2020102977770000000009",
- "partnerReferenceNo": "2020102900000000000001",
- "beneficiaryAccountName": "Yories Yolanda",
- "beneficiaryAccountNo": "888801000157508",
- "beneficiaryBankCode": "002",
- "beneficiaryBankName": "BANK BRI",
- "currency": "IDR",
- "additionalInfo": {
- "deviceId": "12345679237",
- "channel": "mobilephone",
- "inquiryId": "766db122-f034-4034-bce5-efb1e582993f"
}
}Transfers funds between accounts within the same bank. This endpoint initiates an intrabank fund transfer after the beneficiary account has been successfully validated through the Internal Account Inquiry API. The request creates a transfer transaction and returns a unique transaction reference for tracking the transfer status.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerReferenceNo required | string <= 64 characters Unique reference number generated by client for transaction identification. |
required | object Transfer amount information. |
| beneficiaryAccountNo required | string Beneficiary account number. |
| beneficiaryEmail | string Beneficiary email address. |
| currency | string Currency code in ISO 4217 format. |
| customerReference | string Customer reference number for transaction tracking. |
| feeType | string Transfer fee type. Example: OUR, BEN, SHA. |
| remark | string Transaction remark or description. |
| sourceAccountNo required | string Source account number used for the transfer. |
| transactionDate required | string <date-time> Transaction date and time in ISO 8601 format. |
required | Array of objects Originator information. Required only when requested by the sender or required by applicable regulations. |
required | object |
{- "partnerReferenceNo": "2026062900000000000001",
- "amount": {
- "value": "100000.00",
- "currency": "IDR"
}, - "beneficiaryAccountNo": "1234567890123456",
- "beneficiaryEmail": "customer@example.com",
- "currency": "IDR",
- "customerReference": "INV-20260629-001",
- "feeType": "OUR",
- "remark": "Transfer payment",
- "sourceAccountNo": "9876543210987654",
- "transactionDate": "2026-06-29T10:30:00+07:00",
- "originatorInfos": [
- {
- "originatorCustomerNo": "1234567890123456",
- "originatorCustomerName": "PT CRING Indonesia",
- "originatorBankCode": "009"
}
], - "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE",
- "beneficiaryAccountName": "Yories Yolanda"
}
}{- "responseCode": "2001700",
- "responseMessage": "Request has been processed successfully",
- "referenceNo": "CRG202606290000000001",
- "partnerReferenceNo": "2026062900000000000001",
- "amount": {
- "value": "100000.00",
- "currency": "IDR"
}, - "beneficiaryAccountNo": "1234567890123456",
- "currency": "IDR",
- "customerReference": "INV-20260629-001",
- "sourceAccountNo": "9876543210987654",
- "transactionDate": "2026-06-29T10:30:00+07:00",
- "originatorInfos": [
- {
- "originatorCustomerNo": "1234567890123456",
- "originatorCustomerName": "PT CRING Indonesia",
- "originatorBankCode": "009"
}
], - "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE",
- "beneficiaryAccountName": "Yories Yolanda",
- "requestId": "22d2a864-3955-4575-9144-779ff171b10c"
}
}Transfers funds from a source account to a beneficiary account at a different bank. This endpoint initiates an interbank fund transfer after the beneficiary account has been successfully validated through the Interbank Account Inquiry API. The request creates a transfer transaction and returns a unique transaction reference along with a trace number for tracking the transfer status across participating banks.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerReferenceNo required | string <= 64 characters Unique reference number generated by the client for transaction identification. |
required | object Transfer amount information. |
| beneficiaryAccountName required | string Beneficiary account holder name. |
| beneficiaryAccountNo required | string Beneficiary account number. |
| beneficiaryAddress | string Beneficiary address. |
| beneficiaryBankCode required | string Beneficiary bank code. |
| beneficiaryBankName | string Beneficiary bank name. |
| beneficiaryEmail | string Beneficiary email address. |
| currency | string Currency code in ISO 4217 format. |
| customerReference | string Customer reference number. |
| sourceAccountNo required | string Source account number. |
| transactionDate required | string <date-time> Transaction date and time in ISO 8601 format. |
| feeType | string Transfer fee type (OUR, BEN, SHA). |
required | Array of objects Originator information list. |
required | object |
{- "partnerReferenceNo": "2026062900000000000001",
- "amount": {
- "value": "100000.00",
- "currency": "IDR"
}, - "beneficiaryAccountName": "John Doe",
- "beneficiaryAccountNo": "1234567890123456",
- "beneficiaryAddress": "Jakarta, Indonesia",
- "beneficiaryBankCode": "014",
- "beneficiaryBankName": "Bank BCA",
- "beneficiaryEmail": "john.doe@example.com",
- "currency": "IDR",
- "customerReference": "INV-20260629-001",
- "sourceAccountNo": "9876543210987654",
- "transactionDate": "2026-06-29T10:30:00+07:00",
- "feeType": "OUR",
- "originatorInfos": [
- {
- "originatorCustomerNo": "9876543210987654",
- "originatorCustomerName": "PT CRING Indonesia",
- "originatorBankCode": "009"
}
], - "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE",
- "serviceType": "interbank"
}
}{- "responseCode": "2001800",
- "responseMessage": "Request has been processed successfully",
- "referenceNo": "CRG202606290000000001",
- "partnerReferenceNo": "2026062900000000000001",
- "amount": {
- "value": "100000.00",
- "currency": "IDR"
}, - "beneficiaryAccountNo": "1234567890123456",
- "beneficiaryBankCode": "014",
- "sourceAccountNo": "9876543210987654",
- "traceNo": "2406291234567890",
- "originatorInfos": [
- {
- "originatorCustomerNo": "9876543210987654",
- "originatorCustomerName": "PT CRING Indonesia",
- "originatorBankCode": "009"
}
], - "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE",
- "serviceType": "interbank",
- "requestId": "22d2a864-3955-4575-9144-779ff171b10c"
}
}Transfers funds from a source account to a beneficiary account at a different bank through the Real Time Gross Settlement (RTGS) network. This endpoint initiates an RTGS transfer after the beneficiary account has been successfully validated through the Interbank Account Inquiry API. The request creates a transfer transaction and returns a unique transaction reference along with a trace number for tracking the transfer status across participating banks.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerReferenceNo required | string <= 64 characters Unique reference number generated by Merchants. |
required | object |
| beneficiaryAccountName required | string Beneficiary account holder name. |
| beneficiaryAccountNo required | string Beneficiary account number. |
| beneficiaryAddress | string Beneficiary address. |
| beneficiaryBankCode required | string Beneficiary bank code. |
| beneficiaryBankName | string Beneficiary bank name. |
| beneficiaryCustomerResidence required | string Beneficiary customer residence code. |
| beneficiaryCustomerType required | string Beneficiary customer type code. |
| beneficiaryEmail | string Beneficiary email address. |
| currency | string Currency code in ISO 4217 format. |
| customerReference | string Customer reference number. |
| feeType | string Fee charging type. |
| kodepos | string Beneficiary postal code. |
| receiverPhone | string Beneficiary phone number. |
| remark | string Transaction remark. |
| senderCustomerResidence | string Sender customer residence code. |
| senderCustomerType | string Sender customer type code. |
| senderPhone | string Sender phone number. |
| sourceAccountNo required | string Source account number. |
required | Array of objects Originator information list. |
| transactionDate required | string <date-time> Transaction date and time in ISO 8601 format. |
object |
{- "partnerReferenceNo": "2026062900000000000001",
- "amount": {
- "value": "500000000.00",
- "currency": "IDR"
}, - "beneficiaryAccountName": "PT ABC Indonesia",
- "beneficiaryAccountNo": "1234567890123456",
- "beneficiaryAddress": "Jakarta, Indonesia",
- "beneficiaryBankCode": "014",
- "beneficiaryBankName": "Bank BCA",
- "beneficiaryCustomerResidence": "1",
- "beneficiaryCustomerType": "2",
- "beneficiaryEmail": "finance@abc.co.id",
- "currency": "IDR",
- "customerReference": "RTGS-20260629-001",
- "feeType": "OUR",
- "kodepos": "12950",
- "receiverPhone": "081234567890",
- "remark": "RTGS payment",
- "senderCustomerResidence": "1",
- "senderCustomerType": "2",
- "senderPhone": "081298765432",
- "sourceAccountNo": "9876543210987654",
- "originatorInfos": [
- {
- "originatorCustomerNo": "9876543210987654",
- "originatorCustomerName": "PT CRING Indonesia",
- "originatorBankCode": "009"
}
], - "transactionDate": "2026-06-29T10:30:00+07:00",
- "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE"
}
}{- "responseCode": "2001900",
- "responseMessage": "Request has been processed successfully",
- "referenceNo": "CRG202606290000000001",
- "partnerReferenceNo": "2026062900000000000001",
- "amount": {
- "value": "500000000.00",
- "currency": "IDR"
}, - "beneficiaryAccountName": "PT ABC Indonesia",
- "beneficiaryAccountNo": "1234567890123456",
- "beneficiaryAccountType": "D",
- "beneficiaryBankCode": "014",
- "currency": "IDR",
- "customerReference": "RTGS-20260629-001",
- "sourceAccountNo": "9876543210987654",
- "originatorInfos": [
- {
- "originatorCustomerNo": "9876543210987654",
- "originatorCustomerName": "PT CRING Indonesia",
- "originatorBankCode": "009"
}
], - "traceNo": "2406291234567890",
- "transactionDate": "2026-06-29T10:30:00+07:00",
- "transactionStatus": "00",
- "transactionStatusDesc": "SUCCESS",
- "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE",
- "requestId": "22d2a864-3955-4575-9144-779ff171b10c"
}
}Transfers funds from a source account to a beneficiary account at a different bank through the National Clearing System (SKN) network. This endpoint initiates an SKN transfer after the beneficiary account has been successfully validated through the Interbank Account Inquiry API. The request creates a transfer transaction and returns a unique transaction reference along with a trace number for tracking the transfer status across participating banks.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| partnerReferenceNo required | string <= 64 characters Unique reference number generated by client. |
required | object |
| beneficiaryAccountName required | string Beneficiary account holder name. |
| beneficiaryAccountNo required | string Beneficiary account number. |
| beneficiaryAddress | string Beneficiary address. |
| beneficiaryBankCode required | string Beneficiary bank code. |
| beneficiaryBankName | string Beneficiary bank name. |
| beneficiaryCustomerResidence required | string Beneficiary customer residence code. |
| beneficiaryCustomerType required | string Beneficiary customer type code. |
| beneficiaryEmail | string Beneficiary email address. |
| currency | string Currency code in ISO 4217 format. |
| customerReference | string Customer reference number. |
| feeType | string Fee charging type. |
| kodepos | string Beneficiary postal code. |
| receiverPhone | string Beneficiary phone number. |
| remark | string Transaction remark. |
| senderCustomerResidence | string Sender customer residence code. |
| senderCustomerType | string Sender customer type code. |
| senderPhone | string Sender phone number. |
| sourceAccountNo required | string Source account number. |
required | Array of objects Originator information list. |
| transactionDate required | string <date-time> Transaction date and time in ISO 8601 format. |
object |
{- "partnerReferenceNo": "2026062900000000000002",
- "amount": {
- "value": "2500000.00",
- "currency": "IDR"
}, - "beneficiaryAccountName": "PT ABC Indonesia",
- "beneficiaryAccountNo": "1234567890123456",
- "beneficiaryAddress": "Bandung, Indonesia",
- "beneficiaryBankCode": "014",
- "beneficiaryBankName": "Bank BCA",
- "beneficiaryCustomerResidence": "1",
- "beneficiaryCustomerType": "2",
- "beneficiaryEmail": "finance@abc.co.id",
- "currency": "IDR",
- "customerReference": "SKN-20260629-001",
- "feeType": "OUR",
- "kodepos": "40115",
- "receiverPhone": "081234567890",
- "remark": "SKN payment",
- "senderCustomerResidence": "1",
- "senderCustomerType": "2",
- "senderPhone": "081298765432",
- "sourceAccountNo": "9876543210987654",
- "originatorInfos": [
- {
- "originatorCustomerNo": "9876543210987654",
- "originatorCustomerName": "PT CRING Indonesia",
- "originatorBankCode": "009"
}
], - "transactionDate": "2026-06-29T14:30:00+07:00",
- "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE"
}
}{- "responseCode": "2002300",
- "responseMessage": "Request has been processed successfully",
- "referenceNo": "CRG202606290000000002",
- "partnerReferenceNo": "2026062900000000000002",
- "amount": {
- "value": "2500000.00",
- "currency": "IDR"
}, - "beneficiaryAccountName": "PT ABC Indonesia",
- "beneficiaryAccountNo": "1234567890123456",
- "beneficiaryAccountType": "S",
- "beneficiaryBankCode": "014",
- "currency": "IDR",
- "customerReference": "SKN-20260629-001",
- "sourceAccountNo": "9876543210987654",
- "originatorInfos": [
- {
- "originatorCustomerNo": "9876543210987654",
- "originatorCustomerName": "PT CRING Indonesia",
- "originatorBankCode": "009"
}
], - "traceNo": "2406299876543210",
- "transactionDate": "2026-06-29T14:30:00+07:00",
- "transactionStatus": "00",
- "transactionStatusDesc": "SUCCESS",
- "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE",
- "requestId": "22d2a864-3955-4575-9144-779ff171b10c"
}
}The Inquiry Transfer Status API is used to check the latest transaction status of a previously initiated transfer.
This endpoint helps merchants or integrated systems verify whether a transfer has been successfully processed, is still pending, or has failed.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| originalPartnerReferenceNo required | string <= 64 characters Original partner reference number from the transfer transaction. |
| originalReferenceNo required | string <= 64 characters Original reference number generated by CRING. |
| originalExternalId | string Original external identifier of the transaction. |
| serviceCode required | string Service code used for the original transfer transaction. |
| transactionDate | string <date-time> Original transaction date and time in ISO 8601 format. |
object | |
object |
{- "originalPartnerReferenceNo": "2026062900000000000001",
- "originalReferenceNo": "CRG202606290000000001",
- "originalExternalId": "202606290000000001",
- "serviceCode": "17",
- "transactionDate": "2026-06-29T10:30:00+07:00",
- "amount": {
- "value": "100000.00",
- "currency": "IDR"
}, - "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE"
}
}{- "responseCode": "2003600",
- "responseMessage": "Request has been processed successfully",
- "originalReferenceNo": "CRG202606290000000001",
- "originalPartnerReferenceNo": "2026062900000000000001",
- "originalExternalId": "202606290000000001",
- "serviceCode": "17",
- "transactionDate": "2026-06-29T10:30:00+07:00",
- "amount": {
- "value": "100000.00",
- "currency": "IDR"
}, - "beneficiaryAccountNo": "1234567890123456",
- "beneficiaryBankCode": "014",
- "currency": "IDR",
- "previousResponseCode": "2001800",
- "referenceNumber": "CRG202606290000000001",
- "sourceAccountNo": "9876543210987654",
- "transactionId": "TRX202606290001",
- "latestTransactionStatus": "00",
- "transactionStatusDesc": "SUCCESS",
- "additionalInfo": {
- "deviceId": "ANDROID-001",
- "channel": "MOBILE",
- "requestId": "22d2a864-3955-4575-9144-779ff171b10c"
}
}This service is used to generate a code or One-Time Password (OTP) required to approve transfer.
The OTP serves as an additional layer of security to verify the identity of the client before executing the transaction.
Depending on the client’s onboarding configuration, OTP validation may be mandatory or optional.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| requestId required | string Unique request identifier used to generate the OTP verification code. |
{- "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6"
}{- "responseCode": "2009100",
- "responseMessage": "Request has been processed successfully",
- "code": "273231",
- "expiresIn": 300
}This service is used to approve or reject a transfer request that has been initiated through the transfer API using optional code OTP or approval validation based on the client’s onboarding configuration.
The approval process ensures that the transfer has been verified and authorized before being executed by the system.
Only transfers with a valid requestId can be approved.
Once approved, the system will continue the transfer process and update its status accordingly.
📥 Request Requirements must contain following information:
| Authorization required | string Bearer access token obtained from the B2B Access Token endpoint.
|
| Content-Type required | string Example: application/json value must be |
| X-TIMESTAMP required | string Example: 2026-01-01T23:59:59Z Current local time in ISO 8601 format. |
| X-SIGNATURE required | string Example: 069a81f985277e7aade3f503088cde559ba09ea0603e00a56 Signature generated according to the SNAP signing specification. The signature must be Base64-encoded. |
| X-PARTNER-ID required | string Example: CRINGMERCHANT001 Partner ID issued by the system. e.g. CRINGMERCHANT001. |
| X-EXTERNAL-ID required | string Example: 202501010000001 Unique transaction identifier generated by the merchant. Numeric String (max 36 chars). Must be unique per day. e.g. 2025010100000001. The same X-EXTERNAL-ID must not be reused within the same day. |
| CHANNEL-ID required | string Example: 00001 5 digit Identifier of the channel used to access the API. |
| requestId required | string Unique request identifier associated with the transfer transaction. |
| code required | string = 6 characters Six-digit OTP code used to authorize the transfer action. |
| type required | string Enum: "APPROVE" "REJECT" Transfer action to be performed. |
{- "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6",
- "code": "273231",
- "type": "APPROVE"
}{- "responseCode": "2009200",
- "responseMessage": "Request has been processed successfully"
}CRING provides a real-time Bank Account Validator API with Non-SNAP integration that allows clients to validate bank account numbers before initiating transactions. This feature is essential for ensuring that payment instructions are accurate, reducing failed transfers, and enhancing user confidence.
| Bank Name | Bank Code |
|---|---|
| PT. ALLO BANK INDONESIA | 567 |
| PT. BANK ACEH SYARIAH | 116 |
| PT. BANK AMAR INDONESIA | 531 |
| PT. BANK ANZ INDONESIA | 061 |
| PT. BANK ARTHA GRAHA INTERNATIONAL | 037 |
| PT. BANK PEMBANGUNAN DAERAH BALI | 129 |
| PT BANK PEMBANGUNAN DAERAH BENGKULU | 133 |
| PT Bank Negara Indonesia | 009 |
| PT.Bank Rakyat Indonesia | 002 |
| PT Bank BNP Paribas Indonesia | 057 |
| PT BANK LAMPUNG | 121 |
| PT. BANK PEMBANGUNAN DAERAH BANTEN | 137 |
| PT. BANK PEMBANGUNAN DAERAH JABAR DAN BANTEN | 110 |
| PT. BANK PEMBANGUNAN DAERAH JABAR DAN BANTEN SYARIAH | 425 |
| PT. BANK BUMI ARTA | 076 |
| BANK TABUNGAN NEGARA (BTN) | 200 |
| PT. BANK TABUNGAN NEGARA (PERSERO) UNIT USAHA SYARIAH | 200 |
| PT BANK CAPITAL INDONESIA | 054 |
| PT. BANK CHINA CONSTRUCTION BANK INDONESIA, TBK | 036 |
| PT. BANK CIMB NIAGA TBK | 022 |
| PT. BANK CIMB NIAGA TBK - UNIT USAHA SYARIAH | 022 |
| PT. BANK DANAMON INDONESIA | 011 |
| PT. BANK DANAMON INDONESIA UNIT USAHA SYARIAH | 011 |
| PT. BANK DBS INDONESIA | 046 |
| PT. BANK DKI | 111 |
| PT. BANK DKI UNIT USAHA SYARIAH | 111 |
| PT. BANK GANESHA | 161 |
| PT. BANK HIBANK INDONESIA | 553 |
| PT. BANK ICBC INDONESIA | 164 |
| PT. BANK INA PERDANA | 513 |
| PT BANK INDEX SELINDO | 555 |
| PT. BANK JAGO Tbk | 542 |
| PT. BANK JAGO Tbk - UNIT USAHA SYARIAH | 542 |
| PT.BANK PEMBANGUNAN DAERAH JAMBI | 115 |
| PT. BANK PEMBANGUNAN DAERAH JAMBI UUS | 115 |
| PT. BANK PEMBANGUNAN DAERAH JATENG | 113 |
| PT. BANK PEMBANGUNAN DAERAH JATENG UNIT USAHA SYARIAH | 113 |
| PT.BANK PEMBANGUNAN DAERAH JATIM | 114 |
| PT.BANK PEMBANGUNAN DAERAH JATIM - UNIT USAHA SYAR | 114 |
| PT.BANK PEMBANGUNAN DAERAH KALBAR | 123 |
| PT.BANK PEMBANGUNAN DAERAH KALBAR UUS | 123 |
| PT. BANK PEMBANGUNAN DAERAH KALSEL | 122 |
| PT. BANK PEMBANGUNAN DAERAH KALSEL - UNIT USAHA SYARIAH | 122 |
| PT. BPD KALIMANTAN TENGAH | 125 |
| PT. BANK BUKOPIN Tbk. | 441 |
| PT. BANK KB BUKOPIN SYARIAH | 521 |
| PT. BANK KEB HANA INDONESIA | 484 |
| PT Bank Pembangunan Daerah Maluku dan Maluku Utara | 131 |
| PT. BANK MANDIRI | 008 |
| PT. BANK MANDIRI TASPEN | 564 |
| PT. BANK MASPION | 157 |
| PT Bank Mayapada Internasional | 097 |
| PT. BANK MEGA | 426 |
| PT. BANK MEGA SYARIAH | 506 |
| PT Bank Mestika Dharma | 151 |
| PT. BANK MIZUHO INDONESIA | 048 |
| PT Bank Muamalat Indonesia | 147 |
| PT. Bank Multi Arta Sentosa | 548 |
| PT. BANK NAGARI | 118 |
| PT. BANK NAGARI - UNIT USAHA SYARIAH | 118 |
| PT. BANK NATIONALNOBU | 503 |
| PT. BANK NEO COMMERCE, Tbk. | 490 |
| BANK OF AMERICA NA | 033 |
| BANK OF CHINA (HONG KONG) LIMITED | 069 |
| PT. BANK OF INDIA INDONESIA, TBK | 146 |
| PT. BANK PANIN | 019 |
| PT Bank Panin Dubai Syariah | 517 |
| PT.BANK PEMBANGUNAN DAERAH PAPUA | 132 |
| PT. BANK PERMATA,TBK | 013 |
| PT. BANK PERMATA,TBK UNIT USAHA SYARIAH | 013 |
| PT. BANK QNB INDONESIA,TBK | 167 |
| PT. BANK RAYA INDONESIA, TBK | 494 |
| PT. BANK RESONA PERDANIA | 047 |
| PT. BANK PEMBANGUNAN DAERAH RIAU KEPRI SYARIAH | 119 |
| PT. BANK SAHABAT SAMPOERNA | 523 |
| PT. BANK SAQU INDONESIA | 472 |
| PT. BANK SBI INDONESIA | 498 |
| PT. BANK SINARMAS | 153 |
| PT. BANK SINARMAS UNIT USAHA SYARIAH | 153 |
| PT Bank SMBC Indonesia Tbk | 213 |
| PT. BANK PEMBANGUNAN DAERAH SULUT | 127 |
| PT. BPD SUMSEL DAN BABEL | 120 |
| PT. BPD SUMSEL DAN BABEL UNIT USAHA SYARIAH | 120 |
| PT. BPD SUMATERA UTARA | 117 |
| PT. BPD SUMATERA UTARA UNIT USAHA SYARIAH | 117 |
| PT. BANK SYARIAH INDONESIA | 451 |
| PT. BANK UOB INDONESIA | 023 |
| PT. BANK VICTORIA INTERNATIONAL | 566 |
| PT. BANK VICTORIA SYARIAH | 405 |
| PT. BANK WOORI SAUDARA INDONESIA 1906,TBK | 212 |
| PT BANK CENTRAL ASIA | 014 |
| PT. BANK DIGITAL BCA | 501 |
| PT. BANK BCA SYARIAH | 536 |
| PT.BANK PEMBANGUNAN DAERAH DIY | 112 |
| PT.BANK PEMBANGUNAN DAERAH DIY UNIT USAHA SYARIAH | 112 |
| PT. BANK PEMBANGUNAN DAERAH KALTIM DAN KALTARA | 124 |
| PT.BANK PEMBANGUNAN DAERAH KALTIM DAN KALTARA-UNIT USAHA SYARIAH | 124 |
| PT. BANK PEMBANGUNAN DAERAH NTT | 130 |
| PT. BANK PEMBANGUNAN DAERAH NTB SYARIAH | 128 |
| PT. BANK SULSELBAR | 126 |
| PT. BANK SULSELBAR UNIT USAHA SYARIAH | 126 |
| PT. BPD SULAWESI TENGAH | 134 |
| PT. BPD SULAWESI TENGGARA | 135 |
| PT. BANK BTPN SYARIAH | 547 |
| PT. BANK CTBC INDONESIA | 949 |
| PT. BANK HSBC INDONESIA | 087 |
| PT. BANK IBK INDONESIA | 945 |
| KC JPMORGAN CHASE BANK, N.A | 032 |
| PT. BANK JTRUST INDONESIA, TBK | 095 |
| PT. KROM BANK INDONESIA | 459 |
| PT. BANK MAYBANK INDONESIA Tbk. | 016 |
| PT. BANK MAYBANK INDONESIA Tbk. UNIT USAHA SYARIAH | 016 |
| PT. BANK MNC INTERNASIONAL, TBK | 485 |
| MUFG BANK, LTD | 042 |
| PT. BANK OCBC NISP, Tbk. | 028 |
| PT.BANK OCBC NISP TBK - UNIT USAHA SYARIAH | 028 |
| PT. BANK OKE INDONESIA | 526 |
| PT. BANK SEABANK INDONESIA | 535 |
| PT. BANK SHINHAN INDONESIA | 152 |
| PT. SUPER BANK INDONESIA | 562 |
| Data | Param | Description |
|---|---|---|
| Status | BUKA | Bank account number is active, can receive transaction |
| Status | DORMANT | Bank account number in-active, can receive transaction |
| Status | TUTUP | Bank account number in-active, can't receive transaction |
| Type | DEP | Bank account number savings |
| Http Code | Response Code | Response Message |
|---|---|---|
| 400 | 40600 | Request Failed |
| 400 | 40609 | Not Allowed IP |
| 404 | 40901 | Invalid Param, data:{} |
| 422 | 42202 | The given data was invalid. |
| 500 | 50500 | Internal error |
🔍 Use this API to validate customer bank account details before initiating a transaction. By providing an account number the CRING! system will forward the request to the respective bank BNI and return validated account information such as account name and status.
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| accountNumber required | string Bank account Number |
{- "accountNumber": "0115476117"
}{- "customerName": "John Doe",
- "accountNumber": "0115476117",
- "currency": "IDR",
- "status": "BUKA",
- "type": "DEP"
}🔍 Use this API to validate customer bank account details before initiating a transaction. By providing an account number and optional bank code, the CRING! system will forward the request to the respective bank (e.g., BNI) and return validated account information such as account name and status.
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| accountNumber required | string Bank account Number |
| bankCode required | string <= 3 characters Bank Code, see |
{- "accountNumber": "0115476117",
- "bankCode": "014"
}{- "customerName": "John Doe",
- "bankName": "Bank Mandiri",
- "reffNum": "100000000097"
}RDL (Rekening Dana Lender) is a dedicated account used to hold and manage a Lender's funds within the P2P Lending ecosystem.
In CRING!, RDL enables Lenders to deposit funds, move funds to escrow for investment, receive withdrawals from escrow, and withdraw funds back to their personal bank account.
After a Lender successfully completes customer registration:
The main RDL-related fund movements are:
| Process | Source | Destination | Description |
|---|---|---|---|
| Top Up RDL | Lender's BNI account | Lender's RDL | Lender deposits funds into the RDL. |
| Top Up Escrow from RDL | Lender's RDL | Lender's escrow account | Funds are moved from RDL to escrow for investment. |
| Withdrawal Escrow to RDL | Lender's escrow account | Lender's RDL | Available funds are moved back from escrow to RDL. |
| Withdrawal from RDL | Lender's RDL | Lender's BNI account | Lender withdraws funds from RDL to their personal bank account. |
RDL is also part of the overall investment and repayment flow:
Lender Top Up
The Lender deposits funds into their RDL.
Investment
Funds are transferred from the Lender's RDL to escrow.
Loan Disbursement
Funds from the Lender's escrow are transferred to the Borrower's escrow account.
Repayment
The Borrower repays the loan through a repayment Virtual Account (VA) to the Borrower's escrow account.
Withdrawal
Available funds can be transferred from escrow back to the Lender's RDL and subsequently withdrawn to the Lender's personal bank account.
CRING! provides testing mechanisms to simulate fund movements in the development or sandbox environment.
These simulations update the ledger balance without involving real money movement.
Examples include:
In the production environment, these transactions represent actual money movement through the configured banking infrastructure.
| Component | Description |
|---|---|
| Lender | Customer who provides funds for lending/investment. |
| Borrower | Customer who receives the loan. |
| RDL | Account used to hold and manage the Lender's funds. |
| Escrow Account | Account used to hold funds during the lending and investment process. |
| P2P Platform | Platform that manages the lending relationship between Lenders and Borrowers. |
| CRING! | Integration platform that manages APIs and fund movement orchestration. |
| BNI | Banking partner responsible for CIF and RDL account creation and related banking operations. |
| Code | Name |
|---|---|
| AMAR | Bank Amar Indonesia |
| BANTEN | BPD BANTEN |
| ACEH | BPD Aceh |
| ACEH_UUS | BPD Aceh UUS |
| BALI | BPD Bali |
| BENGKULU | BPD Bengkulu |
| DAERAH_ISTIMEWA | BPD Daerah Istimewa Yogyakarta (DIY) |
| DAERAH_ISTIMEWA_UUS | BPD Daerah Istimewa Yogyakarta (DIY) UUS |
| JAMBI | BPD Jambi |
| JAWA_TENGAH | BPD Jawa Tengah |
| JAWA_TENGAH_UUS | BPD Jawa Tengah UUS |
| JAWA_TIMUR | BPD Jawa Timur |
| JAWA_TIMUR_UUS | BPD Jawa Timur UUS |
| KALIMANTAN_BARAT | BPD Kalimantan Barat |
| KALIMANTAN_BARAT_UUS | BPD Kalimantan Barat UUS |
| KALIMANTAN_SELATAN | BPD Kalimantan Selatan |
| KALIMANTAN_SELATAN_UUS | BPD Kalimantan Selatan UUS |
| KALIMANTAN_TENGAH | BPD Kalimantan Tengah |
| KALIMANTAN_TIMUR | BPD Kalimantan Timur |
| KALIMANTAN_TIMUR_UUS | BPD Kalimantan Timur UUS |
| LAMPUNG | BPD Lampung |
| MALUKU | BPD Maluku |
| NUSA_TENGGARA_BARAT | BPD Nusa Tenggara Barat |
| NUSA_TENGGARA_BARAT_UUS | BPD Nusa Tenggara Barat UUS |
| NUSA_TENGGARA_TIMUR | BPD Nusa Tenggara Timur |
| PAPUA | BPD Papua |
| RIAU_DAN_KEPRI | BPD Riau Dan Kepri |
| RIAU_DAN_KEPRI_UUS | BPD Riau Dan Kepri UUS |
| SULAWESI | BPD Sulawesi Tengah |
| SULAWESI_TENGGARA | BPD Sulawesi Tenggara |
| SULSELBAR | BPD Sulselbar |
| SULSELBAR_UUS | BPD Sulselbar UUS |
| SULUT | BPD Sulut |
| SUMATERA_BARAT | BPD Sumatera Barat |
| SUMATERA_BARAT_UUS | BPD Sumatera Barat UUS |
| SUMSEL_DAN_BABEL | BPD Sumsel Dan Babel |
| SUMSEL_DAN_BABEL_UUS | BPD Sumsel Dan Babel UUS |
| SUMUT | BPD Sumut |
| SUMUT_UUS | BPD Sumut UUS |
| ANZ | Bank ANZ Indonesia |
| AGRONIAGA | Bank Agroniaga |
| ARTHA | Bank Artha Graha International |
| BCA_DIGITAL | Bank BCA Digital |
| BJB | Bank BJB |
| BJB_SYR | Bank BJB Syariah |
| BNP_PARIBAS | Bank BNP Paribas |
| BISNIS_INTERNASIONAL | Bank Bisnis Internasional |
| BUKOPIN | Bank Bukopin |
| BUMI_ARTA | Bank Bumi Arta |
| CIMB | Bank CIMB Niaga |
| CIMB_UUS | Bank CIMB Niaga UUS |
| CAPITAL | Bank Capital Indonesia |
| BCA | Bank Central Asia (BCA) |
| BCA_SYR | Bank Central Asia (BCA) Syariah |
| CHINATRUST | Bank Chinatrust Indonesia |
| COMMONWEALTH | Bank Commonwealth |
| DBS | Bank DBS Indonesia |
| DKI | Bank DKI |
| DKI_UUS | Bank DKI UUS |
| DANAMON | Bank Danamon |
| DANAMON_UUS | Bank Danamon UUS |
| DINAR_INDONESIA | Bank Dinar Indonesia |
| FAMA | Bank Fama International |
| GANESHA | Bank Ganesha |
| HANA | Bank Hana |
| ICBC | Bank ICBC Indonesia |
| INA_PERDANA | Bank Ina Perdania |
| INDEX_SELINDO | Bank Index Selindo |
| JASA_JAKARTA | Bank Jasa Jakarta |
| MNC_INTERNASIONAL | Bank MNC Internasional |
| MANDIRI | Bank Mandiri |
| MASPION | Bank Maspion Indonesia |
| MAYAPADA | Bank Mayapada International |
| MAYBANK | Bank Maybank |
| MAYBANK_SYR | Bank Maybank Syariah Indonesia |
| MAYORA | Bank Mayora |
| MEGA | Bank Mega |
| MESTIKA_DHARMA | Bank Mestika Dharma |
| MIZUHO | Bank Mizuho Indonesia |
| MUAMALAT | Bank Muamalat Indonesia |
| MULTI_ARTA_SENTOSA | Bank Multi Arta Sentosa |
| NATIONALNOBU | Bank Nationalnobu |
| BNI | Bank Negara Indonesia (BNI) |
| OCBC | Bank OCBC NISP |
| OCBC_UUS | Bank OCBC NISP UUS |
| PANIN | Bank Panin |
| PANIN_SYR | Bank Panin Syariah |
| PERMATA | Bank Permata |
| PERMATA_UUS | Bank Permata UUS |
| RABOBANK | Bank Rabobank International Indonesia |
| BRI | Bank Rakyat Indonesia (BRI) |
| RESONA | Bank Resona Perdania |
| ROYAL | Bank Royal Indonesia |
| SBI_INDONESIA | Bank SBI Indonesia |
| SAHABAT_SAMPOERNA | Bank Sahabat Sampoerna |
| SINARMAS | Bank Sinarmas |
| SINARMAS_UUS | Bank Sinarmas UUS |
| BUKOPIN_SYR | Bank Syariah Bukopin |
| BSI | Bank Syariah Indonesia |
| MEGA_SYR | Bank Syariah Mega |
| BTN | Bank Tabungan Negara (BTN) |
| BTN_UUS | Bank Tabungan Negara (BTN) UUS |
| TABUNGAN_PENSIUNAN_NASIONAL | Bank Tabungan Pensiunan Nasional |
| UOB | Bank UOB Indonesia |
| VICTORIA_INTERNASIONAL | Bank Victoria Internasional |
| VICTORIA_SYR | Bank Victoria Syariah |
| WOORI | Bank Woori Indonesia |
| BAML | Bank of America Merill-Lynch |
| BOC | Bank of China (BOC) |
| INDIA | Bank of India Indonesia |
| TOKYO | Bank of Tokyo Mitsubishi UFJ |
| JTRUST | Bank Jtrust Indonesia |
| OKE | Bank Oke Indonesia |
| QNB_INDONESIA | Bank QNB Indonesia |
| SHINHAN | Bank Shinhan Indonesia |
| Code | Description |
|---|---|
| BPK | Bapak |
| IBU | Ibu |
| SDR | Saudara (Laki-Laki) |
| SDRI | Sdri (Perempuan) |
| - | Blank |
| Code | Description |
|---|---|
| ISLAM | Islam |
| CHRISTIAN | Kristen |
| CATHOLIC | Katolik |
| BUDDHIST | Budha |
| HINDU | Hindu |
| CONFUCIAN | Kong Hu Chu |
| OTHERS | Other religion |
| Code | Description |
|---|---|
| SINGLE | Lajang (Single) |
| WIDOWER | Duda (Widower) |
| WIDOW | Janda (Widow) |
| MARRIED | Menikah (Married) |
| Code | Description |
|---|---|
| GOVERNMENT_EMPLOYEE | Pegawai Negeri |
| PRIVATE_SECTOR_EMPLOYEE | Pegawai Swasta |
| STATE_OWNED_ENTERPRISE_EMPLOYEE | Pegawai BUMN/BUMD |
| NATIONAL_MILITARY_OR_POLICE_OFFICER | TNI/POLRI |
| BUSINESS_OWNER | Pengusaha |
| TRADER | Pedagang |
| FARMER_OR_FISHERMAN | Petani/Nelayan |
| STUDENT | Pelajar/Mahasiswa |
| HOUSEWIFE | Ibu Rumah Tangga |
| UNEMPLOYED | Tidak Bekerja |
| EMPLOYEE | Karyawan/Karyawati |
| ENTREPRENEUR | Wiraswasta |
| STATE_OFFICIAL | Pejabat Negara |
| ACCOUNTANT | Akuntan |
| LAWYER_OR_NOTARY | Pengacara/Notaris |
| PROFESSION | Profesi |
| RETIREE | Pensiunan |
| PRIVATE_LECTURER_OR_TEACHER | Dosen/Guru Swasta |
| PUBLIC_LECTURER_OR_TEACHER | Dosen/Guru Negeri |
| DOCTOR | Dokter |
| BNI_EMPLOYEE | Pegawai BNI |
| BNI_AFFILIATE_UNIT | Unit Afiliasi BNI |
| - | Tenaga Kerja Indonesia |
| OTHERS | Lain-lain |
| Code | Description |
|---|---|
| ELEMENTARY_SCHOOL | SD |
| JUNIOR_HIGH_SCHOOL | SMP |
| HIGH_SCHOOL_OR_EQUIVALENT | SMA / Sederajat |
| ACADEMY_OR_DIPLOMA | Akademi/Diploma |
| BACHELORS_DEGREE | S1 |
| MASTERS_DEGREE | S2 |
| PHD | S3 |
| Code | Description |
|---|---|
| JAKARTA_KOTA | JAKARTA KOTA |
| BANDUNG | BANDUNG |
| JAMBI | JAMBI |
| YOGYAKARTA | YOGYAKARTA |
| BANDA_ACEH | BANDA ACEH |
| MEDAN | MEDAN |
| MAKASSAR | MAKASSAR |
| PEKANBARU | PEKANBARU |
| PADANG | PADANG |
| PALEMBANG | PALEMBANG |
| SURAKARTA | SURAKARTA |
| SIBOLGA | SIBOLGA |
| SEMARANG | SEMARANG |
| SURABAYA | SURABAYA |
| BANJARMASIN | BANJARMASIN |
| KRAMAT | KRAMAT |
| MANADO | MANADO |
| CIREBON | CIREBON |
| TANJUNG_PINANG | TANJUNG PINANG |
| MAGELANG | MAGELANG |
| MELAWAI_RAYA | MELAWAI RAYA |
| PONTIANAK | PONTIANAK |
| TANJUNG_PRIOK | TANJUNG PRIOK |
| BANDAR_LAMPUNG | BANDAR LAMPUNG |
| TASIKMALAYA | TASIKMALAYA |
| RENGAT | RENGAT |
| PURWOKERTO | PURWOKERTO |
| JEMBER | JEMBER |
| JL_JEND_SUDIRMAN_BANDUNG | JL.JEND.SUDIRMAN BANDUNG |
| GUNUNG_SITOLI | GUNUNG SITOLI |
| DENPASAR | DENPASAR |
| SAMPIT | SAMPIT |
| JATINEGARA | JATINEGARA |
| MATARAM | MATARAM |
| GORONTALO | GORONTALO |
| MEULABOH | MEULABOH |
| AMBON | AMBON |
| TANJUNG_PERAK | TANJUNG PERAK |
| KUDUS | KUDUS |
| CILACAP | CILACAP |
| TEMBILAHAN | TEMBILAHAN |
| SERANG | SERANG |
| KUALA_TUNGKAL | KUALA TUNGKAL |
| BALIKPAPAN | BALIKPAPAN |
| LHOKSEUMAWE | LHOKSEUMAWE |
| TANJUNG_BALAI_KARIMUN | TANJUNG BALAI KARIMUN |
| KAWASAN_INDUSTRI_MEDAN | KAWASAN INDUSTRI MEDAN |
| BUKITTINGGI | BUKITTINGGI |
| URIP_SUMOHARJO | URIP SUMOHARJO |
| PEKALONGAN | PEKALONGAN |
| DUMAI | DUMAI |
| DUKUH_BAWAH | DUKUH BAWAH |
| BOGOR | BOGOR |
| SINGARAJA | SINGARAJA |
| SENAYAN | SENAYAN |
| TANJUNG_BALAI_ASAHAN | TANJUNG BALAI ASAHAN |
| PEMANGKAT | PEMANGKAT |
| SUMBAWA_BESAR | SUMBAWA BESAR |
| SELAT_PENJANG | SELAT PANJANG |
| PARIGI | PARIGI |
| MAJALAYA | MAJALAYA |
| HARMONI | HARMONI |
| KEDUNGDORO_SURABAYA | KEDUNGDORO SURABAYA |
| WONOSOBO | WONOSOBO |
| KEBUMEN | KEBUMEN |
| SUKABUMI | SUKABUMI |
| PASAR_MAYESTIK | PASAR MAYESTIK |
| JEMBATAN_MERAH | JEMBATAN MERAH |
| JL_A_YANI_PADANG | JL.A.YANI PADANG |
| KENDARI | KENDARI |
| TANGERANG | TANGERANG |
| SITUBONDO | SITUBONDO |
| SUMENEP | SUMENEP |
| PURBALINGGA | PURBALINGGA |
| BANJAR | BANJAR |
| JL_A_YANI_BANDUNG | JL.A.YANI BANDUNG |
| PADANGSIDEMPUAN | PADANGSIDEMPUAN |
| GAMBIR | GAMBIR |
| LANGSA | LANGSA |
| BANYUWANGI | BANYUWANGI |
| PEMATANG_SIANTAR | PEMATANG SIANTAR |
| MENTENG | MENTENG |
| KARAWANG | KARAWANG |
| TEMANGGUNG | TEMANGGUNG |
| TERNATE | TERNATE |
| PAMEKASAN | PAMEKASAN |
| PARE_PARE | PARE-PARE |
| SENGKANG | SENGKANG |
| GARUT | GARUT |
| CIANJUR | CIANJUR |
| BIREUN | BIREUN |
| KOTAMOBAGU | KOTAMOBAGU |
| JL_IMAM_BONJOL_PADANG | JL.IMAM BONJOL PADANG |
| KETAPANG | KETAPANG |
| PROBOLINGGO | PROBOLINGGO |
| JEMBATAN_AMPERA_PALEMBANG | JEMBATAN AMPERA PALEMBANG |
| MUSI_PALEMBANG | MUSI PALEMBANG |
| KEDIRI | KEDIRI |
| JL_SUTOMO_MEDAN | JL.SUTOMO MEDAN |
| KOTABUMI | KOTABUMI |
| BOJONEGORO | BOJONEGORO |
| INDRAMAYU | INDRAMAYU |
| MADIUN | MADIUN |
| TEBET | TEBET |
| MALANG | MALANG |
| JOMBANG | JOMBANG |
| MOJOKERTO | MOJOKERTO |
| CILEGON | CILEGON |
| RANGKASBITUNG | RANGKASBITUNG |
| KOTABARU_PULAU_LAUT | KOTABARU PULAU LAUT |
| PECENONGAN | PECENONGAN |
| KUNINGAN | KUNINGAN |
| LUWUK | LUWUK |
| PANGKAL_PINANG | PANGKAL PINANG |
| CIAMIS | CIAMIS |
| SALATIGA | SALATIGA |
| PURWOREJO | PURWOREJO |
| BITUNG | BITUNG |
| PAYAKUMBUH | PAYAKUMBUH |
| TANJUNG_KARANG | TANJUNG KARANG |
| PATI | PATI |
| JEPARA | JEPARA |
| PASAR_PUSAT_PEKANBARU | PASAR PUSAT PEKANBARU |
| SIGLI | SIGLI |
| SINGKAWANG | SINGKAWANG |
| BANJARBARU | BANJARBARU |
| BALIGE | BALIGE |
| PANJANG | PANJANG |
| KUALA_KAPUAS | KUALA KAPUAS |
| BAU_BAU | BAU-BAU |
| TEGAL | TEGAL |
| ROA_MALAKA | ROA MALAKA |
| SUNGAI_PENUH | SUNGAI PENUH |
| PURWAKARTA | PURWAKARTA |
| SUMEDANG | SUMEDANG |
| BEKASI | BEKASI |
| SUBANG | SUBANG |
| BLITAR | BLITAR |
| SAMARINDA | SAMARINDA |
| TEBING_TINGGI_DELI | TEBING TINGGI DELI |
| TAHUNA | TAHUNA |
| BIMA | BIMA |
| WONOGIRI | WONOGIRI |
| KABANJAHE | KABANJAHE |
| TOLI_TOLI | TOLI-TOLI |
| PENGKALANBUN | PANGKALANBUN |
| PALOPO | PALOPO |
| LUBUK_LINGGAU | LUBUK LINGGAU |
| PANGERAN_ANTASARI_BJMS | PANGERAN ANTASARI BJMS |
| KLATEN | KLATEN |
| CIKAMPEK | CIKAMPEK |
| PASURUAN | PASURUAN |
| POLEWALI | POLEWALI |
| KANAKA_MANADO | KANAKA MANADO |
| NUNUKAN | NUNUKAN |
| PALU | PALU |
| KENGKULU | BENGKULU |
| GRESIK | GRESIK |
| TARAKAN | TARAKAN |
| SLAMET_RIYADI_SOLO | SLAMET RIYADI SOLO |
| UGM_YOGYA | UGM YOGYA |
| KUPANG | KUPANG |
| SIDOARJO | SIDOARJO |
| PANDANSARI_BALIKPAPAN | PANDANSARI BALIKPAPAN |
| BOOMBARU_PALEMBANG | BOOMBARU PALEMBANG |
| M_H_THAMRIN | M.H. THAMRIN |
| TANJUNG_REDEB | TANJUNG REDEB |
| BONDOWOSO | BONDOWOSO |
| ITB_BANDUNG | ITB BANDUNG |
| DAAN_MOGOT | DAAN MOGOT |
| KUALA_TANJUNG | KUALA TANJUNG |
| TULUNGAGUNG | TULUNGAGUNG |
| RAWAMANGUN | RAWAMANGUN |
| KARANGAYU | KARANGAYU |
| BATAM | BATAM |
| MATTOANGIN | MATTOANGIN |
| FATMAWATI | FATMAWATI |
| CEPU | CEPU |
| UNIBRAW_MALANG | UNIBRAW MALANG |
| UPI_BANDUNG | UPI BANDUNG |
| GRAHA_PANGERAN_SURABAYA | GRAHA PANGERAN SURABAYA |
| BARABAI | BARABAI |
| UNAIR_SURABAYA | UNAIR SURABAYA |
| JAKARTA_PUSAT | JAKARTA PUSAT |
| UNDIP_SEMARANG | UNDIP SEMARANG |
| LEGIAN | LEGIAN |
| USU_MEDAN | USU MEDAN |
| JAYAPURA | JAYAPURA |
| JL_PERINTIS_KEMERDEKAAN | JL.PERINTIS KEMERDEKAAN |
| UNPAD_BANDUNG | UNPAD BANDUNG |
| CIMAHI | CIMAHI |
| PONDOK_INDAH_MALL | PONDOK INDAH MALL |
| UI_DEPOK | UI DEPOK |
| SEBELAS_MARET_SURAKARTA | SEBELAS MARET SURAKARTA |
| TUBAN | TUBAN |
| PALANGKARAYA | PALANGKARAYA |
| SORONG | SORONG |
| BANGKO | BANGKO |
| RANTALI_PRAPAT | RANTAU PRAPAT |
| ENDE | ENDE |
| MARGONDA_DEPOK | MARGONDA DEPOK |
| PONOROGO | PONOROGO |
| METRO | METRO |
| MAUMERE | MAUMERE |
| LUMAJANG | LUMAJANG |
| KAYU_AGUNG | KAYU AGUNG |
| PRABUMULIH | PRABUMULIH |
| BATURAJA | BATURAJA |
| POSINDO | POSINDO |
| BONTANG | BONTANG |
| MANOKWARI | MANOKWARI |
| BIAK | BIAK |
| MERAUKE | MERAUKE |
| BULUKUMBA | BULUKUMBA |
| RENON | RENON |
| MUARA_BUNGO | MUARA BUNGO |
| SOLOK | SOLOK |
| MUARA_TEWEH | MUARA TEWEH |
| MAMUJU | MAMUJU |
| SINTANG | SINTANG |
| KELAPA_GADING | KELAPA GADING |
| BUMI_SERPONG_DAMAI | BUMI SERPONG DAMAI |
| JABABEKA | JABABEKA |
| W01_MEDAN | W01 MEDAN |
| W02_PADANG | W02 PADANG |
| W00_PALEMBANG | W03 PALEMBANG |
| W04_BANDUNG | W04 BANDUNG |
| W05_SEMARANG | W05 SEMARANG |
| W06_SURABAYA | W06 SURABAYA |
| W07_MAKASSAR | W07 MAKASSAR |
| W08_DENPASAR | W08 DENPASAR |
| W09_BANJARMASIN | W09 BANJARMASIN |
| W10_JAKARTA | W10 JAKARTA |
| W11_MANADO | W11 MANADO |
| W12_JAKARTA_KOTA | W12 JAKARTA KOTA |
| Code | Description |
|---|---|
| LESS_THAN_3_MILLION | Monthly income less than IDR 3 million |
| GTE_3_AND_LT_5_MILLION | Monthly income between IDR 3 up to 5 million |
| GTE_5_AND_LT_10_MILLION | Monthly income between IDR 5 up to 10 million |
| GTE_10_AND_LT_20_MILLION | Monthly income between IDR 10 up to 20 million |
| GTE_20_AND_LT_50_MILLION | Monthly income between IDR 20 up to 50 million |
| GTE_50_AND_LT_100_MILLION | Monthly income between IDR 50 up to 100 million |
| GTE_100_AND_LT_500_MILLION | Monthly income between IDR 100 up to 500 million |
| GREATER_THAN_500_MILLION | Monthly income more than IDR 500 million |
| Code | Description |
|---|---|
| INVESTMENTS | Opening account is for investment |
| SAVINGS | Opening account is for saving |
| TRANSACTIONS | Opening account is for transactional |
| Code | Description |
|---|---|
| SALARY | Salary |
| BUSINESS | Business outcome |
| INVESTMENT | Investment outcome |
| GRANTS | Grants/Hibah |
| Response Code | Response Message |
|---|---|
| 0000 | Unknown output (General error) |
| 0001 | Request has been processed successfully |
| 0002 | Request has been rejected by Icons |
| 0007 | Request can not be authenticated |
| 0008 | Invalid UUID format |
| 0009 | Invalid branchId |
| 0011 | Previous identical request has been processed successfully |
| 0110 | Account is closed |
| 0112 | REKENING SEDANG BERTRANSAKSI. COBA LAGI! |
| 0113 | Account is blocked |
| 0116 | SALDO TIDAK SESUAI |
| 0155 | CUSM DBER |
| 0168 | TRANSAKSI PELUNASAN TELAH DILAKUKAN |
| 0169 | Account number is not found |
| 0188 | RECORD IS NOT FOUND |
| 0208 | NOMOR REKENING INVALID |
| 0324 | NOMINAL TAGIHAN TIDAK SESUAI |
| 0325 | SILAHKAN MENGGUNAKAN MENU VA BILLING |
| 0545 | APPLICATION NOT ACTIVE |
| 0791 | NPWP NASABAH BELUM ADA. UBAH NPWP PD SC 60050 |
| 1534 | null = APPLICATION NOT ACTIVE |
| 1804 | INISIAL PEMBUKUAN DILUAR SALDO PEMBUKAAN |
| 2035 | DILARANG |
| 2754 | TRANSACTION ONLY DAY ENABLED |
| 2755 | EOM (End of Month) or EOD (End of Day) |
| 3656 | Requested ID number already has a CIF number |
| 7161 | APPLICATION BUSY. PLS TRY LATER |
| 9102 | NO CONNECTION TO DATABASE |
| 9201 | LATE RESPONSE FROM BACK-END |
| 9202 | INVALID REQUEST/RESPONSE MESSAGE |
| 9301 | NO CONNECTION TO BACK-END |
| 9403 | TRANSACTION AMOUNT ABOVE ALLOWED LIMIT |
| 9409 | ACCOUNT IS NOT REGISTERED |
| 9411 | RECORD IS PAID |
| 9412 | COMPANY ID IS NOT REGISTERED |
| 9427 | INVALID CURRENCY |
| 9428 | INVALID AMOUNT FOR RTGS/CLEARING |
| 9430 | KYC INFO NOT VALID, PLEASE HIT API KYC AGAIN |
| 9431 | KYC INFO HAS EXPIRED, PLEASE HIT API KYC AGAIN |
| 9432 | KYC INFO NOT VALID, PLEASE HIT API KYC AGAIN WITH VALID VALUE |
| Failure Code | Description |
|---|---|
| ACCOUNT_CODE_NOT_SUPPORTED_ERROR | The code of the account is currently not supported. |
| DUPLICATE_EXTERNAL_ID_ERROR | The external_id entered has been used before. Please enter a unique external_id and try again. |
| NAME_BLACKLISTED_ERROR | The customer name is blacklisted. |
| NO_PREFERRED_ACCOUNT_ERROR | No preferred account is specified. |
| MULTIPLE_PREFERRED_ACCOUNT_ERROR | Multiple preferred account is specified. |
| Failure Code | Description |
|---|---|
| NPWP_NOT_REGISTERED_ERROR | npwp_number field is invalid |
| BANK_DOWNTIME_ERROR | Registration happened when bank was on scheduled or unscheduled downtime/maintenance |
| INVALID_ID_EXPIRY_DATE_ERROR | id_expiry_date field is invalid |
| INACTIVE_CIF_STATUS | Bank already has investor's profile prior to this investor creation but CIF has been inactive in bank database |
| REGISTRATION_REJECTED | Bank rejects the registration for other reasons |
This service used by P2P to create customer lender and borrower.
A Customer refers to P2P end-customer, which includes both the lenders and borrowers on P2P platform. P2P customers’personal data is retained to comply with regulatory requirements for IT-based lending services in Indonesia, and also allows CRING! to fulfill Know-Your-Client obligations. The Customer resource will be used together with our other APIs to receive funds from and send funds.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| given_name required | string First name of your customer. Accepted a-z, A-Z, symbols . , ' (space) |
| surname required | string Last name of your customer. Accepted a-z, A-Z, symbols . , ' (space) |
| mobile_number required | string Mobile number. Accepted 0-9, symbols + - (space) |
| email required | string Email address. Should include the top-level domain name |
| ktp_number required | string KTP (national identity card number). Accepted 0-9, a-z, A-Z, symbols - (space) |
| npwp_number required | string NPWP (tax number). Accepted 0-9, symbols - (space) |
| external_id required | string Unique ID of your customer. Accepted 0-9, a-z, A-Z, symbols space _ , . - |
| type required | string Enum: "LENDER" "BORROWER" Type of customer LENDER or BORROWER |
required | Array of objects List of customer's accounts. Must include at least one preferred account |
{- "given_name": "John Doe",
- "surname": "John Doe, S.T.",
- "mobile_number": "+62 812-3456-789",
- "email": "abc@email.com",
- "ktp_number": "1234345678",
- "npwp_number": "1234.3456.789",
- "external_id": "external-19199",
- "type": "LENDER",
- "customer_accounts": [
- {
- "account_code": "BCA",
- "account_number": "8898345789",
- "is_preferred": true,
- "account_type": "BANK_ACCOUNT"
}
]
}{- "id": "b9666300-7300-11e9-8373-6753d37f1b1f",
- "given_name": "John Doe",
- "surname": "John Doe, S.T.",
- "mobile_number": "+62 812-3456-789",
- "email": "abc@email.com",
- "ktp_number": "1234345678",
- "npwp_number": "1234.3456.789",
- "external_id": "external-19199",
- "type": "LENDER",
- "customer_accounts": [
- {
- "account_code": "BCA",
- "account_number": "8898345789",
- "is_preferred": true,
- "account_type": "BANK_ACCOUNT"
}
], - "customer_escrow_id": "82800000011",
- "created": "2022-08-05T07:11:14.173Z",
- "updated": "2022-08-05T07:11:15.675Z",
- "current_balance": 0,
- "status": "PENDING",
- "failure_reason": ""
}This service used by P2P to Update an existing customer.
📥 Request Requirements must contain following information:
| id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f Customer id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| mobile_number | string Mobile number. Accepted 0-9, symbols + - (space) |
string Email address. Should include the top-level domain name | |
Array of objects List of customer's accounts. Must include at least one preferred account |
{- "mobile_number": "+62 812-3456-789",
- "email": "abc@email.com",
- "customer_accounts": [
- {
- "account_code": "BCA",
- "account_number": "8898345789",
- "is_preferred": true,
- "account_type": "BANK_ACCOUNT"
}
]
}{- "id": "b9666300-7300-11e9-8373-6753d37f1b1f",
- "given_name": "John Doe",
- "surname": "John Doe, S.T.",
- "mobile_number": "+62 812-3456-789",
- "email": "abc@email.com",
- "ktp_number": "1234345678",
- "npwp_number": "1234.3456.789",
- "external_id": "external-19199",
- "type": "LENDER",
- "customer_accounts": [
- {
- "account_code": "BCA",
- "account_number": "8898345789",
- "is_preferred": true,
- "account_type": "BANK_ACCOUNT"
}
], - "customer_escrow_id": "82800000011",
- "created": "2022-08-05T07:11:14.173Z",
- "updated": "2022-08-05T07:11:15.675Z",
- "current_balance": 0,
- "status": "FAILED",
- "failure_reason": "NAME_BLACKLISTED_ERROR"
}This service used by P2P to Get an existing customer with by using the id returned when Create Customer response. P2P can get current balance information of the customer using this API.
📥 Request Requirements must contain following information:
| id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f Customer Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "id": "b9666300-7300-11e9-8373-6753d37f1b1f",
- "given_name": "John Doe",
- "surname": "John Doe, S.T.",
- "mobile_number": "+62 812-3456-789",
- "email": "abc@email.com",
- "ktp_number": "1234345678",
- "npwp_number": "1234.3456.789",
- "external_id": "external-19199",
- "type": "LENDER",
- "customer_accounts": [
- {
- "account_code": "BCA",
- "account_number": "8898345789",
- "is_preferred": true,
- "account_type": "BANK_ACCOUNT"
}
], - "customer_escrow_id": "82800000011",
- "created": "2022-08-05T07:11:14.173Z",
- "updated": "2022-08-05T07:11:15.675Z",
- "current_balance": 0,
- "status": "FAILED",
- "failure_reason": "NAME_BLACKLISTED_ERROR"
}This service used by P2P to Get an existing customer with by using the external_id when Create Customer. P2P also can get current balance information of the customer using this API.
📥 Request Requirements must contain following information:
| external_id required | string Example: external-19199 External id when create customer |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "id": "b9666300-7300-11e9-8373-6753d37f1b1f",
- "given_name": "John Doe",
- "surname": "John Doe, S.T.",
- "mobile_number": "+62 812-3456-789",
- "email": "abc@email.com",
- "ktp_number": "1234345678",
- "npwp_number": "1234.3456.789",
- "external_id": "external-19199",
- "type": "LENDER",
- "customer_accounts": [
- {
- "account_code": "BCA",
- "account_number": "8898345789",
- "is_preferred": true,
- "account_type": "BANK_ACCOUNT"
}
], - "customer_escrow_id": "82800000011",
- "created": "2022-08-05T07:11:14.173Z",
- "updated": "2022-08-05T07:11:15.675Z",
- "current_balance": 0,
- "status": "FAILED",
- "failure_reason": "NAME_BLACKLISTED_ERROR"
}Callback Notify Create Customer will return latest result create customer after status 'default' was created on api create customer success.
Your system must return an HTTP status code to indicate the callback result:
| HTTP | Code | Description |
|---|---|---|
| 200 | Callback | received successfully |
| Other | Callback failed | CRING! will retry every 1 minute, up to 5 times |
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| event | string Callback event. |
| created | string <date-time> Timestamp when the event was triggered (ISO 8601). |
| business_id | string CRING's identifier for your business. |
object Details of the customer information. |
{- "event": "escrow.p2p_customer",
- "created": "2022-06-09T09:29:51.918Z",
- "business_id": "f59fcbb7-848d-4242-af07-a8bb7e3ab37c",
- "data": {
- "id": "dd061c60-1857-11ed-be1c-c3fff448ba7a",
- "given_name": "John",
- "surname": "Doe",
- "mobile_number": "085724715978",
- "email": "john.doe@gmail.com",
- "ktp_number": "3314131006940001",
- "npwp_number": "012345678901234",
- "type": "LENDER",
- "external_id": "lender_48",
- "customer_accounts": [
- {
- "account_code": "BNI",
- "account_number": "1234512345",
- "is_preferred": true,
- "account_type": "BANK_ACCOUNT"
}
], - "customer_escrow_id": "8288000000000011",
- "created": "2022-08-10T02:55:16.775Z",
- "updated": "2022-08-10T03:06:12.970Z",
- "current_balance": 0,
- "status": "ACTIVE",
- "failure_reason": null
}
}nullThis service used to create and/or register a new investor account. The result of this service is investor will get an account number which reffered as Rekening Dana Lender or RDL.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| external_id required | string Unique ID of the investor. Accepted symbols (space)_:,.- |
| title required | string Titles to be shown before your name (Title Code) |
| first_name | string First name (alphabet only) |
| middle_name | string Middle name (alphabet only) |
| last_name required | string Last name. If no surname, can fill with full name. (alphabet and space only) |
| npwp_number required | string Indonesian Tax ID |
| nationality required | string Country code (ISO3166-1 alpha-2). Only ID supported currently |
| domicile_country required | string Country of residence (ISO3166-1 alpha-2) |
| religion required | string Religion code (Religion Code) |
| birth_place required | string Place of birth in Indonesia. Accepted symbols (space).,'- |
| birth_date required | string <date> Birth date (format YYYY-MM-DD) |
| gender required | string Enum: "MALE" "FEMALE" Gender of the investor |
| marital_status required | string Marital status (Marital Status Code) |
| mother_maiden_name required | string Mother's maiden name (alphabet and space only) |
| job_code required | string Job code (Job Code) |
| education required | string Education level (Education Code) |
| id_number required | string KTP number |
| id_issuing_city required | string City where ID was issued. Accepted symbols (space).,'- |
| id_expiry_date | string <date> ID expiry date. Use 2099-01-01 if lifetime |
| address_street required | string Street address. Accepted symbols (space)/():;.,'- |
| address_rt_rw_perum required | string RT/RW info. Accepted symbols (space)/():;.,'- |
| address_kelurahan required | string Kelurahan info. Accepted symbols (space)/():;.,'- |
| address_kecamatan required | string Kecamatan info. Accepted symbols (space)/():;.,'- |
| zip_code required | string Postal code |
| home_phone_number | string Home phone in format xxx-xxxxxx |
| office_phone_number | string Office phone in format xxx-xxxxxx |
| mobile_phone_number required | string Mobile phone number |
| fax_number | string Fax number in format xxx-xxxxxx |
| branch_opening_location_code required | string BNI branch where account will be opened (Branch Code) |
| monthly_income_range required | string Monthly income range (Income Range Code) |
| email required | string Valid email address |
| account_type required | string Account type |
| open_account_reason required | string Reason for opening the account (Reason Code) |
| source_of_fund required | string Source of the funds (Source of Fund Code) |
{- "external_id": "investor-123",
- "title": "BPK",
- "first_name": "Wisnu",
- "middle_name": "Praditya",
- "last_name": "Utama",
- "npwp_number": "012345678901234",
- "nationality": "ID",
- "domicile_country": "ID",
- "religion": "CHRISTIAN",
- "birth_place": "Surakarta",
- "birth_date": "1994-06-10",
- "gender": "MALE",
- "marital_status": "SINGLE",
- "mother_maiden_name": "Sumiyati",
- "job_code": "EMPLOYEE",
- "education": "BACHELORS_DEGREE",
- "id_number": "1234567890123456",
- "id_issuing_city": "Surakarta",
- "id_expiry_date": "2017-06-10",
- "address_street": "Jl. Sultan Hasanudin No. 47-51",
- "address_rt_rw_perum": "RT 06 RW 02",
- "address_kelurahan": "Melawai",
- "address_kecamatan": "Kebayoran Baru",
- "zip_code": "12160",
- "home_phone_number": "021-081111",
- "office_phone_number": "021-091111",
- "mobile_phone_number": "08123123123",
- "fax_number": "0271-08123123",
- "branch_opening_location_code": "JAKARTA_KOTA",
- "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
- "email": "wisnuputra123123@gmail.com",
- "account_type": "RDL",
- "open_account_reason": "INVESTMENTS",
- "source_of_fund": "SALARY"
}{- "id": "6bc50b40-dea0-11e9-aeaf-651a8718890e",
- "external_id": "investor-123",
- "title": "BPK",
- "first_name": "Wisnu",
- "middle_name": "Praditya",
- "last_name": "Utama",
- "npwp_number": "012345678901234",
- "nationality": "ID",
- "domicile_country": "ID",
- "religion": "CHRISTIAN",
- "birth_place": "Surakarta",
- "birth_date": "1994-06-10T00:00:00.000Z",
- "gender": "MALE",
- "marital_status": "SINGLE",
- "mother_maiden_name": "Sumiyati",
- "job_code": "EMPLOYEE",
- "education": "BACHELORS_DEGREE",
- "id_number": "1234567890123456",
- "id_issuing_city": "Surakarta",
- "id_expiry_date": "2017-06-10T00:00:00.000Z",
- "address_street": "Jl. Sultan Hasanudin No. 47-51",
- "address_rt_rw_perum": "RT 06 RW 02",
- "address_kelurahan": "Melawai",
- "address_kecamatan": "Kebayoran Baru",
- "zip_code": "12160",
- "home_phone_number": "021-081111",
- "office_phone_number": "021-091111",
- "mobile_phone_number": "08123123123",
- "fax_number": "0271-08123123",
- "branch_opening_location_code": "JAKARTA_KOTA",
- "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
- "email": "wisnuputra123123@gmail.com",
- "account_type": "RDL",
- "open_account_reason": "INVESTMENTS",
- "source_of_fund": "SALARY",
- "account_status": "PENDING",
- "created": "2019-09-24T07:53:39.572Z",
- "updated": "2019-09-24T07:53:43.505Z",
- "account_balance": 0
}This service used to upload selfie photo customer lender / investor to completing data register investor.
The result of this service is investor will get a selfie photo added on investor's data to continue create Rekening Dana Lender or RDL.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| file required | any <byte> Base64 encoded image data. example: "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0..." Make sure to include only the Base64 string without metadata (e.g. |
{- "message": "Success"
}This service used by P2P to Get an existing investor with by using the id when Create Investor.
📥 Request Requirements must contain following information:
| id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f Investor Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "id": "6bc50b40-dea0-11e9-aeaf-651a8718890e",
- "external_id": "investor-123",
- "title": "BPK",
- "first_name": "Wisnu",
- "middle_name": "Praditya",
- "last_name": "Utama",
- "npwp_number": "012345678901234",
- "nationality": "ID",
- "domicile_country": "ID",
- "religion": "CHRISTIAN",
- "birth_place": "Surakarta",
- "birth_date": "1994-06-10T00:00:00.000Z",
- "gender": "MALE",
- "marital_status": "SINGLE",
- "mother_maiden_name": "Sumiyati",
- "job_code": "EMPLOYEE",
- "education": "BACHELORS_DEGREE",
- "id_number": "1234567890123456",
- "id_issuing_city": "Surakarta",
- "id_expiry_date": "2017-06-10T00:00:00.000Z",
- "address_street": "Jl. Sultan Hasanudin No. 47-51",
- "address_rt_rw_perum": "RT 06 RW 02",
- "address_kelurahan": "Melawai",
- "address_kecamatan": "Kebayoran Baru",
- "zip_code": "12160",
- "branch_opening_location_code": "JAKARTA_KOTA",
- "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
- "email": "wisnuputra123123@gmail.com",
- "account_type": "RDL",
- "open_account_reason": "INVESTMENTS",
- "source_of_fund": "SALARY",
- "cif_number": "49381125087428936000",
- "account_number": "2349283596162630000",
- "home_phone_number": "021-081111",
- "office_phone_number": "021-091111",
- "mobile_phone_number": "08123123123",
- "fax_number": "0271-08123123",
- "account_status": "ACTIVE",
- "created": "2019-02-12T03:47:36.449Z",
- "updated": "2019-02-12T03:47:36.647Z",
- "account_balance": 1000000
}This service used by P2P to Get an existing investor with by using the external_id when Create Investor.
📥 Request Requirements must contain following information:
| external_id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f External Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "id": "6bc50b40-dea0-11e9-aeaf-651a8718890e",
- "external_id": "investor-123",
- "title": "BPK",
- "first_name": "Wisnu",
- "middle_name": "Praditya",
- "last_name": "Utama",
- "npwp_number": "012345678901234",
- "nationality": "ID",
- "domicile_country": "ID",
- "religion": "CHRISTIAN",
- "birth_place": "Surakarta",
- "birth_date": "1994-06-10T00:00:00.000Z",
- "gender": "MALE",
- "marital_status": "SINGLE",
- "mother_maiden_name": "Sumiyati",
- "job_code": "EMPLOYEE",
- "education": "BACHELORS_DEGREE",
- "id_number": "1234567890123456",
- "id_issuing_city": "Surakarta",
- "id_expiry_date": "2017-06-10T00:00:00.000Z",
- "address_street": "Jl. Sultan Hasanudin No. 47-51",
- "address_rt_rw_perum": "RT 06 RW 02",
- "address_kelurahan": "Melawai",
- "address_kecamatan": "Kebayoran Baru",
- "zip_code": "12160",
- "branch_opening_location_code": "JAKARTA_KOTA",
- "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
- "email": "wisnuputra123123@gmail.com",
- "account_type": "RDL",
- "open_account_reason": "INVESTMENTS",
- "source_of_fund": "SALARY",
- "cif_number": "49381125087428936000",
- "account_number": "2349283596162630000",
- "home_phone_number": "021-081111",
- "office_phone_number": "021-091111",
- "mobile_phone_number": "08123123123",
- "fax_number": "0271-08123123",
- "account_status": "ACTIVE",
- "created": "2019-02-12T03:47:36.449Z",
- "updated": "2019-02-12T03:47:36.647Z",
- "account_balance": 1000000
}This callback returns the latest result of Create Customer API when the default status was successfully created.
Once the investor RDL account is successfully registered and activated by the bank, the callback will include:
account_status: ACTIVE
account_number: Filled with the created RDL account number
cif_number: Filled with the bank CIF number
If the investor registration to the bank fails, the callback will include:
account_status: FAILED
failure_reason: Filled with the investor registration failure error code
Your system must return an HTTP status code to indicate the callback result:
| HTTP | Code | Description |
|---|---|---|
| 200 | Callback | received successfully |
| Other | Callback failed | CRING! will retry every 1 minute, up to 5 times |
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| id | string Unique identifier of the investor record |
| external_id | string Unique ID of the investor assigned by P2P system |
| title | string Title of the investor (e.g., Mr, Mrs, BPK) (Title Code) |
| first_name | string First name of the investor |
| middle_name | string Middle name of the investor |
| last_name | string Last name of the investor |
| npwp_number | string Indonesian Tax Identification Number (NPWP) |
| nationality | string Country code based on ISO3166-1 alpha-2 format |
| domicile_country | string Country of residence in ISO3166-1 alpha-2 format |
| religion | string Religion of the investor (Religion Code) |
| birth_place | string City or location of birth |
| birth_date | string <date> Date of birth in YYYY-MM-DD format |
| gender | string Enum: "MALE" "FEMALE" Gender of the investor |
| marital_status | string Enum: "SINGLE" "MARRIED" "DIVORCED" "WIDOWED" Marital status of the investor (Marital Status Code) |
| mother_maiden_name | string Mother’s maiden name |
| job_code | string Occupation code of the investor (Job Code) |
| education | string Highest education level of the investor (Education Code) |
| id_number | string National identity number (KTP) |
| id_issuing_city | string City where the ID was issued |
| id_expiry_date | string <date> Expiration date of the ID. Use |
| address_street | string Street address of the investor |
| address_rt_rw_perum | string RT/RW or housing complex information |
| address_kelurahan | string Kelurahan (urban village) name |
| address_kecamatan | string Kecamatan (sub-district) name |
| zip_code | string Postal code |
| home_phone_number | string Home phone number |
| office_phone_number | string Office phone number |
| mobile_phone_number | string Mobile phone number |
| fax_number | string Fax number |
| branch_opening_location_code | string Branch code where RDL account was opened (Branch Code) |
| monthly_income_range | string Monthly income range of investor (Income Range Code) |
string Email address of the investor | |
| account_type | string Account type |
| open_account_reason | string Purpose of opening the account (Reason Code) |
| source_of_fund | string Source of funds used by investor (Source of Fund Code) |
| account_status | string Enum: "PENDING" "ACTIVE" "FAILED" Status of RDL account registration |
| cif_number | string CIF number assigned by the bank |
| account_number | string Created RDL account number |
| failure_reason | string or null Reason of failure if account creation failed (Failure Reason) |
{- "id": "e9f8c0d3-4ab6-4e9e-bd64-9e4f9c6a7e11",
- "external_id": "investor-123",
- "title": "BPK",
- "first_name": "Wisnu",
- "middle_name": "Praditya",
- "last_name": "Utama",
- "npwp_number": "012345678901234",
- "nationality": "ID",
- "domicile_country": "ID",
- "religion": "CHRISTIAN",
- "birth_place": "Surakarta",
- "birth_date": "1994-06-10",
- "gender": "MALE",
- "marital_status": "SINGLE",
- "mother_maiden_name": "Sumiyati",
- "job_code": "EMPLOYEE",
- "education": "BACHELORS_DEGREE",
- "id_number": "1234567890123456",
- "id_issuing_city": "Surakarta",
- "id_expiry_date": "2099-12-31",
- "address_street": "Jl. Sultan Hasanudin No. 47-51",
- "address_rt_rw_perum": "RT 06 RW 02",
- "address_kelurahan": "Melawai",
- "address_kecamatan": "Kebayoran Baru",
- "zip_code": "12160",
- "home_phone_number": "021-081111",
- "office_phone_number": "021-091111",
- "mobile_phone_number": "08123123123",
- "fax_number": "0271-08123123",
- "branch_opening_location_code": "JAKARTA_KOTA",
- "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
- "email": "wisnuputra123123@gmail.com",
- "account_type": "RDL",
- "open_account_reason": "INVESTMENTS",
- "source_of_fund": "SALARY",
- "account_status": "ACTIVE",
- "cif_number": "987654321012345",
- "account_number": "8888000123456789",
- "failure_reason": null
}nullWe will send you RDL payment callback with a body request when investor paid into the RDL bank account.
Your system must return an HTTP status code to indicate the callback result:
| HTTP | Code | Description |
|---|---|---|
| 200 | Callback | received successfully |
| Other | Callback failed | CRING! will retry every 1 minute, up to 5 times |
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| id | string The unique ID assigned by CRING’s system to the RDL payment |
| status | string Status of the RDL payment. It will always be SETTLED |
| amount | number The payment amount received by the RDL bank account |
| account_number | string The RDL bank account number that received the payment |
| investor_id | string The RDL Investor's ID who owns the paid RDL bank account |
| created | string <date-time> An ISO 8601 timestamp indicating when the RDL payment was created |
| updated | string <date-time> An ISO 8601 timestamp indicating when the RDL payment was last updated |
| transaction_timestamp | string <date-time> An ISO 8601 timestamp indicating when the end customer made the payment to the RDL account |
{- "id": "83112450-2e79-11e9-95b4-9f8e56f00546",
- "status": "SETTLED",
- "amount": 1000000,
- "account_number": "23429283596162630000",
- "investor_id": "e736f317-d16d-4414-bcd5-92b4ba73a6f4",
- "created": "2019-02-12T03:51:43.637Z",
- "updated": "2019-02-12T03:51:43.694Z",
- "transaction_timestamp": "2019-02-12T03:51:43.637Z"
}nullCreate a new fixed virtual account to accept payments from lenders or borrowers into your Escrow Account using our Create Fixed Virtual Account request.
CRING will send you a callback when the Create P2P Fixed VA request is successful.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| external_id required | string A unique ID for your virtual account. |
| bank_code required | string Bank code of the virtual account. Available bank codes MANDIRI, BNI, PERMATA, BRI (Bank Code) |
| virtual_account_number | string Assigned virtual account number excluding your merchant_code. If empty, system will assign one randomly. |
| name required | string Name of your virtual account. Shown on bank interfaces. |
| suggested_amount | number Amount suggested to the customer for payment. Visible on certain bank interfaces (Mandiri, BNI). |
| is_closed | boolean For now, only accepted true, then expected_amount must be included. The Payment VA will only accept that amount. |
| expected_amount | number If provided, the VA accepts only the amount specified here. Required if is_closed is true. |
| expiration_date | string <date-time> Expiry time of the virtual account. If not provided, defaults to 31 years from creation. |
| is_single_use | boolean When true, the VA will automatically expire after one successful payment. Defaults to false. |
| customer_id required | string The unique ID of the customer who will make the payment. Must refer to a previously created customer. |
| payment_type required | string Enum: "LOAN" "REPAYMENT" Type of payment collected from the customer. Valid values LOAN (from lender), REPAYMENT (from borrower). |
| loan_id | string Required if payment_type is REPAYMENT. Forbidden if payment_type is LOAN. Represents the Loan ID related to the payment. |
{- "external_id": "va-1233889871",
- "bank_code": "BNI",
- "virtual_account_number": "88082541238",
- "name": "Agus P",
- "suggested_amount": 150000,
- "is_closed": true,
- "expected_amount": 150000,
- "expiration_date": "2025-01-31T17:00:00.000Z",
- "is_single_use": true,
- "customer_id": "5c1774e767400e2b76036461",
- "payment_type": "LOAN",
- "loan_id": ""
}{- "id": "b7f6cc0f-6b90-4cde-a8c3-7763c4feda08",
- "external_id": "va-1233889871",
- "bank_code": "BNI",
- "merchant_code": 8808,
- "account_number": 88082541238,
- "name": "Agus Payment",
- "is_closed": true,
- "expected_amount": 150000,
- "expiration_date": "2018-12-31T17:00:00.000Z",
- "customer_id": "5c1774e767400e2b76036461",
- "payment_type": "LOAN",
- "loan_id": "",
- "status": "PENDING",
- "created": "2018-12-20T17:00:00.000Z",
- "updated": "2018-12-20T17:00:00.000Z"
}Update an existing Fixed Virtual Account for a variety of uses cases, including (but not limited to) the following:
Updating the loan_id to allow a Borrower to repay another loan using the same Fixed VA.
Updating the expected_amount for closed VA, if the repayment amount changes.
Updating the expiration_date so that your customers can have more time to pay into the VA.
CRING! will send you a callback when the Update P2P Fixed VA request is successful.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| loan_id | string Loan ID related to the Fixed VA. Can only be updated for a |
| expected_amount | number If provided, the VA accepts only the amount specified here. Required if is_closed is true. |
| suggested_amount | number Amount suggested to the customer for payment. Visible on certain bank interfaces (Mandiri, BNI). |
| is_single_use | boolean When true, the VA will automatically expire after one successful payment. Defaults to false. |
{- "loan_id": "loan-1234356",
- "expected_amount": 150000,
- "suggested_amount": 150000,
- "is_single_use": true
}{- "id": "b7f6cc0f-6b90-4cde-a8c3-7763c4feda08",
- "external_id": "va-1233889871",
- "bank_code": "BNI",
- "merchant_code": 8808,
- "account_number": 88082541238,
- "name": "Agus Payment",
- "is_closed": true,
- "expected_amount": 150000,
- "expiration_date": "2018-12-31T17:00:00.000Z",
- "customer_id": "5c1774e767400e2b76036461",
- "payment_type": "REPAYMENT",
- "loan_id": "loan-123456",
- "status": "PENDING",
- "created": "2018-12-20T17:00:00.000Z",
- "updated": "2018-12-20T17:00:00.000Z"
}Get an existing P2P Fixed VA by using the external_id. You can use this to query for a P2P Fixed VA, or to check the current status of P2P Fixed VA before the callback is received by your URL.
📥 Request Requirements must contain following information:
| external_id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f External Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "id": "b7f6cc0f-6b90-4cde-a8c3-7763c4feda08",
- "external_id": "va-1233889871",
- "bank_code": "BNI",
- "merchant_code": 8808,
- "account_number": 88082541238,
- "name": "Agus Payment",
- "is_closed": true,
- "expected_amount": 150000,
- "expiration_date": "2018-12-31T17:00:00.000Z",
- "customer_id": "5c1774e767400e2b76036461",
- "payment_type": "REPAYMENT",
- "loan_id": "loan-123456",
- "status": "PENDING",
- "created": "2018-12-20T17:00:00.000Z",
- "updated": "2018-12-20T17:00:00.000Z"
}Get an existing P2P Fixed VA with payment details by using the external_id. You can use this to query for a P2P Fixed VA and check details of payments from the VA.
📥 Request Requirements must contain following information:
| external_id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f External Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "id": "b7f6cc0f-6b90-4cde-a8c3-7763c4feda08",
- "external_id": "va-1233889871",
- "bank_code": "BNI",
- "merchant_code": 8808,
- "account_number": 88082541238,
- "name": "Agus Payment",
- "is_closed": true,
- "is_single_use": false,
- "expected_amount": 150000,
- "suggested_amount": 150000,
- "expiration_date": "2018-12-31T17:00:00.000Z",
- "customer_id": "5c1774e767400e2b76036461",
- "payment_type": "REPAYMENT",
- "loan_id": "loan-c1234356",
- "status": "ACTIVE",
- "created": "2018-12-20T17:00:00.000Z",
- "updated": "2018-12-20T17:00:00.000Z",
- "virtual_account_payments": [
- {
- "id": "c50e88e0-787d-11e9-bc8d-97acc03dc038",
- "amount": 10000,
- "transaction_timestamp": "2018-12-20T17:00:00.000Z",
- "status": "SETTLED",
- "created": "2018-12-20T17:00:00.000Z",
- "updated": "2018-12-20T17:00:00.000Z"
}
]
}Get status payment of P2P Fixed VA before callback receive.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| virtual_account_number required | string Virtual account number including the merchant code. |
{- "virtual_account_number": "88082541238"
}{- "id": "b7f6cc0f-6b90-4cde-a8c3-7763c4feda08",
- "virtual_account_number": "88082541238",
- "expired_status": true,
- "payment_status": "paid",
- "payment_date": "2018-12-20T17:00:00.000Z"
}You can receive notifications via a callback whenever a virtual account has been successfully created, updated, or a new payment is made into a virtual account.
Your system must return an HTTP status code to indicate the callback result:
| HTTP | Code | Description |
|---|---|---|
| 200 | Callback | received successfully |
| Other | Callback failed | CRING! will retry every 1 minute, up to 5 times |
Once Fixed VA created by bank, we will send callback with request body with status ACTIVE.
Once Fixed VA updated by bank, we will send callback with request body with status ACTIVE.
This callback is sent when payment has been made into a P2P Fixed Virtual Account and the payment is settling into the Escrow Account. Our request payload with status SETTLING.
This callback is sent when payment has been settled into the Escrow Account. Our request payload with status SETTLED.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| id | string The unique ID assigned by CRING’s system to the RDL payment |
| status | string Status of the RDL payment. It will always be SETTLED |
| amount | number The payment amount received by the RDL bank account |
| account_number | string The RDL bank account number that received the payment |
| investor_id | string The RDL Investor's ID who owns the paid RDL bank account |
| created | string <date-time> An ISO 8601 timestamp indicating when the RDL payment was created |
| updated | string <date-time> An ISO 8601 timestamp indicating when the RDL payment was last updated |
| transaction_timestamp | string <date-time> An ISO 8601 timestamp indicating when the end customer made the payment to the RDL account |
{- "id": "83112450-2e79-11e9-95b4-9f8e56f00546",
- "status": "SETTLED",
- "amount": 1000000,
- "account_number": "23429283596162630000",
- "investor_id": "e736f317-d16d-4414-bcd5-92b4ba73a6f4",
- "created": "2019-02-12T03:51:43.637Z",
- "updated": "2019-02-12T03:51:43.694Z",
- "transaction_timestamp": "2019-02-12T03:51:43.637Z"
}nullThe CRING RDL Disbursements API allows you to transfer funds from a specific RDL (Rekening Dana Lender) to third-party accounts for various purposes — such as loan disbursements, withdrawals, or other financial operations.
⚠️ Important:
Once a disbursement request has been submitted, it cannot be canceled or reversed.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| external_id required | string Unique ID provided by you for your own reference, used to identify and reconcile fund transfers. Accepted characters a-z, A-Z, 0-9; symbols (space) _ , . - |
| destination_account_code required | string Bank code or destination bank identifier. |
| destination_account_holder_name required | string Name of the account holder, as per the bank’s records. Used for verification and error/customer support scenarios. Accepted characters a-z, A-Z, 0-9; symbols (space) . , ' / - |
| destination_account_number required | string Account number of the destination you wish to transfer funds to. Accepted characters 0-9.
|
| description required | string Description of the fund transfer, set by you. Accepted characters a-z, A-Z, 0-9; symbols (space) / ( ) ; . , ' _ - |
| amount required | number Amount of funds you wish to transfer.
Note Transactions above Rp 100,000,000 may require reporting to financial authorities. |
{- "external_id": "ab,cd:ext-id.test_1",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Fa'ni, S.T-09/2017",
- "destination_account_number": "9883456789",
- "description": "esc-wtdrw-123",
- "amount": 10000
}{- "status": "PENDING",
- "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
- "investor_id": 12312312312,
- "external_id": "rdl-disbursement-951",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Lingga",
- "destination_account_number": "9883456789",
- "amount": 10000,
- "updated": "2019-02-12T05:03:12.426Z",
- "created": "2019-02-12T05:03:12.438Z"
}Retrieve detailed information about a specific RDL Disbursement using its unique ID.
This endpoint allows you to fetch an existing RDL Disbursement record by providing the corresponding id.
It can be used to:
This helps you ensure real-time monitoring and reconciliation of disbursement activities initiated through CRING.
📥 Request Requirements must contain following information:
| investor_id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f Investor Id |
| id required | string Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb RDL Disbursement Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "status": "COMPLETED",
- "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
- "investor_id": "12312312312",
- "external_id": "rdl-disbursement-951",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Lingga",
- "destination_account_number": "9883456789",
- "amount": 10000,
- "bank_reference": "bni-7f65eb11-2e83-11e9-b22f-2b4f9440c84b",
- "updated": "2019-02-12T05:03:12.563Z",
- "created": "2019-02-12T05:03:12.438Z"
}Retrieve detailed information about a specific RDL Disbursement using its unique External ID.
This endpoint allows you to fetch an existing RDL Disbursement record by providing the corresponding id.
It can be used to:
This helps you ensure real-time monitoring and reconciliation of disbursement activities initiated through CRING.
📥 Request Requirements must contain following information:
| investor_id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f Investor Id |
| id required | string Example: rdl-disbursement-951 RDL Disbursement External Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "status": "COMPLETED",
- "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
- "investor_id": "12312312312",
- "external_id": "rdl-disbursement-951",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Lingga",
- "destination_account_number": "9883456789",
- "amount": 10000,
- "bank_reference": "bni-7f65eb11-2e83-11e9-b22f-2b4f9440c84b",
- "updated": "2019-02-12T05:03:12.563Z",
- "created": "2019-02-12T05:03:12.438Z"
}You can receive asynchronous notifications via callback whenever the status of an RDL disbursement changes.
To enable this feature, set your callback URL in the CRING Dashboard.
Triggered when the disbursement process from the RDL to the destination bank account has been successfully completed.
The callback payload contains the RDL Disbursement Resource with:
status: COMPLETEDbank_reference: filled with the bank transaction reference ID.This callback confirms that the funds have been successfully transferred to the beneficiary account.
Triggered when the disbursement process fails to reach the destination bank account.
The callback payload contains the RDL Disbursement Resource with:
status: FAILEDfailure_code: provides the reason for the disbursement failure.Your system must return an HTTP status code to indicate the callback result:
| HTTP | Code | Description |
|---|---|---|
| 200 | Callback | received successfully |
| Other | Callback failed | CRING! will retry every 1 minute, up to 5 times |
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| status | string Current status of the RDL disbursement. Possible values include PENDING, COMPLETED, or FAILED. |
| id | string Unique identifier of the RDL disbursement generated by CRING. |
| investor_id | string Unique ID of the investor initiating the disbursement. |
| external_id | string Unique external ID provided by the client for reconciliation and tracking purposes. |
| destination_account_code | string Bank code of the destination account. |
| destination_account_holder_name | string Name of the destination account holder, as registered at the bank. |
| destination_account_number | string Account number of the destination bank account where the funds are transferred. |
| amount | number <double> Amount of funds disbursed from the RDL to the destination account. |
| bank_reference | string Only shown if RDL Disbursement
|
| failure_code | string Only shown if RDL Disbursement
|
| updated | string <date-time> Timestamp indicating when the disbursement record was last updated. |
| created | string <date-time> Timestamp indicating when the disbursement record was created. |
{- "status": "COMPLETED",
- "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
- "investor_id": "12312312312",
- "external_id": "rdl-disbursement-951",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Lingga",
- "destination_account_number": "81232131",
- "amount": 10000,
- "bank-reference": "bni-7f65eb11-2e83-11e9-b22f-2b4f9440c84b",
- "updated": "2019-02-12T05:03:12.563Z",
- "created": "2019-02-12T05:03:12.438Z"
}nullUse this endpoint to disburse funds from P2P's Escrow Account to a loan borrower’s bank account. This API is typically used when a loan will be funded by one or more lenders.
When the disbursement request is made, the funds will be deducted from the designated P2P's Escrow and sent to the borrower’s destination account as specified in the request payload.
Once the transaction has been processed, the system will return a disbursement object containing the transaction details and status.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| external_id required | string Unique ID you provided for the loan disbursement. |
| loan_maturity_date required | string <date-time> Date and time on which repayment of the loan needs to be made. |
| annual_percentage_rate required | number Annual percentage rate (APR). |
required | Array of objects More than one lender can be identified here since the API allows multiple lenders to contribute funds to a given loan. |
| borrower_id required | string The unique ID of the borrower (set by you using the Create Customer endpoint). |
| destination_account_code required | string Code of the destination bank or e-Wallet. |
| destination_account_holder_name required | string Name of the account holder as per the destination bank’s or e-Wallet’s records. |
| destination_account_number required | string Destination bank account number or e-Wallet phone number.
|
| loan_id required | string ID of the loan you provided. |
| description | string Optional description to send with the transaction. |
{- "external_id": "ab,cd:va-my.test_1",
- "loan_maturity_date": "2018-12-23T13:50:12.000Z",
- "annual_percentage_rate": 15,
- "lenders": [
- {
- "customer_id": "5c1774e767400e2b76036461",
- "funded_amount": 1200000
}
], - "borrower_id": "5b51e6ba0071ec521008e21d",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "John Doe",
- "destination_account_number": 8982312309,
- "loan_id": "cc123456",
- "description": "loan-disb-123"
}{- "id": "c80fb93c-b9f7-419d-a221-29bedc87a778",
- "external_id": "loan-1233889871",
- "loan_maturity_date": "2018-12-23T13:50:12.000Z",
- "annual_percentage_rate": 15,
- "lenders": [
- {
- "customer_id": "5c1774e767400e2b76036461",
- "funded_amount": 1200000
}
], - "principal_amount": 2050000,
- "borrower_id": "5b51e6ba0071ec521008e21d",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "John Doe",
- "destination_account_number": "8982312309",
- "loan_id": "loan-123456",
- "status": "PENDING",
- "user_id": "5b51e6ba0071ec521008e21d",
- "created": "2018-12-12T13:50:12.000Z",
- "updated": "2018-12-12T13:50:12.000Z"
}Retrieve detailed information about a specific RDL Disbursement using its unique ID.
This endpoint allows you to fetch an existing RDL Disbursement record by providing the corresponding id.
It can be used to:
This helps you ensure real-time monitoring and reconciliation of disbursement activities initiated through CRING.
📥 Request Requirements must contain following information:
| investor_id required | string Example: b9666300-7300-11e9-8373-6753d37f1b1f Investor Id |
| id required | string Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb RDL Disbursement Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "status": "COMPLETED",
- "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
- "investor_id": "12312312312",
- "external_id": "rdl-disbursement-951",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Lingga",
- "destination_account_number": "9883456789",
- "amount": 10000,
- "bank_reference": "bni-7f65eb11-2e83-11e9-b22f-2b4f9440c84b",
- "updated": "2019-02-12T05:03:12.563Z",
- "created": "2019-02-12T05:03:12.438Z"
}You will receive real-time notifications via a callback whenever the status of a Loan Disbursement changes during the disbursement process — from initiation to completion or failure.
You can add your callback URL in the CRING Dashboard.
A callback with status: DISBURSING will be sent once the loan disbursement amount has been successfully requested transfer from P2P's Escrow Account to Customer's Account.
This indicates that the disbursement process has started.
A callback with status: COMPLETED and the bank_reference field filled will be sent once the loan disbursement has been successfully transferred from Escrow Account to the borrower’s destination bank account.
This callback confirms that the transaction has been fully settled and the borrower has received the funds.
A callback with status: FAILED and a populated failure_code field will be sent if the loan disbursement fails to reach the borrower’s bank account.
Once the disbursement is marked as failed, the disbursed amount will automatically be refunded to P2P's Escrow Account.
You can refer to the failure_code for details on why the transaction failed (e.g., INVALID_DESTINATION).
Your system must return an HTTP status code to indicate the callback result:
| HTTP | Code | Description |
|---|---|---|
| 200 | Callback | received successfully |
| Other | Callback failed | CRING! will retry every 1 minute, up to 5 times |
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| id | string Unique ID generated for the loan disbursement. |
| external_id | string Unique external ID provided by the partner for reference and reconciliation. |
| loan_maturity_date | string <date-time> Date and time on which repayment of the loan needs to be made. |
| annual_percentage_rate | number Annual percentage rate of the loan. |
| principal_amount | number Total principal amount of the disbursement funded by all lenders. |
| borrower_id | string Unique ID of the borrower, as registered in CRING. |
| destination_account_code | string Bank or e-Wallet code of the destination account. |
| destination_account_holder_name | string Name of the account holder as per the bank’s records. |
| destination_account_number | string Account number or e-Wallet number of the destination. |
| loan_id | string Loan identifier used to associate this disbursement with its corresponding loan record. |
| created | string <date-time> Timestamp indicating when this loan disbursement was created. |
| updated | string <date-time> Timestamp indicating the latest update to this loan disbursement record. |
Array of objects List of lender objects contributing to the loan. | |
| failure_code | string Code representing the reason for failure of the loan disbursement. |
| status | string Current status of the loan disbursement. |
{- "id": "7fe55af0-1e82-11e9-8914-e96a7bd39676",
- "external_id": "1548188143",
- "loan_maturity_date": "2020-01-10T12:00:00.000Z",
- "annual_percentage_rate": 20,
- "principal_amount": 90000,
- "borrower_id": "ad695ee0-1e7d-11e9-8914-e96a7bd39676",
- "destination_account_code": "MANDIRI",
- "destination_account_holder_name": "Rizky",
- "destination_account_number": "7654321",
- "loan_id": "loan_164",
- "created": "2019-01-22T20:15:45.184Z",
- "updated": "2019-01-22T20:33:44.930Z",
- "lenders": [
- {
- "funded_amount": 45000,
- "customer_balance": 45000,
- "customer_id": "a51d0ac0-1e7d-11e9-8914-e96a7bd39676"
}, - {
- "funded_amount": 45000,
- "customer_balance": 45000,
- "customer_id": "946a98f0-1e7d-11e9-8914-e96a7bd39676"
}
], - "status": "DISBURSING"
}nullWhen a borrower makes a payment to a "repayment" virtual account, the funds are credited to the P2P's escrow balance, but no direct fund transfer occurs to the lenders’ bank accounts.
To record the repayment, the P2P Merchant must update the borrower’s and lenders’ ledgers accordingly.
Since a single loan can be funded by multiple lenders, the merchant is responsible for distributing the repayment amount among all participating lenders based on its own business logic or algorithm.
The Create Repayment API only updates the P2P's internal ledger — it deducts the borrower’s balance and adds to each lender’s balance.
No actual fund movement happens in the banking system during this process.
Lenders can later withdraw their funds via the Withdrawal API, or use the available balance for new loan investments.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| external_id required | string Unique identifier for this repayment transaction provided by the merchant. |
| amount required | number Total repayment amount made by the borrower, in IDR. |
| loan_id required | string Unique identifier of the loan associated with this repayment. |
| borrower_id required | string <uuid> Unique ID of the borrower making the repayment. |
| lender_id required | string <uuid> Unique ID of the lender receiving the repayment portion. |
{- "external_id": "repayment_875",
- "amount": 976000,
- "loan_id": "loan_879",
- "borrower_id": "fa71ac40-417a-11e9-89d2-59190dbc8f33",
- "lender_id": "ef3eb2f0-417a-11e9-89d2-59190dbc8f33"
}{- "status": "PENDING",
- "id": "1d89bd20-4186-11e9-bcdf-0b59ec82f64b",
- "external_id": "repayment_875",
- "amount": 976000,
- "loan_id": "loan_879",
- "borrower_id": "fa71ac40-417a-11e9-89d2-59190dbc8f33",
- "lender_id": "ef3eb2f0-417a-11e9-89d2-59190dbc8f33",
- "created": "2018-12-12T13:50:12.000Z",
- "updated": "2018-12-12T13:50:12.000Z"
}Retrieve details of an existing Repayment by using id on the respective endpoint.
This endpoint allows you to:
The Repayment Resource provides information such as repayment amount, associated loan ID, borrower and lender details, as well as timestamps for creation and updates.
This is useful for monitoring repayment progress, validating successful ledger updates, and ensuring repayment distribution logic is functioning as expected within the CRING system.
📥 Request Requirements must contain following information:
| id required | string Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb Repayment Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "status": "PENDING",
- "id": "1d89bd20-4186-11e9-bcdf-0b59ec82f64b",
- "external_id": "repayment_875",
- "amount": 976000,
- "loan_id": "loan_879",
- "borrower_id": "fa71ac40-417a-11e9-89d2-59190dbc8f33",
- "lender_id": "ef3eb2f0-417a-11e9-89d2-59190dbc8f33",
- "created": "2018-12-12T13:50:12.000Z",
- "updated": "2018-12-12T13:50:12.000Z"
}Retrieve details of an existing Repayment by using external_id on the respective endpoint.
This endpoint allows you to:
The Repayment Resource provides information such as repayment amount, associated loan ID, borrower and lender details, as well as timestamps for creation and updates.
This is useful for monitoring repayment progress, validating successful ledger updates, and ensuring repayment distribution logic is functioning as expected within the CRING system.
📥 Request Requirements must contain following information:
| id required | string Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb Repayment Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "status": "PENDING",
- "id": "1d89bd20-4186-11e9-bcdf-0b59ec82f64b",
- "external_id": "repayment_875",
- "amount": 976000,
- "loan_id": "loan_879",
- "borrower_id": "fa71ac40-417a-11e9-89d2-59190dbc8f33",
- "lender_id": "ef3eb2f0-417a-11e9-89d2-59190dbc8f33",
- "created": "2018-12-12T13:50:12.000Z",
- "updated": "2018-12-12T13:50:12.000Z"
}You can receive notifications via a callback whenever the status of a Repayment has changed.
You can set your callback URL in the CRING Dashboard.
Repayment Completed Callback
We will send you a callback request with schema Repayment Resource with status COMPLETED.
You will receive this callback when the Create Repayment request is successful and the borrower's and lenders’ balances have been updated.
Repayment Failed Callback
We will send you a callback request with schema Repayment Resource with status FAILED.
You will receive this callback when the Create Repayment request was not successful.
Check the failure_code to learn more about the error details and the appropriate follow-up action.
Your system must return an HTTP status code to indicate the callback result:
| HTTP | Code | Description |
|---|---|---|
| 200 | Callback | received successfully |
| Other | Callback failed | CRING! will retry every 1 minute, up to 5 times |
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| status | string The current status of the repayment. Possible values are |
| id | string Unique ID assigned by CRING for the repayment transaction. |
| external_id | string Unique identifier for the repayment provided by the merchant. |
| amount | number The total repayment amount made by the borrower to be distributed to the lender(s). |
| borrower_id | string The unique identifier of the borrower who made the repayment. |
| lender_id | string The unique identifier of the lender who receives the repayment. |
| loan_id | string The unique identifier of the loan that this repayment is associated with. |
| borrower_balance | number Only shown if callback |
| lender_balance | number Only shown if callback |
| failure_code | string Only shown if callback |
| created | string <date-time> Timestamp indicating when this repayment record was created. |
| updated | string <date-time> Timestamp indicating the last update to this repayment record. |
{- "status": "COMPLETED",
- "id": "1c09acd0-4186-11e9-bcdf-0b59ec82f64b",
- "external_id": "repayment_670",
- "amount": 976000,
- "borrower_id": "fa71ac40-417a-11e9-89d2-59190dbc8f33",
- "lender_id": "ef3eb2f0-417a-11e9-89d2-59190dbc8f33",
- "loan_id": "loan_879",
- "borrower_balance": 144000,
- "lender_balance": 6941000,
- "created": "2018-01-12T13:50:12.000Z",
- "updated": "2018-01-12T13:50:12.000Z"
}nullWithdrawals represent the process of transferring funds from the escrow balance to the respective real bank accounts of the lender or borrower.
The main purpose of a withdrawal is to allow lenders to receive funds from loan repayments made by borrowers.
⚠️ Important: Once a withdrawal request is created, it cannot be canceled.
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| external_id required | string Unique ID provided by the partner for reference and reconciliation of the withdrawal transaction. |
| amount required | number Amount of funds to be withdrawn from the escrow account. |
| customer_id required | string Unique ID of the customer (lender, borrower, or admin) who is performing the withdrawal. |
| destination_account_code required | string Bank code or financial institution code for the withdrawal destination account. |
| destination_account_holder_name required | string Name of the account holder as registered with the destination bank. |
| destination_account_number required | string Destination bank account number where the withdrawn funds will be transferred. |
| type required | string Type of transaction. For this endpoint, the value is always |
| description | string Additional note or purpose of the withdrawal transaction. |
{- "external_id": "withdrawal-1233889871",
- "amount": 100000,
- "customer_id": "5c1774e76966b43a5b8198fc",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Dubu Tofu",
- "destination_account_number": 212312345,
- "type": "WITHDRAWAL",
- "description": "esc-wtdrw-123"
}{- "id": "44e5abc9-be2a-41ce-af86-cf522ad6e260",
- "external_id": "withdrawal-1233889871",
- "amount": 100000,
- "customer_balance": 0,
- "customer_id": "5c1774e76966b43a5b8198fc",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Dubu Tofu",
- "destination_account_number": 212312345,
- "status": "PENDING",
- "type": "WITHDRAWAL",
- "created": "2018-12-12T13:50:12.000Z",
- "updated": "2018-12-12T13:50:12.000Z"
}Used to retrieve detailed information of a withdrawal (check status) using the id obtained from the Create Withdrawal API response.
📥 Request Requirements must contain following information:
| id required | string Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb Withdrawal Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "id": "44e5abc9-be2a-41ce-af86-cf522ad6e260",
- "external_id": "withdrawal-1233889871",
- "amount": 100000,
- "customer_balance": 0,
- "customer_id": "5c1774e76966b43a5b8198fc",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Dubu Tofu",
- "destination_account_number": "0212312345",
- "status": "DISBURSING",
- "type": "WITHDRAWAL",
- "created": "2018-12-12T13:50:12.000Z",
- "updated": "2018-12-12T13:50:12.000Z"
}Used to retrieve detailed information of a withdrawal (check status) using the external_id obtained from the Create Withdrawal API response.
📥 Request Requirements must contain following information:
| id required | string Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb Withdrawal Id |
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
{- "id": "44e5abc9-be2a-41ce-af86-cf522ad6e260",
- "external_id": "withdrawal-1233889871",
- "amount": 100000,
- "customer_balance": 0,
- "customer_id": "5c1774e76966b43a5b8198fc",
- "destination_account_code": "BCA",
- "destination_account_holder_name": "Dubu Tofu",
- "destination_account_number": "0212312345",
- "status": "DISBURSING",
- "type": "WITHDRAWAL",
- "created": "2018-12-12T13:50:12.000Z",
- "updated": "2018-12-12T13:50:12.000Z"
}Merchants will receive a callback notification when:
DISBURSING
The funds have been successfully moved from the escrow account to the Instamoney float account.
COMPLETED
The funds have been successfully transferred from the Instamoney float account to the customer’s bank account.
This status includes a bank_reference field for reconciliation purposes.
FAILED
The transfer to the customer’s bank account has failed.
The funds have been returned to the escrow account.
A failure_code field is included to provide details about the error.
Your system must return an HTTP status code to indicate the callback result:
| HTTP | Code | Description |
|---|---|---|
| 200 | Callback | received successfully |
| Other | Callback failed | CRING! will retry every 1 minute, up to 5 times |
📥 Request Requirements must contain following information:
| Authorization | string Example: Basic eyJraWQiOi...Jzc29zIiwiY Represents access_token of a request; string starts with keyword |
| id | string Unique ID generated for the loan disbursement. |
| external_id | string Unique external ID provided by the partner for reference and reconciliation. |
| loan_maturity_date | string <date-time> Date and time on which repayment of the loan needs to be made. |
| annual_percentage_rate | number Annual percentage rate of the loan. |
| principal_amount | number Total principal amount of the disbursement funded by all lenders. |
| borrower_id | string Unique ID of the borrower, as registered in CRING. |
| destination_account_code | string Bank or e-Wallet code of the destination account. |
| destination_account_holder_name | string Name of the account holder as per the bank’s records. |
| destination_account_number | string Account number or e-Wallet number of the destination. |
| loan_id | string Loan identifier used to associate this disbursement with its corresponding loan record. |
| created | string <date-time> Timestamp indicating when this loan disbursement was created. |
| updated | string <date-time> Timestamp indicating the latest update to this loan disbursement record. |
Array of objects List of lender objects contributing to the loan. | |
| failure_code | string Code representing the reason for failure of the loan disbursement. |
| status | string Current status of the loan disbursement. |
{- "id": "af7e77b0-1e87-11e9-8914-e96a7bd39676",
- "external_id": "wiag_1548190371",
- "amount": "50000,",
- "customer_balance": "40000,",
- "destination_account_code": "MANDIRI",
- "destination_destination_account_holder_name": "Lingga",
- "destination_account_number": "7654321",
- "type": "WITHDRAWAL",
- "created": "2019-01-22T20:52:52.523Z",
- "updated": "2019-01-22T20:53:08.190Z",
- "customer_id": "946a98f0-1e7d-11e9-8914-e96a7bd39676",
- "status": "DISBURSING"
}nullCRING! is connected with multiple banking and financial institution partners to provide payment and transaction services.
The availability of each bank depends on the supported product, service, and integration type.
| Bank | Virtual Account | QRIS | Fund Transfer | Account Validation | RDL | Integration |
|---|---|---|---|---|---|---|
| Bank BNI | ✓ | - | ✓ | ✓ | ✓ | SNAP / Non-SNAP |
| Bank BTN | ✓ | ✓ | - | - | - | SNAP / Non-SNAP |
| Bank Permata | ✓ | - | - | - | - | SNAP / Non-SNAP |
| Bank BRI | ✓ | - | ✓ | - | - | SNAP / Non-SNAP |
| Bank Mandiri | - | ✓ | - | - | - | SNAP / Non-SNAP |
| Bank Nobu | - | ✓ | - | - | - | SNAP / Non-SNAP |
Refer to the relevant product documentation for detailed API specifications, supported services, and integration requirements.
Note
Product availability and integration type may vary by banking partner. Refer to the relevant product documentation for the currently supported services.
CRING! APIs use HTTP status codes and response codes to indicate the result of an API request.
The HTTP status code provides the general result of the request, while the responseCode provides more detailed information about the request or transaction result.
| HTTP Status | Description |
|---|---|
200 |
Request successfully processed. |
202 |
Request accepted and is still being processed. |
400 |
Invalid request or request validation failed. |
401 |
Authentication failed or access token is invalid. |
403 |
Request or transaction is not permitted. |
404 |
Requested resource or transaction was not found. |
405 |
HTTP method is not supported. |
409 |
Request conflicts with an existing resource or transaction. |
429 |
Too many requests or request limit exceeded. |
500 |
Internal server error. |
504 |
Request timeout or upstream service timeout. |
In addition to the HTTP status code, CRING! APIs return a responseCode and responseMessage to provide more detailed information about the result.
Example:
{
"responseCode": "40000",
"responseMessage": "General request failed error"
}
The response code structure and available codes may vary depending on the product, integration type, and banking partner.
CRING! response codes generally cover the following error categories:
| Category | Description |
|---|---|
| Request Validation | Invalid, missing, or incorrectly formatted request parameters. |
| Authentication | Invalid or missing authentication credentials or access token. |
| Authorization | Client or transaction is not permitted to perform the requested operation. |
| Transaction | Transaction cannot be processed due to its current status or business conditions. |
| Duplicate | Request or transaction has already been submitted. |
| Limit | Transaction or activity exceeds the applicable limit. |
| Resource | Requested transaction, account, or resource cannot be found or is invalid. |
| Timeout | Request or transaction processing exceeds the allowed time. |
| System | Internal or external service error. |
Detailed response codes are documented within each product API section.
This allows each product to define response codes based on its specific transaction flow and banking partner integration.
For example:
Refer to the relevant product documentation for the complete list of response codes and their descriptions.
Note
The same HTTP status code may represent different response codes depending on the product and banking partner. Always use the
responseCodeandresponseMessagetogether with the HTTP status code when handling API responses.
| Version | Date | Description |
|---|---|---|
1.1.0 |
2026-08-28 | Documentation restructured to separate SNAP and Non-SNAP API specifications, improving navigation and version management. |
| 1.0.0 | 2023-02-07 | Initial release of CRING! Payment Facilitator API documentation. |
CRING! is SPE's Digital Payment & Transaction Platform that provides APIs for digital payment and financial transaction services.
CRING! provides services including:
Yes. CRING! supports both SNAP and Non-SNAP API integrations. The available integration type depends on the product and banking partner.
API credentials are provided after the client completes the required onboarding and configuration process through CRING!.
Authentication depends on the integration type:
Refer to the Authentication section for details.
Use the Sandbox environment for development and integration testing. Production access is provided according to the applicable onboarding and configuration process.
General HTTP status codes and error handling are described in Error Code.
Product-specific response codes are available in the corresponding product API documentation.