# Create Address
Source: https://docs.dimepayments.com/api-reference/addresses/create-address
https://app.dimepayments.com/openapi.yaml post /api/address/create
Create a new address for a customer.
# Delete Address
Source: https://docs.dimepayments.com/api-reference/addresses/delete-address
https://app.dimepayments.com/openapi.yaml post /api/address/delete
Remove an address from a customer.
# List Addresses
Source: https://docs.dimepayments.com/api-reference/addresses/list-addresses
https://app.dimepayments.com/openapi.yaml get /api/address/list
List all addresses for a specific customer.
# Show Address
Source: https://docs.dimepayments.com/api-reference/addresses/show-address
https://app.dimepayments.com/openapi.yaml get /api/address/show
Show details of a specific address.
# Update Address
Source: https://docs.dimepayments.com/api-reference/addresses/update-address
https://app.dimepayments.com/openapi.yaml patch /api/address/update
Update an existing address.
# Create Customer
Source: https://docs.dimepayments.com/api-reference/customer-management/create-customer
https://app.dimepayments.com/openapi.yaml post /api/customer/create
Create a customer record linked to your Company/Merchant.
# Delete Customer
Source: https://docs.dimepayments.com/api-reference/customer-management/delete-customer
https://app.dimepayments.com/openapi.yaml post /api/customer/delete
Delete a customer record from the selected Merchant. One of the filters is required to select a unique customer. This will also cancel any recurring payments associated with the customer for your company.
# List Customers
Source: https://docs.dimepayments.com/api-reference/customer-management/list-customers
https://app.dimepayments.com/openapi.yaml get /api/customer/list
Retrieves a list of customers for a given company, filtered by various parameters.
# Show Customer
Source: https://docs.dimepayments.com/api-reference/customer-management/show-customer
https://app.dimepayments.com/openapi.yaml get /api/customer/show
Show a specific customer's details
# Update Customer
Source: https://docs.dimepayments.com/api-reference/customer-management/update-customer
https://app.dimepayments.com/openapi.yaml patch /api/customer/update
Update a customer record. Make changes to the customer referenced by UUID, phone number, or email. One of the
filters is required to be provided to select a unique customer. Only pass the fields that require updating in
the data object.
# List Deposits
Source: https://docs.dimepayments.com/api-reference/deposit-management/list-deposits
https://app.dimepayments.com/openapi.yaml get /api/deposit/list
Get Deposits from Merchant Account with supporting transactions
# List Deposits with Supporting Trans
Source: https://docs.dimepayments.com/api-reference/deposit-management/list-deposits-with-supporting-trans
https://app.dimepayments.com/openapi.yaml get /api/deposit/list-with-trans
Get Deposits from Merchant Account with supporting transactions. Could result in large datasets if range is too large.
# Show Deposit with Supporting Trans
Source: https://docs.dimepayments.com/api-reference/deposit-management/show-deposit-with-supporting-trans
https://app.dimepayments.com/openapi.yaml get /api/deposit/show
Show a Deposit from Merchant Account with supporting transactions
# Add Line Item
Source: https://docs.dimepayments.com/api-reference/invoice-management/add-line-item
https://app.dimepayments.com/openapi.yaml post /api/invoice/line-item/add
Appends a single line item to a draft invoice and recalculates totals.
# Cancel Recurring Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/cancel-recurring-invoice
https://app.dimepayments.com/openapi.yaml post /api/recurring-invoice/cancel
Cancels an active recurring-invoice template. No further invoices are
generated. Only active templates can be cancelled.
# Create Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/create-invoice
https://app.dimepayments.com/openapi.yaml post /api/invoice/create
Creates a draft invoice with its line items. Every line must reference an
item (fund/designation) that belongs to the Merchant; the line name and
unit price are snapshotted onto the invoice. The invoice number may be
supplied, otherwise the next number is allocated automatically.
# Create Invoice Item
Source: https://docs.dimepayments.com/api-reference/invoice-management/create-invoice-item
https://app.dimepayments.com/openapi.yaml post /api/invoice/item/create
Creates an invoicing-only item (fund/designation) for the Merchant. The
item is hidden from public giving pages and can be referenced as a line
item's `item_id`.
# Create Recurring Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/create-recurring-invoice
https://app.dimepayments.com/openapi.yaml post /api/recurring-invoice/create
Creates a recurring-invoice template. The template carries its own snapshot
of the line items and requires a linked customer (used to resolve the email
on every run). When the start date is today the first invoice is generated
and sent immediately; a future start date just schedules the first run.
# Delete Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/delete-invoice
https://app.dimepayments.com/openapi.yaml post /api/invoice/delete
Soft-deletes a draft invoice. Only draft invoices can be deleted.
# Delete Line Item
Source: https://docs.dimepayments.com/api-reference/invoice-management/delete-line-item
https://app.dimepayments.com/openapi.yaml post /api/invoice/line-item/delete
Removes a single line item from a draft invoice and recalculates totals.
# Duplicate Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/duplicate-invoice
https://app.dimepayments.com/openapi.yaml post /api/invoice/duplicate
Clones any invoice into a new draft (copying its line items) with a freshly
allocated invoice number.
# Get Invoice Link
Source: https://docs.dimepayments.com/api-reference/invoice-management/get-invoice-link
https://app.dimepayments.com/openapi.yaml get /api/invoice/link
Returns the public pay link (and token) for an invoice.
# List Invoice Items
Source: https://docs.dimepayments.com/api-reference/invoice-management/list-invoice-items
https://app.dimepayments.com/openapi.yaml get /api/invoice/items
Lists the Merchant's items (funds/designations) available to use as invoice
line items, ordered alphabetically.
# List Invoices
Source: https://docs.dimepayments.com/api-reference/invoice-management/list-invoices
https://app.dimepayments.com/openapi.yaml get /api/invoices
Retrieves a paginated (cursor) list of invoices for a Merchant, optionally
filtered by status.
# List Recurring Invoices
Source: https://docs.dimepayments.com/api-reference/invoice-management/list-recurring-invoices
https://app.dimepayments.com/openapi.yaml get /api/recurring-invoices
Retrieves a paginated (cursor) list of recurring-invoice templates for a
Merchant, optionally filtered by status.
# Mark Invoice Sent
Source: https://docs.dimepayments.com/api-reference/invoice-management/mark-invoice-sent
https://app.dimepayments.com/openapi.yaml post /api/invoice/mark-sent
Activates a draft invoice for payment WITHOUT emailing it — for Merchants
who share the public link themselves. Advances Draft to Sent so the pay
link becomes live.
# Pay Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/pay-invoice
https://app.dimepayments.com/openapi.yaml post /api/invoice/pay
Records a merchant-initiated (MOTO) payment against an open invoice, charging
a credit card (raw card or a stored token) or a bank account (ACH) through
ProPay. Mirrors the card/ACH charge endpoints but targets the invoice: the
amount is the invoice balance (or a partial amount when the invoice allows
it), no cover fee is added, and on approval the invoice status/payment
history/per-line classification are updated exactly as a customer payment.
The invoice must be open (Sent/Viewed/Partially Paid) with a balance due on
an active ProPay merchant. A declined card is NOT recorded as a payment.
# Send Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/send-invoice
https://app.dimepayments.com/openapi.yaml post /api/invoice/send
Emails the invoice to the customer with a link to the public pay page and
advances the invoice to Sent. A paid, void, or refunded invoice cannot be
sent.
# Show Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/show-invoice
https://app.dimepayments.com/openapi.yaml get /api/invoice
Retrieves a single invoice with its line items, payments, and event history.
# Show Recurring Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/show-recurring-invoice
https://app.dimepayments.com/openapi.yaml get /api/recurring-invoice
Retrieves a single recurring-invoice template with its line items, the
invoices it has generated (the 50 most recent), and the upcoming run dates.
# Update Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/update-invoice
https://app.dimepayments.com/openapi.yaml patch /api/invoice/update
Updates a draft invoice. Only draft invoices can be edited — once sent, an
invoice is locked. Passing `data.lines` replaces the existing line items.
# Update Line Item
Source: https://docs.dimepayments.com/api-reference/invoice-management/update-line-item
https://app.dimepayments.com/openapi.yaml patch /api/invoice/line-item/update
Updates a single line item on a draft invoice. Only the fields you pass are
changed; the line amount is recomputed and invoice totals refreshed.
# Void Invoice
Source: https://docs.dimepayments.com/api-reference/invoice-management/void-invoice
https://app.dimepayments.com/openapi.yaml patch /api/invoice/void
Voids an invoice. Voiding is terminal — the invoice can no longer be paid.
An already void or refunded invoice cannot be voided again.
# Create Merchant
Source: https://docs.dimepayments.com/api-reference/merchant-management/create-merchant
https://app.dimepayments.com/openapi.yaml post /api/merchant/create
Create a merchant record which can be used for generating an application.
# Get a unique, secure link to the signup application for a Merchant.
Source: https://docs.dimepayments.com/api-reference/merchant-management/get-a-unique-secure-link-to-the-signup-application-for-a-merchant
https://app.dimepayments.com/openapi.yaml get /api/merchant/get-form-link
Passed a merchant's ID, returns a full URL to the application for processor
approval. This link expires in 48 hours.
# List Merchants
Source: https://docs.dimepayments.com/api-reference/merchant-management/list-merchants
https://app.dimepayments.com/openapi.yaml get /api/merchant/list
Get a list of all merchants and their fields
# Show a specific Merchant's Details
Source: https://docs.dimepayments.com/api-reference/merchant-management/show-a-specific-merchants-details
https://app.dimepayments.com/openapi.yaml get /api/merchant/show
List all non-protected fields for a merchant. Other fields are available using their specific requests.
# Update a specific Merchant's Details
Source: https://docs.dimepayments.com/api-reference/merchant-management/update-a-specific-merchants-details
https://app.dimepayments.com/openapi.yaml patch /api/merchant/update
Update a Merchant's details.
# Create a Payment Method for a customer
Source: https://docs.dimepayments.com/api-reference/payment-method-management/create-a-payment-method-for-a-customer
https://app.dimepayments.com/openapi.yaml post /api/payment-method/create
This endpoint creates a new payment method for a customer. Must pass at least one filter to select
a specific customer
# Delete a Payment Method for a customer
Source: https://docs.dimepayments.com/api-reference/payment-method-management/delete-a-payment-method-for-a-customer
https://app.dimepayments.com/openapi.yaml post /api/payment-method/delete
This endpoint deletes a payment method for a customer. Must pass at least one filter to select
a specific customer
# List payment methods for a customer
Source: https://docs.dimepayments.com/api-reference/payment-method-management/list-payment-methods-for-a-customer
https://app.dimepayments.com/openapi.yaml get /api/payment-method/list
This endpoint shows all payment methods for a customer. Must pass at least one filter to select
a specific customer
# Show a Payment Method for a customer
Source: https://docs.dimepayments.com/api-reference/payment-method-management/show-a-payment-method-for-a-customer
https://app.dimepayments.com/openapi.yaml get /api/payment-method/show
This endpoint shows a specific payment method for a customer. Must pass at least one filter to select
a specific customer
# Update a Payment Method for a customer
Source: https://docs.dimepayments.com/api-reference/payment-method-management/update-a-payment-method-for-a-customer
https://app.dimepayments.com/openapi.yaml patch /api/payment-method/update
This endpoint updates a payment method for a customer. Must pass at least one filter to select
a specific customer
# Activate Recurring Payment
Source: https://docs.dimepayments.com/api-reference/recurring-payments-management/activate-recurring-payment
https://app.dimepayments.com/openapi.yaml patch /api/recurring-payment/activate
Activates a scheduled recurring payment. Set to status of Active and calculates next run date.
# Cancel Recurring Payment
Source: https://docs.dimepayments.com/api-reference/recurring-payments-management/cancel-recurring-payment
https://app.dimepayments.com/openapi.yaml patch /api/recurring-payment/cancel
Cancels a scheduled recurring payment.
# Create Recurring Payment
Source: https://docs.dimepayments.com/api-reference/recurring-payments-management/create-recurring-payment
https://app.dimepayments.com/openapi.yaml post /api/recurring-payment/create
Creates a scheduled recurring payment. The payment will run on the next date based on schedule and start date. So
if you create one that starts on 2025-01-01 00:00:00 with Monthly, then the payment method will be charged on 2025-02-01
Recurring Payments run around 0500 EST.
# Delete Recurring Payment
Source: https://docs.dimepayments.com/api-reference/recurring-payments-management/delete-recurring-payment
https://app.dimepayments.com/openapi.yaml post /api/recurring-payment/delete
Delete a recurring payment.
# Edit Recurring Payment
Source: https://docs.dimepayments.com/api-reference/recurring-payments-management/edit-recurring-payment
https://app.dimepayments.com/openapi.yaml patch /api/recurring-payment/edit
Edits an existing recurring payment. All fields other than `sid` and `recurring_payment_id` are optional; only
the fields you pass will be updated. The customer cannot be changed, and a new payment method must belong to the
recurring payment's existing customer. When `recurrence_schedule` or `start_date` change on an Active payment,
the next run date is recalculated automatically.
# List Recurring Payments
Source: https://docs.dimepayments.com/api-reference/recurring-payments-management/list-recurring-payments
https://app.dimepayments.com/openapi.yaml get /api/recurring-payment/list
Retrieves a list of recurring payments for a given Merchant, filtered by various parameters.
# Pause Recurring Payment
Source: https://docs.dimepayments.com/api-reference/recurring-payments-management/pause-recurring-payment
https://app.dimepayments.com/openapi.yaml patch /api/recurring-payment/pause
Pauses a scheduled recurring payment. If pause_until_date is not passed, it will be set to 2099-12-31
# Show Recurring Payment
Source: https://docs.dimepayments.com/api-reference/recurring-payments-management/show-recurring-payment
https://app.dimepayments.com/openapi.yaml get /api/recurring-payment/show
Show details of a scheduled recurring payment.
# Archive a subscription plan
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/archive-a-subscription-plan
https://app.dimepayments.com/openapi.yaml patch /api/subscription-plan/archive
Stops new subscriptions and hides it from the catalog. Existing subscribers
keep their subscription.
# Create a subscription plan
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/create-a-subscription-plan
https://app.dimepayments.com/openapi.yaml post /api/subscription-plan/create
The plan is created as a draft. Publish it (or use the merchant UI) before
customers can subscribe.
# Delete a subscription plan
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/delete-a-subscription-plan
https://app.dimepayments.com/openapi.yaml post /api/subscription-plan/delete
Only plans with no subscribers can be deleted; otherwise archive it.
# List subscription plans
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/list-subscription-plans
https://app.dimepayments.com/openapi.yaml get /api/subscription-plan/list
# Publish a subscription plan
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/publish-a-subscription-plan
https://app.dimepayments.com/openapi.yaml patch /api/subscription-plan/publish
Moves a draft plan to active so customers can subscribe. The plan must be a
draft and carry at least one line item.
# Reactivate a subscription plan
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/reactivate-a-subscription-plan
https://app.dimepayments.com/openapi.yaml patch /api/subscription-plan/unarchive
Moves an archived plan back to draft so it can be reviewed and re-published.
`allow_public` stays off until the merchant opts back into the catalog.
# Show a subscription plan
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/show-a-subscription-plan
https://app.dimepayments.com/openapi.yaml get /api/subscription-plan/show
# Subscribe a customer to a plan
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/subscribe-a-customer-to-a-plan
https://app.dimepayments.com/openapi.yaml post /api/subscription-plan/subscribe
Charges the first payment against the customer's saved payment method and
enrolls them in the plan. The plan must be active. Fires SUBSCRIPTION_CREATED.
# Update a subscription plan
Source: https://docs.dimepayments.com/api-reference/subscription-plans-management/update-a-subscription-plan
https://app.dimepayments.com/openapi.yaml patch /api/subscription-plan/edit
Replaces the plan's fields and line items wholesale. Existing subscribers
keep their own snapshot and are unaffected.
# Cancel a subscription
Source: https://docs.dimepayments.com/api-reference/subscriptions-management/cancel-a-subscription
https://app.dimepayments.com/openapi.yaml patch /api/subscription/cancel
Permanently cancels a subscription — no further charges are made. Fires the
`SUBSCRIPTION_CANCELLED` webhook.
# List subscriptions
Source: https://docs.dimepayments.com/api-reference/subscriptions-management/list-subscriptions
https://app.dimepayments.com/openapi.yaml get /api/subscription/list
# Pause a subscription
Source: https://docs.dimepayments.com/api-reference/subscriptions-management/pause-a-subscription
https://app.dimepayments.com/openapi.yaml patch /api/subscription/pause
Pauses an active subscription until the given date. If `data.pause_until_date`
is omitted it pauses indefinitely. Fires the `SUBSCRIPTION_PAUSED` webhook.
# Resume a subscription
Source: https://docs.dimepayments.com/api-reference/subscriptions-management/resume-a-subscription
https://app.dimepayments.com/openapi.yaml patch /api/subscription/resume
Reactivates a paused subscription and recomputes its next charge date. Fires
the `SUBSCRIPTION_RESUMED` webhook.
# Show a subscription
Source: https://docs.dimepayments.com/api-reference/subscriptions-management/show-a-subscription
https://app.dimepayments.com/openapi.yaml get /api/subscription/show
# Charge a Bank Account
Source: https://docs.dimepayments.com/api-reference/transaction-management/charge-a-bank-account
https://app.dimepayments.com/openapi.yaml post /api/transaction/charge-ach
# Charge a Credit Card
Source: https://docs.dimepayments.com/api-reference/transaction-management/charge-a-credit-card
https://app.dimepayments.com/openapi.yaml post /api/transaction/charge-card
This endpoint allows you to charge a credit card using the PAN Data or a Token. This endpoint will process the charge and return a token
representing the card that can be used for transactions as well as the transactionId and the customerUUID if requested.
If you pass a customer UUID or a customer phone number, then a customer record will be created or retrieved if it already exists, also making the customer UUID available for the purpose of associating charges to a customer.
You must be PCI Compliant (have an AoC on file with Dime Payments) to process PAN Data. A token can optionally be provided to process charges without requiring PCI compliance as no PAN data is being sent.
# List Transactions
Source: https://docs.dimepayments.com/api-reference/transaction-management/list-transactions
https://app.dimepayments.com/openapi.yaml get /api/transactions
Retrieves a list of transactions for a given Merchant, filtered by various parameters.
# Refund Transaction
Source: https://docs.dimepayments.com/api-reference/transaction-management/refund-transaction
https://app.dimepayments.com/openapi.yaml post /api/transaction/refund
Processes a refund for a transaction based on the provided data.
# Show Transaction
Source: https://docs.dimepayments.com/api-reference/transaction-management/show-transaction
https://app.dimepayments.com/openapi.yaml get /api/transaction
# Tokenize a Credit Card
Source: https://docs.dimepayments.com/api-reference/transaction-management/tokenize-a-credit-card
https://app.dimepayments.com/openapi.yaml post /api/transaction/tokenize-card
This endpoint allows you to tokenize a credit card, which will verify its validity and return a token representing the card that can be used for transactions. This method requires PCI compliance on the part of the affiliate or merchant.
# Void Transaction
Source: https://docs.dimepayments.com/api-reference/transaction-management/void-transaction
https://app.dimepayments.com/openapi.yaml patch /api/transaction/void
Void a transaction
# Get Most Recent Transaction
Source: https://docs.dimepayments.com/api-reference/zapier/get-most-recent-transaction
https://app.dimepayments.com/openapi.yaml get /api/zapier/new-transactions
Get the most recent transactions details
# Get New Customers
Source: https://docs.dimepayments.com/api-reference/zapier/get-new-customers
https://app.dimepayments.com/openapi.yaml get /api/zapier/new-customers
Get a list of all new customers since the last time it was checked.
# Get Transactions
Source: https://docs.dimepayments.com/api-reference/zapier/get-transactions
https://app.dimepayments.com/openapi.yaml get /api/zapier/transactions
Get a list of all transactions for a Merchant
# Get Transactions by Customer
Source: https://docs.dimepayments.com/api-reference/zapier/get-transactions-by-customer
https://app.dimepayments.com/openapi.yaml get /api/zapier/transactions/{phone}
Get a list of all transactions for a given customer using their phone number
# Authentication
Source: https://docs.dimepayments.com/guides/authentication
How to authenticate requests to the Dime Payments API.
## Bearer tokens
Every request to the Dime Payments API requires an `Authorization` header with a Bearer token:
```
Authorization: Bearer your-api-token
```
Tokens are Laravel Sanctum personal access tokens. They are minted inside the Dime Payments dashboard -- not via the API itself.
## Getting a token
1. Log into the [Dime Payments dashboard](https://app.dimepayments.com)
2. Click your profile icon in the top right
3. Select **Generate API token**
4. Copy the token immediately -- it will not be shown again
## Token abilities
Every token carries a set of abilities that control which endpoints it can access. If a token lacks the required ability for an endpoint, the API returns a `401 Permission Denied` response.
Common abilities include:
| Ability | What it allows |
| ------------------------------- | ---------------------------------------------------------- |
| `transaction:charge-card-token` | Charge a card using a stored token |
| `transaction:charge-card-pan` | Charge a card using raw PAN data (requires PCI compliance) |
| `transaction:charge-ach` | Charge a bank account |
| `customer:read` | List and show customers |
| `customer:write` | Create, update, and delete customers |
| `merchant:read` | List and show merchants |
| `merchant:write` | Create and update merchants |
Contact your Dime Payments representative to configure abilities on your token.
## Keeping tokens secure
* Never expose tokens in client-side code or public repositories
* Use environment variables to store tokens in your application
* Generate separate tokens for production and staging environments
* Rotate tokens immediately if you suspect they have been compromised
## Example request
```bash theme={null}
curl --request GET \
--url https://app.dimepayments.com/api/merchant/list \
--header 'Authorization: Bearer your-api-token' \
--header 'Content-Type: application/json'
```
## Error responses
| Status | Meaning |
| ----------------------- | ----------------------------------------------------------- |
| `401 Permission Denied` | Token is missing, invalid, or lacks the required ability |
| `403 Unauthorized` | Token is valid but the resource belongs to another merchant |
## Next steps
* [Quickstart](/guides/quickstart) — make your first API call
* [API Reference](/api-reference) — full endpoint documentation
# Disputes
Source: https://docs.dimepayments.com/guides/disputes
How chargebacks and disputes work in Dime Payments.
## What is a dispute?
A dispute (also called a chargeback) occurs when a cardholder contacts their bank to reverse a charge. The bank pulls the funds back from your merchant account while the dispute is investigated.
Disputes are a normal part of payment processing. The key is responding quickly with the right evidence.
## How disputes work
1. **Cardholder files a dispute** with their bank
2. **Dime Payments is notified** and a `dispute.opened` webhook fires to your endpoint
3. **Funds are held** -- the disputed amount is debited from your merchant account
4. **You have a response window** -- typically 7 to 10 business days to submit evidence
5. **The bank reviews** the evidence and makes a final decision
6. **Funds are returned or forfeited** based on the outcome
## Responding to a dispute
Log into the [Dime Payments dashboard](https://app.dimepayments.com) and navigate to **Disputes** to view open cases and submit evidence.
Strong evidence includes:
* A signed receipt or authorization record
* Proof of delivery or service completion
* Customer communication confirming the purchase
* IP address and device data from the transaction
* Refund policy the customer agreed to
## Dispute fees
A dispute fee is charged per chargeback regardless of outcome. Contact your Dime Payments representative for current fee schedules.
## Reducing disputes
* **Use clear billing descriptors** -- make sure your business name on card statements is recognizable
* **Respond to customer complaints quickly** -- a refund is always cheaper than a chargeback
* **Use AVS and CVV verification** on card-present and card-not-present transactions
* **Send receipts** -- email confirmation reduces "I don't recognize this charge" disputes
* **Honor refund requests promptly** -- a customer who can't get a refund will call their bank
## Dispute statuses
| Status | Meaning |
| -------------- | ------------------------------------------------------- |
| `Open` | Dispute filed, response window active |
| `Under Review` | Evidence submitted, bank is reviewing |
| `Won` | Dispute resolved in your favor, funds returned |
| `Lost` | Dispute resolved in cardholder's favor, funds forfeited |
| `Expired` | Response window passed without submission |
## Webhook events
Subscribe to these events to stay on top of disputes in real time:
```json theme={null}
{
"event": "dispute.opened",
"data": {
"dispute_id": "disp_abc123",
"transaction_info_id": "9876543210",
"amount": "49.99",
"reason": "unrecognized_charge",
"due_by": "2026-02-01"
}
}
```
## Next steps
* [Webhooks](/guides/webhooks) -- set up real-time event notifications
* [Payouts](/guides/payouts) -- understand how funds are deposited
* [API Reference](/api-reference) -- full endpoint documentation
# Introduction
Source: https://docs.dimepayments.com/guides/introduction
The Dime Payments API lets you process payments, manage customers, and automate billing for your business.
## What is Dime Payments?
Dime Payments is a payment processing platform built for developers, agencies, and tech companies. You get a full-featured payments API, SDKs in PHP, JavaScript, and Python, and a revenue share on every transaction you bring — with no caps.
The API is JSON-based and REST-ful, with a single base URL:
```
https://app.dimepayments.com
```
## What you can do
* **Charge credit cards and ACH** — process one-time payments using card details or a stored token
* **Tokenize cards** — store card details securely without handling raw PAN data on future charges
* **Manage customers** — create and maintain customer records with payment methods and addresses
* **Recurring payments** — create, pause, cancel, and edit scheduled billing
* **Deposits** — retrieve payout and sweep data for reconciliation
* **Webhooks** and **Zapier** integrations for real-time event handling
## Getting your API token
All requests require a Bearer token. To get yours:
1. Log into the [Dime Payments dashboard](https://app.dimepayments.com)
2. Click your profile in the top right
3. Select **Generate API token**
Include it on every request as an `Authorization` header:
```
Authorization: Bearer your-api-token
```
## SDKs
Official clients are available for PHP, JavaScript, and Python. Each wraps authentication, request formatting, pagination, and error handling so you can focus on building.
composer require dime-technology/dime-php-sdk
npm install @dime-technology/dime-js-sdk
pip install dime-python-sdk
## Next steps
* [Quickstart](/guides/quickstart) — make your first API call in under 5 minutes
* [Authentication](/guides/authentication) — understand API token permissions
* [API Reference](/api-reference) — full endpoint documentation
# Payouts
Source: https://docs.dimepayments.com/guides/payouts
How and when funds are deposited into your merchant bank account.
## How payouts work
When a transaction settles, the funds move into an escrow account held by Dime Payments. From there they are swept into your merchant's linked bank account on a regular schedule.
Each payout is called a **deposit** or **sweep** in the API and dashboard. A single sweep may include multiple transactions settled during that period.
## Payout timing
Typical payout timing by payment type:
| Payment type | Settlement | Payout |
| ------------ | ----------------- | ---------------------------------- |
| Credit card | 1-2 business days | 2-3 business days after settlement |
| ACH | 3-5 business days | 1 business day after settlement |
Exact timing depends on your processor configuration. Contact your Dime Payments representative for specifics on your account.
## Viewing deposits via API
Use the Deposits endpoints to retrieve payout data for reconciliation:
```php theme={null}
// List all deposits for a merchant
$deposits = $dime->deposits->list('YOUR_SID', [
'start_date' => '2026-01-01 00:00:00',
'end_date' => '2026-01-31 23:59:59',
]);
// List deposits with all supporting transactions
$deposits = $dime->deposits->listWithTransactions('YOUR_SID', [
'start_date' => '2026-01-01 00:00:00',
'end_date' => '2026-01-31 23:59:59',
]);
// Show a specific deposit
$deposit = $dime->deposits->show('YOUR_SID', [
'transaction_info_id' => '983999999',
]);
```
## Deposit object
Each deposit includes the following fields:
| Field | Description |
| ---------------------- | --------------------------------------------------------------------------- |
| `transaction_info_id` | Unique ID for the deposit, ties to all related transactions |
| `sweep_id` | The sweep this deposit was part of |
| `transaction_date` | When the deposit was initiated |
| `fund_date` | When funds were made available in the merchant bank account |
| `net_amount` | Amount deposited after fees |
| `authorization_amount` | Original transaction amount before fees |
| `type` | `withdraw_funds` (payout to merchant) or `add_funds` (escrow replenishment) |
## Deposit types
**`withdraw_funds`** -- the most common type. Funds from settled transactions are moved from escrow to the merchant's bank account.
**`add_funds`** -- occurs when the escrow account needs to be replenished, typically to cover a refund or return where the original funds have already been swept out.
## Reconciliation
Use the `sweep_id` to group transactions that were paid out together. The `listWithTransactions` endpoint returns each deposit with its full list of supporting transactions -- useful for matching payouts to individual charges in your accounting system.
```php theme={null}
foreach ($dime->deposits->listWithTransactions('YOUR_SID') as $deposit) {
echo "Sweep {$deposit->sweepId}: {$deposit->transTotal}\n";
foreach ($deposit->transactions as $txn) {
echo " - {$txn->transactionNumber}: {$txn->amount}\n";
}
}
```
## Bank account setup
Bank account details are configured inside the Dime Payments dashboard under **Settings > Bank Account**. Changes to bank account information require verification and may delay payouts.
## Next steps
* [Webhooks](/guides/webhooks) -- get notified when deposits occur
* [Disputes](/guides/disputes) -- understand how chargebacks affect payouts
* [API Reference](/api-reference) -- Deposits endpoint documentation
# Quickstart
Source: https://docs.dimepayments.com/guides/quickstart
Make your first API call in under 5 minutes.
## Before you start
You'll need a Dime Payments API token. If you don't have one yet, see [Authentication](/guides/authentication).
You'll also need a merchant SID -- the unique ID for the merchant account you're processing payments for. You can find it in the dashboard or by calling the [List Merchants](/api-reference/merchant-management/list-merchants) endpoint.
## Install an SDK
Pick your language and install the SDK:
```bash PHP theme={null}
composer require dime-technology/dime-php-sdk
```
```bash JavaScript theme={null}
npm install @dime-technology/dime-js-sdk
```
```bash Python theme={null}
pip install dime-python-sdk
```
## Initialize the client
```php PHP theme={null}
$dime = new \DimePayments\Sdk\Client('your-api-token');
```
```javascript JavaScript theme={null}
import { Client } from '@dime-technology/dime-js-sdk';
const dime = new Client('your-api-token');
```
```python Python theme={null}
from dime_payments import Client
dime = Client('your-api-token')
```
## Make your first charge
Charge a credit card using a stored token:
```php PHP theme={null}
$txn = $dime->transactions->chargeCard('YOUR_SID', [
'amount' => 49.99,
'token' => 'tok_abc123',
'email' => 'customer@example.com',
]);
echo $txn->transactionStatus; // "Success"
```
```javascript JavaScript theme={null}
const txn = await dime.transactions.chargeCard('YOUR_SID', {
amount: 49.99,
token: 'tok_abc123',
email: 'customer@example.com',
});
console.log(txn.transactionStatus); // "Success"
```
```python Python theme={null}
txn = dime.transactions.charge_card('YOUR_SID', {
'amount': '49.99',
'token': 'tok_abc123',
'email': 'customer@example.com',
})
print(txn.transaction_status) # "Success"
```
## Tokenize a card first
If you don't have a token yet, tokenize a card before charging:
```php PHP theme={null}
$token = $dime->transactions->tokenizeCard('YOUR_SID', [
'cardholder_name' => 'John Doe',
'card_number' => '4111111111111111',
'expiration_date' => '01/2027',
'cvv' => '123',
'billing_address' => ['zip' => '30009'],
])->token;
// Now charge it
$txn = $dime->transactions->chargeCard('YOUR_SID', [
'amount' => 49.99,
'token' => $token,
]);
```
```javascript JavaScript theme={null}
const { token } = await dime.transactions.tokenizeCard('YOUR_SID', {
cardholderName: 'John Doe',
cardNumber: '4111111111111111',
expirationDate: '01/2027',
cvv: '123',
billingAddress: { zip: '30009' },
});
const txn = await dime.transactions.chargeCard('YOUR_SID', {
amount: 49.99,
token,
});
```
```python Python theme={null}
result = dime.transactions.tokenize_card('YOUR_SID', {
'cardholder_name': 'John Doe',
'card_number': '4111111111111111',
'expiration_date': '01/2027',
'billing_address': {'zip': '30009'},
})
txn = dime.transactions.charge_card('YOUR_SID', {
'amount': '49.99',
'token': result.token,
})
```
## What's next
* [API Reference](/api-reference) — full documentation for every endpoint
* [PHP SDK](/guides/sdks/php) — complete PHP client docs
* [JavaScript SDK](/guides/sdks/javascript) — complete JS client docs
* [Python SDK](/guides/sdks/python) — complete Python client docs
# Response Codes
Source: https://docs.dimepayments.com/guides/response-codes
Every HTTP status code and error message returned by the Dime Payments API, with troubleshooting guidance.
## How responses are structured
The API returns errors in two general shapes:
**Validation errors (400)** -- a top-level `errors` object keyed by field name:
```json theme={null}
{
"errors": {
"data.phone": ["The data.phone field is required."]
}
}
```
**Message errors** -- a `message` string, either at the top level or nested under `data`:
```json theme={null}
{ "data": { "message": "Permission Denied." } }
```
**Success responses (200/201)** -- a `data` object or array containing the resource, or a confirmation message for actions like void, refund, and delete.
Message placement is inconsistent across endpoints -- sometimes `message`, sometimes `data.message`. Error wording also varies slightly between endpoints. The tables below reflect the API exactly as documented.
***
## Common messages
These appear across multiple endpoints.
| Message | Status | Meaning |
| ------------------------------------------ | --------- | ------------------------------------------------------ |
| `Permission Denied.` / `Permission denied` | 401 / 403 | The API key does not have permission for this endpoint |
| `Unauthorized` | 401 | Token is unauthorized for the request |
| `Not associated with affiliate` | 401 | The token is not associated with your affiliate |
| `User not associated with the affiliate.` | 401 | User-level permission issue |
| `Merchant not associated with affiliate.` | 401 | The merchant is not linked to your affiliate |
| `Merchant or Affiliate check failed` | 401 | Merchant/affiliate authorization check failed |
| `No such Merchant` / `Merchant not found` | 400 / 404 | The `sid` does not match an accessible merchant |
| `Validation errors` | 400 | One or more body parameters failed validation |
***
## Merchant Management
### List Merchants `GET /api/merchant/list`
| Status | Scenario | Response |
| ------ | ----------------- | -------------------------------------------------------------------------- |
| 200 | Success | `data` array of merchant objects |
| 400 | Failed validation | `errors` object, e.g. `The filters.start_date field must be a valid date.` |
| 401 | Bad API key | `Permission Denied.` |
### Show Merchant `GET /api/merchant/show`
| Status | Scenario | Response |
| ------ | ----------------- | ----------------------------------- |
| 200 | Success | `data` object with merchant details |
| 400 | Failed validation | `errors` object |
| 401 | Bad API key | `Permission Denied.` |
### Create Merchant `POST /api/merchant/create`
| Status | Scenario | Response |
| ------ | -------------------- | --------------------------------------------------------- |
| 200 | Success | `data` object with new merchant |
| 400 | Failed validation | `errors` object, e.g. `The data.phone field is required.` |
| 400 | Merchant not created | `Something went wrong: contact Dime Payments Rep` |
| 401 | Bad API key | `Permission Denied.` |
### Update Merchant `PATCH /api/merchant/update`
| Status | Scenario | Response |
| ------ | -------------------- | ------------------------------------------------- |
| 200 | Success | `data` object with updated merchant |
| 400 | Failed validation | `errors` object |
| 400 | Merchant not updated | `Something went wrong: contact Dime Payments Rep` |
| 401 | Bad API key | `Permission Denied.` |
### Get Signup Form Link `GET /api/merchant/get-form-link`
| Status | Scenario | Response |
| ------ | ----------------- | ----------------------------------------------------------- |
| 200 | Success | `data.link` -- secure application URL (expires in 48 hours) |
| 400 | Failed validation | `errors` object, e.g. `The data.sid field is required.` |
| 401 | Bad API key | `Permission Denied.` |
***
## Transaction Management
### List Transactions `GET /api/transactions`
| Status | Scenario | Response |
| ------ | ------------------------------- | ----------------------------------- |
| 200 | Success | `data` array of transaction objects |
| 400 | Failed validation | `errors` object |
| 401 | Token unauthorized | `Permission Denied.` |
| 401 | Invalid affiliate authorization | `Unauthorized` |
| 401 | Invalid affiliate association | `Not associated with affiliate` |
| 404 | Invalid sid | `No such Merchant` |
### Charge a Credit Card `POST /api/transaction/charge-card`
| Status | Scenario | Response |
| ------ | ----------------- | ------------------------------------------------------------------------------------------ |
| 200 | Approved | `data` object -- `transaction_status: Success`, `status_code: 00`, `status_text: APPROVAL` |
| 400 | Failed validation | `errors` object, e.g. `The sid is required.` |
| 400 | Declined | `data` object -- `transaction_status: Failed`, `status_code: 05`, `status_text: DECLINE` |
| 403 | Bad API key | `Permission Denied.` |
`status_code` and `status_text` are passed through from the processor. `00 / APPROVAL` and `05 / DECLINE` are the most common but other processor codes are possible.
### Charge a Bank Account (ACH) `POST /api/transaction/charge-ach`
| Status | Scenario | Response |
| ------ | ------------------------------- | ----------------------------------------------------------------- |
| 200 | Success | `data` object -- `transaction_status: Success`, `status_code: 00` |
| 400 | Failed validation | `errors` object, e.g. `The data.amount field is required.` |
| 401 | Token unauthorized | `Permission Denied.` |
| 401 | Invalid affiliate authorization | `Unauthorized` |
| 401 | Invalid affiliate association | `Not associated with affiliate` |
| 404 | Invalid sid | `No such Merchant` |
### Tokenize a Credit Card `POST /api/transaction/tokenize-card`
| Status | Scenario | Response |
| ------ | ------------------------ | --------------------------------------------------------- |
| 200 | Success | `data.token` |
| 400 | Failed validation | `errors` object, e.g. `The card number must be a number.` |
| 400 | Card verification failed | `Validation of card failed.` |
| 401 | Bad API key | `Permission Denied.` |
### Show Transaction `GET /api/transaction`
| Status | Scenario | Response |
| ------ | --------------------- | ----------------------------------------- |
| 200 | Success | `data` object with transaction details |
| 400 | Failed validation | `errors` object |
| 401 | Bad API key | `Permission Denied.` |
| 401 | User permission issue | `User not associated with the affiliate.` |
| 404 | Not found | `No transaction found` |
### Refund Transaction `POST /api/transaction/refund`
| Status | Scenario | Response |
| ------ | --------------------- | ------------------------- |
| 200 | Success | `refund` |
| 400 | Failed validation | `errors` object |
| 400 | Merchant not found | `No such Merchant` |
| 400 | Refund failed | `Error processing refund` |
| 400 | Unsupported processor | `Unsupported processor.` |
| 401 | Bad API key | `Permission Denied.` |
### Void Transaction `PATCH /api/transaction/void`
| Status | Scenario | Response |
| ------ | --------------------- | ----------------------------------------- |
| 200 | Success | `Transaction voided successfully` |
| 400 | Failed validation | `errors` object |
| 400 | Transaction not found | `No transaction found` |
| 400 | Cannot be voided | `Transaction cannot be voided` |
| 400 | Unsupported processor | `Unsupported Processor` |
| 401 | Bad API key | `Permission Denied.` |
| 401 | User permission issue | `User not associated with the affiliate.` |
***
## Addresses
### List / Show / Create / Update / Delete `GET /api/address/*`
| Status | Scenario | Response |
| ------ | ------------------- | --------------------------- |
| 200 | Success | `data` object or array |
| 201 | Created | `data` object (Create only) |
| 400 | Failed / validation | `errors` object or message |
| 401 | Unauthorized | `Permission Denied.` |
| 404 | Address not found | `No such Address` |
| 404 | Customer not found | `No such Customer` |
| 404 | Merchant not found | `No such Merchant` |
***
## Customer Management
### List / Show / Create / Update / Delete `GET|POST|PATCH /api/customer/*`
| Status | Scenario | Response |
| ------ | ---------------------- | ---------------------------------------------------------------------- |
| 200 | Success | `data` object or array (List includes cursor pagination, 500 per page) |
| 400 | Failed validation | `Validation errors` or `errors` object |
| 400 | Merchant not found | `No such Merchant` |
| 400 | Creation failed | `Failed to create Customer` |
| 401 | Bad API key | `Permission Denied.` |
| 401 | Affiliate check failed | `Merchant or Affiliate check failed` |
Deleting a customer also cancels any recurring payments associated with that customer.
***
## Deposit Management
### List Deposits `GET /api/deposit/list`
| Status | Scenario | Response |
| ------ | ----------------------------- | ---------------------------------------------------- |
| 200 | Success | `data` array of deposit objects |
| 400 | Malformed request | `errors` object -- date format must be `Y-m-d H:i:s` |
| 401 | Bad API key | `Permission Denied.` |
| 401 | Not associated with affiliate | `Not associated with Affiliate` |
| 401 | Invalid sid | `The selected data.sid is invalid` |
| 403 | Unauthorized | `Unauthorized` |
| 404 | No deposits found | `No deposits found` |
### List with Transactions / Show Deposit `GET /api/deposit/list-with-trans` `GET /api/deposit/show`
| Status | Scenario | Response |
| ------ | ----------------------- | ------------------------------------------------------ |
| 200 | Success | `data` object with deposit and supporting transactions |
| 200 | Empty | `{}` |
| 400 | Failed validation | `errors` object |
| 401 | Bad API key | `Permission Denied.` |
| 401 | Merchant not found | `No Merchant found with SID provided.` |
| 401 | User permission issue | `User not associated with the affiliate.` |
| 401 | Merchant not associated | `Merchant not associated with affiliate.` |
***
## Payment Method Management
### List / Show / Create / Update / Delete `GET|POST|PATCH /api/payment-method/*`
| Status | Scenario | Response |
| ------ | ------------------------- | -------------------------------------------------------------- |
| 200 | Success | `data` object or array |
| 401 | Token permission error | `Permission denied` |
| 404 | Customer not found | `Customer not found.` |
| 404 | Payment method not found | `Payment Method not found.` |
| 404 | Merchant not found | `No such Merchant` |
| 409 | Active recurring payments | `Cannot delete payment method with active recurring payments.` |
To delete a payment method that has active recurring payments, cancel or reassign those recurring payments first.
***
## Recurring Payments
### All Recurring Payment endpoints `GET|POST|PATCH /api/recurring-payment/*`
| Status | Scenario | Response |
| ------ | ------------------------------- | -------------------------------------------- |
| 200 | Success | `data` object with recurring payment details |
| 400 | Failed validation | `errors` object |
| 401 | Token unauthorized | `Permission Denied.` |
| 401 | Invalid affiliate authorization | `Unauthorized` |
| 401 | Invalid affiliate association | `Not associated with affiliate` |
| 404 | Invalid sid | `No such Merchant` |
| 404 | Not found | `No recurring payment found` |
Notable fields in success responses: `last_run_status` (Success or Failed), `last_run_failed_count`, and `error` -- a processor-provided reason such as `EXPIRED CARD` when the last attempt failed.
Pause defaults `paused_until_date` to `2099-12-31` if no date is provided.
***
## Zapier Endpoints
| Endpoint | 200 | 400 | 401 | 404 |
| -------------------------------------- | ------------------------------ | -------------------------------------------------- | -------------------- | -------------------- |
| `GET /api/zapier/new-customers` | Array of new customers | -- | `Unauthorized` | `Merchant not found` |
| `GET /api/zapier/transactions` | Array of transactions | -- | `Permission denied` | `Merchant not found` |
| `GET /api/zapier/transactions/{phone}` | Array of customer transactions | `Can only contain last days or start and end date` | `Permission denied.` | `Merchant not found` |
| `GET /api/zapier/new-transactions` | Most recent transaction | -- | `Permission denied` | `Merchant not found` |
For the transactions by phone endpoint, the request body must use either `last_days` or `start_date` + `end_date` -- not both.
***
## Troubleshooting
| You're seeing | Most likely cause | What to do |
| -------------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
| `Permission Denied.` / `Unauthorized` | Token is invalid or lacks permission for this endpoint | Regenerate your token in the dashboard under profile > Generate API token |
| `Not associated with affiliate` | Token, user, or merchant is not linked to your affiliate | Contact your Dime Payments rep to verify associations |
| `No such Merchant` | Wrong or inaccessible `sid` | Confirm the merchant SID via `GET /api/merchant/list` |
| `errors` object with field messages | A required field is missing or formatted incorrectly | Check dates are `Y-m-d H:i:s`, phones are e.164, and all required fields are present |
| `status_code: 05` / `DECLINE` on a charge | Card declined by the processor | Customer should contact their card issuer or use a different payment method |
| `Validation of card failed.` | Card could not be verified during tokenization | Check card number, expiration, CVV, and billing ZIP |
| `Transaction cannot be voided` | Transaction has already settled | Use `POST /api/transaction/refund` instead |
| `Unsupported processor.` | Merchant's processor does not support this operation via API | Contact Dime Payments support |
| `Cannot delete payment method with active recurring payments.` | Payment method is in use by a recurring payment | Cancel or reassign the recurring payments first |
| `Something went wrong: contact Dime Payments Rep` | Internal failure creating or updating a merchant | Contact your Dime Payments rep |
# JavaScript SDK
Source: https://docs.dimepayments.com/guides/sdks/javascript
Official JavaScript client for the Dime Payments API
## Installation
Requires Node.js 18+
```bash theme={null}
npm install @dime-technology/dime-js-sdk
```
## Quickstart
```javascript theme={null}
import { Client } from '@dime-technology/dime-js-sdk';
const dime = new Client('your-api-token');
const txn = await dime.transactions.chargeCard('YOUR_SID', {
amount: 49.99,
token: 'tok_abc123',
});
console.log(txn.transactionStatus); // "Success"
```
## Configuration
```javascript theme={null}
import { Client, Config } from '@dime-technology/dime-js-sdk';
// Simple setup
const dime = new Client('your-api-token');
// Full control
const dime = new Client(new Config({
token: 'your-api-token',
baseUrl: 'https://app.dimepayments.com',
timeout: 30000,
maxRetries: 2,
}));
```
## Available Resources
| Property | Endpoints |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dime.transactions` | chargeCard, chargeAch, tokenizeCard, refund, void, show, list |
| `dime.customers` | list, show, create, update, delete |
| `dime.paymentMethods` | list, show, create, update, delete |
| `dime.merchants` | list, show, create, update, getFormLink |
| `dime.addresses` | list, show, create, update, delete |
| `dime.deposits` | list, listWithTransactions, show |
| `dime.recurringPayments` | list, show, create, edit, pause, cancel, activate, delete |
| `dime.invoices` | list, show, create, update, delete, send, markSent, void, duplicate, pay, getLink, addLineItem, updateLineItem, deleteLineItem, listItems, createItem |
| `dime.recurringInvoices` | list, show, create, cancel |
## Invoices
Requires **v1.2.0** or later. Earlier published versions had no invoices resource.
Invoices are built from line items that each reference a merchant item (a fund or designation).
Draft invoices can be edited; once sent they are locked.
Identify the customer with `customer_uuid` — the same uuid every other resource uses, and the only
identifier the customer endpoints return.
```javascript theme={null}
// Look up (or create) the items a line can reference
const item = await dime.invoices.createItem('YOUR_SID', {
name: 'Consulting',
price: 125,
tax_deductible: false,
});
// Create a draft invoice
const invoice = await dime.invoices.create('YOUR_SID', {
customer_uuid: customer.uuid,
customer_name: 'Jane Doe',
customer_email: 'jane@example.com',
payment_terms: 'net_15', // due_on_receipt | net_15 | net_30 | net_60
lines: [{ item_id: item.id, name: 'Consulting', quantity: 2, unit_price: 125 }],
});
// Email it, or activate the pay link without emailing
await dime.invoices.send('YOUR_SID', invoice.id);
await dime.invoices.markSent('YOUR_SID', invoice.id);
// Share the public pay link
const { publicUrl } = await dime.invoices.getLink('YOUR_SID', invoice.id);
// Take a merchant-initiated payment. payment_type is required; omit amount to
// pay the full balance.
await dime.invoices.pay('YOUR_SID', invoice.id, {
payment_type: 'cc', // cc | ach
token: 'tok_abc123',
amount: 125,
});
```
### Statuses
`invoice.status` is one of `draft`, `sent`, `viewed`, `partially_paid`, `paid`, `void` or
`refunded` — lowercase. Compare against `paid` to detect settlement; `partially_paid` means a
payment landed but a balance remains, which `invoice.balance` reports.
There is no `overdue` status — being overdue is a property of an open invoice past its due date and
reads as `invoice.isOverdue`. `overdue` and `all` are accepted as *filter* values on `list()`.
### Recurring invoices
```javascript theme={null}
const template = await dime.recurringInvoices.create('YOUR_SID', {
customer_uuid: customer.uuid,
payment_terms: 'net_30',
recurring_frequency: 'Monthly', // Weekly | Biweekly | FirstFifteenth | Monthly | Yearly
recurring_start_date: '2026-09-01',
lines: [{ item_id: item.id, name: 'Retainer', quantity: 1, unit_price: 500 }],
});
await dime.recurringInvoices.cancel('YOUR_SID', template.id);
```
## Error Handling
```javascript theme={null}
import { DimeException, ValidationException } from '@dime-technology/dime-js-sdk';
try {
await dime.transactions.chargeCard('YOUR_SID', { amount: 0 });
} catch (e) {
if (e instanceof ValidationException) {
console.log(e.getErrors());
}
}
```
## Links
* [GitHub](https://github.com/dime-technology/dime-js-sdk)
* [npm](https://www.npmjs.com/package/@dime-technology/dime-js-sdk)
* [API Reference](/api-reference)
# PHP SDK
Source: https://docs.dimepayments.com/guides/sdks/php
Official PHP client for the Dime Payments API
## Installation
Requires PHP 8.3+
```bash theme={null}
composer require dime-technology/dime-php-sdk
```
## Quickstart
```php theme={null}
$dime = new \DimePayments\Sdk\Client('your-api-token');
$txn = $dime->transactions->chargeCard('YOUR_SID', [
'amount' => 49.99,
'token' => 'tok_abc123',
]);
echo $txn->transactionStatus; // "Success"
```
## Configuration
```php theme={null}
use DimePayments\Sdk\Client;
use DimePayments\Sdk\Config;
// Simple setup
$dime = new Client('your-api-token');
// Full control
$dime = new Client(new Config(
token: 'your-api-token',
baseUrl: 'https://app.dimepayments.com',
timeout: 30.0,
maxRetries: 2,
));
```
## Available Resources
| Property | Endpoints |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `$dime->transactions` | charge card/ACH, tokenize, refund, void, show, list |
| `$dime->customers` | list, show, create, update, delete |
| `$dime->paymentMethods` | list, show, create, update, delete |
| `$dime->merchants` | list, show, create, update, get onboarding form link |
| `$dime->addresses` | list, show, create, update, delete |
| `$dime->deposits` | list, list-with-transactions, show |
| `$dime->recurringPayments` | list, show, create, edit, pause, cancel, activate, delete |
| `$dime->invoices` | list, show, create, update, delete, send, markSent, void, duplicate, pay, link, addLineItem, updateLineItem, deleteLineItem, listItems, createItem, listRecurring, showRecurring, createRecurring, cancelRecurring |
## Invoices
Requires v1.1.0 or later for the invoices resource, and **v1.1.1** or later to identify the customer by `customer_uuid`.
Invoices are built from line items that each reference a merchant item (a fund or designation).
Draft invoices can be edited; once sent they are locked.
Identify the customer with `customer_uuid` — the same uuid every other resource uses, and the only
identifier the customer endpoints return.
```php theme={null}
// Look up (or create) the items a line can reference
$item = $dime->invoices->createItem('YOUR_SID', [
'name' => 'Consulting',
'price' => 125,
'tax_deductible' => false,
]);
// Create a draft invoice
$invoice = $dime->invoices->create('YOUR_SID', [
'customer_uuid' => $customer->uuid,
'customer_name' => 'Jane Doe',
'customer_email' => 'jane@example.com',
'payment_terms' => 'net_15', // due_on_receipt | net_15 | net_30 | net_60
'lines' => [
['item_id' => $item->id, 'name' => 'Consulting', 'quantity' => 2, 'unit_price' => 125],
],
]);
// Email it, or activate the pay link without emailing
$dime->invoices->send('YOUR_SID', $invoice->id);
$dime->invoices->markSent('YOUR_SID', $invoice->id);
// Share the public pay link
echo $dime->invoices->link('YOUR_SID', $invoice->id)->publicUrl;
// Take a merchant-initiated payment. payment_type is required; omit amount to
// pay the full balance.
$dime->invoices->pay('YOUR_SID', $invoice->id, [
'payment_type' => 'cc', // cc | ach
'token' => 'tok_abc123',
'amount' => 125.00,
]);
```
### Statuses
`$invoice->status` is one of `draft`, `sent`, `viewed`, `partially_paid`, `paid`, `void` or
`refunded` — lowercase. Compare against `paid` to detect settlement; `partially_paid` means a
payment landed but a balance remains, which `$invoice->balance` reports.
There is no `overdue` status — being overdue is a property of an open invoice past its due date and
reads as `$invoice->isOverdue`. `overdue` and `all` are accepted as *filter* values on `list()`.
### Recurring invoices
```php theme={null}
$template = $dime->invoices->createRecurring('YOUR_SID', [
'customer_uuid' => $customer->uuid,
'payment_terms' => 'net_30',
'recurring_frequency' => 'Monthly', // Weekly | Biweekly | FirstFifteenth | Monthly | Yearly
'recurring_start_date' => '2026-09-01',
'lines' => [
['item_id' => $item->id, 'name' => 'Retainer', 'quantity' => 1, 'unit_price' => 500],
],
]);
$dime->invoices->cancelRecurring('YOUR_SID', $template->id);
```
## Error Handling
```php theme={null}
use DimePayments\Sdk\Exceptions\DimeException;
use DimePayments\Sdk\Exceptions\ValidationException;
try {
$dime->transactions->chargeCard('YOUR_SID', ['amount' => 0]);
} catch (ValidationException $e) {
$e->getErrors(); // ['data.amount' => ['must be greater than 0']]
} catch (DimeException $e) {
$e->getStatusCode();
}
```
## Links
* [GitHub](https://github.com/dime-technology/dime-php-sdk)
* [Packagist](https://packagist.org/packages/dime-technology/dime-php-sdk)
* [API Reference](/api-reference)
# Python SDK
Source: https://docs.dimepayments.com/guides/sdks/python
Official Python client for the Dime Payments API
## Installation
Requires Python 3.10+
```bash theme={null}
pip install dime-python-sdk
```
## Quickstart
```python theme={null}
from dime_payments import Client
dime = Client('your-api-token')
txn = dime.transactions.charge_card('YOUR_SID', {
'amount': '49.99',
'token': 'tok_abc123',
})
print(txn.transaction_status) # "Success"
```
## Configuration
```python theme={null}
from dime_payments import Client, Config
# Simple setup
dime = Client('your-api-token')
# Full control
dime = Client(Config(
token='your-api-token',
base_url='https://app.dimepayments.com',
timeout=30.0,
max_retries=2,
))
```
## Available Resources
| Property | Endpoints |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dime.transactions` | charge\_card, charge\_ach, tokenize\_card, refund, void, show, list |
| `dime.customers` | list, show, create, update, delete |
| `dime.payment_methods` | list, show, create, update, delete |
| `dime.merchants` | list, show, create, update, get\_form\_link |
| `dime.addresses` | list, show, create, update, delete |
| `dime.deposits` | list, list\_with\_transactions, show |
| `dime.recurring_payments` | list, show, create, edit, pause, cancel, activate, delete |
| `dime.invoices` | list, show, create, update, delete, send, mark\_sent, void, duplicate, pay, get\_link, add\_line\_item, update\_line\_item, delete\_line\_item, list\_items, create\_item |
| `dime.recurring_invoices` | list, show, create, cancel |
## Invoices
Requires **v1.2.0** or later. Earlier published versions had no working invoices resource.
Invoices are built from line items that each reference a merchant item (a fund or designation).
Draft invoices can be edited; once sent they are locked.
Identify the customer with `customer_uuid` — the same uuid every other resource uses, and the only
identifier the customer endpoints return.
```python theme={null}
# Look up (or create) the items a line can reference
item = dime.invoices.create_item('YOUR_SID', {
'name': 'Consulting',
'price': 125,
'tax_deductible': False,
})
# Create a draft invoice
invoice = dime.invoices.create('YOUR_SID', {
'customer_uuid': customer.uuid,
'customer_name': 'Jane Doe',
'customer_email': 'jane@example.com',
'payment_terms': 'net_15', # due_on_receipt | net_15 | net_30 | net_60
'lines': [
{'item_id': item.id, 'name': 'Consulting', 'quantity': 2, 'unit_price': 125},
],
})
# Email it, or activate the pay link without emailing
dime.invoices.send('YOUR_SID', invoice.id)
dime.invoices.mark_sent('YOUR_SID', invoice.id)
# Share the public pay link
print(dime.invoices.get_link('YOUR_SID', invoice.id).public_url)
# Take a merchant-initiated payment. payment_type is required; omit amount to
# pay the full balance.
dime.invoices.pay('YOUR_SID', invoice.id, {
'payment_type': 'cc', # cc | ach
'token': 'tok_abc123',
'amount': 125,
})
```
### Statuses
`invoice.status` is one of `draft`, `sent`, `viewed`, `partially_paid`, `paid`, `void` or
`refunded` — lowercase. Compare against `paid` to detect settlement; `partially_paid` means a
payment landed but a balance remains, which `invoice.balance` reports.
There is no `overdue` status — being overdue is a property of an open invoice past its due date and
reads as `invoice.is_overdue`. `overdue` and `all` are accepted as *filter* values on `list()`.
### Recurring invoices
```python theme={null}
template = dime.recurring_invoices.create('YOUR_SID', {
'customer_uuid': customer.uuid,
'payment_terms': 'net_30',
'recurring_frequency': 'Monthly', # Weekly | Biweekly | FirstFifteenth | Monthly | Yearly
'recurring_start_date': '2026-09-01',
'lines': [
{'item_id': item.id, 'name': 'Retainer', 'quantity': 1, 'unit_price': 500},
],
})
dime.recurring_invoices.cancel('YOUR_SID', template.id)
```
## Pagination
```python theme={null}
# Stream all transactions across every page
for txn in dime.transactions.list('YOUR_SID', {
'start_date': '2026-01-01 00:00:00',
'end_date': '2026-01-31 23:59:59',
}).auto_paging():
print(txn.amount)
```
## Error Handling
```python theme={null}
from dime_payments import DimeException, ValidationException
try:
dime.transactions.charge_card('YOUR_SID', {'amount': '0'})
except ValidationException as e:
print(e.get_errors()) # {'data.amount': ['must be greater than 0']}
except DimeException as e:
print(e.get_status_code())
```
## Links
* [GitHub](https://github.com/dime-technology/dime-python-sdk)
* [PyPI](https://pypi.org/project/dime-python-sdk/)
* [API Reference](/api-reference)
# Webhooks
Source: https://docs.dimepayments.com/guides/webhooks
Receive real-time notifications when events occur in your Dime Payments account.
## Overview
Webhooks allow your application to receive real-time notifications when events occur -- a transaction succeeds, a recurring payment fails, an invoice is paid. Instead of polling the API, Dime Payments pushes event data to a URL you specify.
## Setting up a webhook
1. Log into the [Dime Payments dashboard](https://app.dimepayments.com)
2. Navigate to **Settings > Webhooks**
3. Click **Add Endpoint**
4. Enter your publicly accessible HTTPS URL
5. Select the events you want to receive
6. Save
Your endpoint must return a `200` response within **15 seconds** or the attempt is considered failed. Do any real work asynchronously — acknowledge the delivery first, then process it on a queue.
## Event types
The **Event** column is the name shown in the dashboard when you choose which events an endpoint receives. The **`type`** column is the snake\_case value that arrives in the payload — they are not the same string, so subscribe by the name and match in code on `type`.
Note that transaction, ACH and deposit payloads carry **no `type` field at all**. For those, register a separate endpoint per event.
### Transactions
| Event | `type` in payload | When it fires |
| ------------------------ | ----------------- | ----------------------------------- |
| `Credit Card Charge` | *(none)* | A card charge completes |
| `Credit Card Refund` | *(none)* | A card refund is processed |
| `Credit Card Void` | *(none)* | A card transaction is voided |
| `Credit Card Chargeback` | *(none)* | A chargeback or dispute is filed |
| `ACH Charge` | *(none)* | An ACH charge is submitted |
| `ACH Payment Return` | *(none)* | An ACH payment is returned |
| `ACH Refund` | *(none)* | An ACH refund is processed |
| `Deposit Sent` | *(none)* | Funds are deposited to your account |
### Recurring payments
| Event | `type` in payload | When it fires |
| --------------------- | ----------------------------- | -------------------------------------- |
| `Recurring Success` | `recurring_payment_success` | A scheduled recurring payment succeeds |
| `Recurring Failed` | `recurring_payment_failed` | A scheduled recurring payment fails |
| `Recurring Cancelled` | `recurring_payment_cancelled` | A recurring payment is cancelled |
| `Recurring Paused` | `recurring_payment_paused` | A recurring payment is paused |
Note the `payment` in these slugs, which the event name does not contain.
### Invoices
| Event | `type` in payload | When it fires |
| ----------------------------- | ----------------------------- | ----------------------------------------- |
| `Invoice Created` | `invoice_created` | An invoice is created |
| `Invoice Updated` | `invoice_updated` | A draft invoice is edited |
| `Invoice Sent` | `invoice_sent` | An invoice is sent to the customer |
| `Invoice Paid` | `invoice_paid` | An invoice is paid in full |
| `Invoice Voided` | `invoice_voided` | An invoice is voided |
| `Invoice Deleted` | `invoice_deleted` | An invoice is deleted |
| `Recurring Invoice Created` | `recurring_invoice_created` | A recurring invoice template is created |
| `Recurring Invoice Cancelled` | `recurring_invoice_cancelled` | A recurring invoice template is cancelled |
### Subscriptions
| Event | `type` in payload | When it fires |
| ----------------------------- | ----------------------------- | ---------------------------- |
| `Subscription Created` | `subscription_created` | A subscription starts |
| `Subscription Renewed` | `subscription_renewed` | A subscription renews |
| `Subscription Payment Failed` | `subscription_payment_failed` | A subscription payment fails |
| `Subscription Paused` | `subscription_paused` | A subscription is paused |
| `Subscription Resumed` | `subscription_resumed` | A subscription resumes |
| `Subscription Cancelled` | `subscription_cancelled` | A subscription is cancelled |
## Payload format
The request body is a **flat JSON object** — the event data is sent at the top level, not wrapped in an envelope.
A transaction webhook:
```json theme={null}
{
"transaction_type": "CC",
"transaction_status": "Success",
"transaction_status_description": "Approved",
"transaction_number": "1234567890",
"transaction_date": "2026-01-01T00:00:00.000000Z",
"amount": "49.99",
"customer_uuid": "66f1c230-1337-4g59-b43c-1bcb83adfaaa",
"transaction_info_id": "9876543210",
"billing_address": {
"first_name": "Jane",
"last_name": "Doe",
"addr1": "123 Main St",
"city": "Atlanta",
"state": "GA",
"zip": "30301"
}
}
```
An invoice webhook:
```json theme={null}
{
"type": "invoice_paid",
"id": 4021,
"invoice_number": "INV-0007",
"status": "paid",
"payment_terms": "net_15",
"issue_date": "2026-07-01",
"due_date": "2026-07-16",
"subtotal": 250.0,
"total": 250.0,
"amount_paid": 250.0,
"balance": 0.0,
"customer": {
"uuid": "9f2a6c14-3e8b-4d21-9a77-5c1e0b8f4d33",
"name": "Jane Doe",
"email": "jane@example.com"
},
"items": []
}
```
**Invoice, recurring-payment and subscription payloads carry `type`**, the snake\_case value from the table above. Match on that when one endpoint serves several of those events.
**Transaction, ACH, chargeback and deposit payloads carry no discriminator.** Register a separate endpoint per event for those, and identify the event from the endpoint that received it.
## Verifying webhook signatures
Dime Payments signs every webhook so you can verify it came from us. The signature is sent in the **`Signature`** header as a hex-encoded HMAC-SHA256 of the raw request body, keyed with the secret shown against that endpoint in the dashboard.
```php theme={null}
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_SIGNATURE'];
$secret = 'your-webhook-secret';
$expected = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit;
}
```
Always compare with a timing-safe function such as `hash_equals`, and sign against the **raw** body — re-encoding the parsed JSON can reorder keys and change the hash.
## Retries
If your endpoint fails to return a `200`, Dime Payments retries with exponential backoff:
| Attempt | When |
| ------- | ------------------- |
| 1 | Immediately |
| 2 | 10 seconds later |
| 3 | \~1.7 minutes later |
| 4 | \~17 minutes later |
| 5 | \~2.8 hours later |
After 5 attempts the delivery is abandoned, so the window spans roughly three hours — enough to survive a short outage or a deploy. It is still best-effort rather than a guaranteed ledger, so reconcile against the API for anything you cannot afford to miss.
## Testing webhooks locally
Use a tool like [ngrok](https://ngrok.com) to expose your local server to the internet during development:
```bash theme={null}
ngrok http 3000
```
Use the generated `https://` URL as your webhook endpoint in the dashboard.
## Next steps
* [Disputes](/guides/disputes) — understand how chargebacks work
* [Payouts](/guides/payouts) — understand how funds are deposited
* [API Reference](/api-reference) — full endpoint documentation
# Custom Receipt
Source: https://docs.dimepayments.com/help/business/custom-receipt
Customize the payment receipt email sent to customers after each transaction.
## Overview
By default, Dime Payments sends a standard receipt email to customers after each successful payment. Custom Receipt lets you replace that with a branded email using your company's logo, voice, and contact information.
Go to **Settings > Custom Receipt** and toggle **Enable Custom Receipt** on.
## Configuring your receipt
**Logo** -- upload your company logo (JPEG, PNG, 2MB max).
**Subject** -- the email subject line customers see in their inbox. Keep it clear and professional.
**Body** -- the main message. Write in your company's voice and use variables to personalize each receipt automatically.
**Signature** -- the closing block, typically your company name and contact info.
## Available variables
| Variable | What it inserts |
| ------------------ | -------------------------------- |
| `{first_name}` | Customer's first name |
| `{last_name}` | Customer's last name |
| `{amount}` | Payment amount (e.g. \$1,200.00) |
| `{date}` | Date of the payment |
| `{item}` | Payment category (e.g. Rent) |
| `{transaction_id}` | Transaction ID for reference |
## Example
```
Subject: Payment confirmation -- {item} for {date}
Hi {first_name},
This confirms your payment of {amount} for {item} on {date}.
Please save this email for your records. Your transaction ID is {transaction_id}.
Thank you,
Acme Property Management
(404) 555-0100
```
## Saving changes
Click **Save Changes** in the top right. Changes apply to all future receipts immediately.
# Design Settings
Source: https://docs.dimepayments.com/help/business/design-settings
Customize your public payment page -- URL, logo, form options, and notifications.
## Overview
Design Settings controls how your public payment page looks and behaves. Go to **Settings > Design Settings**. Changes are organized across six tabs: URL Settings, Logo, Policy Settings, Notifications, Form Settings, and Preview.
## URL Settings
* **Processing Page URL** -- your payment page slug (e.g. `acme-property`). Your public payment page lives at `app.dimepayments.com/your-slug`
* **Logo Link URL** -- where clicking your logo on the payment page takes the customer (typically your company website)
## Logo
Upload your company logo to display on the payment page. Accepted formats are JPEG, PNG, and SVG.
## Policy Settings
Configure the privacy policy and terms of service links shown at the bottom of your payment page.
## Notifications
Control which email notifications are sent and to whom -- internal alerts when a payment is received, or notifications when a recurring payment fails.
## Form Settings
* **Amount Options** -- set preset payment amounts customers can click (e.g. $500, $1,000, \$1,500)
* **Frequency Options** -- control whether customers can choose one-time, weekly, bi-weekly, monthly, or annual payments
* **Default Frequency** -- the pre-selected frequency when the form loads
## Preview
Shows a live preview of your payment form as customers will see it. Confirm your logo, colors, and form options look correct before sharing your link.
## Saving changes
Click **Save Changes** in the top right. Changes go live on your public payment page immediately.
# Items
Source: https://docs.dimepayments.com/help/business/items
Set up and manage the payment categories shown on your payment form.
## What are items?
Items are the categories your customers select when making a payment. Every transaction is assigned to an item, which is how your reporting breaks down revenue by category.
Items are flexible -- define them however makes sense for your business.
## Viewing your items
Go to **Settings > Items**. The table shows all your items with their name, description, whether it is the default item, whether it is visible on the payment form, and when it was created.
## Adding an item
Click **Add Item** and fill in:
* **Name** -- what customers see on the payment form (e.g. "Rent")
* **Description** -- optional short description
* **Default** -- if toggled on, this item is pre-selected when a customer opens the payment form
* **Visible** -- controls whether this item appears on the public payment form. Hidden items can still receive payments via direct API calls
## Examples
| Business type | Example items |
| ------------------- | --------------------------------------------------- |
| Property management | Rent, Security Deposit, Pet Fee, Late Fee, HOA Dues |
| Law firm | Retainer, Hourly Fees, Court Costs, Filing Fees |
| Healthcare | Copay, Balance Due, Procedure Fee |
| Agency | Project Deposit, Monthly Retainer, Invoice Payment |
| Contractor | Down Payment, Progress Payment, Final Payment |
## Tips
* Keep item names clear -- customers see them on the payment form and on their receipt
* Only mark one item as **Default** -- this is the pre-selected option when the form loads
* Hide items that are no longer active rather than deleting them -- this preserves historical reporting data
* You can have as many items as you need -- one per service line, fee type, or revenue category
# Reports Overview
Source: https://docs.dimepayments.com/help/business/reports-overview
A guide to every report in the Dime Payments dashboard.
## Reports section
All reports are found under the **Reports** section in the left sidebar. Each report serves a different purpose -- some are for day-to-day monitoring, others for accounting, and others for understanding customer trends.
***
## Pending Transactions
Shows transactions that have been processed but not yet settled to your bank account. Use this to see what is in flight -- approved payments that have not hit your deposit yet.
Columns: Date, Customer Name, Item, Payment Method, Amount, Estimated Settlement Date, Status.
Use it when: a customer says they were charged but you do not see the deposit yet.
***
## All Transactions
Your complete payment history. Every successful, failed, and undeposited transaction in one place.
Filter by item, transaction type (credit card or ACH), date range, and status. Use the **Columns** button to show or hide fields. Export to CSV for use in your accounting software.
Columns include Gross amount, Fees, and Net -- so you can see exactly what was deposited after processing fees.
Use it when: you need to look up a specific payment, run a date-range export, or reconcile deposits.
***
## All Deposits
A record of every deposit made to your bank account, with the transaction count and total amount per deposit.
Filter by date range and export to CSV. Click into a deposit to see the individual transactions it contains.
Use it when: you are reconciling your bank statement and need to match deposits to individual payments.
***
## Monthly Statements
PDF statements summarizing each month's activity -- total collected, fees, net settled, and transaction count.
Select the year using the dropdown in the top right. Click the download icon next to any month to get the PDF.
Use it when: your bookkeeper needs a monthly summary or you are preparing financial reports.
***
## Slipping Customers
Shows customers whose payment activity has decreased or stopped compared to a prior period. Useful for identifying at-risk recurring customers before they fully churn.
Use it when: you want to proactively reach out to customers whose payment activity has dropped.
***
## New Customers
Lists customers who made their first payment within a selected date range.
Use it when: you want to track new customer acquisition or follow up with new accounts.
***
## Top Customers by Band
Groups customers into payment bands (e.g. $0-$499, $500-$999, $1,000-$4,999, \$5,000+) so you can see the distribution of your customer base by revenue.
Use it when: identifying your highest-value accounts or preparing for account review conversations.
***
## Transactions by Month
A month-by-month chart and table of total payments across a selected date range. Good for spotting seasonal patterns, growth trends, and the impact of new customers.
Use it when: presenting revenue trends or comparing performance across periods.
# Campaigns
Source: https://docs.dimepayments.com/help/church/campaigns
Create and manage giving campaigns and fundraising drives.
## What are campaigns?
Campaigns let you run focused fundraising drives with their own giving page, date range, logo, and linked giving item. Donors who visit a campaign URL see a customized experience tied to that specific drive -- a building fund push, a missions trip, an annual appeal.
## Creating a campaign
Go to **Settings > Campaigns** and click **New Campaign**.
* **Name** -- the campaign name displayed to donors (e.g. "Summer Missions 2026")
* **Slug** -- the URL path for this campaign (e.g. `summer-missions-2026`). Letters, numbers, and hyphens only
* **Start Date / End Date** -- the active date range. The campaign page only accepts donations between these dates
* **Item** -- which giving category this campaign raises funds for. Select an existing item or toggle **Create new item** to add one at the same time
* **Enable Amount Options** -- show preset donation amounts (e.g. $25, $50, \$100) on the campaign page
* **Enable "Other Amount"** -- let donors enter a custom amount
* **Campaign Logo** -- upload a logo specific to this campaign (JPEG, PNG, or SVG, 5MB max)
Click **Create Campaign** when done.
## Managing campaigns
All campaigns are listed in the table at the top of the page showing name, slug, dates, linked item, total raised, and status. Use the **Actions** column to edit or deactivate a campaign.
## Tips
* Keep slugs short and memorable -- donors may type them directly
* Link each campaign to a specific item so donations are categorized correctly in your reports
* Use Campaign Reports under Reports to track performance after launch
# Custom Receipt
Source: https://docs.dimepayments.com/help/church/custom-receipt
Customize the donation receipt email sent to donors after each transaction.
## Overview
By default, Dime Payments sends a standard receipt email to donors after each successful donation. Custom Receipt lets you replace that with a branded email using your organization's logo, voice, and contact information.
Go to **Settings > Custom Receipt** and toggle **Enable Custom Receipt** on.
## Configuring your receipt
**Logo** -- upload your organization's logo (JPEG, PNG, 2MB max).
**Subject** -- the email subject line donors see in their inbox. Keep it clear and recognizable -- donors search for receipts at tax time.
**Body** -- the main message. Write in your organization's voice and use variables to personalize each receipt automatically.
**Signature** -- the closing block, typically your organization name and contact info.
## Available variables
| Variable | What it inserts |
| ------------------ | ----------------------------------- |
| `{first_name}` | Donor's first name |
| `{last_name}` | Donor's last name |
| `{amount}` | Donation amount (e.g. \$50.00) |
| `{date}` | Date of the donation |
| `{item}` | Giving category (e.g. General Fund) |
| `{transaction_id}` | Transaction ID for reference |
## Example
```
Subject: Thank you for your gift to {item}, {first_name}
Dear {first_name},
Thank you for your generous gift of {amount} to our {item} on {date}.
Your support makes our ministry possible.
In His service,
Baptist Chapel Church
(910) 555-0100
```
## Saving changes
Click **Save Changes** in the top right. Changes apply to all future receipts immediately.
# Design Settings
Source: https://docs.dimepayments.com/help/church/design-settings
Customize your public giving page -- URL, logo, colors, form options, and notifications.
## Overview
Design Settings controls how your public giving page looks and behaves. Go to **Settings > Design Settings**. Changes are organized across six tabs: URL Settings, Logo, Policy Settings, Notifications, Form Settings, and Preview.
## URL Settings
* **Processing Page URL** -- your giving page slug (e.g. `baptist-chapel-church`). Your public giving page lives at `app.dimepayments.com/your-slug`
* **Logo Link URL** -- where clicking your logo on the giving page takes the donor (typically your organization's website)
## Logo
Upload your organization's logo to display on the giving page. Accepted formats are JPEG, PNG, and SVG.
## Policy Settings
Configure the privacy policy and terms of service links shown at the bottom of your giving page.
## Notifications
Control which email notifications are sent and to whom -- internal alerts when a donation is received, or notifications when a recurring gift fails.
## Form Settings
* **Amount Options** -- set preset donation amounts donors can click (e.g. $25, $50, $100, $250)
* **Frequency Options** -- control whether donors can choose one-time, weekly, bi-weekly, monthly, or annual giving
* **Default Frequency** -- the pre-selected frequency when the form loads
## Preview
Shows a live preview of your giving form as donors will see it. Confirm your logo, colors, and form options look correct before sharing your link.
## Saving changes
Click **Save Changes** in the top right. Changes go live on your public giving page immediately.
# Items (Giving Categories)
Source: https://docs.dimepayments.com/help/church/items
Set up and manage the giving categories shown on your donation form.
## What are items?
Items are the giving categories donors choose from when making a donation -- General Fund, Missions, Building Fund, Youth Ministry, and so on. Every donation is assigned to an item, which is how your reporting breaks down giving by category.
## Viewing your items
Go to **Settings > Items**. The table shows all your giving items with their name, description, whether it is the default item, whether it is visible on the giving form, and when it was created.
## Adding an item
Click **Add Item** and fill in:
* **Name** -- what donors see on the giving form (e.g. "Building Fund")
* **Description** -- optional short description shown to donors
* **Default** -- if toggled on, this item is pre-selected when a donor opens the giving form
* **Visible** -- controls whether this item appears on the public giving form. Hidden items can still receive donations via campaigns or direct API calls
## Examples
| Organization type | Example items |
| ----------------- | ------------------------------------------------------------------ |
| Church | General Fund, Missions, Building Fund, Youth Ministry, Benevolence |
| Nonprofit | Annual Fund, Program Support, Capital Campaign, Scholarship Fund |
| School | Tuition, Athletics, Field Trips, Scholarship |
## Tips
* Keep item names short and clear -- donors see them on the giving form
* Only mark one item as **Default** -- this is the pre-selected option when the form loads
* Hide items that are no longer active rather than deleting them -- this preserves historical reporting data
* Items used by active campaigns cannot be hidden without first updating those campaigns
# Reports Overview
Source: https://docs.dimepayments.com/help/church/reports-overview
A guide to every report in the Dime Payments dashboard.
## Reports section
All reports are found under the **Reports** section in the left sidebar. Each report serves a different purpose -- some are for day-to-day monitoring, others for year-end accounting, and others for understanding donor trends.
***
## Pending Donations
Shows transactions that have been processed but not yet settled to your bank account. Use this to see what is in flight -- approved donations that have not hit your deposit yet.
Columns: Date, Donor Name, Item, Payment Method, Amount, Estimated Settlement Date, Status.
Use it when: a donor says they were charged but you do not see the deposit yet.
***
## All Donations
Your complete donation history. Every successful, failed, and undeposited transaction in one place.
Filter by item, transaction type (credit card or ACH), date range, and status. Use the **Columns** button to show or hide fields. Export to CSV for use in your accounting software.
Columns include Gross amount, Fees, and Net -- so you can see exactly what was deposited after processing fees.
Use it when: you need to look up a specific donation, run a date-range export, or reconcile deposits.
***
## All Deposits
A record of every deposit made to your bank account, with the transaction count and total amount per deposit.
Filter by date range and export to CSV. Click into a deposit to see the individual donations it contains.
Use it when: you are reconciling your bank statement and need to match deposits to transactions.
***
## Monthly Statements
PDF statements summarizing each month's activity -- total donated, fees, net settled, and transaction count. Useful for bookkeeping and board reporting.
Select the year using the dropdown in the top right. Click the download icon next to any month to get the PDF.
Use it when: your bookkeeper needs a monthly summary, or you are preparing a financial report for leadership.
***
## Giving Statement
Generates a year-end giving statement for a specific donor -- a formatted summary of all their donations in a given year, suitable for tax purposes.
Search by donor name or email, select the year, and download or email the statement directly to the donor.
Use it when: a donor requests a tax receipt or year-end giving summary.
***
## Slipping Donors
Shows donors whose giving has decreased or stopped compared to a prior period. Useful for identifying at-risk recurring givers before they fully lapse.
Use it when: you want to proactively reach out to donors whose engagement has dropped.
***
## New Donors
Lists donors who gave for the first time within a selected date range.
Use it when: you want to send a welcome message or track new donor acquisition after a campaign.
***
## Top Donors by Band
Groups donors into giving bands (e.g. $0-$99, $100-$499, $500-$999, \$1,000+) so you can see the distribution of your donor base by giving level.
Use it when: preparing for a major gifts conversation, or understanding the shape of your donor pyramid.
***
## Donations by Month
A month-by-month chart and table of total donations across a selected date range. Good for spotting seasonal patterns and year-over-year growth.
Use it when: presenting giving trends to leadership or comparing this year's performance to last year's.
***
## Campaign Reports
Shows performance data for each campaign -- total raised, number of donors, and conversion. Compare campaigns against each other.
Use it when: evaluating which campaigns performed best or reporting results after a fundraising drive.
# Why ACH Refunds Are Held for 7 Days
Source: https://docs.dimepayments.com/help/shared/ach-refund-hold
Understanding the ACH refund hold policy and how it protects you as a merchant.
## The short answer
Dime Payments does not process refunds on ACH transactions until 7 days have passed since the original payment. This policy exists to protect you from a costly situation that is unique to ACH -- and it is worth understanding why.
## How ACH is different from credit cards
When a customer pays by credit card, the funds are authorized and verified in real time. ACH bank transfers work differently -- they are processed in batches and can take anywhere from 3 to 10 business days to fully settle. More importantly, a bank can reject an ACH transaction after the fact if the customer's account has insufficient funds, is closed, or the customer disputes the transfer.
This rejection is called an **ACH return** -- the bank equivalent of a bounced check.
## The problem with refunding too early
Here is what happens if a refund is issued before an ACH payment has cleared:
1. **Monday** -- a customer pays you \$100 via ACH. The money has not arrived in your account yet -- it is in transit.
2. **Wednesday** -- you issue the customer a \$100 refund. That refund comes out of your account immediately.
3. **Friday** -- the customer's bank rejects the original payment due to insufficient funds. The \$100 never actually arrives, and you are also hit with a \$25 ACH return fee.
**The result: you are out \$225.** You lost the original \$100 payment, paid out \$100 in a refund for money you never received, and absorbed a \$25 return fee. Effectively, you paid the customer \$100 to take your goods or services.
## Why 7 days
The 7-day hold gives enough time for the ACH transaction to either settle successfully or return. Once 7 days have passed, the risk of a return is substantially lower and we can process the refund with confidence that the original funds are real.
## What to tell your customers
If a customer requests an ACH refund before 7 days have passed, let them know:
> "ACH bank transfers take several business days to fully clear. To protect against returned payments, we hold ACH refunds for 7 days from the original transaction date. Your refund will be processed on \[date]."
Most customers understand once the timeline is explained. It is the same reason a bank holds a check before making funds available.
## Need an exception?
In certain circumstances, a refund override is available. Contact your Dime Payments representative directly if you have a situation that requires early processing -- we will review it case by case.
# Bank Account
Source: https://docs.dimepayments.com/help/shared/bank-account
How to connect and update the bank account where your payments are deposited.
## Overview
Your bank account is where Dime Payments deposits settled funds. It must be set up before you can receive payouts. Changes to your bank account require re-verification and may delay deposits by 1-2 business days.
## Viewing your connected account
Go to **Advanced > Bank Account** in the left sidebar. Your currently connected account is shown with the bank name, account type, and masked account number. A **Verified** badge confirms the account is active and eligible to receive deposits.
## Updating your bank account
1. Click **Edit** next to the connected account
2. Fill in the following fields:
* **Bank Name** -- the name of your bank
* **Name on Account** -- must match exactly what is on the bank account
* **Account Type** -- Checking or Savings
* **Ownership Type** -- Business or Personal
* **Routing Number** -- 9-digit routing number found on a check or your bank's website
* **Account Number** -- enter the full account number twice to confirm
3. Click **Save**
Your new account will be verified before deposits resume. Contact your Dime Payments representative if verification takes longer than 2 business days.
## Recent settlements
The right side of the Bank Account page shows a log of recent settlement activity -- each payout with its date, period covered, transaction count, amount, and status. Use this to confirm deposits have landed and to match them against your bank statement.
## Tips
* Use a **business checking account** wherever possible -- it keeps finances separate and simplifies bookkeeping
* Double-check your routing number -- some banks have multiple routing numbers. Use the one printed on your checks
* If you receive a negative deposit, it means a refund or return was processed and the escrow account needed to be replenished from your bank account
# Code Snippets
Source: https://docs.dimepayments.com/help/shared/code-snippets
Embed your payment form on your website or share a direct payment link.
## Overview
Code Snippets gives you three ways to get your payment form in front of customers: an embeddable script, a button trigger, and a direct link. Go to **Advanced > Code Snippets** to find all three.
## Embed Script
The embed script loads your payment form as a modal on any webpage. Add it once to your site's `
` tag:
```html theme={null}
```
Once the script is on the page, any element with a `data-dime-open` attribute will open the payment modal when clicked.
## Button Trigger
Add `data-dime-open` to any button or link on your site to trigger the payment modal:
```html theme={null}
```
You can style this button however you like -- the `data-dime-open` attribute is all that is needed to wire it up.
## Direct Payment Link
Your direct payment link is a standalone URL you can share anywhere -- email, text message, invoices, or your website:
```
https://app.dimepayments.com/your-slug
```
Click **Copy** to copy it to your clipboard, or **Open** to preview your live payment page.
## Tips
* Add the embed script to your website's global header so it loads on every page
* Use multiple `data-dime-open` buttons across different pages -- a "Pay Now" button in the nav, a button at the bottom of an invoice page, etc.
* The direct payment link works great for email invoices and text reminders where embedding code is not possible
# Email Sender
Source: https://docs.dimepayments.com/help/shared/email-sender
Configure the from name and email address used for all customer emails.
## Overview
By default, emails are sent from a Dime Payments address. Email Sender lets you replace this with your own name and email address so recipients recognize who the email is from.
Go to **Settings > Email Sender**.
## Sender configuration
* **From Name** -- the name displayed in inboxes (e.g. "Acme Property Management" or "Baptist Chapel Church")
* **From Email** -- the email address the message is sent from (e.g. `payments@acme.com`)
* **Reply-To Email** -- when a recipient replies, their reply goes here. Can be different from the From Email
## Custom domain verification
To send from your own domain rather than a Dime Payments address, your domain needs to be verified. This involves adding DNS records to your domain registrar.
Contact your Dime Payments representative to start the domain verification process.
## Sending a test email
Use the **Send a Test Email** section to verify your configuration. Enter any email address and click **Send test email** -- a sample receipt will be delivered using your current sender settings.
Always send a test before going live to confirm the email arrives in the inbox and looks correct.
## Saving changes
Click **Save Changes** in the top right. Changes apply to all future emails immediately.
# WooCommerce Setup Guide
Source: https://docs.dimepayments.com/help/shared/woocommerce-setup
Install and configure the Dime Payments gateway plugin for WooCommerce to accept card and ACH payments at checkout.
## Before you begin
You'll need:
* A **WordPress** site running version 6.0 or newer, with **WooCommerce** version 7.0 or newer installed and active
* **PHP 7.4 or newer** (your hosting provider can confirm this)
* An active **Dime Payments merchant account**
* Your **Merchant ID** and **API Token** (see Step 1 below)
* An **SSL certificate** (HTTPS) on your site -- required for secure checkout and standard on any store accepting payments
***
## Step 1 -- Get your credentials
You'll need two values from your Dime Payments account:
* **Merchant ID** -- your unique account identifier
* **API Token** -- authorizes your store to communicate with Dime Payments
There are two token types:
| Token | When to use |
| ----------------- | ----------------------------------- |
| **Sandbox token** | Testing only -- no real money moves |
| **Live token** | Real transactions |
Find both in your **Dime Payments merchant dashboard** under **API Keys**. If you don't see them, contact your account manager and they'll get them to you.
Keep your API tokens private. Treat them like a password -- never share them publicly or commit them to a version-controlled repository.
***
## Step 2 -- Install the plugin
1. Request the dime payments woo commerce `.zip` file from your dime payments representative.
2. In your WordPress admin, go to **Plugins → Add New → Upload Plugin**
3. Click **Choose File**, select the Dime Payments plugin `.zip` file provided to you, and click **Install Now**
4. Once installation finishes, click **Activate Plugin**
If WooCommerce isn't already installed, WordPress will prompt you to install it first. The Dime Payments gateway requires WooCommerce to be active.
***
## Step 3 -- Configure the gateway
1. Go to **WooCommerce → Settings → Payments**
2. Find **Dime Payments** in the list and click **Manage** (or **Set up**)
3. Fill in the following settings:
| Setting | What to enter |
| ----------------------------------- | --------------------------------------------------------------------- |
| **Enable Dime Payments Gateway** | Check this to turn the payment method on |
| **Sandbox / Test mode** | On while testing; off when accepting real payments |
| **Title** | The name customers see at checkout (e.g. "Credit Card / Bank") |
| **Description** | Optional text shown under the title at checkout |
| **Merchant ID** | Your Dime Payments Merchant ID |
| **Sandbox API Token** | Your test token -- used only while Sandbox mode is on |
| **API Token** | Your live token -- used when Sandbox mode is off |
| **Enable Billing Field Validation** | Leave enabled so WooCommerce validates billing details before payment |
4. Click **Save changes**
If your Merchant ID or API Token is missing or incorrect, or if your site isn't on HTTPS, you'll see a warning in the admin settings. Resolve those before going live.
***
## Step 4 -- Test in sandbox mode
With **Sandbox / Test mode** enabled and your **Sandbox API Token** saved:
1. Add a product to your cart and go to **Checkout**
2. Select **Dime Payments** as the payment method -- a secure card form will appear
3. Enter test payment details:
| Field | Test value |
| ----------- | ------------------------- |
| Card number | `4111 1111 1111 1111` |
| Expiry | Any future date (MM/YYYY) |
| CVV | Any 3 digits |
| ZIP | Any 5 digits |
4. Place the order -- you should land on the **Order received** page, and the order will appear in **WooCommerce → Orders** marked as paid via Dime Payments
No real money moves in Sandbox mode. Contact your Dime Payments account manager for additional sandbox test values, including ACH test details.
***
## Step 5 -- Go live
When you're satisfied with testing:
1. Go to **WooCommerce → Settings → Payments → Dime Payments → Manage**
2. Turn off **Sandbox / Test mode**
3. Confirm your **live API Token** is entered
4. Click **Save changes**
Your store is now accepting real payments through Dime Payments.
***
## How checkout works
When a customer selects Dime Payments at checkout:
1. A secure payment form hosted by Dime Payments loads on your checkout page
2. The customer enters their card or bank details and places the order
3. Payment is processed, the order is marked paid, and the customer sees your normal order confirmation
Card and bank details are entered directly into the Dime Payments hosted form -- they are **never stored on or handled by your website**, keeping your PCI scope minimal.
**Supported payment methods and features:**
* Credit and debit card payments (Visa, Mastercard, Amex, Discover)
* ACH bank transfer payments
* Both the WooCommerce **Checkout block** and classic checkout
* **Refunds** directly from the WooCommerce order screen
* WooCommerce **High-Performance Order Storage (HPOS)**
***
## Issuing refunds
1. Open the order in **WooCommerce → Orders**
2. Click **Refund**
3. Enter the amount to refund and confirm
The refund is sent to Dime Payments and processed against the original transaction.
***
## Troubleshooting
Confirm the gateway is **enabled**, your **Merchant ID** and the correct **API Token** are saved, and your site is on **HTTPS**. Check for any admin notice on the WooCommerce settings page.
Your Merchant ID or API Token may be incorrect. Re-enter them carefully, and confirm with your Dime Payments account manager that your account is active.
Check that the **Sandbox / Test mode** toggle matches the token you're using. Sandbox mode must be on when using your sandbox token; off when using your live token.
Contact Dime Payments support with your Merchant ID and a description of the issue, including any error message shown at checkout.