Initiate ACH Payment

Overview

This endpoint allows you to initiate a payment through the ACH rail using the Passport API. A successful request creates the payment object and returns the transaction details, including its status and recipient information.

Requirement

Endpoint Details

Parameter

Description

Endpoint

https://api.paas.sandbox.co.passportfintech.com/v1/payments/ach

Method

POST

Headers

Content-Type: application/json, Authorization

Authentication

Bearer Token

Request Body

Parameter

Type

Restriction

Required

Description

account_id

String


Yes

Unique ID of the account from which the payment will be made.

recipient_id

String


Yes

Unique ID of the ACH recipient that will receive the payment.

amount

Object


Yes

Defines the value and currency for the transaction.

value

String


Yes

Amount to transfer.

currency

String


Yes

Transaction currency. Must be "COP".

description

String


No

Payment reference: free-text field that allows any additional or custom information related to the transaction to be included.

type

int



Code used for the transaction type in different scenarios according to the table:

Disbursement:

  • Savings Account Disbursement: 32

  • CR Registration Savings Account: 33

  • Checking Account Disbursement: 22

  • CR Registration Checking Account: 23

  • Electronic Deposit Disbursement: 52

  • Electronic Deposit Registration: 53

Note

amount.value refers to the value field inside the amount object.

Request Example

curl --location --request POST 'https://api.paas.sandbox.co.passportfintech.com/v1/payments/ach' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ --data '{ "account_id": "1b095dbd-7d4b-46d5-8807-1d636482e48a", "recipient_id": "478b5ebe-290a-464b-9acf-352e70e2143d", "amount": { "value": "1000.00", "currency": "COP" }, "description": "Payment", "type": 32 }'

Response Body

  • HTTP Code: 200 OK

  • Returns the payment data along with its unique ID

Response Example

{ "amount": { "value": "1000.00", "currency": "COP" }, "direction": "OUTBOUND", "status": "PENDING", "receiver": { "participant": { "name": "BANCOLOMBIA", "identification_number": "007" }, "owner": { "type": "BUSINESS", "identification_type": "NIT", "identification_number": "333556747", "name": "Passport Software SAS" }, "account": { "account_type": "ORDINARY", "account_number": "8809090909" } }, "account_id": "1b095dbd-7d4b-46d5-8807-1d636482e48a", "type": "ACH", "id": "8c2f8977-fddb-41d9-90e1-6c6e8c5634ec", "created_at": "2026-03-10T17:09:36.16Z", "updated_at": "2026-03-10T17:09:36.16Z", "sender": { "participant": { "identification_number": "890203088" }, "owner": { "type": "BUSINESS", "identification_type": "NIT", "identification_number": "123450016", "name": "Merchant I9TOS" }, "account": { "account_type": "ORDINARY", "account_number": "866000018" } } }
Important
  1. The payment status will initially be PENDING. Once the payment is processed, it will change to SETTLED.

  2. The id shown in the response is the payment_id.

  3. When you make an ACH Payment, it will show up in the GET Account call. The pending balance will be updated. Once the ACH payment is processed, it will lower the pending balance and update your available balance.

Common Errors and Handling

HTTP Code

Meaning

Description

400 Bad Request

Invalid data

Required fields are missing or contain invalid values.

401 Unauthorized

Invalid token

The access token has expired or is invalid.

403 Forbidden

Access denied

You do not have permission to create a payment.

500 Server Error

Server error

Unexpected error while processing the payment.

Best Practices

  • Verify that account_id and recipient_id correspond to valid entities.

  • Monitor the payment status (PENDING, SETTLED, etc.) to confirm processing.

  • Implement error handling in your integration to manage rejections or processing delays.