Skip to content

Payments API (1.0)

The payments API allows you to initiate and manage payments and vendors from your Brex business accounts.

Download OpenAPI description
Languages
Servers
Production
https://api.brex.com
Staging (Note: This is not a sandbox. It will not work with customer tokens.)
https://api-staging.brex.com

Endpoints to manage vendors

Operations

Endpoints to initiate transfers and view transfer statuses. Note that for all transfer endpoints, the 'money' field is positive or unsigned for outgoing transfers (debits), and negative for incoming transfers (credits).

Operations

Request

This endpoint creates a new incoming transfer. You may use use any eligible bank account connection to fund (ACH Debit) any active Brex business account.

Reminder: You may not use the Brex API for any activity that requires a license or registration from any governmental authority without Brex's prior review and approval. This includes but is not limited to any money services business or money transmission activity.

Please review the Brex Access Agreement and contact us if you have any questions.

Security
OAuth2(Required scopes:
incoming_transfers
)
Headers
Idempotency-Keystringrequired
Bodyapplication/jsonrequired
counterpartyobject(CounterPartyIncomingTransfer)required

Counterparty Details for the transfer

counterparty.​typestring(CounterPartyIncomingTransferType)required
Value"BANK"
Discriminator
counterparty.​idstringrequired

The financial account id: Can be found from the List linked accounts endpoint

receiving_accountobject(ReceivingAccount)required

Receiving account details for the transfer

receiving_account.​typestring(ReceivingAccountType)required
Value"BREX_CASH"
Discriminator
receiving_account.​idstringrequired

ID of the Brex business account: Can be found from the List business accounts endpoint

amountobject(Money)required

Money fields can be signed or unsigned. Fields are signed (an unsigned value will be interpreted as positive). The amount of money will be represented in the smallest denomination of the currency indicated. For example, USD 7.00 will be represented in cents with an amount of 700.

amount.​amountinteger(int64)required

The amount of money, in the smallest denomination of the currency indicated by currency. For example, when currency is USD, amount is in cents.

Example: 700
amount.​currencystring or null

The type of currency, in ISO 4217 format.

Default "USD"
Example: "USD"
descriptionstringrequired

Description of the transfer for internal use. Not exposed externally.

curl -i -X POST \
  https://api.brex.com/v1/incoming_transfers \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: string' \
  -d '{
    "counterparty": {
      "type": "BANK",
      "id": "string"
    },
    "receiving_account": {
      "type": "BREX_CASH",
      "id": "string"
    },
    "amount": {
      "amount": 700,
      "currency": "USD"
    },
    "description": "string"
  }'

Responses

createIncomingTransfer 200 response

Bodyapplication/json
idstringrequired

Unique ID associated with the transfer

counterpartyobject or null

Counterparty Details for the transfer - Currently only supports vendors that are returned in the response from the /vendors endpoint BOOK_TRANSFER is a limited feature. Please reach out if you are interested.

descriptionstring or null

Description of the transfer

payment_typestring(PaymentType)required
Enum"ACH""DOMESTIC_WIRE""CHEQUE""INTERNATIONAL_WIRE""BOOK_TRANSFER""STABLECOIN"
amountobject(Money)required

Money fields can be signed or unsigned. Fields are signed (an unsigned value will be interpreted as positive). The amount of money will be represented in the smallest denomination of the currency indicated. For example, USD 7.00 will be represented in cents with an amount of 700.

amount.​amountinteger(int64)required

The amount of money, in the smallest denomination of the currency indicated by currency. For example, when currency is USD, amount is in cents.

Example: 700
amount.​currencystring or null

The type of currency, in ISO 4217 format.

Default "USD"
Example: "USD"
process_datestring or null(date)

Transaction processing date

originating_accountobject(OriginatingAccountResponse)required

Originating account details for the transfer

originating_account.​typestring(OriginatingAccountResponseType)required
Value"BREX_CASH"
Discriminator
originating_account.​idstringrequired

ID of the Brex Business account.

statusstring(TransferStatus)required

PROCESSING: We have started to process the sending or receiving of this transaction. SCHEDULED: The transaction is scheduled to enter the PROCESSING status. PENDING_APPROVAL: The transaction requires approval before it can enter the SCHEDULED or PROCESSING status. FAILED: A grouping of multiple terminal states that prevented the transaction from completing. This includes a a user-cancellation, approval being denied, insufficient funds, failed verifications, etc. PROCESSED: The money movement has been fully completed, which could mean money sent has arrived.

Enum"PROCESSING""SCHEDULED""PENDING_APPROVAL""FAILED""PROCESSED"
cancellation_reasonstring or null

USER_CANCELLED: The transfer was canceled. INSUFFICIENT_FUNDS: The transfer could not be sent due to insufficient funds. APPROVAL_DENIED: The transfer was not sent because it was denied. BLOCKED_BY_POSITIVE_PAY: The transfer was blocked because of the ACH debit settings.

Enum"USER_CANCELLED""INSUFFICIENT_FUNDS""APPROVAL_DENIED""BLOCKED_BY_POSITIVE_PAY"
estimated_delivery_datestring or null(date)

Estimated delivery date for transfer

creator_user_idstring or null

User ID of the transfer initiator

created_atstring or null(date)

Date of transfer creation

display_namestring or null

Human readable name for the transaction

external_memostring or null<= 90 characters

External memo for the transfer. Payment Instructions for Wires and the Entry Description for ACH payments. Must be at most 90 characters for ACH and WIRE transactions and at most 40 characters for CHEQUES

is_ppro_enabledboolean or null

If Principal Protection (PPRO) is enabled

Response
application/json
{ "id": "string", "counterparty": { "type": "VENDOR", "payment_instrument_id": "string", "id": "string", "routing_number": "string", "account_number": "string" }, "description": "string", "payment_type": "ACH", "amount": { "amount": 700, "currency": "USD" }, "process_date": "2019-08-24", "originating_account": { "type": "BREX_CASH", "id": "string" }, "status": "PROCESSING", "cancellation_reason": "USER_CANCELLED", "estimated_delivery_date": "2019-08-24", "creator_user_id": "string", "created_at": "2019-08-24", "display_name": "string", "external_memo": "string", "is_ppro_enabled": true }

Request

This endpoint lists existing transfers for an account.

Currently, the API can only return transfers for the following payment rails:

  • ACH
  • DOMESTIC_WIRE
  • CHEQUE
  • INTERNATIONAL_WIRE
Security
OAuth2(Required scopes:
transfers.readonly
incoming_transfers
)
Query
cursorstring or null
limitinteger or null(int32)
curl -i -X GET \
  https://api.brex.com/v1/transfers \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Returns a list of transfers.

Bodyapplication/json
next_cursorstring or null
itemsArray of objects(Transfer)required
items[].​idstringrequired

Unique ID associated with the transfer

items[].​counterpartyobject or null

Counterparty Details for the transfer - Currently only supports vendors that are returned in the response from the /vendors endpoint BOOK_TRANSFER is a limited feature. Please reach out if you are interested.

items[].​descriptionstring or null

Description of the transfer

items[].​payment_typestring(PaymentType)required
Enum"ACH""DOMESTIC_WIRE""CHEQUE""INTERNATIONAL_WIRE""BOOK_TRANSFER""STABLECOIN"
items[].​amountobject(Money)required

Money fields can be signed or unsigned. Fields are signed (an unsigned value will be interpreted as positive). The amount of money will be represented in the smallest denomination of the currency indicated. For example, USD 7.00 will be represented in cents with an amount of 700.

items[].​amount.​amountinteger(int64)required

The amount of money, in the smallest denomination of the currency indicated by currency. For example, when currency is USD, amount is in cents.

Example: 700
items[].​amount.​currencystring or null

The type of currency, in ISO 4217 format.

Default "USD"
Example: "USD"
items[].​process_datestring or null(date)

Transaction processing date

items[].​originating_accountobject(OriginatingAccountResponse)required

Originating account details for the transfer

items[].​originating_account.​typestring(OriginatingAccountResponseType)required
Value"BREX_CASH"
Discriminator
items[].​originating_account.​idstringrequired

ID of the Brex Business account.

items[].​statusstring(TransferStatus)required

PROCESSING: We have started to process the sending or receiving of this transaction. SCHEDULED: The transaction is scheduled to enter the PROCESSING status. PENDING_APPROVAL: The transaction requires approval before it can enter the SCHEDULED or PROCESSING status. FAILED: A grouping of multiple terminal states that prevented the transaction from completing. This includes a a user-cancellation, approval being denied, insufficient funds, failed verifications, etc. PROCESSED: The money movement has been fully completed, which could mean money sent has arrived.

Enum"PROCESSING""SCHEDULED""PENDING_APPROVAL""FAILED""PROCESSED"
items[].​cancellation_reasonstring or null

USER_CANCELLED: The transfer was canceled. INSUFFICIENT_FUNDS: The transfer could not be sent due to insufficient funds. APPROVAL_DENIED: The transfer was not sent because it was denied. BLOCKED_BY_POSITIVE_PAY: The transfer was blocked because of the ACH debit settings.

Enum"USER_CANCELLED""INSUFFICIENT_FUNDS""APPROVAL_DENIED""BLOCKED_BY_POSITIVE_PAY"
items[].​estimated_delivery_datestring or null(date)

Estimated delivery date for transfer

items[].​creator_user_idstring or null

User ID of the transfer initiator

items[].​created_atstring or null(date)

Date of transfer creation

items[].​display_namestring or null

Human readable name for the transaction

items[].​external_memostring or null<= 90 characters

External memo for the transfer. Payment Instructions for Wires and the Entry Description for ACH payments. Must be at most 90 characters for ACH and WIRE transactions and at most 40 characters for CHEQUES

items[].​is_ppro_enabledboolean or null

If Principal Protection (PPRO) is enabled

Response
application/json
{ "next_cursor": "string", "items": [ {} ] }

Request

This endpoint creates a new transfer.

Currently, the API can only create transfers for the following payment rails:

  • ACH
  • DOMESTIC_WIRE
  • CHEQUE
  • INTERNATIONAL_WIRES

Transaction Descriptions

  • For outgoing check payments, a successful transfer will return a response containing a description value with a format of Check #<check number> to <recipient_name> - <external_memo>.
  • For book transfers (from one Brex Business account to another), the recipient value will have a format of <customer_account.dba_name> - <external_memo> and the sender will have a format of <target customer account's dba name> - <external_memo>.
  • For other payment rails, the format will be <counterparty_name> - <external_memo>, where Counterparty name is payment_instrument.beneficiary_name or contact.name For vendors created from the Payments API, the counterparty_name will be the company_name field.

Reminder: You may not use the Brex API for any activity that requires a license or registration from any governmental authority without Brex's prior review and approval. This includes but is not limited to any money services business or money transmission activity.

Please review the Brex Access Agreement and contact us if you have any questions.

Security
OAuth2(Required scopes:
transfers
)
Headers
Idempotency-Keystringrequired
Bodyapplication/jsonrequired
counterpartyobject(CounterParty)required

Counterparty Details for the transfer

counterparty.​typestring(CounterPartyType)required
Enum"VENDOR""BOOK_TRANSFER"
Discriminator
counterparty.​recipientobject(Recipient)required
counterparty.​recipient.​typestring(RecipientType)required

Specifies the type of the recipient. ACCOUNT_ID is the ID of a Brex Business account. PAYMENT_INSTRUMENT_ID is the ID of Payment Instrument of the receiving Brex account.

Enum"ACCOUNT_ID""PAYMENT_INSTRUMENT_ID"
counterparty.​recipient.​idstringrequired
amountobject(Money)required

Money fields can be signed or unsigned. Fields are signed (an unsigned value will be interpreted as positive). The amount of money will be represented in the smallest denomination of the currency indicated. For example, USD 7.00 will be represented in cents with an amount of 700.

amount.​amountinteger(int64)required

The amount of money, in the smallest denomination of the currency indicated by currency. For example, when currency is USD, amount is in cents.

Example: 700
amount.​currencystring or null

The type of currency, in ISO 4217 format.

Default "USD"
Example: "USD"
descriptionstringrequired

Description of the transfer for internal use. Not exposed externally.

external_memostring<= 90 charactersrequired

External memo for the transfer. Payment Instructions for Wires and the Entry Description for ACH payments. Must be at most 90 characters for ACH and WIRE transactions and at most 40 characters for CHEQUES

originating_accountobjectrequired

Brex originating account details. Account IDs are returned by the /accounts endpoint. This endpoint currently only supports accounts with instrument type CASH (Brex business accounts) Currently only USD transfers are supported and amount should be positive

originating_account.​typestring(OriginatingAccountType)required
Value"BREX_CASH"
Discriminator
originating_account.​idstringrequired

ID of the Brex Business account: Can be found from the /accounts endpoint where instrument type is CASH.

approval_typestring or null

Specifies the approval type for the transaction. MANUAL requires a cash admin to approve the transaction before disbursing funds. When not set, the default policy will apply.

Value"MANUAL"
is_ppro_enabledboolean

When set to true, add Principal Protection (PPRO) to the transaction. PPRO means Brex will cover any fees charged by intemediary or receiving banks. PPRO charges will be billed separately in a monthly statement. PPRO is only available for international wire transactions.

curl -i -X POST \
  https://api.brex.com/v1/transfers \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: string' \
  -d '{
    "counterparty": {
      "type": "VENDOR",
      "payment_instrument_id": "string"
    },
    "amount": {
      "amount": 700,
      "currency": "USD"
    },
    "description": "string",
    "external_memo": "string",
    "originating_account": {
      "type": "BREX_CASH",
      "id": "string"
    },
    "approval_type": "MANUAL",
    "is_ppro_enabled": true
  }'

Responses

createTransfer 200 response

Bodyapplication/json
idstringrequired

Unique ID associated with the transfer

counterpartyobject or null

Counterparty Details for the transfer - Currently only supports vendors that are returned in the response from the /vendors endpoint BOOK_TRANSFER is a limited feature. Please reach out if you are interested.

descriptionstring or null

Description of the transfer

payment_typestring(PaymentType)required
Enum"ACH""DOMESTIC_WIRE""CHEQUE""INTERNATIONAL_WIRE""BOOK_TRANSFER""STABLECOIN"
amountobject(Money)required

Money fields can be signed or unsigned. Fields are signed (an unsigned value will be interpreted as positive). The amount of money will be represented in the smallest denomination of the currency indicated. For example, USD 7.00 will be represented in cents with an amount of 700.

amount.​amountinteger(int64)required

The amount of money, in the smallest denomination of the currency indicated by currency. For example, when currency is USD, amount is in cents.

Example: 700
amount.​currencystring or null

The type of currency, in ISO 4217 format.

Default "USD"
Example: "USD"
process_datestring or null(date)

Transaction processing date

originating_accountobject(OriginatingAccountResponse)required

Originating account details for the transfer

originating_account.​typestring(OriginatingAccountResponseType)required
Value"BREX_CASH"
Discriminator
originating_account.​idstringrequired

ID of the Brex Business account.

statusstring(TransferStatus)required

PROCESSING: We have started to process the sending or receiving of this transaction. SCHEDULED: The transaction is scheduled to enter the PROCESSING status. PENDING_APPROVAL: The transaction requires approval before it can enter the SCHEDULED or PROCESSING status. FAILED: A grouping of multiple terminal states that prevented the transaction from completing. This includes a a user-cancellation, approval being denied, insufficient funds, failed verifications, etc. PROCESSED: The money movement has been fully completed, which could mean money sent has arrived.

Enum"PROCESSING""SCHEDULED""PENDING_APPROVAL""FAILED""PROCESSED"
cancellation_reasonstring or null

USER_CANCELLED: The transfer was canceled. INSUFFICIENT_FUNDS: The transfer could not be sent due to insufficient funds. APPROVAL_DENIED: The transfer was not sent because it was denied. BLOCKED_BY_POSITIVE_PAY: The transfer was blocked because of the ACH debit settings.

Enum"USER_CANCELLED""INSUFFICIENT_FUNDS""APPROVAL_DENIED""BLOCKED_BY_POSITIVE_PAY"
estimated_delivery_datestring or null(date)

Estimated delivery date for transfer

creator_user_idstring or null

User ID of the transfer initiator

created_atstring or null(date)

Date of transfer creation

display_namestring or null

Human readable name for the transaction

external_memostring or null<= 90 characters

External memo for the transfer. Payment Instructions for Wires and the Entry Description for ACH payments. Must be at most 90 characters for ACH and WIRE transactions and at most 40 characters for CHEQUES

is_ppro_enabledboolean or null

If Principal Protection (PPRO) is enabled

Response
application/json
{ "id": "string", "counterparty": { "type": "VENDOR", "payment_instrument_id": "string", "id": "string", "routing_number": "string", "account_number": "string" }, "description": "string", "payment_type": "ACH", "amount": { "amount": 700, "currency": "USD" }, "process_date": "2019-08-24", "originating_account": { "type": "BREX_CASH", "id": "string" }, "status": "PROCESSING", "cancellation_reason": "USER_CANCELLED", "estimated_delivery_date": "2019-08-24", "creator_user_id": "string", "created_at": "2019-08-24", "display_name": "string", "external_memo": "string", "is_ppro_enabled": true }

Request

This endpoint gets a transfer by ID.

Currently, the API can only return transfers for the following payment rails:

  • ACH
  • DOMESTIC_WIRE
  • CHEQUE
  • INTERNATIONAL_WIRE
Security
OAuth2(Required scopes:
transfers.readonly
incoming_transfers
)
Path
idstringrequired
curl -i -X GET \
  'https://api.brex.com/v1/transfers/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Returns a transfer.

Bodyapplication/json
idstringrequired

Unique ID associated with the transfer

counterpartyobject or null

Counterparty Details for the transfer - Currently only supports vendors that are returned in the response from the /vendors endpoint BOOK_TRANSFER is a limited feature. Please reach out if you are interested.

descriptionstring or null

Description of the transfer

payment_typestring(PaymentType)required
Enum"ACH""DOMESTIC_WIRE""CHEQUE""INTERNATIONAL_WIRE""BOOK_TRANSFER""STABLECOIN"
amountobject(Money)required

Money fields can be signed or unsigned. Fields are signed (an unsigned value will be interpreted as positive). The amount of money will be represented in the smallest denomination of the currency indicated. For example, USD 7.00 will be represented in cents with an amount of 700.

amount.​amountinteger(int64)required

The amount of money, in the smallest denomination of the currency indicated by currency. For example, when currency is USD, amount is in cents.

Example: 700
amount.​currencystring or null

The type of currency, in ISO 4217 format.

Default "USD"
Example: "USD"
process_datestring or null(date)

Transaction processing date

originating_accountobject(OriginatingAccountResponse)required

Originating account details for the transfer

originating_account.​typestring(OriginatingAccountResponseType)required
Value"BREX_CASH"
Discriminator
originating_account.​idstringrequired

ID of the Brex Business account.

statusstring(TransferStatus)required

PROCESSING: We have started to process the sending or receiving of this transaction. SCHEDULED: The transaction is scheduled to enter the PROCESSING status. PENDING_APPROVAL: The transaction requires approval before it can enter the SCHEDULED or PROCESSING status. FAILED: A grouping of multiple terminal states that prevented the transaction from completing. This includes a a user-cancellation, approval being denied, insufficient funds, failed verifications, etc. PROCESSED: The money movement has been fully completed, which could mean money sent has arrived.

Enum"PROCESSING""SCHEDULED""PENDING_APPROVAL""FAILED""PROCESSED"
cancellation_reasonstring or null

USER_CANCELLED: The transfer was canceled. INSUFFICIENT_FUNDS: The transfer could not be sent due to insufficient funds. APPROVAL_DENIED: The transfer was not sent because it was denied. BLOCKED_BY_POSITIVE_PAY: The transfer was blocked because of the ACH debit settings.

Enum"USER_CANCELLED""INSUFFICIENT_FUNDS""APPROVAL_DENIED""BLOCKED_BY_POSITIVE_PAY"
estimated_delivery_datestring or null(date)

Estimated delivery date for transfer

creator_user_idstring or null

User ID of the transfer initiator

created_atstring or null(date)

Date of transfer creation

display_namestring or null

Human readable name for the transaction

external_memostring or null<= 90 characters

External memo for the transfer. Payment Instructions for Wires and the Entry Description for ACH payments. Must be at most 90 characters for ACH and WIRE transactions and at most 40 characters for CHEQUES

is_ppro_enabledboolean or null

If Principal Protection (PPRO) is enabled

Response
application/json
{ "id": "string", "counterparty": { "type": "VENDOR", "payment_instrument_id": "string", "id": "string", "routing_number": "string", "account_number": "string" }, "description": "string", "payment_type": "ACH", "amount": { "amount": 700, "currency": "USD" }, "process_date": "2019-08-24", "originating_account": { "type": "BREX_CASH", "id": "string" }, "status": "PROCESSING", "cancellation_reason": "USER_CANCELLED", "estimated_delivery_date": "2019-08-24", "creator_user_id": "string", "created_at": "2019-08-24", "display_name": "string", "external_memo": "string", "is_ppro_enabled": true }

Endpoint to view connected linked accounts

Operations