Skip to main content

Send Money API Documentation

This document describes the internal API for sending money via Topremit.
It is confidential and for hiring/exercise purposes only.

Rest API Overview

For more information, please visit our REST API page to see usage limits, authentication, and other endpoints.


Endpoint​

POST /v1/remittance/send

Description​

Initiates a remittance transaction to a recipient. Use this endpoint to send money to supported countries with the specified service type. The remittance will only succeed if all required fields are provided and valid.


Headers​

HeaderTypeDescription
AuthorizationstringAPI key or bearer token for authentication
Content-TypestringMust be application/json
Tips

Always include the Authorization header to avoid 401 Unauthorized errors.


Request Body Type Data​

{
"sender_id": "string",
"recipient_id": "string",
"amount": "number",
"currency": "string",
"service_type": "string",
"payment_method": "string",
"reference": "string"
}

Example Request Body​

{
"sender_id": "201925",
"country": "PHL",
"currency": "PHP",
"service": "Bank Transfer (Normal)",
"recipient_name": "Benecito Cabrera",
"recipient_bank_account": "1234567890",
"amount": 10000,
"purpose": "Purchase Goods and Services"
}

Request Fields​

FieldTypeRequiredDescriptionExample
sender_idstring✅Unique ID of the sender"201925"
countrystring✅3-letter ISO country code"PHL"
currencystring✅Currency code of the remittance"PHP"
servicestring✅The service type for the transfer"Bank Transfer (Normal)"
recipient_namestring✅Name of the recipient"Benecito Cabrera"
recipient_bank_accountstring✅Recipient's bank account number"1234567890"
amountnumber✅Transfer amount in destination currency10000
purposestring✅Purpose of the transaction"Purchase Goods and Services"

Response Body Type Data​

{
"ref_id": "string",
"expiration_date": "string",
"service": "string",
"fx_rate": "string",
"status": "string",
"estimated_arrival": "string",
"source": {
"currency": "string",
"amount": "string"
},
"destination": {
"country": "string",
"currency": "string",
"amount": "string"
},
"fee": {
"amount": "number",
"currency": "string"
}
}

Example Response Body​

{
"ref_id": "dfbae7e7-5271-4d63-bce0-a5c2367d9594",
"expiration_date": "2025-06-25T15:00:00Z",
"service": "Bank Transfer (Normal)",
"fx_rate": "288.95",
"status": "IN_PROGRESS",
"estimated_arrival": "2025-06-27T15:00:00Z",
"source": {
"currency": "IDR",
"amount": "2889500"
},
"destination": {
"country": "PHL",
"currency": "PHP",
"amount": "10000.00"
},
"fee": {
"amount": 45000,
"currency": "IDR"
}
}

Response Fields​

FieldTypeDescriptionExample
ref_idstring (UUID)Unique transaction reference"dfbae7e7-5271-4d63-bce0-a5c2367d9594"
expiration_datestring (date-time)Expiration of the transaction"2025-06-25T15:00:00Z"
servicestringService type used"Bank Transfer (Normal)"
fx_ratestringExchange rate applied"288.95"
statusstringCurrent status of transaction"IN_PROGRESS"
estimated_arrivalstring (date-time)Estimated arrival of funds"2025-06-27T15:00:00Z"
source.currencystringSource currency"IDR"
source.amountstringSource amount"2889500"
destination.countrystringRecipient country"PHL"
destination.currencystringRecipient currency"PHP"
destination.amountstringAmount to recipient"10000.00"
fee.amountnumberFee amount charged45000
fee.currencystringFee currency"IDR"

Possible Error Responses​

HTTP StatusDescriptionExample
400Bad Request - validation error{ "error": "Missing required field: recipient_name" }
401Unauthorized - missing or invalid API key{ "error": "Unauthorized" }
429Too many requests - rate limited{ "error": "Too many requests, please retry later." }
500Internal Server Error{ "error": "Internal Server Error" }
Information

• 400 errors usually occur if any required field is missing or the value is invalid. Always check your payload before sending.

• 401 errors indicate invalid or missing Authorization header. Ensure your API key or bearer token is correct.

• 429 errors happen when the rate limit is exceeded. Implement retry logic with exponential backoff.

• 500 errors indicate an internal server issue. If you encounter this, please try again later or contact support.

warning

• All fields marked with ✅ in the Request Fields table are required. Missing or invalid values will result in a 400 Bad Request.

• Currency must match one of the supported codes (e.g., PHP, USD). The system will reject unsupported currencies.

• Ensure the recipient_bank_account is valid and belongs to the recipient; otherwise, the transfer may fail or be reversed.

• Do not expose your API key in client-side code. Always store it securely on the server.

Additional Tips / Tips Tambahan

• Always double-check amounts and recipient details before sending.

• Include a meaningful purpose for compliance.

• Check service limits to avoid rejection.