***
title: Cookbooks and recipes home
subtitle: Use these quick tutorials to integrate Payabli workflows fast
description: >-
Browse quickstart recipes and cookbooks organized by product area to learn how
to integrate and use Payabli for accepting payments, making payouts, and
managing payment operations.
'og:description': >-
Recipes and cookbooks for integrating Payabli. Find step-by-step tutorials for
Pay In, Pay Out, and Pay Ops workflows.
slug: cookbooks/cookbooks-overview
icon: hat-chef
layout: guide
area:
* Pay In
* Pay Out
* Pay Ops
audience:
* developers
* partners
* merchants
***
This page contains recipes that are designed to help you use and integrate Payabli. Recipes are short tutorials that cover a workflow.
We've organized these by Payabli product area.
This page is under construction, we're working hard to bring you more recipes
and cookbooks. Stay tuned!
## General recipes
/// Step 1: Get your API token
Navigate to **PartnerHub > Developers > API Tokens** and create a new organization token. Your API tokens carry privileges, so keep them secure!
Your token will look something like this:
`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...`
/// Step 2: Add token to request headers
Send the API token in the request header with the key `requestToken`. All API requests must be made over HTTPS.
```bash highlight=3
curl -X POST "https://api.payabli.com/api/ExampleEndpoint/authorize" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN"
```
/// Step 3: Add idempotency key (recommended)
Include a unique `idempotencyKey` header to prevent duplicate transactions. This key persists for 2 minutes.
```bash highlight=4
curl -X POST "https://api.payabli.com/api/ExampleEndpoint/authorize" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN" \
-H "idempotencyKey: unique-request-id-123"
```
Learn more about authentication, API tokens, and idempotency in [API overview](/developers/api-reference/api-overview).
## Pay In recipes
Coming soon!
## Pay Out recipes
Use these recipes help get you started with Pay Out features and functions. See [Pay Out overview](/guides/pay-out-overview) for more.
/// Overview
This complete end-to-end workflow walks through how to send a payment to a vendor using ACH.
/// Step 1: Create a vendor
First, make sure that you have a vendor record. If you already have a `vendorNumber`, you can skip to step 2.
To create a vendor, send a POST request to `/api/Vendor/single/{entry}`.
```bash
curl -X POST "https://api.payabli.com/api/Vendor/single/your-entry-point" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN" \
-d '{
"vendorNumber": "V-001",
"name1": "My First Vendor",
"email": "vendor@example.com",
"paymentMethod": "ach",
"vendorStatus": 1
}'
```
You need the `vendorNumber` you set for the vendor in the next step.
See [Create vendor](/developers/api-reference/vendor/create-vendor) for the full API reference.
/// Step 2: Create a bill for the vendor
Send a POST request to `/api/Bill/single/{entry}` to add a bill that represents the invoice you need to pay. This is optional but **strongly** recommended for tracking.
```bash focus=5
curl -X POST "https://api.payabli.com/api/Bill/single/your-entry-point" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN" \
-d '{
"billNumber": "Test-234782",
"netAmount": 2500.00,
"billDate": "2025-01-08",
"dueDate": "2025-02-08",
"comments": "Q1 supplies order",
"vendor": {
"vendorNumber": "V-001"
}
}'
```
The `billId` is returned in `responseData`. Copy this to use in the next step.
```json highlight=7
{
"responseText": "Success",
"responseCode": 1,
"pageIdentifier": null,
"roomId": 0,
"isSuccess": true,
"responseData": 6101
}
```
See [Create bill](/developers/api-reference/bill/add-bill) for the full API reference.
/// Step 3: Authorize the payout transaction
Authorizing a payout creates the transaction, which is captured for processing later.
To authorize a payout, send a POST request to `/api/MoneyOut/authorize`.
```bash
curl -X POST "https://api.payabli.com/api/MoneyOut/authorize" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN" \
-d '{
"entryPoint": "your-entry-point",
"paymentMethod": {
"method": "ach", // For managed payouts, used 'managed' here, and omit ACH fields
"achHolder": "My First Vendor",
"achRouting": "021000021",
"achAccount": "123456789",
"achAccountType": "Checking"
},
"paymentDetails": {
"totalAmount": 2500.00,
"orderDescription": "First payout test"
},
"vendorData": {
"vendorNumber": "V-001"
},
"invoiceData": [
{
"billId": 6101
}
]
}'
```
The response includes a `referenceId` (for example, `"129-001"`) that you need to capture the payout for processing in the next step.
```json highlight=9
{
"responseCode": 1,
"pageIdentifier": null,
"roomId": 0,
"isSuccess": true,
"responseText": "Success",
"responseData": {
"authCode": null,
"referenceId": "129-001",
"resultCode": 1,
"resultText": "Authorized",
"avsResponseText": null,
"cvvResponseText": null,
"customerId": 0,
"methodReferenceId": null
}
}
```
See [Authorize a transaction for payout](/developers/api-reference/moneyout/authorize-a-transaction-for-payout) for the full API reference.
/// Step 4: Capture the payout for settlement
Capturing an authorized payout adds it to a batch for processing.
To capture the payout, send a GET request to `/api/MoneyOut/capture/{referenceId}`.
```bash
curl -X GET "https://api.payabli.com/api/MoneyOut/capture/129-001" \
-H "requestToken: YOUR_API_TOKEN"
```
The payout is now captured and will process with the next batch at 5 PM ET.
See [Capture an authorized payout transaction](/developers/api-reference/moneyout/capture-an-authorized-payout-transaction) for the full API reference.
/// Step 5: Monitor transaction status
Check the transaction status as it progresses through the payment lifecycle.
To get the transaction details, send a GET request to `/api/MoneyOut/details/{referenceId}`.
```bash
curl -X GET "https://api.payabli.com/api/MoneyOut/details/129-001" \
-H "requestToken: YOUR_API_TOKEN"
```
Watch for the status to progress: 1 (Captured) → 2 (Processing) → 3 (Processed) → 5 (Paid).
* Learn more about [Pay Out statuses](/guides/pay-out-status-reference).
* See [Get details for a processed payout transaction](/developers/api-reference/moneyout/get-details-for-a-processed-payout-transaction) for the full API reference.
/// What's next
Congratulations! You just processed your first payout. Next, get to know [payables](/guides/pay-out-payables-overview) and learn more about [managing payouts](/guides/pay-out-developer-payouts-manage).
/// Overview
Add a new vendor record with bank account details for ACH payments.
/// Prerequisites
Before you start, gather the following information. Payabli supports US and Canadian vendors only.
* Vendor business information: name, email, phone, and address
* A `vendorNumber` to identify the vendor in your system
* Bank account details for ACH payments: routing number, account number, account type, and account holder name
Including bank account details in `billingData` is not supported if you use [managed payouts](/guides/pay-out-managed-payables-overview).
/// Step 1: Create the vendor
Send a POST request to `/api/Vendor/single/{entry}` to create the vendor. The `entry` parameter is your entrypoint identifier.
```bash
curl -X POST "https://api.payabli.com/api/Vendor/single/your-entry-point" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN" \
-d '{
"vendorNumber": "V-001",
"name1": "Acme Supplies Inc",
"email": "ap@acme.com",
"phone": "5125551234",
"address1": "123 Main Street",
"city": "Austin",
"state": "TX",
"zip": "78701",
"country": "US",
"paymentMethod": "ach",
"vendorStatus": 1,
"billingData": {
"routingAccount": "021000021",
"accountNumber": "123456789",
"typeAccount": "Checking",
"bankAccountHolderName": "Acme Supplies Inc",
"bankAccountHolderType": "Business",
"bankName": "Chase Bank"
}
}'
```
The response returns the Payabli-generated `vendorId` in `responseData`.
```json highlight=5
{
"responseText": "Success",
"isSuccess": true,
"responseCode": 1,
"responseData": 3890
}
```
See [Create vendor](/developers/api-reference/vendor/create-vendor) for the full API reference.
/// Overview
Send a payment to a vendor via ACH bank transfer with full transaction lifecycle. This recipe is for on-demand payouts and is not supported with [managed payouts](/guides/pay-out-managed-payables-overview).
/// Prerequisites
Before you start, make sure you have the following:
* A `vendorNumber` for the vendor you're paying
* The vendor's ACH information: account holder name, routing number, account number, and account type (checking or savings)
* A `billId` if you're paying against a bill (recommended)
/// Step 1: Authorize the payout
Authorize the payout. This queues the transaction but doesn't process it until captured.
To authorize a payout, send a POST request to `/api/MoneyOut/authorize`.
```bash
curl -X POST "https://api.payabli.com/api/MoneyOut/authorize" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN" \
-d '{
"entryPoint": "your-entry-point",
"paymentMethod": {
"method": "ach",
"achHolder": "Acme Supplies",
"achRouting": "021000021",
"achAccount": "123456789",
"achAccountType": "Checking"
},
"paymentDetails": {
"totalAmount": 1500.00,
"orderDescription": "Invoice payment"
},
"vendorData": {
"vendorNumber": "V-001"
},
"invoiceData": [
{
"billId": 6101
}
]
}'
```
The response includes a `referenceId` that you need to capture or cancel the transaction.
```json highlight=5
{
"isSuccess": true,
"responseData": {
"authCode": null,
"referenceId": "129-219",
"resultCode": 1,
"resultText": "Authorized"
}
}
```
See [Authorize a transaction for payout](/developers/api-reference/moneyout/authorize-a-transaction-for-payout) for the full API reference.
/// Step 2: Capture the payout
Capture the authorized transaction to add it to a batch for processing. Batches close at 5 PM ET.
To capture the payout, send a GET request to `/api/MoneyOut/capture/{referenceId}`.
```bash focus=1
curl -X GET "https://api.payabli.com/api/MoneyOut/capture/129-219" \
-H "requestToken: YOUR_API_TOKEN"
```
See [Capture an authorized payout transaction](/developers/api-reference/moneyout/capture-an-authorized-payout-transaction) for the full API reference.
/// Step 3: Monitor transaction status
Check the transaction details to monitor the payout through its lifecycle: Captured → Processing → Processed → Paid.
To get the transaction details, send a GET request to `/api/MoneyOut/details/{referenceId}`.
```bash
curl -X GET "https://api.payabli.com/api/MoneyOut/details/129-219" \
-H "requestToken: YOUR_API_TOKEN"
```
See [Get details for a processed payout transaction](/developers/api-reference/moneyout/get-details-for-a-processed-payout-transaction) for the full API reference.
/// Step 4: (Optional) Cancel if needed
You can cancel authorized or captured transactions before the batch closes at 5 PM ET.
To cancel a payout, send a DELETE request to `/api/MoneyOut/cancel/{referenceId}`.
```bash focus=1
curl -X DELETE "https://api.payabli.com/api/MoneyOut/cancel/129-219" \
-H "requestToken: YOUR_API_TOKEN"
```
See [Cancel a payout transaction](/developers/api-reference/moneyout/cancel-a-payout-transaction) for the full API reference.
/// Overview
This recipe walks through issuing a single-use virtual card to a vendor and sending the card link via email. This recipe is for on-demand payouts and is not supported with [managed payouts](/guides/pay-out-managed-payables-overview).
/// Prerequisites
Before you start, make sure you have the following:
* A `vendorNumber` for the vendor you're paying
* The vendor's email address to send the card link to
/// Step 1: Create the virtual card payout
Authorize a payout with `method: "vcard"`. This creates a single-use virtual card for the vendor.
To authorize the payout, send a POST request to `/api/MoneyOut/authorize`.
```bash focus=7
curl -X POST "https://api.payabli.com/api/MoneyOut/authorize" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN" \
-d '{
"entryPoint": "your-entry-point",
"paymentMethod": {
"method": "vcard"
},
"paymentDetails": {
"totalAmount": 500.00
},
"vendorData": {
"vendorNumber": "V-001",
"email": "vendor@example.com"
}
}'
```
The response includes a `referenceId` that you need to capture the payout transaction.
```json highlight=5
{
"isSuccess": true,
"responseData": {
"authCode": null,
"referenceId": "129-220",
"resultCode": 1,
"resultText": "Authorized"
}
}
```
See [Authorize a transaction for payout](/developers/api-reference/moneyout/authorize-a-transaction-for-payout) for the full API reference.
/// Step 2: Capture the transaction
Capture the authorized vCard payout to issue the card.
To capture the payout, send a GET request to `/api/MoneyOut/capture/{referenceId}`.
```bash
curl -X GET "https://api.payabli.com/api/MoneyOut/capture/129-220" \
-H "requestToken: YOUR_API_TOKEN"
```
See [Capture an authorized payout transaction](/developers/api-reference/moneyout/capture-an-authorized-payout-transaction) for the full API reference.
/// Step 3: Send the card link
Send the vendor an email with a secure link to view their virtual card details.
To send the card link, send a POST request to `/api/vcard/send-card-link`.
```bash
curl -X POST "https://api.payabli.com/api/vcard/send-card-link" \
-H "Content-Type: application/json" \
-H "requestToken: YOUR_API_TOKEN" \
-d '{
"transId": "129-220"
}'
```
See [Send vCard link](/developers/api-reference/moneyout/send-vcard-link) for the full API reference.
/// Step 4: Monitor for payment
When the vendor uses the vCard, the transaction status changes to Paid. vCards remain open for 180 days if not used.
Learn more about [Pay Out statuses](/guides/pay-out-status-reference).
## Pay Ops recipes
Coming soon!