CRING! Payment Facilitator

Download OpenAPI specification:Download

🚀 Introduction

CRING! Indonesia payment facilitator for banking ecosystem powered by SPE is a modern payment facilitator that enables businesses, platforms, and merchants to accept and manage payments seamlessly — all through a single, secure API.

Our mission is to simplify digital payments across Indonesia by offering scalable and developer-friendly tools for accepting payments (e.g., QRIS, virtual accounts, fund transfer) and managing settlements, notifications, and more.


🎯 What CRING! Offers

CRING! provides a unified API platform for seamless access to multiple financial products and services from various banks in Indonesia.

Core Offerings

  • 🔍 Bank Account Validator
    Instantly validate bank account numbers using connected partner banks.
  • 📱 QRIS (Quick Response Code Indonesian Standard)
    Generate dynamic QR codes for payments, enabling standardized QR-based transactions across ecosystems.
  • 🏦 Virtual Account (VA) Services
    Create, manage, and track Virtual Accounts integrated with banks.
  • 💸 Fund Transfer
    Send money to bank accounts across all major Indonesian banks.
  • 🔐 Secure API Gateway
    Token-based authentication, IP whitelisting, and centralized logging ensure secure and monitored communication between clients and banking partners.
  • 📊 Centralized Logging
    All API requests and responses (including unauthorized attempts) are logged to database, enabling detailed analytics and auditing.

Integration Benefits

  • One-time integration for multiple banks and services
  • Simplified onboarding and credential management
  • High availability and scalable API infrastructure
  • Suitable for Payment Facilitators, Aggregators, and Institutional Clients
  • Secure Transaction Processing

✨ Overview

🔧 API

The CRING! API is built on REST, uses standard HTTP status codes, and returns JSON-formatted responses. We designed it with simplicity and flexibility in mind — enabling you to integrate quickly and focus on growing your business.


🧭 CRING! Context

CRING! acts as a centralized API gateway that connects clients (partners) with multiple banking services through a single integration point. The system enables clients to access various financial products—such as QRIS payments, Virtual Accounts (VA), Fund Transfer and Bank Account Validation— without needing to integrate separately with each bank.

In the context diagram:

  • 👤 Client refers to third-party systems or merchants that use CRING! to perform financial operations.
  • 🟣 CRING! is the platform that handles authentication, routing, logging, and service abstraction.
  • 🏦 Banks represent various partner banks which serve as the financial backbone for each product type.

The client sends API requests to CRING! for specific services (e.g., generating a QRIS, creating a VA, creating a Fund Transfer or Validating a bank account). CRING! will then forward the request to the appropriate bank according to the product type and return the result back to the client.

🛠️ Getting Started

Follow this step-by-step guideline to begin integrating with our API.

1️⃣ Merchant Onboarding

New merchants will be onboarded through our official onboarding process in https://partner.cring.id/ which includes:

  • Submitting business information (company details, PIC, contact, etc.)
  • Document verification (e.g., NIB, NPWP, legal documents)
  • Whitelist IP in the CRING! system

Once onboarding is successful, a verification email will be sent to the merchant's registered PIC to activate their CRING! Portal account.

2️⃣ Email Verification

The merchant PIC must verify their email using the link provided in the onboarding email. After successful verification, they will be able to log in to the CRING Portal.

3️⃣ Getting API Credentials

API credentials (client_id and client_secret) can be obtained through:

  • The CRING Portal integration section after login
  • Or manually provided by the CRING admin via email (upon request)

These credentials must be stored securely, as they are used to authenticate with the CRING API.

4️⃣ Retrieve Access Token

Use your credentials to obtain an access token from our token endpoint Generate Access Token.

🔐 Credentials

Upon successful onboarding, each client will receive a set of credentials for secure API access, consisting of:

  • Client ID – Unique identifier for the client
  • Client Secret – Secret used for API authentication
  • Base URLs for each environment (Sandbox and Production) These credentials are used with the OAuth 2.0 Client Credentials Grant flow. Authentication is performed using Basic Auth, with the client_id as username and the client_secret as password.

⚠️ Never expose your credentials publicly. Store them securely and rotate them periodically.

Always match the credentials with the appropriate base URL based on your environment.

⚙️ Payment Simulator

CRING! provides a simulation of payment processes for Virtual Account and QRIS. It allows users to test payment scenarios, verify integration workflows, and ensure system compatibility without interacting with live payment environments.

Features:

  • Virtual Account Simulation: Check detail Virtual Account transactions, paid Virtual Account.
  • QRIS Simulation: Simulate QRIS payments with transaction data.
  • Secure Testing Environment: Operates in a sandbox environment, ensuring no real financial transactions are processed. Developers can use this simulator to validate their payment integration before moving to the production environment.

⚠️ Errors

When integrating with CRING!, you may encounter errors during your API requests. These errors can generally be grouped into the following categories:

⚠️ Content Errors

Content errors occur when the data in the API request is invalid in some way. These errors typically return an HTTP response with a 4xx status code. For example:

  • 401 Unauthorized: This error occurs if an invalid API key is provided.
  • 400 Bad Request: This may appear if a required parameter is missing or if the request body is malformed.

❌ Network Errors

Network errors occur due to communication issues between the client and the server. These errors can include low-level issues, such as socket timeouts or connection problems. For example:

  • A client might experience a timeout while waiting for a response from CRING!'s servers.
  • A response may never be received if the connection is prematurely closed. These types of errors may not indicate that the request would have been successful under normal circumstances, as they could mask another issue.

🔴 Server Errors

Server errors occur when there is a problem on CRING!'s servers. These errors return an HTTP response with a 5xx status code. While CRING! aims to minimize the occurrence of these errors, your integration should be prepared to handle them gracefully. For example:

  • 500 Internal Server Error: A general error indicating that something went wrong on the server side.
  • 502 Bad Gateway: Indicates that CRING!'s server is unavailable or misbehaving.

🚨 Handling Errors

The appropriate error handling approach depends on the type of error encountered:

  • For content errors, you should check the API documentation for required parameters and correct the request data accordingly.
  • For network errors, consider implementing retry logic with exponential backoff to mitigate transient communication problems.
  • For server errors, retrying the request with appropriate error handling mechanisms is recommended, as server errors may be temporary.

📄 Response Codes

The following table summarizes the response codes you may encounter when using CRING!'s APIs. Each code includes a description of the error and its potential cause.

Bank Http Code Service Code Case Code Response Code Response Message
Bank BNI 200 - - 20000 Successful
Bank BNI 202 - - 20200 Transaction Still in progress
Bank BNI 202 - - 20201 Data not found
Bank BNI 400 - - 40000 General request failed error, including message parsing failed.
Bank BNI 400 - - 40001 Invalid Field Format
Bank BNI 400 - - 40002 Missing or invalid format on mandatory field
Bank BNI 400 - - 40003 Improper datetime field implementation
Bank BNI 401 - - 40100 General unauthorized error (API is invalid, Oauth Failed, Verify Client Secret Failed, Client Forbiden Access API, Unknwon Client)
Bank BNI 401 - - 40101 Invalid Token
Bank BNI 403 - - 40300 Transaction Expired
Bank BNI 403 - - 40302 Exceeds Transaction Limit
Bank BNI 403 - - 40314 Insufficient Funds
Bank BNI 404 - - 40401 Transaction Not Found
Bank BNI 404 - - 40412 Invalid Bill/Virtual Account
Bank BNI 404 - - 40413 Invalid Amount
Bank BNI 404 - - 40414 The bill has been paid
Bank BNI 404 - - 40418 Incosistent Request
Bank BNI 404 - - 40420 Amount cannot be change
Bank BNI 404 - - 40411 Invalid Card/Account/Customer [info]/Virtual Account
Bank BNI 405 - - 40500 Request function is not support
Bank BNI 409 - - 40900 Conflict
Bank BNI 409 - - 40902 Duplicate Transaction
Bank BNI 409 - - 40901 Duplicate Reference Number
Bank BNI 500 - - 50000 General Error
Bank BNI 500 - - 50001 Internal Server Error
Bank BNI 504 - - 50400 Timeout
Bank BNI 429 - - 42900 Too Many Requests
Bank BNI 421 - - 42110 Exceed Daily Limit Transaction
BTN, Permata, Bank BNI (NEW) 200 any 00 200XX00 Successful
Bank BTN 400 any 00 400XX00 Bad Request / Parsing Error
Bank BTN, Permata 400 any 01 400XX01 Invalid Field Format
Bank BTN, Permata 400 any 02 400XX02 Invalid Mandatory Field
Bank BTN, Permata 401 any 00 401XX00 Unauthorized
Bank BTN, Permata 401 any 01 401XX01 Invalid Token (B2B)
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 BTN 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 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 BTN, Permata 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 BTN 404 any 00 404XX00 Invalid Transaction Status
Bank BTN 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 BTN 404 any 07 404XX07 Journey Not Found
Bank BTN 404 any 11 404XX11 Invalid Card/Account/Customer info/Virtual Account
Bank BTN, Permata 404 any 12 404XX12 Invalid Bill/Virtual Account
Bank BTN, Permata 404 any 13 404XX13 Invalid Amount
Bank BTN, Permata 404 any 14 404XX14 Paid Bill
Bank BTN 404 any 16 404XX16 Partner Not Found
Bank BTN 404 any 19 404XX19 Invalid Bill/Virtual Account
Bank BTN 409 any 00 409XX00 Conflict
Bank BTN 409 any 01 409XX01 Duplicate partnerReferenceNo
Bank BTN 429 any 00 429XX00 Too Many Requests
Bank BTN 500 any 00 500XX00 General Error
Bank BTN 500 any 01 500XX01 Internal Server Error
Bank BTN 500 any 02 500XX02 External Server Error
Bank Permata 504 any 00 504XX00 Timeout

Bank Validator

🏦 Overview

CRING provides a real-time Bank Account Validator API 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

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

🔍 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

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

QRIS

📱 Overview

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

✅ Supported Acquirer Banks

CRING! currently supports QRIS acquiring via the following banks:

  • Bank BTN (Bank Tabungan Negara)

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

  • 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

🔧 Integration Notes

You can request a QRIS via the POST {{baseUrl}}/qr endpoint using your access token. Merchants onboarded through CRING! will automatically be mapped to one of the supported acquiring banks depending on the onboarding configuration and location.

⚠️ Important

  • Make sure your merchant is successfully onboarded before requesting QRIS.
  • QRIS payments will only be routed through supported acquirer banks.

🏦 Acquirer Code

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

📋 Response Code

Bank Http Code Service Code Case Code Response Code Response Message
Bank BTN, Permata, NOBU 200 any 00 200XX00 Successful
Bank BTN 400 any 00 400XX00 Bad Request / Parsing Error
Bank BTN, Permata, NOBU 400 any 01 400XX01 Invalid Field Format
Bank BTN, Permata, NOBU 400 any 02 400XX02 Invalid Mandatory Field
Bank BTN, Permata, NOBU 401 any 00 401XX00 Unauthorized
Bank BTN, Permata, NOBU 401 any 01 401XX01 Invalid Token (B2B)
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 BTN 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 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 BTN, Permata, NOBU 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 BTN 404 any 00 404XX00 Invalid Transaction Status
Bank BTN 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 BTN 404 any 07 404XX07 Journey Not Found
Bank BTN 404 any 11 404XX11 Invalid Card/Account/Customer info/Virtual Account
Bank BTN, Permata, NOBU 404 any 12 404XX12 Invalid Bill/Virtual Account
Bank BTN, Permata, NOBU 404 any 13 404XX13 Invalid Amount
Bank BTN, Permata, NOBU 404 any 14 404XX14 Paid Bill
Bank BTN 404 any 16 404XX16 Partner Not Found
Bank BTN 404 any 19 404XX19 Invalid Bill/Virtual Account
Bank BTN 409 any 00 409XX00 Conflict
Bank BTN 409 any 01 409XX01 Duplicate partnerReferenceNo
Bank BTN 429 any 00 429XX00 Too Many Requests
Bank BTN 500 any 00 500XX00 General Error
Bank BTN 500 any 01 500XX01 Internal Server Error
Bank BTN 500 any 02 500XX02 External Server Error

QRIS BANK BTN, Mandiri, NOBU

Generate QR

🔲 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 QR Status

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

📥 Request Requirements must contain following information:

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

Virtual Account Credit

✨ Overview

CRING provides a seamless Virtual Account Credit service that allows partners to disburse funds directly to a designated virtual account across supported banks. This is typically used for:

  • Commission payouts
  • Loan disbursements (P2P or cooperative)
  • Salary or incentive distribution
  • Top-up balance to closed-loop systems

✅ Supported Banks

CRING currently supports VA Credit to the following bank providers:

  • Bank BNI
  • Bank Permata
  • Bank BTN
  • Bank BRI

🏦 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 APIs. Each code includes a description of the error and its potential cause.

Http Code Service Code Case 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 failed.
400 - - 40001 Invalid Field Format
400 - - 40002 Missing or invalid format on mandatory field
400 - - 40003 Improper datetime field implementation
401 - - 40100 General unauthorized error (API is invalid, Oauth Failed, Verify Client Secret Failed, Client Forbiden Access API, Unknwon Client)
401 - - 40101 Invalid Token
403 - - 40300 Transaction Expired
403 - - 40302 Exceeds Transaction Limit
403 - - 40314 Insufficient Funds
404 - - 40401 Transaction Not Found
404 - - 40412 Invalid Bill Virtual Account
404 - - 40413 Invalid Amount
404 - - 40414 The bill has been paid
404 - - 40418 Incosistent Request
404 - - 40420 Amount cannot be change
404 - - 40411 Invalid Card/Account/Customer [info]/Virtual Account
405 - - 40500 Request function is not support
409 - - 40900 Conflict
409 - - 40902 Duplicate Transaction
409 - - 40901 Duplicate Reference Number
429 - - 42900 Too Many Requests
421 - - 42110 Exceed Daily Limit Transaction
422 - - 42203 The given data was invalid
200 any 00 200XX00 Successful
202 any 00 202XX00 Transaction still onprocess
400 any 00 400XX00 Bad Request / Parsing Error
400 any 01 400XX01 Invalid Field Format
400 any 02 400XX02 Invalid Mandatory Field
401 any 00 401XX00 Unauthorized
401 any 01 401XX01 Invalid Token (B2B)
401 any 02 401XX02 Invalid Customer Token
401 any 03 401XX03 Token Not Found (B2B)
401 any 04 401XX04 Customer Token Not Found
403 any 00 403XX00 Transaction Expired
403 any 02 403XX02 Exceeds Transaction Amount Limit
403 any 04 403XX04 Activity Count Limit Exceeded
403 any 05 403XX05 Do Not Honor
403 any 09 403XX09 Dormant Account
403 any 10 403XX10 Need To Set Token Limit
403 any 14 403XX14 Insufficient Funds
403 any 15 403XX15 Transaction Not Permited
403 any 16 403XX16 Suspend Transaction
403 any 17 403XX17 Token Limit Exceeded
403 any 18 403XX18 Inactive Card/Account/Customer
403 any 21 403XX21 Set Limit Not Allowed
403 any 22 403XX22 Token Limit Invalid
404 any 00 404XX00 Invalid Transaction Status
404 any 01 404XX01 Transaction Not Found
404 any 02 404XX02 Invalid Routing
404 any 03 404XX03 Bank Not Supported By Switch
404 any 04 404XX04 Transaction Cancelled
404 any 07 404XX07 Journey Not Found
404 any 11 404XX11 Invalid Card/Account/Customer info/Virtual Account
404 any 12 404XX12 Invalid Bill/Virtual Account
404 any 13 404XX13 Invalid Amount
404 any 14 404XX14 Paid Bill
404 any 16 404XX16 Partner Not Found
404 any 19 404XX19 Invalid Bill/Virtual Account
409 any 00 409XX00 Conflict
409 any 01 409XX01 Duplicate partnerReferenceNo
429 any 00 429XX00 Too Many Requests
500 any 00 500XX00 General Error
500 any 01 500XX01 Internal Server Error
500 any 02 500XX02 External Server Error
504 any 00 504XX00 Timeout

VA BANK BNI

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.

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. 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 BANK BTN, Permata, BRI, BNI (NEW)

Create VA

This service used by merchant to sent transaction data, and in return merchant will get Virtual Account 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

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

Master Data

🏦 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

RDL

Access Token

Obtaining Access Token Access token can be obtained in many way, depend on the grant_type of the application. To access RDL's services in this sandbox and production environment, you will need the access token with grant_type = client_credentials.

Client Credentials Grant will provide application access to API without requiring any user credential. Any call requested using access_token obtained using this method are made on behalf of the application instead of the user. This grant type is designed to be used by server to server call.

📥 Request Requirements must contain following information:

header Parameters
Authorization
string
Example: Basic base64(client_id:client_secret)

Basic authorization header, combination client_id and client_secret as base64

Request Body schema: application/json
grant_type
required
string

"client_credentials" : The client can request an access token using only its client credentials (or other supported means of authentication) when the client is requesting access to the protected resources under its control (OAuth 2.0: RFC 6749 & 6750)

Responses

Request samples

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

Response samples

Content type
application/json
{
  • "response_code": "20000",
  • "response_message": "Successful",
  • "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZjFmM2Q3ZS1kOTA3LTRkOWItODJlNC02Y2IxZGYxOTBlOWUiLCJjbGllbnRJZCI6IjZhZTk1N2M0LTI4NjMtNDcxMy1hY2NlLWJhMTJkZTYzNmNmYyIsIm5iZiI6MTYxMTQ2ODg1NiwiZXhwIjoxNjExNDY5NzU2LCJpYXQiOjE2MTE0Njg4NTZ9.-7HRhcyEh4y0qsG2H3DRdu0AeYv3MEJHfWRKhRBYcNU",
  • "token_type": "Bearer",
  • "expires_in": 900
}

Inquiry Bank Name Validation

This service used by P2P to inquiry customer account before added for withdrawal's account.

📥 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
bank_code
string <= 3 characters

Bank Code, see

account_number
required
string <= 17 characters

Bank account Number

Responses

Request samples

Content type
application/json
{
  • "bank_code": "008",
  • "account_number": "0115476117"
}

Response samples

Content type
application/json
{
  • "bank_name": "Bank Mandiri",
  • "account_name": "John Doe",
  • "account_number": "0115476117",
  • "retrieval_reff_num": "100000000097"
}

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

Transfer

Overview

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

Transfer Code

Bank Name Bank Code RTGS Kliring BI-Fast
PT. ALLO BANK INDONESIA 567 HRDAIDJ1 HRDAIDJ1 HRDAIDJ1
PT. BANK ACEH SYARIAH 116 PDACIDJ1 PDACIDJ1 PDACIDJ1
PT. BANK AMAR INDONESIA 531 LOMAIDJ1 LOMAIDJ1 LOMAIDJ1
PT. BANK ANZ INDONESIA 061 ANZBIDJX 610306 610306
PT. BANK ARTHA GRAHA INTERNATIONAL 037 ARTGIDJA ARTGIDJA ARTGIDJA
PT. BANK PEMBANGUNAN DAERAH BALI 129 ABALIDBS ABALIDBS ABALIDBS
PT BANK PEMBANGUNAN DAERAH BENGKULU 133 PDBKIDJ1 PDBKIDJ1 PDBKIDJ1
PT Bank Negara Indonesia 009 BNINIDJA BNINIDJA BNINIDJA
PT. Bank Rakyat Indonesia 002 BRINIDJA BRINIDJA BRINIDJA
PT Bank BNP Paribas Indonesia 057 BNPAIDJA BNPAIDJA BNPAIDJA
PT BANK LAMPUNG 121 PDLPIDJ1 PDLPIDJ1 PDLPIDJ1
PT. BANK PEMBANGUNAN DAERAH BANTEN 137 PDBBIDJ1 PDBBIDJ1 PDBBIDJ1
PT. BANK PEMBANGUNAN DAERAH JABAR DAN BANTEN 110 PDJBIDJA PDJBIDJA PDJBIDJA
PT. BANK PEMBANGUNAN DAERAH JABAR DAN BANTEN SYARIAH 425 SYJBIDJ1 SYJBIDJ1 SYJBIDJ1
PT. BANK BUMI ARTA 076 BBAIIDJA BBAIIDJA BBAIIDJA
BANK TABUNGAN NEGARA (BTN) 200 BTANIDJA BTANIDJA BTANIDJA
PT. BANK TABUNGAN NEGARA (PERSERO) UNIT USAHA SYARIAH 200 SYBTIDJ1 SYBTIDJ1 SYBTIDJ1
PT BANK CAPITAL INDONESIA 054 BCIAIDJA BCIAIDJA BCIAIDJA
PT. BANK CHINA CONSTRUCTION BANK INDONESIA, TBK 036 MCORIDJA MCORIDJA MCORIDJA
PT. BANK CIMB NIAGA TBK 022 BNIAIDJA BNIAIDJA BNIAIDJA
PT. BANK CIMB NIAGA TBK - UNIT USAHA SYARIAH 022 SYNAIDJ1 SYNAIDJ1 SYNAIDJ1
PT. BANK DANAMON INDONESIA 011 BDINIDJA BDINIDJA BDINIDJA
PT. BANK DANAMON INDONESIA UNIT USAHA SYARIAH 011 SYBDIDJ1 SYBDIDJ1 SYBDIDJ1
PT. BANK DBS INDONESIA 046 DBSBIDJA DBSBIDJA DBSBIDJA
PT. BANK DKI 111 BDKIIDJA BDKIIDJA BDKIIDJA
PT. BANK DKI UNIT USAHA SYARIAH 111 SYDKIDJ1 SYDKIDJ1 SYDKIDJ1
PT. BANK GANESHA 161 GNESIDJA GNESIDJA GNESIDJA
PT. BANK HIBANK INDONESIA 553 MAYOIDJA MAYOIDJA MAYOIDJA
PT. BANK ICBC INDONESIA 164 ICBKIDJA ICBKIDJA ICBKIDJA
PT. BANK INA PERDANA 513 INPBIDJ1 INPBIDJ1 INPBIDJ1
PT BANK INDEX SELINDO 555 BIDXIDJA BIDXIDJA BIDXIDJA
PT. BANK JAGO Tbk 542 JAGBIDJA JAGBIDJA JAGBIDJA
PT. BANK JAGO Tbk - UNIT USAHA SYARIAH 542 JAGBIDJA JAGBIDJA JAGBIDJA
PT.BANK PEMBANGUNAN DAERAH JAMBI 115 PDJMIDJ1 PDJMIDJ1 PDJMIDJ1
PT. BANK PEMBANGUNAN DAERAH JAMBI UUS 115 SYJMIDJ1 SYJMIDJ1 SYJMIDJ1
PT. BANK PEMBANGUNAN DAERAH JATENG 113 PDJGIDJ1 PDJGIDJ1 PDJGIDJ1
PT. BANK PEMBANGUNAN DAERAH JATENG UNIT USAHA SYARIAH 113 SYJGIDJ1 SYJGIDJ1 SYJGIDJ1
PT.BANK PEMBANGUNAN DAERAH JATIM 114 PDJTIDJ1 PDJTIDJ1 PDJTIDJ1
PT.BANK PEMBANGUNAN DAERAH JATIM - UNIT USAHA SYAR 114 SYJTIDJ1 SYJTIDJ1 SYJTIDJ1
PT.BANK PEMBANGUNAN DAERAH KALBAR 123 PDKBIDJ1 PDKBIDJ1 PDKBIDJ1
PT.BANK PEMBANGUNAN DAERAH KALBAR UUS 123 SYKBIDJ1 SYKBIDJ1 SYKBIDJ1
PT. BANK PEMBANGUNAN DAERAH KALSEL 122 PDKSIDJ1 PDKSIDJ1 PDKSIDJ1
PT. BANK PEMBANGUNAN DAERAH KALSEL - UNIT USAHA SYARIAH 122 SYKSIDJ1 SYKSIDJ1 SYKSIDJ1
PT. BPD KALIMANTAN TENGAH 125 PDKGIDJ1 PDKGIDJ1 PDKGIDJ1
PT. BANK BUKOPIN Tbk. 441 BBUKIDJA BBUKIDJA BBUKIDJA
PT. BANK KB BUKOPIN SYARIAH 521 SDOBIDJ1 SDOBIDJ1 SDOBIDJ1
PT. BANK KEB HANA INDONESIA 484 HNBNIDJA HNBNIDJA HNBNIDJA
PT Bank Pembangunan Daerah Maluku dan Maluku Utara 131 PDMLIDJ1 PDMLIDJ1 PDMLIDJ1
PT. BANK MANDIRI 008 BMRIIDJA BMRIIDJA BMRIIDJA
PT. BANK MANDIRI TASPEN 564 SIHBIDJ1 SIHBIDJ1 SIHBIDJ1
PT. BANK MASPION 157 MASDIDJS MASDIDJS MASDIDJS
PT Bank Mayapada Internasional 097 MAYAIDJA MAYAIDJA MAYAIDJA
PT. BANK MEGA 426 MEGAIDJA MEGAIDJA MEGAIDJA
PT. BANK MEGA SYARIAH 506 BUTGIDJ1 BUTGIDJ1 BUTGIDJ1
PT Bank Mestika Dharma 151 MEDHIDS1 MEDHIDS1 MEDHIDS1
PT. BANK MIZUHO INDONESIA 048 MHCCIDJA MHCCIDJA MHCCIDJA
PT Bank Muamalat Indonesia 147 MUABIDJA MUABIDJA MUABIDJA

Response Code

Response Code Response Message Description
2001500 Successful (Internal Account Inquiry) Successful
2001600 Successful (External Account Inquiry) Successful
2001700 Successful (Transfer Intrabank) Successful
2001800 Successful (Transfer Interbank) Successful
2002200 Successful (Transfer RTGS) Successful
2002300 Successful (Transfer SKNBI) Successful
2003600 Successful (Transaction Status Inquiry) Successful
4001501 Invalid Fieldname Format (Internal Account Inquiry) Invalid Format
4001601 Invalid Fieldname Format (External Account Inquiry) Invalid Format
4001701 Invalid Fieldname Format (Transfer Intrabank) Invalid Format
4001801 Invalid Fieldname Format (Transfer Interbank) Invalid Format
4002201 Invalid Fieldname Format (Transfer RTGS) Invalid Format
4002301 Invalid Fieldname Format (Transfer SKNBI) Invalid Format
4003601 Invalid Fieldname Format (Transaction Status Inquiry) Invalid Format
4000002 Invalid Mandatory Field (Balance Inquiry) Missing Field / Invalid Value
4001402 Invalid Mandatory Field (Bank Statement) Missing Field / Invalid Value
4001502 Invalid Mandatory Field (Internal Account Inquiry) Missing Field / Invalid Value
4001602 Invalid Mandatory Field (External Account Inquiry) Missing Field / Invalid Value
4001702 Invalid Mandatory Field (Transfer Intrabank) Missing Field / Invalid Value
4001802 Invalid Mandatory Field (Transfer Interbank) Missing Field / Invalid Value
4002202 Invalid Mandatory Field (Transfer RTGS) Missing Field / Invalid Value
4002302 Invalid Mandatory Field (Transfer SKNBI) Missing Field / Invalid Value
4003602 Invalid Mandatory Field (Transaction Status Inquiry) Missing Field / Invalid Value
401XX00 Unauthorized IP Address (Any Service) Unauthorized IP Address
4031509 Dormant Account (Internal Account Inquiry) Account Status Dormant
4031516 Suspend Transaction (Internal Account Inquiry) Suspend Transaction
4031518 Inactive Card/Account/Customer (Internal Account Inquiry) Account Status Closed
4031714 Insufficient Funds (Intrabank Transfer) Insufficient Funds
4031716 Suspend Transaction (Intrabank Transfer) Suspend Transaction
4031814 Insufficient Funds (Interbank Transfer) Insufficient Funds
4031816 Suspend Transaction (Interbank Transfer) Suspend Transaction
4032206 Feature Not Allowed At This Time (RTGS Transfer) Transaction After Cut-off Time
4032214 Insufficient Funds (RTGS Transfer) Insufficient Funds
4032216 Suspend Transaction (RTGS Transfer) Suspend Transaction
4032306 Feature Not Allowed At This Time (SKNBI Transfer) Transaction After Cut-off Time
4032314 Insufficient Funds (SKNBI Transfer) Insufficient Funds
4032316 Suspend Transaction (SKNBI Transfer) Suspend Transaction
4031715 Transaction Not Permitted (Intrabank Transfer) Transaction Not Permitted
4033615 Transaction Not Permitted (Transaction Status Inquiry) Invalid Service Code
4033616 Suspend Transaction (Transaction Status Inquiry) Suspend Transaction
4041511 Invalid Card/Account/Customer (Internal Account Inquiry) Account Not Registered
4041700 Invalid Transaction Status (Intrabank Transfer) Duplicate Reference Number (Failed Transfer)
4041714 Paid Bill (Intrabank Transfer) Duplicate Reference Number (Successful Transfer)
4041800 Invalid Transaction Status (Interbank Transfer) Duplicate Reference Number
4042214 Paid Bill (RTGS Transfer) Duplicate Reference Number
4042300 Invalid Transaction Status (SKNBI Transfer) Duplicate Reference Number
4043601 Transaction Not Found (Transaction Status Inquiry) Transaction Not Found
4043613 Invalid Amount (Transaction Status Inquiry) Invalid Amount

Inquiry Account Transfer

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