CRING! Payment

Download OpenAPI specification:Download

Introduction

CRING! Logo

API Documentation

Digital Payment & Transaction Platform

Version 1.1.0

About CRING!

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! Platform

CRING! consists of two main components:

API

The CRING! API provides programmatic access to payment and financial transaction services.

Through the API, partners can integrate services such as:

  • Virtual Account
  • QRIS
  • Fund Transfer
  • Bank Account Validation
  • RDL (Rekening Dana Lender)
  • Other supported payment and transaction services

API integration is available through SNAP or Non-SNAP depending on the product and integration configuration.

Portal

The CRING! Portal provides a centralized interface for managing and monitoring the integration.

The portal may be used for:

  • Client and application management
  • API credential management
  • Integration configuration
  • Transaction monitoring
  • Operational activities
  • Reporting
  • Audit trail

The Portal complements the API integration by providing visibility and operational capabilities without requiring all activities to be performed through APIs.


Integration Types

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.

Business Models

CRING! supports two business models:

Payment Facilitator

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.

Payment Aggregator

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.

Available Services

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

How CRING! API Integration Works

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

Authentication

CRING! supports different authentication mechanisms depending on the API integration type and product.

CRING! provides two integration types:

  • SNAP — APIs that follow the Standar Nasional Open API Pembayaran (SNAP) standard.
  • Non-SNAP — APIs that use authentication and integration mechanisms defined by CRING! and/or the applicable banking partner outside the SNAP standard.

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.

Authentication by Integration Type

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 Authentication

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.

OAuth 2.0 Client Credentials

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

Step 1 — Obtain Client Credentials

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_secret confidential. Do not expose it in source code, public repositories, client-side applications, or logs.

Step 2 — Request an Access Token

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.

JSON Body

{
  "grantType": "client_credentials"
}

Step 3 — Receive the Access Token

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.

Step 4 — Use the Access Token

Include the access token in subsequent API requests:

Authorization: Bearer <access_token>

Access Token Expiration

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_id and client_secret.


SNAP Authentication

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:

  1. Client credential and key pair registration
  2. Generate B2B access token
  3. Generate request signature
  4. Use the B2B access token to access SNAP APIs

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

1. Key Pair Registration

Before using SNAP API authentication, the merchant must register an RSA public key with CRING!.

The key pair consists of:

  • Private Key — generated and securely stored by the merchant.
  • Public Key — registered with CRING! through the CRING! Partner Portal.

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.

Key Requirements

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.


2. Generate B2B Access Token

The B2B access token is required to authenticate API requests to CRING! SNAP APIs.

The SNAP token request is authenticated using an asymmetric signature.

Endpoint

POST {{baseUrl}}/v1.0/access-token/b2b

Headers

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.

Example Headers

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>

Request Body

{
  "grantType": "client_credentials"
}

Request Parameter

Field Type Required Description
grantType String Yes OAuth 2.0 grant type. Must be client_credentials for B2B authentication.

3. Generate B2B Request Signature

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.

Signing Formula

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.


Step-by-step Signing Process

Step 1 — Generate the Timestamp

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!.

Step 2 — Build the String to Sign

Concatenate the client key and timestamp using |:

{ClientKey}|{Timestamp}

Example:

962489e9-de5d-4eb7-92a4-b07d44d64bf5|2026-08-09T07:49:00+07:00

Step 3 — Sign Using RSA-SHA256

Sign the string using:

  • RSA private key
  • SHA-256
  • RSA PKCS#1 v1.5

Step 4 — Encode the Signature

Encode the resulting binary signature using Base64.

The result becomes the value of:

X-SIGNATURE: <base64_signature>

4. Example B2B Token Request

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"
}

5. B2B Access Token Response

When the request is successfully authenticated, CRING! returns a B2B access token.

Example Response

{
  "responseCode": "2007300",
  "responseMessage": "Successful",
  "accessToken": "eyJhbGciOi...",
  "tokenType": "Bearer",
  "expiresIn": "900",
  "additionalInfo": {}
}

6. Use B2B Access Token

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.

7. Generate Signature for API Requests

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:

  • Required headers
  • String-to-sign format
  • Signature algorithm
  • Signing key
  • Timestamp requirements
  • Request body handling

Always use the signature rules defined by the relevant API.

8. Access Token Expiration

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-SIGNATURE must be freshly generated for every B2B access token request using the current X-TIMESTAMP.

9. Authentication Security

To maintain secure communication:

  • Always use HTTPS.
  • Generate an RSA key pair with a minimum key size of 2048 bits.
  • Keep the private key securely stored on the merchant side.
  • Never send the private key to CRING!.
  • Register the corresponding public key with CRING!.
  • Generate a fresh X-SIGNATURE for every token request.
  • Use the current X-TIMESTAMP.
  • Ensure X-CLIENT-KEY matches the client key registered with CRING!.
  • Do not expose private keys, signatures, or access tokens in logs.
  • Request a new B2B access token when the current token expires.

10. Implementation Example

Go

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

<?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;
?>

11. Authentication Flow Summary

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 Errors

Authentication-related errors may occur when:

  • client_id is invalid.
  • client_secret is invalid.
  • The client is not authorized to access the API.
  • The access token is missing.
  • The access token is invalid.
  • The access token has expired.
  • The authentication format is invalid.
  • The request signature is invalid.
  • The timestamp is invalid or outside the allowed time window.

Refer to Error Handling for general error handling guidance and the relevant product documentation for product-specific response codes.

Security Best Practices

Regardless of the integration type, clients should:

  • Always use HTTPS.
  • Store client_secret securely.
  • Never expose credentials in client-side applications.
  • Never commit credentials to source code repositories.
  • Never log client_secret, private keys, signing keys, or access tokens.
  • Protect private keys and signing keys.
  • Request a new access token when the current token expires.
  • Generate request signatures according to the applicable SNAP specification.
  • Use a unique X-EXTERNAL-ID for each request.
  • Generate the appropriate X-TIMESTAMP for each request.
  • Handle authentication errors without exposing sensitive credential information.

Error Handling

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.

Understanding API Responses

When processing a CRING! API response, clients should consider the following information:

  1. HTTP Status Code
    Indicates the HTTP-level result of the request.

  2. Response Code
    Provides more specific information about the API or business result.

  3. Response Message
    Provides a human-readable description of the response.

  4. 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.

HTTP Status 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.

Response Code

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:

  • Successful request
  • Request validation failure
  • Authentication failure
  • Authorization failure
  • Resource not found
  • Duplicate request
  • Transaction failure
  • Transaction pending
  • Transaction expired
  • Transaction limit exceeded
  • Insufficient funds
  • Timeout
  • System error

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.

Error Response

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"
    }
  ]
}

API Guidelines

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.

1. API Request

HTTP Methods

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.

2. Request Headers

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.

3. Request and Response Format

CRING! APIs generally use JSON as the request and response format.

Request

{
  "example": "value"
}

Response

{
  "responseCode": "2000000",
  "responseMessage": "Successful",
  "data": {}
}

Payment Simulator

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.

Purpose

The Payment Simulator can be used to:

  • Test API integration in the Sandbox environment.
  • Simulate payment and transaction scenarios.
  • Validate integration workflows.
  • Verify transaction status handling.
  • Test system behavior before Production implementation.

Sandbox Environment

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 Simulator

Access the CRING! Payment Simulator through the following link:

Open Payment Simulator

Developers can use the simulator together with the corresponding API documentation to test their integration flow.

Simulation Guide

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.

Virtual Account Simulation

Sample demonstration of a Virtual Account payment simulation:

QRIS 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.

AUTHENTICATION NON SNAP

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.

Response Codes

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.

Response Code Categories

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.

Response Code Format

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

Generate Access Token

To access CRING NON SNAP services, obtain an access token using the client_credentials grant type.

header Parameters
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:

Authorization: Basic {Base64(client_id:client_secret)}

Example: If:

  • client_id = your_client_id
  • client_secret = your_client_secret
Request Body schema: application/json
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).

Responses

Request samples

Content type
application/json
{
  • "grantType": "client_credentials"
}

Response samples

Content type
application/json
{
  • "responseCode": "20000",
  • "responseMessage": "Successful",
  • "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZjFmM2Q3ZS1kOTA3LTRkOWItODJlNC02Y2IxZGYxOTBlOWUiLCJjbGllbnRJZCI6IjZhZTk1N2M0LTI4NjMtNDcxMy1hY2NlLWJhMTJkZTYzNmNmYyIsIm5iZiI6MTYxMTQ2ODg1NiwiZXhwIjoxNjExNDY5NzU2LCJpYXQiOjE2MTE2NDY4ODU2fQ",
  • "tokenType": "Bearer",
  • "expiresIn": 900,
  • "additionalInfo": { }
}

AUTHENTICATION SNAP

Signature

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:

  1. Signature Access Token used when requesting a SNAP Access Token B2B.
  2. Signature Service used when calling SNAP Service APIs after obtaining an Access Token.

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

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.


How It Works

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.


Signing Process

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}

Required Data

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 Timestamp used to generate the signature must be exactly the same as the value sent in the X-TIMESTAMP request header.


Signature Service

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.


How It Works

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

Step 1 - Hash the Request Body

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.

Step 2 - Build the String to Sign

Use the following pattern:

{HTTPMethod}:{EndpointUrl}:{LowercaseHashedRequestBody}:{Timestamp}

Example:

POST:/v1/transfer:069a81f985277e7aade3f503088cde559ba09ea0603e00a568aed10a3d8f1920:2025-01-01T23:59:59+07:00

Step 3 - Generate the Signature

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 Timestamp used to generate the signature must be exactly the same as the value sent in the X-TIMESTAMP request header.

Required Data

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

Signature Selection

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

Security Notes

  • Never expose or share the RSA Private Key or Client Secret.
  • Generate the signature on the merchant side before sending the request.
  • Use the current timestamp to prevent replay attacks.
  • Ensure the timestamp used during signing is identical to the X-TIMESTAMP request header.
  • The X-SIGNATURE value must be Base64-encoded.

Callback Authentication

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.

Merchant Endpoint

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.

Authentication Flow

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

Request Headers

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}

Signature

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.

Request Body

The request body uses application/json:

{
  "grantType": "client_credentials"
}

Request Fields

Field Type Required Description
grantType string Yes Must be client_credentials.

Response

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.

Success Response

{
  "responseCode": "2007300",
  "responseMessage": "Successful",
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "tokenType": "Bearer",
  "expiresIn": "900",
  "additionalInfo": {}
}

Response Fields

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.

Using the Access Token

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...

Important Notes

  • This endpoint is provided and managed by the merchant.
  • {clientBaseUrl} is determined by the merchant.
  • CRING calls this endpoint to obtain an access token before sending callback requests.
  • The merchant must validate the X-SIGNATURE before issuing an access token.
  • The returned access token must be valid for the period specified by expiresIn.
  • The access token must be accepted as a Bearer token on subsequent callback requests.
  • The merchant's RSA Private Key must never be shared with CRING.

Response Codes

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.

Response Code List

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

Response Code Categories

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.


Field Placeholder

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

Access Token B2B

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.

header Parameters
Content-Type
required
string
Example: application/json

Specifies the media type of the request body.

Example:

Content-Type: application/json
X-TIMESTAMP
required
string

Current timestamp used to generate the signature.

Format:

yyyy-MM-ddTHH:mm:ssTZD

Example:

X-TIMESTAMP: 2025-01-01T23:59:59+07:00
X-CLIENT-KEY
required
string

Client Key assigned to the merchant by CRING.

Example:

X-CLIENT-KEY: 962489e9-de5d-4eb7-92a4-b07d44d64bf5
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:

StringToSign = {ClientKey}|{Timestamp}

Then sign the StringToSign using RSA SHA-256 with the merchant's Private Key:

Signature = Base64(
    RSA_SHA256_Sign(
        StringToSign,
        PrivateKey
    )
)

Example:

X-SIGNATURE: {Base64Signature}

The Timestamp and ClientKey used to generate the signature must be exactly the same as the values sent in X-TIMESTAMP and X-CLIENT-KEY.

Request Body schema: application/json
grantType
required
string

Grant type used to obtain the Access Token B2B.

Must be set to client_credentials.

Responses

Request samples

Content type
application/json
{
  • "grantType": "client_credentials"
}

Response samples

Content type
application/json
{
  • "responseCode": "2007300",
  • "responseMessage": "Successful",
  • "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZjFmM2Q3ZS1kOTA3LTRkOWItODJlNC02Y2IxZGYxOTBlOWUiLCJjbGllbnRJZCI6IjZhZTk1N2M0LTI4NjMtNDcxMy1hY2NlLWJhMTJkZTYzNmNmYyIsIm5iZiI6MTYxMTQ2ODg1NiwiZXhwIjoxNjExNDY5NzU2LCJpYXQiOjE2MTE2NDY4ODU2fQ",
  • "tokenType": "Bearer",
  • "expiresIn": "900",
  • "additionalInfo": { }
}

VIRTUAL ACCOUNT CREDIT

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

  • Standardized API across multiple banking partners.
  • Automatic payment identification and reconciliation.
  • Real-time payment notification through Callback.
  • Single integration for multiple banking services.
  • Support for both Payment Facilitator and Payment Aggregator business models.

Business Model

Payment Facilitator

For Payment Facilitator clients, VA Credit is currently available through:

  • Bank BNI
  • Bank BTN
  • Bank Permata

Payment Aggregator

For Payment Aggregator clients, VA Credit is currently available through:

  • Bank BRI

Supported Banks

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.

VA NON SNAP - BNI

Virtual Account Credit API for Non-SNAP integration with Bank BNI.

This service allows merchants to create Virtual Account numbers issued by Bank BNI.

Response Codes

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

Create VA

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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:

Type Description
va-closed-payment Fixed payment: invoice/billing should be paid with exactly the same amount as requested.
va-open-payment Open payment: invoice/billing can be paid multiple times as long as it is still active.
va-partial-payment Installment/partial payment: invoice/billing can be paid multiple times as long as paid amount is less than the requested amount and still active.
va-minimum-payment Minimum payment: invoice/billing can be paid with greater than or equal to therequested amount.
va-open-minimum Open minimum payment: invoice/billing can be paid greater than or equal to the requested amount multiple times as long as it is still active.
va-open-maximum Open maximum payment: invoice/billing can be paid less than or equal to the requested amount multiple times as long as it is still active.
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 credit

numberSuffix
string [ 1 .. 8 ] characters

Suffix for Virtual Account Number

additionalInfo
object

Responses

Request samples

Content type
application/json
{
  • "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": { }
}

Response samples

Content type
application/json
{
  • "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": ""
}

Update VA

This service used by merchant to update transaction data.

📥 Request Requirements must contain following information:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "expiredDate": "2030-05-10T23:59:59+07:00",
  • "paymentId": "5031794d2dda4b7ab054d4204cd56a32",
  • "amount": 1000000,
  • "customerName": "John Doe",
  • "customerPhone": "0818404379",
  • "customerEmail": "john@customer.co.id",
  • "additionalInfo": { }
}

Response samples

Content type
application/json
{
  • "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": ""
}

Inquiry VA

This service used by merchant to get latest transaction data.

📥 Request Requirements must contain following information:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
paymentId
required
string

Unique ID generated by system for this object

Responses

Request samples

Content type
application/json
{
  • "paymentId": "5031794d2dda4b7ab054d4204cd56a32"
}

Response samples

Content type
application/json
{
  • "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"
}

Payment Notification Webhook

/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.

Request Body schema: application/json
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 numberSuffix or customerNo.

virtualAccountTrxType
required
string

Identifier payment type that must be:

Type Description
va-closed-payment Fixed payment: invoice/billing should be paid with exactly the same amount as requested.
va-open-payment Open payment: invoice/billing can be paid multiple times as long as it is still active.
va-partial-payment Installment/partial payment: invoice/billing can be paid multiple times as long as paid amount is less than the requested amount and still active.
va-minimum-payment Minimum payment: invoice/billing can be paid with greater than or equal to therequested amount.
va-open-minimum Open minimum payment: invoice/billing can be paid greater than or equal to the requested amount multiple times as long as it is still active.
va-open-maximum Open maximum payment: invoice/billing can be paid less than or equal to the requested amount multiple times as long as it is still active.
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 paymentType)

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

Responses

Request samples

Content type
application/json
{
  • "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"
}

Response samples

Content type
application/json
{
  • "responseCode": "20000",
  • "responseMessage": "Successful"
}

VA NON SNAP - MULTI BANK

Virtual Account Credit API for Non-SNAP integration across supported banks.

Supported Banks

  • BTN
  • Permata
  • BRI
  • BNI (New)

Bank Code

Code Name
002 BANK RAKYAT INDONESIA (BRI)
009 BANK NEGARA INDONESIA (BNI)
013 BANK PERMATA
200 BANK TABUNGAN NEGARA (BTN)

Response Codes

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

Create VA

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json

Successful

One of
bankCode
required
string

Bank code for BANK BTN is 200. Refer to Bank Code (Bank Code).

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:

Type Description
va-closed-payment Fixed payment: invoice/billing should be paid with exactly the same amount as requested.
va-open-payment Open payment: invoice/billing can be paid multiple times as long as it is still active.
va-partial-payment Installment/partial payment: invoice/billing can be paid multiple times as long as paid amount is less than the requested amount and still active.
required
object
customerNo
string

Unique number for the customer. This number will be generated as a suffix in Virtual Account.

Min Length Max Length Example
11 11 "12345678901"
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

Responses

Request samples

Content type
application/json
Example
{
  • "bankCode": "200",
  • "virtualAccountName": "John Doe",
  • "virtualAccountEmail": "john@mail.com",
  • "virtualAccountPhone": "628888888881",
  • "virtualAccountTrxType": "va-closed-payment",
  • "totalAmount": {
    },
  • "customerNo": "12345678901",
  • "expiredDate": "2022-01-01T00:00:00+07:00",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2002700",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    },
  • "virtualAccountTrxType": "va-closed-payment",
  • "expiredDate": "2022-01-01T00:00:00+07:00",
  • "additionalInfo": {
    }
}

Update VA

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
One of
bankCode
required
string

Bank code for BANK BTN is 200. Refer to Bank Code (Bank Code).

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:

Type Description
va-closed-payment Fixed payment: invoice/billing should be paid with exactly the same amount as requested.
va-open-payment Open payment: invoice/billing can be paid multiple times as long as it is still active.
va-partial-payment Installment/partial payment: invoice/billing can be paid multiple times as long as paid amount is less than the requested amount and still active.
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

Responses

Request samples

Content type
application/json
Example
{
  • "bankCode": "200",
  • "trxId": "1299e43112754fc4938666e59fc52f08",
  • "virtualAccountName": "John Doe",
  • "virtualAccountEmail": "john@mail.com",
  • "virtualAccountPhone": "628888888881",
  • "virtualAccountTrxType": "va-closed-payment",
  • "totalAmount": {
    },
  • "expiredDate": "2030-05-10T23:59:59+07:00",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2002800",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    },
  • "virtualAccountTrxType": "va-closed-payment",
  • "expiredDate": "2022-01-01T00:00:00+07:00",
  • "additionalInfo": {
    }
}

Inquiry VA

This service is used by merchants to obtain information from the Virtual Account number that has been created.

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
One of
bankCode
required
string

Bank code for BANK BTN is 200. Refer to Bank Code (Bank Code).

virtualAccountNo
required
string

Virtual Account number

trxId
required
string

Unique ID generated by system when Virtual Account number has been created.

Responses

Request samples

Content type
application/json
Example
{
  • "bankCode": "200",
  • "virtualAccountNo": "9190000499880126971199003",
  • "trxId": "1299e43112754fc4938666e59fc52f08"
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2002600",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    },
  • "inquiryStatus": "00",
  • "statusDescription": "Active",
  • "virtualAccountTrxType": "va-closed-payment",
  • "expiredDate": "2022-01-01T00:00:00+07:00",
  • "additionalInfo": {
    }
}

Inquiry Status VA

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.

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
bankCode
required
string

Bank code. Refer to Bank Code (Bank Code). Currently only bankCode 009 (BNI) is accepted.

virtualAccountNo
required
string

Virtual Account number

Responses

Request samples

Content type
application/json
{
  • "bankCode": "009",
  • "virtualAccountNo": "9190000499880126971199003"
}

Response samples

Content type
application/json
{
  • "responseCode": "2002600",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    }
}

Delete VA

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.

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
One of
bankCode
required
string

Bank Code for BANK BTN is 200. Refer to Bank Code (Bank Code).

virtualAccountNo
required
string

Virtual Account number

trxId
required
string

Transaction id generated by system when Virtual Account number has been created.

Responses

Request samples

Content type
application/json
Example
{
  • "bankCode": "200",
  • "virtualAccountNo": "9190000499880126971199003",
  • "trxId": "3845526792745904557"
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2003100",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    }
}

Payment Notification Webhook

/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.

Request Body schema: application/json
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 numberSuffix or customerNo.

virtualAccountTrxType
required
string

Identifier payment type that must be:

Type Description
va-closed-payment Fixed payment: invoice/billing should be paid with exactly the same amount as requested.
va-open-payment Open payment: invoice/billing can be paid multiple times as long as it is still active.
va-partial-payment Installment/partial payment: invoice/billing can be paid multiple times as long as paid amount is less than the requested amount and still active.
va-minimum-payment Minimum payment: invoice/billing can be paid with greater than or equal to therequested amount.
va-open-minimum Open minimum payment: invoice/billing can be paid greater than or equal to the requested amount multiple times as long as it is still active.
va-open-maximum Open maximum payment: invoice/billing can be paid less than or equal to the requested amount multiple times as long as it is still active.
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 paymentType)

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

Responses

Request samples

Content type
application/json
{
  • "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"
}

Response samples

Content type
application/json
{
  • "responseCode": "20000",
  • "responseMessage": "Successful"
}

VA SNAP

Virtual Account Credit API for SNAP integration across supported banks.

Supported Banks

  • BTN
  • Permata
  • BRI
  • BNI

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.

Bank Code

Code Name
002 BANK RAKYAT INDONESIA (BRI)
009 BANK NEGARA INDONESIA (BNI)
013 BANK PERMATA
200 BANK TABUNGAN NEGARA (BTN)

Response Codes

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

Create VA

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json

Successful

One of
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:

Code Type Description
C Closed Payment Fixed payment. The invoice/billing must be paid with the exact requested amount and can only be paid once.
O Open Payment Open payment. The invoice/billing can be paid with any amount and can only be paid once.
I Partial Payment Partial payment. The invoice/billing can be paid multiple times until the requested amount is fully paid.
required
object
expiredDate
required
string

Expiry date of the Virtual Account in ISO 8601 format.

required
object

Responses

Request samples

Content type
application/json
Example
{
  • "partnerServiceId": "07700001",
  • "customerNo": "12345678910",
  • "virtualAccountName": "John Doe",
  • "virtualAccountEmail": "john.doe@mail.com",
  • "virtualAccountPhone": "628917457821",
  • "trxId": "1122344",
  • "virtualAccountTrxType": "C",
  • "totalAmount": {
    },
  • "expiredDate": "2026-02-05T21:31:26+07:00",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2002700",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    }
}

Update VA

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
One of
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.

Code Type Description
C Closed Payment Fixed payment. The invoice/billing must be paid with the exact requested amount and can only be paid once.
O Open Payment Open payment. The invoice/billing can be paid with any amount and can only be paid once.
I Partial Payment Partial payment. The invoice/billing can be paid multiple times until the requested amount is fully paid.
required
object
expiredDate
required
string

Expiry date of the Virtual Account in ISO 8601 format.

object

Additional partner-specific information.

Responses

Request samples

Content type
application/json
Example
{
  • "partnerServiceId": "12345678",
  • "customerNo": "12345678910",
  • "virtualAccountNo": "1234567812345678910",
  • "virtualAccountName": "John Doe Updated",
  • "trxId": "INV-20260630-0001",
  • "virtualAccountEmail": "john.updated@example.com",
  • "virtualAccountPhone": "6281234567890",
  • "virtualAccountTrxType": "C",
  • "totalAmount": {
    },
  • "expiredDate": "2026-02-05T21:31:26+07:00",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2002800",
  • "responseMessage": "Request has been processed successfully",
  • "virtualAccountData": {
    }
}

Inquiry VA

This service is used by merchants to obtain information from the Virtual Account number that has been created.

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
One of
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

Responses

Request samples

Content type
application/json
Example
{
  • "partnerServiceId": "12345678",
  • "customerNo": "12345678910",
  • "virtualAccountNo": "1234567812345678910",
  • "trxId": "1122344",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2003000",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    }
}

Inquiry Status VA

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.

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
{
  • "partnerServiceId": "12345678",
  • "customerNo": "01234567891011121318",
  • "virtualAccountNo": "1234567801234567891011121318",
  • "inquiryRequestId": "abcdef-123456-abcdef",
  • "paymentRequestId": "abcdef-123456-abcdef",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "responseCode": "2002600",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    }
}

Delete VA

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.

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
One of
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.

Responses

Request samples

Content type
application/json
Example
{
  • "partnerServiceId": "12345678",
  • "customerNo": "12345678910",
  • "virtualAccountNo": "1234567812345678910",
  • "trxId": "1122344",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2003100",
  • "responseMessage": "Successful",
  • "virtualAccountData": {
    }
}

Payment Notification

/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.

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
{
  • "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": {
    },
  • "totalAmount": {
    },
  • "trxDateTime": "2025-08-18T10:57:15+07:00",
  • "referenceNo": "013005",
  • "journalNum": "000151",
  • "flagAdvise": "N",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "responseCode": "2002500",
  • "responseMessage": "Successful",
  • "virtualAccountdata": {
    }
}

QRIS

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.

QRIS Features

  • Fully compliant with Bank Indonesia’s QRIS specification
  • Supports static and dynamic QR generation
  • Supports merchant-presented mode (MPM)
  • Secure transaction processing through certified acquiring banks
  • Fast settlement and reporting with acquirer bank partners

Supported Acquirer Banks

CRING! currently supports QRIS acquiring via the following banks:

Code Name
008 BANK MANDIRI
200 BANK TABUNGAN NEGARA
503 BANK NATIONAL NOBU

QRIS NON SNAP

Response Code

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

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
One of
acquirerCode
required
string

Acquirer Code for BANK BTN is 200. Refer to Acquirer Code (Acquirer Code).

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.

Responses

Request samples

Content type
application/json
Example
{
  • "acquirerCode": "200",
  • "type": "D",
  • "amount": {
    },
  • "terminalId": "A01",
  • "channelName": "API",
  • "tipType": "02",
  • "tipValue": "1000.00",
  • "additionalInfo": "Additional Info"
}

Response samples

Content type
application/json
Example
{
  • "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"
}

Check Status

This service used by merchant to check payment status QR based on reference number.

📥 Request Requirements must contain following information:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
One of
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.

Responses

Request samples

Content type
application/json
Example
{
  • "acquirerCode": "200",
  • "partnerReferenceNo": "2020102900000000000001",
  • "referenceNo": "2020102977770000000009"
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2005100",
  • "responseMessage": "Successful",
  • "partnerReferenceNo": "2020102900000000000001",
  • "referenceNo": "2020102977770000000009",
  • "transactionStatusDesc": "success",
  • "paidTime": "2020-10-20T17:56:57+07:00",
  • "amount": {
    },
  • "additionalInfo": {
    }
}

QRIS Dynamic Payment Notification Webhook

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
Example
{
  • "transactionId": "cb267ae5-4e9c-4a08-9a88-b031f1bddcff",
  • "originalReferenceNo": "2020102977770000000009",
  • "originalPartnerReferenceNo": "2020102900000000000001",
  • "latestTransactionStatus": "00",
  • "transactionStatusDesc": "success",
  • "customerNumber": "93600911372344659",
  • "accountType": "Savings Account",
  • "amount": {
    },
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "responseCode": "20000",
  • "responseMessage": "Successful"
}

QRIS SNAP

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.

Supported Services

Service Code Service
47 Generate QR MPM
51 Query Payment
52 Payment Notification QR

Response Code

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

Generate QR MPM

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
One of
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

Responses

Request samples

Content type
application/json
Example
{
  • "partnerReferenceNo": "2025102900000000000001",
  • "amount": {
    },
  • "terminalId": "001",
  • "validityPeriod": "2025-07-03T12:08:56+07:00",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "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"
}

Check Status QRIS SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
One of
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

Responses

Request samples

Content type
application/json
Example
{
  • "originalReferenceNo": "2020102977770000000009",
  • "originalPartnerReferenceNo": "2020102900000000000001",
  • "serviceCode": "47",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2005100",
  • "responseMessage": "Successful",
  • "originalPartnerReferenceNo": "2020102900000000000001",
  • "originalReferenceNo": "2020102977770000000009",
  • "serviceCode": "47",
  • "latestTransactionStatus": "00",
  • "transactionStatusDesc": "success",
  • "paidTime": "2020-10-20T17:56:57+07:00",
  • "amount": {
    },
  • "additionalInfo": {
    }
}

Payment Notification QRIS SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
One of
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

Responses

Request samples

Content type
application/json
{
  • "originalPartnerReferenceNo": "2020102900000000000001",
  • "originalReferenceNo": "2020102977770000000009",
  • "latestTransactionStatus": "00",
  • "transactionStatusDesc": "success",
  • "customerNumber": "6281388370001",
  • "accountType": "tabungan",
  • "amount": {
    },
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "responseCode": "2005200",
  • "responseMessage": "Successful",
  • "additionalInfo": {
    }
}

Transfer

CRING! supports Transfer transactions via:

  • Portal Transfer
  • API Integration

This feature allows partners to send funds securely and efficiently through the CRING! system.

Available Channels

1. Portal Transfer

Transfer can be executed manually through the CRING! portal. Use case:

  • Manual transaction processing
  • Operational/admin usage
  • Internal fund movement

2. API Transfer

Transfer can be executed via API. Use case:

  • Automated payout system
  • Merchant withdrawal
  • Disbursement service
  • System-to-system integration

Security

All transfer requests require:

  • Valid API credentials
  • Request authentication token
  • Proper request validation

Bank Code Reference

This section provides the list of bank identifiers and routing codes used for interbank transfer transactions.

Overview

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 Code Directory

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

Transfer NON SNAP

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.

Response Code

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)

Inquiry Account

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
accountNo
required
string

Account Number that used to be beneficiary transfer.

bankCode
string

bankCode is optional. You can leave it as null or an empty string, and it will default to 009 or BANK BNI.

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 kliring, filled from kliring code, eq: HRDAIDJ1

Responses

Request samples

Content type
application/json
{
  • "accountNo": "115471119",
  • "bankCode": "014"
}

Response samples

Content type
application/json
{
  • "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": {
    }
}

Transfer

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
One of
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 009 or BANK BNI.

beneficiaryAccountNo
required
string

Account Number that used to be beneficiary transfer.

object
remark
string

Description for transfer.

Responses

Request samples

Content type
application/json
Example
{
  • "inquiryId": "1ce4a232-a2d7-4bb9-8049-7a7dcc880733",
  • "type": "intrabank",
  • "beneficiaryAccountNo": "115471119",
  • "amount": {
    },
  • "remark": "Payment for billing"
}

Response samples

Content type
application/json
Example
{
  • "responseCode": "2001700",
  • "responseMessage": "Successful",
  • "requestId": "65e66257-a530-41e2-bb36-9a47858f5602",
  • "statusRequest": "Need Approval With Code"
}

Inquiry Transfer Status

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
{
  • "partnerReferenceNo": "202412171647300092",
  • "referenceNo": "389319"
}

Response samples

Content type
application/json
{
  • "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": {
    }
}

Generate Code (OTP) Transfer

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
requestId
required
string

Unique identifier of the transfer request.

Responses

Request samples

Content type
application/json
{
  • "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6"
}

Response samples

Content type
application/json
{
  • "responseCode": "20001",
  • "responseMessage": "Request has been processed successfully",
  • "code": "273231",
  • "expiresIn": "300"
}

Approve Transfer

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
{
  • "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6",
  • "code": "273231"
}

Response samples

Content type
application/json
{
  • "responseCode": "20001",
  • "responseMessage": "Request has been processed successfully"
}

Reject Transfer

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
requestId
required
string

Unique identifier of the transfer request.

reason
string

Reason or note describing why the transfer is rejected.

Responses

Request samples

Content type
application/json
{
  • "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6",
  • "reason": "Incorrect amount transfer"
}

Response samples

Content type
application/json
{
  • "responseCode": "20001",
  • "responseMessage": "Request has been processed successfully"
}

Transfer SNAP

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.

Supported Services

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

Response Code

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

Internal Account Inquiry

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "partnerReferenceNo": "202412171647300092",
  • "beneficiaryAccountNo": "115471119",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "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": {
    }
}

External Account Inquiry

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "beneficiaryBankCode": "014",
  • "beneficiaryAccountNo": "115471119",
  • "partnerReferenceNo": "202412171647300092",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "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": {
    }
}

Transfer Intrabank SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "partnerReferenceNo": "2026062900000000000001",
  • "amount": {
    },
  • "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": [
    ],
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "responseCode": "2001700",
  • "responseMessage": "Request has been processed successfully",
  • "referenceNo": "CRG202606290000000001",
  • "partnerReferenceNo": "2026062900000000000001",
  • "amount": {
    },
  • "beneficiaryAccountNo": "1234567890123456",
  • "currency": "IDR",
  • "customerReference": "INV-20260629-001",
  • "sourceAccountNo": "9876543210987654",
  • "transactionDate": "2026-06-29T10:30:00+07:00",
  • "originatorInfos": [
    ],
  • "additionalInfo": {
    }
}

Transfer Interbank SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "partnerReferenceNo": "2026062900000000000001",
  • "amount": {
    },
  • "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": [
    ],
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "responseCode": "2001800",
  • "responseMessage": "Request has been processed successfully",
  • "referenceNo": "CRG202606290000000001",
  • "partnerReferenceNo": "2026062900000000000001",
  • "amount": {
    },
  • "beneficiaryAccountNo": "1234567890123456",
  • "beneficiaryBankCode": "014",
  • "sourceAccountNo": "9876543210987654",
  • "traceNo": "2406291234567890",
  • "originatorInfos": [
    ],
  • "additionalInfo": {
    }
}

Transfer RTGS SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "partnerReferenceNo": "2026062900000000000001",
  • "amount": {
    },
  • "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": [
    ],
  • "transactionDate": "2026-06-29T10:30:00+07:00",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "responseCode": "2001900",
  • "responseMessage": "Request has been processed successfully",
  • "referenceNo": "CRG202606290000000001",
  • "partnerReferenceNo": "2026062900000000000001",
  • "amount": {
    },
  • "beneficiaryAccountName": "PT ABC Indonesia",
  • "beneficiaryAccountNo": "1234567890123456",
  • "beneficiaryAccountType": "D",
  • "beneficiaryBankCode": "014",
  • "currency": "IDR",
  • "customerReference": "RTGS-20260629-001",
  • "sourceAccountNo": "9876543210987654",
  • "originatorInfos": [
    ],
  • "traceNo": "2406291234567890",
  • "transactionDate": "2026-06-29T10:30:00+07:00",
  • "transactionStatus": "00",
  • "transactionStatusDesc": "SUCCESS",
  • "additionalInfo": {
    }
}

Transfer SKNBI SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "partnerReferenceNo": "2026062900000000000002",
  • "amount": {
    },
  • "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": [
    ],
  • "transactionDate": "2026-06-29T14:30:00+07:00",
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "responseCode": "2002300",
  • "responseMessage": "Request has been processed successfully",
  • "referenceNo": "CRG202606290000000002",
  • "partnerReferenceNo": "2026062900000000000002",
  • "amount": {
    },
  • "beneficiaryAccountName": "PT ABC Indonesia",
  • "beneficiaryAccountNo": "1234567890123456",
  • "beneficiaryAccountType": "S",
  • "beneficiaryBankCode": "014",
  • "currency": "IDR",
  • "customerReference": "SKN-20260629-001",
  • "sourceAccountNo": "9876543210987654",
  • "originatorInfos": [
    ],
  • "traceNo": "2406299876543210",
  • "transactionDate": "2026-06-29T14:30:00+07:00",
  • "transactionStatus": "00",
  • "transactionStatusDesc": "SUCCESS",
  • "additionalInfo": {
    }
}

Transfer Status SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "originalPartnerReferenceNo": "2026062900000000000001",
  • "originalReferenceNo": "CRG202606290000000001",
  • "originalExternalId": "202606290000000001",
  • "serviceCode": "17",
  • "transactionDate": "2026-06-29T10:30:00+07:00",
  • "amount": {
    },
  • "additionalInfo": {
    }
}

Response samples

Content type
application/json
{
  • "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": {
    },
  • "beneficiaryAccountNo": "1234567890123456",
  • "beneficiaryBankCode": "014",
  • "currency": "IDR",
  • "previousResponseCode": "2001800",
  • "referenceNumber": "CRG202606290000000001",
  • "sourceAccountNo": "9876543210987654",
  • "transactionId": "TRX202606290001",
  • "latestTransactionStatus": "00",
  • "transactionStatusDesc": "SUCCESS",
  • "additionalInfo": {
    }
}

Generate Code SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
requestId
required
string

Unique request identifier used to generate the OTP verification code.

Responses

Request samples

Content type
application/json
{
  • "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6"
}

Response samples

Content type
application/json
{
  • "responseCode": "2009100",
  • "responseMessage": "Request has been processed successfully",
  • "code": "273231",
  • "expiresIn": 300
}

Transfer Approval/Reject SNAP

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:

header Parameters
Authorization
required
string

Bearer access token obtained from the B2B Access Token endpoint.

Authorization: Bearer {accessToken}

Content-Type
required
string
Example: application/json

value must be application/json

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.

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
{
  • "requestId": "3f692849-32d8-4382-9c8e-dad8427bb3e6",
  • "code": "273231",
  • "type": "APPROVE"
}

Response samples

Content type
application/json
{
  • "responseCode": "2009200",
  • "responseMessage": "Request has been processed successfully"
}

Bank Validator

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.

Use Cases

  • Validating destination account before fund disbursement
  • Checking account status (e.g., Active, Dormant, Closed)
  • Preventing human error and mistyped account numbers

Bank Code

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

Type and Status Bank Account

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

Response Code

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

Bank Account Validator – BNI Account

🔍 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.

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
accountNumber
required
string

Bank account Number

Responses

Request samples

Content type
application/json
{
  • "accountNumber": "0115476117"
}

Response samples

Content type
application/json
{
  • "customerName": "John Doe",
  • "accountNumber": "0115476117",
  • "currency": "IDR",
  • "status": "BUKA",
  • "type": "DEP"
}

Bank Account Validator – Non BNI Account

🔍 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.

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
accountNumber
required
string

Bank account Number

bankCode
required
string <= 3 characters

Bank Code, see

Responses

Request samples

Content type
application/json
{
  • "accountNumber": "0115476117",
  • "bankCode": "014"
}

Response samples

Content type
application/json
{
  • "customerName": "John Doe",
  • "bankName": "Bank Mandiri",
  • "reffNum": "100000000097"
}

RDL

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.

RDL Registration Flow

After a Lender successfully completes customer registration:

  1. The P2P platform sends a request to CRING! to register the Lender's RDL.
  2. CRING! communicates with BNI to:
  • Create the Lender's CIF (Customer Information File).
  • Create the RDL account.
  1. Once the RDL is successfully created, CRING! stores the account information and provides the result to the P2P platform.

RDL Fund Flow

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.

P2P Lending Fund Flow

RDL is also part of the overall investment and repayment flow:

  1. Lender Top Up
    The Lender deposits funds into their RDL.

  2. Investment
    Funds are transferred from the Lender's RDL to escrow.

  3. Loan Disbursement
    Funds from the Lender's escrow are transferred to the Borrower's escrow account.

  4. Repayment
    The Borrower repays the loan through a repayment Virtual Account (VA) to the Borrower's escrow account.

  5. Withdrawal
    Available funds can be transferred from escrow back to the Lender's RDL and subsequently withdrawn to the Lender's personal bank account.

Testing and Simulation

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:

  • Simulating an RDL top up.
  • Simulating funds transferred from RDL to escrow.
  • Simulating a withdrawal from escrow to RDL.
  • Simulating other internal fund movements.

In the production environment, these transactions represent actual money movement through the configured banking infrastructure.

Key Components

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.

Bank Code

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

Title

Code Description
BPK Bapak
IBU Ibu
SDR Saudara (Laki-Laki)
SDRI Sdri (Perempuan)
- Blank

Religion

Code Description
ISLAM Islam
CHRISTIAN Kristen
CATHOLIC Katolik
BUDDHIST Budha
HINDU Hindu
CONFUCIAN Kong Hu Chu
OTHERS Other religion

Marital Status

Code Description
SINGLE Lajang (Single)
WIDOWER Duda (Widower)
WIDOW Janda (Widow)
MARRIED Menikah (Married)

Job

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

Education

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

Branch

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

Income

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

Reason of Opening Account

Code Description
INVESTMENTS Opening account is for investment
SAVINGS Opening account is for saving
TRANSACTIONS Opening account is for transactional

Source

Code Description
SALARY Salary
BUSINESS Business outcome
INVESTMENT Investment outcome
GRANTS Grants/Hibah

Response Code

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 Create Customer

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 Create Investor

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

Create P2P Customer

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "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": [
    ]
}

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "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": ""
}

Update P2P Customer

This service used by P2P to Update an existing customer.

📥 Request Requirements must contain following information:

path Parameters
id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

Customer id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
mobile_number
string

Mobile number. Accepted 0-9, symbols + - (space)

email
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

Responses

Request samples

Content type
application/json
{
  • "mobile_number": "+62 812-3456-789",
  • "email": "abc@email.com",
  • "customer_accounts": [
    ]
}

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "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"
}

Get P2P Customer

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:

path Parameters
id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

Customer Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "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"
}

Get P2P Customer by external id

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:

path Parameters
external_id
required
string
Example: external-19199

External id when create customer

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "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 Create P2P Customer

Callback Notify Create Customer will return latest result create customer after status 'default' was created on api create customer success.

Callback Response

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
{
  • "event": "escrow.p2p_customer",
  • "created": "2022-06-09T09:29:51.918Z",
  • "business_id": "f59fcbb7-848d-4242-af07-a8bb7e3ab37c",
  • "data": {
    }
}

Response samples

Content type
application/json
null

Register Investor Account

This 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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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)

Responses

Request samples

Content type
application/json
{
  • "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"
}

Response samples

Content type
application/json
{
  • "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
}

Upload Photo

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: multipart/form-data
file
required
any <byte>

Base64 encoded image data.

example: "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0..."

Make sure to include only the Base64 string without metadata (e.g. data:image/png;base64,).

Responses

Response samples

Content type
application/json
{
  • "message": "Success"
}

Get RDL Investor

This service used by P2P to Get an existing investor with by using the id when Create Investor.

📥 Request Requirements must contain following information:

path Parameters
id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

Investor Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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
}

Get RDL Investor by External Id

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:

path Parameters
external_id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

External Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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
}

Callback Create RDL Investor

Callback Notify Create RDL Investor

This callback returns the latest result of Create Customer API when the default status was successfully created.

RDL Investor Account Activated Callback

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

RDL Investor Account Activation Failed Callback

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

Callback Response

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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 2099-12-31 for lifetime

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)

email
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)

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
null

Callback Topup RDL

RDL Payment Callback

We will send you RDL payment callback with a body request when investor paid into the RDL bank account.

Callback Response

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "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"
}

Response samples

Content type
application/json
null

Create P2P Fixed VA

Create 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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
{
  • "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": ""
}

Response samples

Content type
application/json
{
  • "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 P2P Fixed VA

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
loan_id
string

Loan ID related to the Fixed VA. Can only be updated for a REPAYMENT type Fixed VA (LOAN has no loan_id when create Fixed VA).

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.

Responses

Request samples

Content type
application/json
{
  • "loan_id": "loan-1234356",
  • "expected_amount": 150000,
  • "suggested_amount": 150000,
  • "is_single_use": true
}

Response samples

Content type
application/json
{
  • "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 P2P Fixed VA by External Id

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:

path Parameters
external_id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

External Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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 P2P Fixed VA with Payment Details

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:

path Parameters
external_id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

External Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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": [
    ]
}

Inquiry P2P Fixed VA Status

Get status payment of P2P Fixed VA before callback receive.

📥 Request Requirements must contain following information:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
virtual_account_number
required
string

Virtual account number including the merchant code.

Responses

Request samples

Content type
application/json
{
  • "virtual_account_number": "88082541238"
}

Response samples

Content type
application/json
{
  • "id": "b7f6cc0f-6b90-4cde-a8c3-7763c4feda08",
  • "virtual_account_number": "88082541238",
  • "expired_status": true,
  • "payment_status": "paid",
  • "payment_date": "2018-12-20T17:00:00.000Z"
}

Callback Create P2P Fixed VA

RDL Create P2P Fixed VA Callback

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.

Callback Response

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

P2P Fixed Virtual Account Activated Callback

Once Fixed VA created by bank, we will send callback with request body with status ACTIVE.

P2P Fixed Virtual Account Example Update P2P Customer Request updated Callback

Once Fixed VA updated by bank, we will send callback with request body with status ACTIVE.

P2P Fixed VA Payment Settling Callback

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.

P2P Fixed VA Payment Settled Callback

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "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"
}

Response samples

Content type
application/json
null

Create RDL Disbursement

💸 RDL Disbursements Overview

The 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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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.

  • For RDL Disburse to customer's account, please ensure the account number is correct.
  • For RDL Disburse to P2P's Fix VA, please ensure the virtual account number is correct.
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.

  • Maximum limit (BNI & BNI Syariah): No Limit
  • Minimum limit (BNI & BNI Syariah): No Limit
  • Maximum limit (Other banks): Rp 25,000,000
  • Minimum limit (Other banks): Rp 10,000

Note Transactions above Rp 100,000,000 may require reporting to financial authorities.
Interbank transfer fee of Rp 6,500 applies for non-BNI accounts.

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "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"
}

Get RDL Disbursement by Id

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:

  • Query historical disbursement transactions made from an RDL account.
  • Check the current status of an ongoing RDL disbursement before receiving the callback notification.

This helps you ensure real-time monitoring and reconciliation of disbursement activities initiated through CRING.

📥 Request Requirements must contain following information:

path Parameters
investor_id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

Investor Id

id
required
string
Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb

RDL Disbursement Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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"
}

Get RDL Disbursement by External Id

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:

  • Query historical disbursement transactions made from an RDL account.
  • Check the current status of an ongoing RDL disbursement before receiving the callback notification.

This helps you ensure real-time monitoring and reconciliation of disbursement activities initiated through CRING.

📥 Request Requirements must contain following information:

path Parameters
investor_id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

Investor Id

id
required
string
Example: rdl-disbursement-951

RDL Disbursement External Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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"
}

Callback Create RDL Disbursement

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.

RDL Disbursement Completed Callback

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: COMPLETED
  • bank_reference: filled with the bank transaction reference ID.

This callback confirms that the funds have been successfully transferred to the beneficiary account.

RDL Disbursement Failed Callback

Triggered when the disbursement process fails to reach the destination bank account.
The callback payload contains the RDL Disbursement Resource with:

  • status: FAILED
  • failure_code: provides the reason for the disbursement failure.

Callback Response

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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 Completed.

Unique reference number provided by the bank for this disbursement transaction.

failure_code
string

Only shown if RDL Disbursement Failed.

Code indicating the reason why the RDL disbursement failed.
Possible values include:

  • INVALID_DESTINATION — Destination account information is invalid.
  • INSUFFICIENT_FUNDS — Not enough balance in the RDL account.
  • TIMEOUT — Bank did not respond within the expected timeframe.
  • UNKNOWN_ERROR — Unspecified or unexpected failure.
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.

Responses

Request samples

Content type
application/json
Example
{
  • "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"
}

Response samples

Content type
application/json
null

Create Loan Disbursement

💸 Loan Disbursements Overview

Use 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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
external_id
required
string

Unique ID you provided for the loan disbursement.
Accepted characters: a-z, A-Z, 0-9; Accepted symbols: (space) _ : , . -

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).
Example: If interest bears an APR of 20%, enter 20.

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.
Refer to the list of supported banks and e-Wallets.

destination_account_holder_name
required
string

Name of the account holder as per the destination bank’s or e-Wallet’s records.
Accepted characters: a-z, A-Z, 0-9; Accepted symbols: (space) . , ' / -

destination_account_number
required
string

Destination bank account number or e-Wallet phone number.

  • For BCA, must be exactly 10 digits.
  • For e-Wallet, use the registered phone number.
    Accepted characters: 0-9
loan_id
required
string

ID of the loan you provided.
This is the same as the loan_id used in Repayments and Create Fixed Virtual Account Requests.
Accepted characters: a-z, A-Z, 0-9; Accepted symbols: (space) _ : / , . -

description
string

Optional description to send with the transaction.

Responses

Request samples

Content type
application/json
{
  • "external_id": "ab,cd:va-my.test_1",
  • "loan_maturity_date": "2018-12-23T13:50:12.000Z",
  • "annual_percentage_rate": 15,
  • "lenders": [
    ],
  • "borrower_id": "5b51e6ba0071ec521008e21d",
  • "destination_account_code": "BCA",
  • "destination_account_holder_name": "John Doe",
  • "destination_account_number": 8982312309,
  • "loan_id": "cc123456",
  • "description": "loan-disb-123"
}

Response samples

Content type
application/json
{
  • "id": "c80fb93c-b9f7-419d-a221-29bedc87a778",
  • "external_id": "loan-1233889871",
  • "loan_maturity_date": "2018-12-23T13:50:12.000Z",
  • "annual_percentage_rate": 15,
  • "lenders": [
    ],
  • "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"
}

Get Loan Disbursement by Id

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:

  • Query historical disbursement transactions made from an RDL account.
  • Check the current status of an ongoing RDL disbursement before receiving the callback notification.

This helps you ensure real-time monitoring and reconciliation of disbursement activities initiated through CRING.

📥 Request Requirements must contain following information:

path Parameters
investor_id
required
string
Example: b9666300-7300-11e9-8373-6753d37f1b1f

Investor Id

id
required
string
Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb

RDL Disbursement Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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"
}

Callback Create Loan Disbursement

Loan Disbursement Callback

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.


Loan Disbursement Disbursing Callback

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.

Loan Disbursement Completed Callback

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.

Loan Disbursement Failed Callback

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).


Callback Response

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
Example
{
  • "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": [
    ],
  • "status": "DISBURSING"
}

Response samples

Content type
application/json
null

Create Repayment

When 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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
{
  • "external_id": "repayment_875",
  • "amount": 976000,
  • "loan_id": "loan_879",
  • "borrower_id": "fa71ac40-417a-11e9-89d2-59190dbc8f33",
  • "lender_id": "ef3eb2f0-417a-11e9-89d2-59190dbc8f33"
}

Response samples

Content type
application/json
{
  • "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"
}

Get Repayment by Id

Retrieve details of an existing Repayment by using id on the respective endpoint.
This endpoint allows you to:

  • Query a completed repayment record for reconciliation or reporting purposes.
  • Check the current status of an ongoing repayment before receiving the callback notification.

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:

path Parameters
id
required
string
Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb

Repayment Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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"
}

Get Repayment by External Id

Retrieve details of an existing Repayment by using external_id on the respective endpoint.
This endpoint allows you to:

  • Query a completed repayment record for reconciliation or reporting purposes.
  • Check the current status of an ongoing repayment before receiving the callback notification.

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:

path Parameters
id
required
string
Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb

Repayment Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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"
}

Callback Create Repayment

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.

Callback Response

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
status
string

The current status of the repayment. Possible values are PENDING, COMPLETED, or FAILED.

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 Completed. The remaining balance in the borrower's escrow account after this repayment transaction is processed.

lender_balance
number

Only shown if callback Completed. The total balance in the lender's escrow account after receiving the repayment amount.

failure_code
string

Only shown if callback Failed. Error code explaining why the repayment failed. Example values include INSUFFICIENT_BORROWER_BALANCE_ERROR, INVALID_LOAN_ID, etc.

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.

Responses

Request samples

Content type
application/json
Example
{
  • "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"
}

Response samples

Content type
application/json
null

Create Withdrawal

Withdrawals 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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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 WITHDRAWAL.

description
string

Additional note or purpose of the withdrawal transaction.

Responses

Request samples

Content type
application/json
{
  • "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"
}

Response samples

Content type
application/json
{
  • "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"
}

Get Withdrawal by Id

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:

path Parameters
id
required
string
Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb

Withdrawal Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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"
}

Get Withdrawal by External Id

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:

path Parameters
id
required
string
Example: b03bddcff-b600-bj56-ca3w-69n5d37f1vcb

Withdrawal Id

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Responses

Response samples

Content type
application/json
{
  • "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"
}

Callback Create Withdrawal

Merchants will receive a callback notification when:

  • A withdrawal is successfully completed (to borrower or lender)
  • A withdrawal fails

Callback Statuses:

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.


Callback Response

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:

header Parameters
Authorization
string
Example: Basic eyJraWQiOi...Jzc29zIiwiY

Represents access_token of a request; string starts with keyword Bearer followed by access_token (e.g. Bearer eyJraWQiOi...Jzc29zIiwiY)

Request Body schema: application/json
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.

Responses

Request samples

Content type
application/json
Example
{
  • "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"
}

Response samples

Content type
application/json
null

Supported Banks

CRING! 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.

Error Codes

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 Codes

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.

Response Code

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.

Error Categories

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.

Product-Specific Response Codes

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:

  • Virtual Account — banking partner and Virtual Account-specific response codes
  • QRIS — QRIS transaction response codes
  • Fund Transfer — transfer and disbursement response codes
  • Bank Account Validation — account validation response codes
  • RDL — RDL-specific response codes

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 responseCode and responseMessage together with the HTTP status code when handling API responses.

Changelog

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.

FAQ

What is CRING!?

CRING! is SPE's Digital Payment & Transaction Platform that provides APIs for digital payment and financial transaction services.

What services are available in CRING!?

CRING! provides services including:

  • Virtual Account
  • QRIS
  • Fund Transfer
  • Bank Account Validation
  • RDL (Rekening Dana Lender)

Does CRING! support SNAP and Non-SNAP?

Yes. CRING! supports both SNAP and Non-SNAP API integrations. The available integration type depends on the product and banking partner.

How do I get API credentials?

API credentials are provided after the client completes the required onboarding and configuration process through CRING!.

How do I authenticate with CRING! APIs?

Authentication depends on the integration type:

  • Non-SNAP uses OAuth 2.0 Client Credentials.
  • SNAP uses SNAP-compliant authentication with B2B Access Token and asymmetric signature.

Refer to the Authentication section for details.

Which environment should I use for testing?

Use the Sandbox environment for development and integration testing. Production access is provided according to the applicable onboarding and configuration process.

Where can I find the response codes?

General HTTP status codes and error handling are described in Error Code.

Product-specific response codes are available in the corresponding product API documentation.

What should I do if an API request fails?

Check the HTTP status code, responseCode, and responseMessage. For transaction-related errors, check the transaction status before retrying the request.

Refer to the relevant product documentation for detailed error handling.