Pay via Check
Send funds by physical check to a registered mailing destination.
Pay via Check lets you send funds from a Passport Account by issuing a physical check to a mailing address outside the Passport system.
This payout method supports multiple destination types, depending on who you are paying. Use a pre-registered mailing address when sending a check to an address you already maintain in Passport, or use a Contact when sending a check to another person or business whose payee details are already saved in the system.
Unlike ACH or Wire, this method delivers funds through a physical check, making it useful when electronic payout methods are not available or are not preferred.
Check payouts do not support one-time destinations. The recipient mailing address must already be registered in Passport before you create the transaction.
Common Use Cases:
- Pay vendors or suppliers by mailed check
- Send payments to a saved payee managed as a Contact
- Mail funds to your own registered mailing address
- Include remittance information with a physical payment
Prepare payout recipients
Before initiating a check payout, make sure the recipient is already set up in Passport.
- Use a pre-registered mailing address when the check should be mailed to an address you already manage in the system.
- Use Add Payees as Contacts when sending checks to another person or business and you want to reuse their saved payee details later.
This helps reduce manual entry, improves consistency, and ensures that check payouts are sent only to approved destinations.
Create a check payout
Processing a check payout involves providing the destination mailing details and any delivery or remittance preferences, then tracking the transaction lifecycle.
-
Make a
POSTrequest to/v1/customer/id/{id}/transaction(orexternalId) API endpoint with the required parameters:Parameter Required Description method✓ Set to CHECKsource.account.id✓ The Passport Account to be debited destination✓ Defines the mailing address or Contact to which the check will be sent. Refer to the Destination Types accordion below for supported options. amount✓ Amount to send (in USD). Must be greater than zero. purpose✓ Purpose of the transaction. Maximum 128 characters. typeOptional Type of transaction. Possible values: REGULAR(default),EXTERNAL.allowDuplicateOptional Set to trueto allow duplicate transactions on the same day. Defaults tofalse.externalIdOptional Your own reference ID for the transaction. Maximum 45 characters.
Destination Types
Send to a pre-registered mailing address
Use this option when you want to send money from a Passport Account to a mailing address that is already registered in Passport.
This is the right option when you are sending a physical check to your own registered mailing address or to another address that you already maintain directly in the system.
| Parameter | Required | Description |
|---|---|---|
destination.address.id | ✓ | Unique identifier of the mailing address assigned by Passport |
destination.payeeName | Name of the payee to whom the check is being sent | |
source.payorAddress.id | Unique identifier of the payor’s address assigned by Passport |
Best for:
- Sending a check to your own registered mailing address
- Sending a check to a recipient address that is already maintained in Passport
Send to a Contact
Use this option when you want to send money from a Passport Account to another person or business outside the system whose payee details are already saved as a Contact.
Contacts are useful for recurring third-party check payouts because they let you reuse saved payee details instead of manually entering recipient information each time. If the recipient has not been saved yet, first add them in Add Payees as Contacts.
| Parameter | Required | Description |
|---|---|---|
destination.contact.id | ✓ | Unique identifier of the Contact assigned by Passport |
destination.contact.mailingAddress.id | ✓ | Unique identifier of the mailing address linked to the Contact |
Best for:
- Paying another person or business outside the system
- Reusing saved third-party payee details for repeat check payouts
-
You can also pass the
processingDetailobject, which carries additional processing instructions for your transaction. While optional as a whole, certain fields within it may be required depending on your Program Manager configuration.Parameter Required Description processingDetail.deliveryModeRecommended Mode of delivery for the check. Possible values: STANDARD(default),TWO_DAY,OVERNIGHT.processingDetail.memoAdditional details printed in the memo field of the check. processingDetail.remittanceInfoCheck remittance details passed as per the Check Remittance Template linked to the customer. Sub-nodes correspond to column headings defined in the template. Maximum 10 column headings and 17 entries are supported. processingDetail.checkIssueDateFor EXTERNALtype transactions, the date printed on the check indicating when it was issued. Format:MM/DD/YYYY.processingDetail.location.idUnique identifier of a location to be linked to the transaction, assigned by Passport. -
Once the request is submitted, our system performs a series of system-level validations before sending the transaction for processing. These validations check for:
- Missing or invalid required fields
- Incorrect parameter formats or values
- Program Manager configuration or permission issues
If any validation fails, the request is rejected immediately and an error response is returned. You must correct the issue and resubmit the request. For a complete list of validation errors and how to resolve them, refer to the Error Codes & Messages section.
-
If all validations pass, the transaction is submitted for processing. You can track the outcome by:
- Retrieving the transaction via GET
/v1/customer/id/{id}/transaction/id/{id}(orexternalId) API endpoint - Subscribing to Transaction webhooks
Check the
statusfield to understand the current state of the transaction. - Retrieving the transaction via GET
-
For every successfully created transaction, store:
id– Unique transaction identifier assigned by PassportexternalId– Your reference identifier (if provided)
These are required for tracking, reconciliation, and follow-up actions such as stop requests.
Delivery Modes
Check payouts support three delivery modes, which determine how and when the physical check is delivered to the recipient.
| Mode | Behavior |
|---|---|
STANDARD | Default delivery mode. Check is mailed via standard postal service. |
TWO_DAY | Check is delivered within two business days via expedited shipping. |
OVERNIGHT | Check is delivered the next business day via overnight courier. |
Transaction Statuses
The table below describes the possible statuses of a check payout and the reasons associated with each.
| Status | Description | Reason |
|---|---|---|
SCHEDULED | Default status on creation. | ON_USER_REQUEST |
PENDING | Transaction is on hold as one or more processing conditions have not been met. Source account must be ACTIVE with sufficient funds, and all entities must be OFAC and CIP verified. | EXTERNAL_ACCOUNT_BLOCKED, EXTERNAL_ACCOUNT_INACTIVE, ACCOUNT_INACTIVE, ACCOUNT_BLOCKED, ACCOUNT_CLOSURE_INITIATED, ACCOUNT_CLOSED, CUSTOMER_SUSPENDED, OFAC status is not verified |
PROCESSING | Transaction has been picked up for processing. | PROCESSING_IN_TRANSIT |
IN_DELIVERY | Check has been printed and is currently under shipment. | PROCESSING_IN_DELIVERY |
DELIVERED | Check has been successfully delivered to the recipient. | Transaction Delivered |
COMPLETED | Transaction has been successfully completed after the realization interval. | PROCESSED_BY_SYSTEM, Remote Check Processed |
FAILED | Transaction could not be processed within the allowed interval. | INSUFFICIENT_FUNDS, EXTERNAL_ACCOUNT_BLOCKED, Transaction failed due to OFAC verification failure, <return-description> (<return-code>) |
STOPPED | A stop request was received after the check was printed. | LOST_CHECK, FRAUD, INCORRECT_DESTINATION, INCORRECT_AMOUNT, INCORRECTLY_CREATED, ON_USER_REQUEST, OTHERS |
CANCELLED | Transaction was cancelled upon user request before the check was printed. | ON_USER_REQUEST, INCORRECTLY_CREATED, OTHERS |
Best Practices
| Practice | Description |
|---|---|
| Register recipient addresses in advance | Check payouts do not support one-time destinations. Make sure the destination mailing address is already registered in Passport before creating the transaction. |
| Use Contacts for third-party recipients | When sending checks to another person or business outside the system, save them as a Contact so you can reuse their payee details later. |
| Choose the right delivery mode | Select OVERNIGHT or TWO_DAY for time-sensitive payments. Use STANDARD for routine disbursements to manage costs. |
| Use the Memo field | Populate processingDetail.memo with a clear descriptor. This is printed directly on the check and helps the recipient identify the payment. |
| Include remittance information | For payments that require supporting detail — such as invoice breakdowns — use processingDetail.remittanceInfo to include structured remittance data alongside the check. |
| Monitor transaction status | Track your transaction through IN_DELIVERY and DELIVERED statuses to confirm the check has reached the recipient before raising a stop request. |
| Use Webhooks | Subscribe to transaction webhooks to stay informed about status transitions asynchronously, without polling. |
| Test your integration | Use Passport's sandbox environment to test all send scenarios, including stop requests and delivery failures, before going live. |
Updated 26 minutes ago