# 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.