Appearance
API Transfer Interbank
API Transfer Interbank is used to trigger fund transfers to a beneficiary's account number.
API Information
| Field | Value |
|---|---|
| Path | /api/{version}/transfer-interbank |
| HTTP Method | POST |
| Service Code | 18 |
| Version | v1.2 |
| Type | JSON |
| Authentication | OAuth 2.0 with Access Token |
⚠️ Transfer Limitations
Transfer to Bank:
- Minimum Transfer: IDR 10,000
- Maximum Transfer: IDR 250,000,000
Request Structure
Request Header
Details
| Parameter / Field | Mandatory | Type | Description |
|---|---|---|---|
Content-Type | M | String | Indicates the media type of the resource. Use: application/json |
Authorization | M | String | Represents the access_token. Starts with "Bearer" followed by the access token. e.g.: Bearer eyJraWQiOi... |
X-TIMESTAMP | M | String | Client's current local time in yyyy-MM-ddTHH:mm:ss.SSSTZD format |
X-SIGNATURE | M | String | Symmetric signature using HMAC_SHA512. Formula: stringToSign = HTTPMethod + ":" + EndpointUrl + ":" + AccessToken + ":" + Lowercase(HexEncode(SHA256(minify(RequestBody)))) + ":" + TimeStamp. Notes: (1) Use full URL including all parameters. (2) If no Request Body, use empty string. |
X-PARTNER-ID | M | String | Unique partner ID. Use the iFortepay Client ID obtained after onboarding. |
X-EXTERNAL-ID | M | String | Numeric String. A unique reference number you generate. Must be unique on the same day. |
ORIGIN | O | String | Origin domain registered on the iFortepay system. |
CHANNEL-ID | M | String | Device identification on which the API services are being accessed. Use value: api |
M = Mandatory, O = Optional
Request Body
Details
| Parameter / Field | Mandatory | Type | Length | Description |
|---|---|---|---|---|
partnerReferenceNo | M | String | 64 | Transaction identifier on service consumer system |
amount | M | Object | - | Transfer amount |
amount.value | M | String (ISO4217) | 16,2 | Net amount of the transaction |
amount.currency | M | String | 3 | Currency — fill: IDR |
beneficiaryAccountName | M | String | 100 | Beneficiary account name |
beneficiaryAccountNo | M | String | 34 | Beneficiary account number |
beneficiaryAddress | O | String | 100 | Beneficiary address |
beneficiaryBankCode | M | String | 8 | Beneficiary bank code |
beneficiaryBankName | O | String | 50 | Beneficiary bank name |
beneficiaryEmail | O | String | 50 | Beneficiary email |
currency | O | String | 3 | Currency type — fill: IDR |
customerReference | O | String | 30 | Reference Number / Referral No / Transaction ID |
sourceAccountNo | M | String | 19 | Source account number for transfer. Use your registered account number (see businessAccountNumber in API Get Merchant Profile). Possible error: Invalid field format - sourceAccountNo is not found |
transactionDate | M | String | 25 | Transaction date in ISO 8601 format |
feeType | O | String | 25 | Indicates who is charged the fee. Possible value: OUR (fee charged to sender — currently the only supported value) |
originatorInfos | M | Array of Object | - | Originator customer account details. Required per Article 8 paragraph 5 of Law No. 3 of 2011 on Fund Transfers and PPATK regulations. |
originatorCustomerNo | M | String | 34 | Originator customer account number |
originatorBankCode | M | String | 8 | Originator bank code |
originatorCustomerName | M | String | 100 | Originator customer account name |
additionalInfo | M | Object | - | Additional information. Validation: must be an object. |
Additional Info Object Detail (Request)
| Parameter / Field | Mandatory | Type | Length | Description |
|---|---|---|---|---|
remark | O | String | 100 | Transaction notes. May appear in beneficiary's account mutation. Only allows alphanumeric, hyphens (-), periods (.), and commas (,). If empty, filled with default format. |
transactionPurpose | M | String | - | Required per Bank Indonesia regulations. Values: "1" = Business Purpose, "2" = Non-Business (Education), "3" = Non-Business (Other). Only accepts "1", "2", or "3". |
beneficiaryCountry | M | String | - | Beneficiary's country. Must be a valid Country ID. See: List City ID & Country ID - Senmo |
beneficiaryCity | M | String | - | Beneficiary's city. Must be a valid City ID. See: List City ID & Country ID - Senmo |
senderCountry | M | String | - | Sender's country. Must be a valid Country ID. See: List City ID & Country ID - Senmo |
senderCity | M | String | - | Sender's city. Must be a valid City ID. See: List City ID & Country ID - Senmo |
senderPlaceOfBirth | O | String | - | City/Country ID of sender's place of birth. Use City ID if in Indonesia, Country ID if abroad. Required for PJP/PPOB Merchants. |
senderDateOfBirth | O | String | - | Sender's date of birth in YYYY-MM-DD format. Required for PJP/PPOB Merchants. |
senderIdentityType | C | String | - | Sender's ID type. Required for PJP/PPOB Merchants. Values: ktp, driving license, passport, bank account (DEFAULT), limited stay visa |
senderAddress | O | String | 255 | Sender's address. Required for PJP/PPOB Merchants. |
senderIdentityNo | C | String | 50 | Sender's ID number. Alphanumeric. Required for PJP/PPOB Merchants. |
senderJob | C | String | - | Required for PJP Disbursement. Values: housewife, entrepreneur, employee, government_employee, foundation_board, indonesian_migrant_worker, company, others |
direction | O | String | - | Transfer direction. Value: DOMESTIC. Defaults to DOMESTIC if empty. |
originCountryOfTransaction | O | String | - | Origin country of transaction. Defaults to same as senderCountry if empty. |
senderNickName | O | String | - | Sender's nickname (can be same as full name). Defaults to your registered Brand Name if empty. |
senderTaxpayerRegistration | O | String | - | Sender's NPWP |
sourceOfFund | O | String | - | Sender's source of fund. Defaults to "Balance" if empty. |
senderPhoneNumber | O | String | - | Sender's phone number |
senderGender | O | String | - | Sender's gender. Values: Male or Female. Defaults to "Male" if empty. |
isVirtualAccount | O | String | 1 | Differentiates virtual account transaction requests. Values: Y or N. Default: N |
Example Requests
Details
artifact
id: transfer-interbank-request
name: Example Request - Regular Merchant
type: code.bash
content: |-
curl --location --request POST 'https://api-stage.senmo.id/api/v1.2/transfer-interbank' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2023-01-06T10:52:14+07:00' \
--header 'X-SIGNATURE: qDSozxoMpa0RB7NntE4lnc7Xmkn9l3VGiR0WlEYSNB6PO/xrDXJ4iwHw/8lBrhoFWkIJAYYOF311WyHbxcEfUg==' \
--header 'X-PARTNER-ID: MCPD00000012' \
--header 'X-EXTERNAL-ID: 1672977134961' \
--header 'CHANNEL-ID: api' \
--header 'ORIGIN: https://www.mcpayment.id' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
--data-raw '{
"partnerReferenceNo": "20230105-0003",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"beneficiaryAccountName": "Test BCA",
"beneficiaryAccountNo": "8753293240",
"beneficiaryAddress": "Jl. Kelapa Gading No. 1 Surabaya",
"beneficiaryBankCode": "014",
"beneficiaryEmail": "[email protected]",
"currency": "IDR",
"customerReference": "123",
"sourceAccountNo": "123812939120",
"transactionDate": "2022-11-09T14:00:00+07:00",
"feeType": "OUR",
"originatorInfos": [{
"originatorCustomerNo": "053229281239",
"originatorCustomerName": "Jotaro Kujo",
"originatorBankCode": "014"
}],
"additionalInfo": {
"remark": "Transfer ke bank BCA",
"transactionPurpose": "1",
"beneficiaryCountry": "ID",
"beneficiaryCity": "1101",
"senderCountry": "ID",
"senderCity": "1101",
"isVirtualAccount": "N"
}
}'Example Request for PJP / PPOB Merchant:
bash
curl --location --request POST 'https://api-stage.senmo.id/api/v1.2/transfer-interbank' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2023-01-06T10:02:50+07:00' \
--header 'X-SIGNATURE: CWpL22EliD/992RFqE+PXyToWA6Uvj9N2cshxr0tGYSPn2/BX+VOBcs6pShc/RC+hW0/RGYqX+hzJloplSLT+A==' \
--header 'X-PARTNER-ID: MCPD00000012' \
--header 'X-EXTERNAL-ID: 1672974170013' \
--header 'CHANNEL-ID: api' \
--header 'ORIGIN: https://www.mcpayment.id' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
--data-raw '{
"partnerReferenceNo": "20230105-0001",
"amount": { "value": "10000.00", "currency": "IDR" },
"beneficiaryAccountName": "Test BCA",
"beneficiaryAccountNo": "8753293240",
"beneficiaryBankCode": "014",
"sourceAccountNo": "123812939120",
"transactionDate": "2022-11-09T14:00:00+07:00",
"feeType": "OUR",
"originatorInfos": [{
"originatorCustomerNo": "053229281239",
"originatorCustomerName": "Jotaro Kujo",
"originatorBankCode": "014"
}],
"additionalInfo": {
"remark": "Transfer ke bank BCA",
"transactionPurpose": "1",
"beneficiaryCountry": "ID",
"beneficiaryCity": "1101",
"senderCountry": "ID",
"senderCity": "1101",
"senderPlaceOfBirth": "1101",
"senderDateOfBirth": "1992-08-17",
"senderIdentityType": "ktp",
"senderAddress": "Jalan permata hijau",
"senderIdentityNo": "123456789",
"senderJob": "others",
"direction": "DOMESTIC",
"originCountryOfTransaction": "ID",
"senderNickName": "jane",
"senderTaxpayerRegistration": "59.132.123.4-345.000",
"sourceOfFund": "salary",
"senderPhoneNumber": "082829230146",
"senderGender": "Male",
"isVirtualAccount": "N"
}
}'Response Structure
Response Header
Details
| Parameter / Field | Mandatory | Type | Description |
|---|---|---|---|
Content-Type | M | String | Value: application/json |
X-TIMESTAMP | M | String | Client's current local time in yyyy-MM-ddTHH:mm:ss.SSSTZD format |
Response Body
Details
| Parameter / Field | Mandatory | Type | Length | Description |
|---|---|---|---|---|
responseCode | M | String | 7 | Response code |
responseMessage | M | String | 150 | Response description |
referenceNo | C | String | 64 | Transaction identifier on service provider system. Must be filled upon successful transaction. |
partnerReferenceNo | O | String | 64 | Transaction identifier on service consumer system |
amount | O | Object | - | Transfer amount |
amount.value | M | String (ISO4217) | 16,2 | Net amount of the transaction |
amount.currency | M | String | 3 | Currency — IDR |
beneficiaryAccountNo | M | String | 19 | Beneficiary account number |
beneficiaryBankCode | O | String | 8 | Beneficiary bank code |
sourceAccountNo | O | String | 19 | Source account number for transfer |
transactionDate | M | String | 25 | Transaction date in ISO 8601 format |
additionalInfo | M | Object | - | Additional information. See Additional Info Object Detail. |
Additional Info Object Detail (Response)
| Parameter / Field | Mandatory | Type | Length | Description |
|---|---|---|---|---|
beneficiaryCountry | M | String | - | Beneficiary country |
beneficiaryCity | M | String | - | Beneficiary city |
beneficiaryEmail | O | String | 50 | Beneficiary email |
beneficiaryAccountName | M | String | 50 | Beneficiary name |
remark | O | String | 50 | Transaction notes |
customerReference | O | String | 30 | Reference Number / Referral No / Transaction ID |
fee | M | Object | - | Disbursement fee |
fee.value | M | String | 16,2 | Fee value of the disbursement transaction |
fee.currency | M | String | 3 | Currency |
status | M | String | - | Transaction status: INIT (in progress), SUCCESS (money sent), CANCELLED (failed — balance refunded) |
senderCountry | M | String | - | Sender country |
senderCity | M | String | - | Sender city |
senderPlaceOfBirth | C | String | - | Sender's city/country ID of birth |
senderDateOfBirth | C | String | - | Sender's date of birth (YYYY-MM-DD) |
senderIdentityType | C | String | - | Sender's identity type |
senderAddress | C | String | 255 | Sender's address |
senderIdentityNo | C | String | 50 | Sender's identity number |
senderJob | C | String | - | Sender's job |
direction | O | String | - | Disbursement direction. Value: DOMESTIC |
origin_country_of_transaction | O | String | - | Origin country of transaction. Defaults to "ID" if empty. |
senderNickName | O | String | - | Sender's nickname. Defaults to registered Brand Name if empty. |
senderTaxpayerRegistration | O | String | - | Sender's NPWP |
sourceOfFund | O | String | - | Sender's source of fund. Defaults to "Balance" if empty. |
senderPhoneNumber | O | String | - | Sender's phone number |
transactionPurpose | O | String | - | Transaction purpose: "1" = Business, "2" = Non-Business (Education), "3" = Non-Business (Other) |
senderGender | O | String | - | Sender's gender: Male or Female. Defaults to "Male" if empty. |
isVirtualAccount | O | String | 1 | Virtual account flag. Values: Y or N. Default: N |
executionDate | O | String | - | Execution date for scheduled disbursement |
originatorInfos | M | Array of Object | - | Originator customer account details |
originatorCustomerNo | M | String | 34 | Originator customer account number |
originatorBankCode | M | String | 8 | Originator bank code |
originatorCustomerName | M | String | 100 | Originator customer account name |
Example Responses
Details
✅ Success Response — Regular Merchant
json
{
"responseCode": "2001800",
"responseMessage": "Successful",
"referenceNo": "STI25121100000014664",
"partnerReferenceNo": "QA-20251211-004",
"amount": { "value": "10000.00", "currency": "IDR" },
"beneficiaryAccountNo": "17171717",
"beneficiaryBankCode": "009",
"sourceAccountNo": "1234567890",
"additionalInfo": {
"beneficiaryAccountName": "SDR EREN JEAGER",
"fee": { "value": "3000.00", "currency": "IDR" },
"status": "SUCCESS",
"senderIdentityType": "BANK ACCOUNT",
"originCountryOfTransaction": "ID",
"beneficiaryCountry": "Indonesia",
"sourceOfFund": "Balance",
"transactionPurpose": "3",
"senderGender": "Male",
"senderNickName": "PT Jojo Bizzare Advanture 1",
"direction": "DOMESTIC",
"isVirtualAccount": "N",
"executionDate": null,
"senderCity": "3173",
"beneficiaryCity": "3273"
},
"originatorInfos": [{
"originatorBankCode": "014",
"originatorCustomerNo": "11111",
"originatorCustomerName": "Test Name"
}]
}✅ Success Response — PJP / PPOB Merchant
json
{
"responseCode": "2001800",
"responseMessage": "Successful",
"referenceNo": "STI25121100000014664",
"partnerReferenceNo": "QA-20251211-004",
"amount": { "value": "10000.00", "currency": "IDR" },
"beneficiaryAccountNo": "17171717",
"beneficiaryBankCode": "009",
"sourceAccountNo": "1234567890",
"additionalInfo": {
"beneficiaryAccountName": "SDR EREN JEAGER",
"fee": { "value": "3000.00", "currency": "IDR" },
"status": "SUCCESS",
"senderAddress": "Jl. Sudirman 8-10, Jakarta",
"senderIdentityNo": "12345",
"senderJob": "EMPLOYEE",
"senderTaxpayerRegistration": "59.132.123.4-345.000",
"sourceOfFund": "Balance",
"senderPhoneNumber": "081234567890",
"transactionPurpose": "3",
"senderGender": "Male",
"direction": "DOMESTIC",
"isVirtualAccount": "N",
"executionDate": null,
"senderCity": "3173",
"beneficiaryCity": "3273"
},
"originatorInfos": [{
"originatorBankCode": "014",
"originatorCustomerNo": "11111",
"originatorCustomerName": "Test Name"
}]
}⏳ Pending Response — Regular Merchant
json
{
"responseCode": "2021800",
"responseMessage": "Request In Progress",
"referenceNo": "STI25121100000014664",
"partnerReferenceNo": "QA-20251211-004",
"amount": { "value": "10000.00", "currency": "IDR" },
"beneficiaryAccountNo": "17171717",
"beneficiaryBankCode": "009",
"sourceAccountNo": "1234567890",
"additionalInfo": {
"beneficiaryAccountName": "SDR EREN JEAGER",
"fee": { "value": "3000.00", "currency": "IDR" },
"status": "INIT",
"direction": "DOMESTIC",
"isVirtualAccount": "N",
"executionDate": null,
"senderCity": "3173",
"beneficiaryCity": "3273"
},
"originatorInfos": [{
"originatorBankCode": "014",
"originatorCustomerNo": "11111",
"originatorCustomerName": "Test Name"
}]
}❌ Error Response
json
{
"responseCode": "4011801",
"responseMessage": "Invalid Token B2B"
}Callback
Transaction status will be sent as a callback notification to your provided callback URL after the transaction reaches its final status (SUCCESS or CANCELLED). The provided URL must return a 200 HTTP Status Code. iFortepay will call your URL using HTTP Method POST.
Callback Header
Details
| Parameter / Field | Mandatory | Type | Description |
|---|---|---|---|
Content-Type | M | String | Use: application/json |
X-TIMESTAMP | M | String | Client's current local time in yyyy-MM-ddTHH:mm:ss.SSSTZD format |
X-SIGNATURE | M | String | Symmetric signature using HMAC_SHA512. Formula: stringToSign = PartnerCallbackURL + ":" + X-VERSION + ":" + Lowercase(HexEncode(SHA-256(minify(RequestBody)))) + ":" + X-TIMESTAMP |
X-VERSION | M | String | Callback version. Value: 1.0 |
Callback Body Examples
Details
✅ Transaction Success
json
{
"referenceNo": "STI25121100000014638",
"partnerReferenceNo": "QA-20251211-003",
"amount": { "value": "10000.00", "currency": "IDR" },
"beneficiaryAccountNo": "81818181",
"beneficiaryBankCode": "008",
"sourceAccountNo": "1234567890",
"additionalInfo": {
"beneficiaryAccountName": "KUJO JOTARO",
"fee": { "value": "3000.00", "currency": "IDR" },
"status": "SUCCESS",
"cancelledReason": "",
"additionalInfo": {
"senderIdentityType": "BANK ACCOUNT",
"direction": "DOMESTIC",
"originCountryOfTransaction": "ID",
"sourceOfFund": "Balance",
"transactionPurpose": "3",
"senderGender": "Male",
"isVirtualAccount": "N"
}
},
"originatorInfos": [{
"originatorBankCode": "014",
"originatorCustomerNo": "11111",
"originatorCustomerName": "Test Name"
}]
}❌ Transaction Cancelled (Failed)
json
{
"referenceNo": "STI25121100000014664",
"partnerReferenceNo": "QA-20251211-004",
"amount": { "value": "10000.00", "currency": "IDR" },
"beneficiaryAccountNo": "17171717",
"beneficiaryBankCode": "009",
"sourceAccountNo": "1234567890",
"additionalInfo": {
"beneficiaryAccountName": "SDR EREN JEAGER",
"fee": { "value": "3000.00", "currency": "IDR" },
"status": "CANCELLED",
"cancelledReason": "External Server Error",
"additionalInfo": {
"senderIdentityType": "BANK ACCOUNT",
"direction": "DOMESTIC",
"originCountryOfTransaction": "ID",
"sourceOfFund": "Balance",
"transactionPurpose": "3",
"senderGender": "Male",
"isVirtualAccount": "N"
}
},
"originatorInfos": [{
"originatorBankCode": "014",
"originatorCustomerNo": "11111",
"originatorCustomerName": "Test Name"
}]
}Testing Account
Refer to disbursement testing account section.