Skip to content

API Transfer Interbank

API Transfer Interbank is used to trigger fund transfers to a beneficiary's account number.


API Information

FieldValue
Path/api/{version}/transfer-interbank
HTTP MethodPOST
Service Code18
Versionv1.2
TypeJSON

| 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 / FieldMandatoryTypeDescription
Content-TypeMStringIndicates the media type of the resource. Use: application/json
AuthorizationMStringRepresents the access_token. Starts with "Bearer" followed by the access token. e.g.: Bearer eyJraWQiOi...
X-TIMESTAMPMStringClient's current local time in yyyy-MM-ddTHH:mm:ss.SSSTZD format
X-SIGNATUREMStringSymmetric 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-IDMStringUnique partner ID. Use the iFortepay Client ID obtained after onboarding.
X-EXTERNAL-IDMStringNumeric String. A unique reference number you generate. Must be unique on the same day.
ORIGINOStringOrigin domain registered on the iFortepay system.
CHANNEL-IDMStringDevice identification on which the API services are being accessed. Use value: api

M = Mandatory, O = Optional

Request Body

Details
Parameter / FieldMandatoryTypeLengthDescription
partnerReferenceNoMString64Transaction identifier on service consumer system
amountMObject-Transfer amount
amount.valueMString (ISO4217)16,2Net amount of the transaction
amount.currencyMString3Currency — fill: IDR
beneficiaryAccountNameMString100Beneficiary account name
beneficiaryAccountNoMString34Beneficiary account number
beneficiaryAddressOString100Beneficiary address
beneficiaryBankCodeMString8Beneficiary bank code
beneficiaryBankNameOString50Beneficiary bank name
beneficiaryEmailOString50Beneficiary email
currencyOString3Currency type — fill: IDR
customerReferenceOString30Reference Number / Referral No / Transaction ID
sourceAccountNoMString19Source 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
transactionDateMString25Transaction date in ISO 8601 format
feeTypeOString25Indicates who is charged the fee. Possible value: OUR (fee charged to sender — currently the only supported value)
originatorInfosMArray of Object-Originator customer account details. Required per Article 8 paragraph 5 of Law No. 3 of 2011 on Fund Transfers and PPATK regulations.
originatorCustomerNoMString34Originator customer account number
originatorBankCodeMString8Originator bank code
originatorCustomerNameMString100Originator customer account name
additionalInfoMObject-Additional information. Validation: must be an object.

Additional Info Object Detail (Request)

Parameter / FieldMandatoryTypeLengthDescription
remarkOString100Transaction notes. May appear in beneficiary's account mutation. Only allows alphanumeric, hyphens (-), periods (.), and commas (,). If empty, filled with default format.
transactionPurposeMString-Required per Bank Indonesia regulations. Values: "1" = Business Purpose, "2" = Non-Business (Education), "3" = Non-Business (Other). Only accepts "1", "2", or "3".
beneficiaryCountryMString-Beneficiary's country. Must be a valid Country ID. See: List City ID & Country ID - Senmo
beneficiaryCityMString-Beneficiary's city. Must be a valid City ID. See: List City ID & Country ID - Senmo
senderCountryMString-Sender's country. Must be a valid Country ID. See: List City ID & Country ID - Senmo
senderCityMString-Sender's city. Must be a valid City ID. See: List City ID & Country ID - Senmo
senderPlaceOfBirthOString-City/Country ID of sender's place of birth. Use City ID if in Indonesia, Country ID if abroad. Required for PJP/PPOB Merchants.
senderDateOfBirthOString-Sender's date of birth in YYYY-MM-DD format. Required for PJP/PPOB Merchants.
senderIdentityTypeCString-Sender's ID type. Required for PJP/PPOB Merchants. Values: ktp, driving license, passport, bank account (DEFAULT), limited stay visa
senderAddressOString255Sender's address. Required for PJP/PPOB Merchants.
senderIdentityNoCString50Sender's ID number. Alphanumeric. Required for PJP/PPOB Merchants.
senderJobCString-Required for PJP Disbursement. Values: housewife, entrepreneur, employee, government_employee, foundation_board, indonesian_migrant_worker, company, others
directionOString-Transfer direction. Value: DOMESTIC. Defaults to DOMESTIC if empty.
originCountryOfTransactionOString-Origin country of transaction. Defaults to same as senderCountry if empty.
senderNickNameOString-Sender's nickname (can be same as full name). Defaults to your registered Brand Name if empty.
senderTaxpayerRegistrationOString-Sender's NPWP
sourceOfFundOString-Sender's source of fund. Defaults to "Balance" if empty.
senderPhoneNumberOString-Sender's phone number
senderGenderOString-Sender's gender. Values: Male or Female. Defaults to "Male" if empty.
isVirtualAccountOString1Differentiates 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 / FieldMandatoryTypeDescription
Content-TypeMStringValue: application/json
X-TIMESTAMPMStringClient's current local time in yyyy-MM-ddTHH:mm:ss.SSSTZD format

Response Body

Details
Parameter / FieldMandatoryTypeLengthDescription
responseCodeMString7Response code
responseMessageMString150Response description
referenceNoCString64Transaction identifier on service provider system. Must be filled upon successful transaction.
partnerReferenceNoOString64Transaction identifier on service consumer system
amountOObject-Transfer amount
amount.valueMString (ISO4217)16,2Net amount of the transaction
amount.currencyMString3Currency — IDR
beneficiaryAccountNoMString19Beneficiary account number
beneficiaryBankCodeOString8Beneficiary bank code
sourceAccountNoOString19Source account number for transfer
transactionDateMString25Transaction date in ISO 8601 format
additionalInfoMObject-Additional information. See Additional Info Object Detail.

Additional Info Object Detail (Response)

Parameter / FieldMandatoryTypeLengthDescription
beneficiaryCountryMString-Beneficiary country
beneficiaryCityMString-Beneficiary city
beneficiaryEmailOString50Beneficiary email
beneficiaryAccountNameMString50Beneficiary name
remarkOString50Transaction notes
customerReferenceOString30Reference Number / Referral No / Transaction ID
feeMObject-Disbursement fee
fee.valueMString16,2Fee value of the disbursement transaction
fee.currencyMString3Currency
statusMString-Transaction status: INIT (in progress), SUCCESS (money sent), CANCELLED (failed — balance refunded)
senderCountryMString-Sender country
senderCityMString-Sender city
senderPlaceOfBirthCString-Sender's city/country ID of birth
senderDateOfBirthCString-Sender's date of birth (YYYY-MM-DD)
senderIdentityTypeCString-Sender's identity type
senderAddressCString255Sender's address
senderIdentityNoCString50Sender's identity number
senderJobCString-Sender's job
directionOString-Disbursement direction. Value: DOMESTIC
origin_country_of_transactionOString-Origin country of transaction. Defaults to "ID" if empty.
senderNickNameOString-Sender's nickname. Defaults to registered Brand Name if empty.
senderTaxpayerRegistrationOString-Sender's NPWP
sourceOfFundOString-Sender's source of fund. Defaults to "Balance" if empty.
senderPhoneNumberOString-Sender's phone number
transactionPurposeOString-Transaction purpose: "1" = Business, "2" = Non-Business (Education), "3" = Non-Business (Other)
senderGenderOString-Sender's gender: Male or Female. Defaults to "Male" if empty.
isVirtualAccountOString1Virtual account flag. Values: Y or N. Default: N
executionDateOString-Execution date for scheduled disbursement
originatorInfosMArray of Object-Originator customer account details
originatorCustomerNoMString34Originator customer account number
originatorBankCodeMString8Originator bank code
originatorCustomerNameMString100Originator 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 / FieldMandatoryTypeDescription
Content-TypeMStringUse: application/json
X-TIMESTAMPMStringClient's current local time in yyyy-MM-ddTHH:mm:ss.SSSTZD format
X-SIGNATUREMStringSymmetric signature using HMAC_SHA512. Formula: stringToSign = PartnerCallbackURL + ":" + X-VERSION + ":" + Lowercase(HexEncode(SHA-256(minify(RequestBody)))) + ":" + X-TIMESTAMP
X-VERSIONMStringCallback 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.


iFortepay API Documentation