# Anytime Capital Payments: complete developer docs > Every page of https://anytime-capital.com/docs as Markdown, in reading order, generated from the same source as the HTML pages. Each page is also available on its own at its URL plus .md. ## Contents - [Anytime Capital Payments developer docs](https://anytime-capital.com/docs.md): Docs for Anytime Capital Payments: payment links, invoices, website checkout, QR payments, payouts, the REST API, webhooks and an MCP server for AI tools. - [Quickstart: take your first payment](https://anytime-capital.com/docs/quickstart.md): Go from a new business account to your first paid payment link with the Anytime Capital Payments API: create a key, create a link, verify a webhook. - [Pricing](https://anytime-capital.com/docs/pricing.md): Anytime Capital Payments costs 2.75% + 30¢ per successful card payment, with no monthly, setup or PCI fees, and custom pricing at $1M+ a year. - [Support](https://anytime-capital.com/docs/support.md): Reach Anytime Capital's US-based business team by phone, chat and email, with a dedicated payments team and shared Slack channel for larger businesses. - [Hosted checkout, Pay button and branding](https://anytime-capital.com/docs/checkout.md): Take payments with hosted payment links, a Pay button or inline checkout on your website, your own checkout domain and your logo and brand colour. - [In-person payments with a QR code](https://anytime-capital.com/docs/in-person.md): Take payments face to face with no card reader: key in an amount, show a QR code, and your customer pays on their own phone with Apple Pay, Google Pay or card. - [Payment methods](https://anytime-capital.com/docs/payment-methods.md): The cards, wallets, bank payments and stablecoins Anytime Capital Payments accepts today, where each is offered, and the methods that are coming soon. - [Fraud rules, 3D Secure and refunds](https://anytime-capital.com/docs/risk-and-3ds.md): Protect your Anytime Capital payments: block card countries, require 3D Secure above an amount, cap payment size, block high-risk scores and auto-refund alerts. - [Payouts: every way to get your money](https://anytime-capital.com/docs/payouts.md): Move your Anytime Capital balance instantly to your business account, by RTP, FedNow, wire or ACH, over local rails in 71+ countries, or in stablecoins. - [Authentication and API keys](https://anytime-capital.com/docs/authentication.md): Authenticate Anytime Capital Payments API requests with a secret key as a Bearer token: create, store, rotate and revoke keys safely. - [Errors](https://anytime-capital.com/docs/errors.md): Every Anytime Capital Payments API error has one JSON shape: a stable code to branch on and a message for people. Status codes, codes and retries. - [Pagination](https://anytime-capital.com/docs/pagination.md): List endpoints in the Anytime Capital Payments API return the newest objects first, a page at a time. Page with limit and the opaque nextCursor. - [Idempotent requests](https://anytime-capital.com/docs/idempotency.md): Send an Idempotency-Key header on every POST to the Anytime Capital Payments API so a retried request never creates a second link, invoice or email. - [Rate limits](https://anytime-capital.com/docs/rate-limits.md): Each Anytime Capital Payments API key may make 100 requests a minute. Over that, requests answer 429 with a Retry-After header in seconds. - [Payment links API](https://anytime-capital.com/docs/payment-links.md): Create, list, retrieve, update and deactivate hosted payment links with the Anytime Capital Payments API, and prefill checkout from the link's URL. - [Invoices API](https://anytime-capital.com/docs/invoices.md): Create, list, retrieve and send invoices with the Anytime Capital Payments API. Totals are calculated for you; customers pay by card at the invoice's URL. - [Customers API](https://anytime-capital.com/docs/customers.md): List your saved customers with the Anytime Capital Payments API, newest first, or find one by email address to match payments and invoices to them. - [Payments API](https://anytime-capital.com/docs/payments.md): List and retrieve payments with the Anytime Capital Payments API: status, amounts, net after fees, payment method, customer, metadata and disputes. - [Webhooks](https://anytime-capital.com/docs/webhooks.md): Get Anytime Capital Payments events by webhook: payments, refunds, disputes, invoices and subscriptions, signed with HMAC-SHA256 and retried for 24 hours. - [Build with AI: MCP server, Markdown docs and prompts](https://anytime-capital.com/docs/build-with-ai.md): Connect Claude and other AI tools to Anytime Capital Payments with the MCP server, give them the docs as Markdown, and paste a ready-made integration prompt. - [Anytime Capital Payments FAQ](https://anytime-capital.com/docs/faq.md): Answers about Anytime Capital Payments: payment methods, payouts, the API and webhooks, AI and MCP integration, security, verification and pricing. --- # Anytime Capital Payments developer docs > Docs for Anytime Capital Payments: payment links, invoices, website checkout, QR payments, payouts, the REST API, webhooks and an MCP server for AI tools. Source: https://anytime-capital.com/docs · Markdown: https://anytime-capital.com/docs.md · All docs: https://anytime-capital.com/docs/llms-full.txt Anytime Capital Payments lets a verified business take payments by payment link, invoice, a Pay button on its own website and QR code in person, then pay the money out from one balance. Online card payments are 2.75% + 30¢, and you can start without writing code: everything here is also in the dashboard. > **Building with an AI assistant?** Every page here is also Markdown (add `.md` to its URL), all of them are in one file at [/docs/llms-full.txt](https://anytime-capital.com/docs/llms-full.txt), and the MCP server lets Claude and other assistants call the API directly. See [Build with AI](https://anytime-capital.com/docs/build-with-ai.md). ## Start here - [Quickstart](https://anytime-capital.com/docs/quickstart.md): From a new account to a paid payment link and a verified webhook. - [Checkout & website](https://anytime-capital.com/docs/checkout.md): Hosted links, the Pay button, inline checkout, your domain and branding. - [Payment links API](https://anytime-capital.com/docs/payment-links.md): Create a checkout for any price from your backend. - [Webhooks](https://anytime-capital.com/docs/webhooks.md): Get told about payments, refunds and disputes, and verify signatures. - [Payouts](https://anytime-capital.com/docs/payouts.md): Every way to move your balance, and how fast. - [Build with AI](https://anytime-capital.com/docs/build-with-ai.md): The MCP server, Markdown docs and a ready-made integration prompt. ## What you can build - **Payment links:** a hosted checkout page for one price, made in the dashboard or with `POST /api/v1/payment-links`, shared anywhere or created per order. - **Invoices:** line items, tax, deposits and reminders, emailed in your branding and paid by card. - **Website checkout:** a Pay button that opens checkout over your page, or the checkout inline, in a few lines of HTML. - **In person:** key in an amount, show a QR code, and the customer pays on their own phone. No card reader. - **Automation:** read payments and customers, and react to payments, refunds, disputes, invoices and subscriptions by webhook. - **AI agents:** let Claude or another assistant create links and invoices and look up payments through the MCP server. ## The API at a glance | Topic | Detail | | --- | --- | | Base URL | `https://anytime-capital.com/api/v1` | | Authentication | `Authorization: Bearer ak_live_…`, a secret key from Settings → Developers. See [Authentication](https://anytime-capital.com/docs/authentication.md). | | Format | JSON in and out. Every object has an `object` field naming its type. | | Money and time | Integer cents (`12500` is $125.00); ISO 8601 times in UTC. | | Errors | `{ "error": { "code", "message" } }` with a stable code. See [Errors](https://anytime-capital.com/docs/errors.md). | | Lists | Newest first, `limit` up to 100 (default 25) and `cursor`. See [Pagination](https://anytime-capital.com/docs/pagination.md). | | Retries | `Idempotency-Key` on every POST, remembered 24 hours. See [Idempotency](https://anytime-capital.com/docs/idempotency.md). | | Rate limit | 100 requests a minute per key. See [Rate limits](https://anytime-capital.com/docs/rate-limits.md). | | Webhooks | Signed with HMAC-SHA256, retried for 24 hours. See [Webhooks](https://anytime-capital.com/docs/webhooks.md). | | MCP server | `https://anytime-capital.com/api/mcp`, same key. See [Build with AI](https://anytime-capital.com/docs/build-with-ai.md). | New to Anytime Capital? [Create your business account](https://anytime-capital.com/business/get-started): the API opens once your business is verified. ## Every page ### Get started - [Quickstart](https://anytime-capital.com/docs/quickstart.md): Go from a new business account to your first paid payment link with the Anytime Capital Payments API: create a key, create a link, verify a webhook. - [Pricing](https://anytime-capital.com/docs/pricing.md): Anytime Capital Payments costs 2.75% + 30¢ per successful card payment, with no monthly, setup or PCI fees, and custom pricing at $1M+ a year. - [Support](https://anytime-capital.com/docs/support.md): Reach Anytime Capital's US-based business team by phone, chat and email, with a dedicated payments team and shared Slack channel for larger businesses. ### Accept payments - [Checkout & website](https://anytime-capital.com/docs/checkout.md): Take payments with hosted payment links, a Pay button or inline checkout on your website, your own checkout domain and your logo and brand colour. - [In person (QR)](https://anytime-capital.com/docs/in-person.md): Take payments face to face with no card reader: key in an amount, show a QR code, and your customer pays on their own phone with Apple Pay, Google Pay or card. - [Payment methods](https://anytime-capital.com/docs/payment-methods.md): The cards, wallets, bank payments and stablecoins Anytime Capital Payments accepts today, where each is offered, and the methods that are coming soon. - [Fraud rules & 3D Secure](https://anytime-capital.com/docs/risk-and-3ds.md): Protect your Anytime Capital payments: block card countries, require 3D Secure above an amount, cap payment size, block high-risk scores and auto-refund alerts. ### Get paid out - [Payout options](https://anytime-capital.com/docs/payouts.md): Move your Anytime Capital balance instantly to your business account, by RTP, FedNow, wire or ACH, over local rails in 71+ countries, or in stablecoins. ### API reference - [Authentication](https://anytime-capital.com/docs/authentication.md): Authenticate Anytime Capital Payments API requests with a secret key as a Bearer token: create, store, rotate and revoke keys safely. - [Errors](https://anytime-capital.com/docs/errors.md): Every Anytime Capital Payments API error has one JSON shape: a stable code to branch on and a message for people. Status codes, codes and retries. - [Pagination](https://anytime-capital.com/docs/pagination.md): List endpoints in the Anytime Capital Payments API return the newest objects first, a page at a time. Page with limit and the opaque nextCursor. - [Idempotency](https://anytime-capital.com/docs/idempotency.md): Send an Idempotency-Key header on every POST to the Anytime Capital Payments API so a retried request never creates a second link, invoice or email. - [Rate limits](https://anytime-capital.com/docs/rate-limits.md): Each Anytime Capital Payments API key may make 100 requests a minute. Over that, requests answer 429 with a Retry-After header in seconds. - [Payment links](https://anytime-capital.com/docs/payment-links.md): Create, list, retrieve, update and deactivate hosted payment links with the Anytime Capital Payments API, and prefill checkout from the link's URL. - [Invoices](https://anytime-capital.com/docs/invoices.md): Create, list, retrieve and send invoices with the Anytime Capital Payments API. Totals are calculated for you; customers pay by card at the invoice's URL. - [Customers](https://anytime-capital.com/docs/customers.md): List your saved customers with the Anytime Capital Payments API, newest first, or find one by email address to match payments and invoices to them. - [Payments](https://anytime-capital.com/docs/payments.md): List and retrieve payments with the Anytime Capital Payments API: status, amounts, net after fees, payment method, customer, metadata and disputes. - [Webhooks](https://anytime-capital.com/docs/webhooks.md): Get Anytime Capital Payments events by webhook: payments, refunds, disputes, invoices and subscriptions, signed with HMAC-SHA256 and retried for 24 hours. ### Build with AI - [MCP server & AI tools](https://anytime-capital.com/docs/build-with-ai.md): Connect Claude and other AI tools to Anytime Capital Payments with the MCP server, give them the docs as Markdown, and paste a ready-made integration prompt. ### FAQ - [FAQ](https://anytime-capital.com/docs/faq.md): Answers about Anytime Capital Payments: payment methods, payouts, the API and webhooks, AI and MCP integration, security, verification and pricing. --- # Quickstart: take your first payment > Go from a new business account to your first paid payment link with the Anytime Capital Payments API: create a key, create a link, verify a webhook. Source: https://anytime-capital.com/docs/quickstart · Markdown: https://anytime-capital.com/docs/quickstart.md · All docs: https://anytime-capital.com/docs/llms-full.txt This guide takes you from a new account to a paid payment link and a verified webhook in about fifteen minutes. You need a terminal and, for the webhook, a server reachable over `https://`. ## 1. Open a business account and get verified [Create your business account](https://anytime-capital.com/business/get-started) and finish verification in **Settings → Verification**. The API answers `403 NOT_ENROLLED` until your business is verified and set up for card payments. ## 2. Create a secret key In **Settings → Developers**, choose **Create key** and copy it: it's shown once. Keep it in an environment variable on your server, never in front-end code. Check it works: ```bash export ANYTIME_API_KEY="ak_live_…" curl "https://anytime-capital.com/api/v1/payments?limit=1" \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` A `200` with `{"object": "list", …}` means you're connected. A `401` means the key is wrong; see [Authentication](https://anytime-capital.com/docs/authentication.md). ## 3. Create a payment link **curl** ```bash curl -X POST https://anytime-capital.com/api/v1/payment-links \ -H "Authorization: Bearer $ANYTIME_API_KEY" \ -H "Idempotency-Key: order-1042" \ -H "Content-Type: application/json" \ -d '{ "title": "Consulting — October", "amountCents": 12500, "singleUse": true, "metadata": { "orderId": "1042" } }' ``` **Node.js 18+** ```javascript import { randomUUID } from "node:crypto"; // Server-side only: the key never reaches the browser. const res = await fetch("https://anytime-capital.com/api/v1/payment-links", { method: "POST", headers: { Authorization: `Bearer ${process.env.ANYTIME_API_KEY}`, "Content-Type": "application/json", "Idempotency-Key": randomUUID(), // store it with the order and reuse it on retries }, body: JSON.stringify({ title: "Consulting — October", amountCents: 12500, singleUse: true, metadata: { orderId: "1042" }, }), }); const link = await res.json(); if (!res.ok) throw new Error(`${link.error.code}: ${link.error.message}`); console.log(link.url); // send the customer here ``` **Python** ```python import os, uuid, requests res = requests.post( "https://anytime-capital.com/api/v1/payment-links", headers={ "Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}", "Idempotency-Key": str(uuid.uuid4()), # store it with the order and reuse it on retries }, json={"title": "Consulting — October", "amountCents": 12500, "singleUse": True, "metadata": {"orderId": "1042"}}, timeout=30, ) link = res.json() if not res.ok: raise RuntimeError(f"{link['error']['code']}: {link['error']['message']}") print(link["url"]) # send the customer here ``` **Response (201)** ```json { "object": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa", "url": "https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa", "title": "Consulting — October", "description": null, "amountCents": 12500, "currency": "usd", "active": true, "singleUse": true, "shippingCents": 0, "collectShipping": false, "allowDiscountCodes": false, "successUrl": null, "confirmationMessage": null, "requireTermsConsent": false, "metadata": { "orderId": "1042" }, "items": [], "createdAt": "2026-10-01T09:30:00.000Z", "deactivatedAt": null, "allowQuantity": false, "maxQuantity": null, "customFields": [], "tipsEnabled": false, "payWhatYouWant": false, "minAmountCents": null } ``` ## 4. Send the customer to the link Redirect the customer to `url`, email or text it, or show it as a QR code. To keep customers on your site, open the same link as a Pay button or an inline checkout: see [Checkout](https://anytime-capital.com/docs/checkout.md). Add `successUrl` when you create the link to bring them back to your site afterwards. ## 5. Confirm payment with a webhook In **Settings → Developers**, choose **Add endpoint**, enter your `https://` URL and pick `payment.succeeded`. Store the signing secret as `ANYTIME_WEBHOOK_SECRET`, verify the `Anytime-Signature` header on every request, and mark order `data.metadata.orderId` paid. The full verification code for Node.js, Next.js and Python is on [Webhooks](https://anytime-capital.com/docs/webhooks.md). ## 6. Check your payments ```bash curl "https://anytime-capital.com/api/v1/payments?status=paid&limit=10" \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` > **There is no separate test mode:** API keys are live keys. To try the whole flow, create a $1.00 link, pay it with your own card, and refund it from **Orders** in the dashboard. Use **Send test event** in Settings → Developers to test your webhook endpoint without a payment. ## Next steps - [Invoices](https://anytime-capital.com/docs/invoices.md): Bill a customer by email with line items, tax and deposits. - [Errors](https://anytime-capital.com/docs/errors.md): Every error code and how to retry safely. - [Idempotency](https://anytime-capital.com/docs/idempotency.md): Retry any POST without doing it twice. - [Build with AI](https://anytime-capital.com/docs/build-with-ai.md): Let Claude or your editor's assistant write the integration. --- # Pricing > Anytime Capital Payments costs 2.75% + 30¢ per successful card payment, with no monthly, setup or PCI fees, and custom pricing at $1M+ a year. Source: https://anytime-capital.com/docs/pricing · Markdown: https://anytime-capital.com/docs/pricing.md · All docs: https://anytime-capital.com/docs/llms-full.txt | What | Price | | --- | --- | | Online card and wallet payments | **2.75% + 30¢** per successful payment | | Your first 30 days | **2.5% + 30¢** with the launch offer | | Monthly, setup and PCI fees | None | | Businesses processing $1M+ a year | Custom pricing | | API, webhooks and the MCP server | Available to every verified business account | ## Standard rate Online card and wallet payments cost 2.75% + 30¢ per successful payment. There is no monthly fee, no setup fee and no PCI fee. Each payment's `netCents` in the API is what you keep after fees. ## Launch offer 2.5% + 30¢ for your first 30 days of card payments. Claim it when you [create your business account](https://anytime-capital.com/business/get-started?offer=launch-30) or from the [pricing page](https://anytime-capital.com/business/pricing); after the 30 days, the standard rate applies. ## Custom pricing Businesses processing $1M+ a year get pricing quoted for their volume, and a dedicated payments team: - Shared Slack channel with our payments and risk team - Named account manager and quarterly pricing review - Custom pricing, payout schedules and reserve terms ## Other fees Rates shown are for US card payments. International cards, currency conversion and disputes may carry additional fees, shown in your dashboard before you accept a payment. See the full [pricing page](https://anytime-capital.com/business/pricing) for details. --- # Support > Reach Anytime Capital's US-based business team by phone, chat and email, with a dedicated payments team and shared Slack channel for larger businesses. Source: https://anytime-capital.com/docs/support · Markdown: https://anytime-capital.com/docs/support.md · All docs: https://anytime-capital.com/docs/llms-full.txt Email [hello@anytime-capital.com](mailto:hello@anytime-capital.com), call (470) 748-2530, or chat with us from the dashboard and the site. Every business account has live support from people who can see your account. ## Support for every business ### Live business support **For:** Every business account. - US-based business team by phone, chat and email - Real people who can see your account, not a ticket queue - Help moving links, invoices and customers from your old processor ### Dedicated payments team **For:** Businesses processing $1M+ a year. - Shared Slack channel with our payments and risk team - Named account manager and quarterly pricing review - Custom pricing, payout schedules and reserve terms ## Getting a fast answer on an integration - Say which endpoint or MCP tool you called, and when (with your time zone). - Include the ids involved: `pay_…`, `pl_…`, `inv_…`, `cus_…` or the webhook event's `evt_…`. - Paste the error's `code` and `message` exactly as the API returned them. - Name the API key you used by its name and last four characters. Never send the key itself. - For webhooks, check the endpoint's delivery log in Settings → Developers first: it shows every attempt and the response your server gave. > **Ask your AI assistant first:** Point Claude or your editor's assistant at [/docs/llms-full.txt](https://anytime-capital.com/docs/llms-full.txt): it holds every docs page in one file, including every error code and what to do about it. --- # Hosted checkout, Pay button and branding > Take payments with hosted payment links, a Pay button or inline checkout on your website, your own checkout domain and your logo and brand colour. Source: https://anytime-capital.com/docs/checkout · Markdown: https://anytime-capital.com/docs/checkout.md · All docs: https://anytime-capital.com/docs/llms-full.txt Every way to take a payment online runs on the same hosted checkout: a page served by Anytime Capital where your customer pays by card, Apple Pay or Google Pay, or by bank account where you have turned it on. Card details are entered there, never on your servers. ## Hosted payment links A payment link's `url` (`https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa`) is a complete checkout page. Make links in the dashboard under **Payment Links**, or with the [Payment links API](https://anytime-capital.com/docs/payment-links.md). Share the link anywhere, download its QR code, or redirect a customer to it from your own checkout. - **One-time or reusable:** a `singleUse` link closes after its first payment; a reusable one takes payments until you deactivate it. - **After payment:** send the customer to your `successUrl`, or show your `confirmationMessage` on our confirmation page. - **Buyer choices:** quantity, tips, pay what you want, discount codes, shipping and up to three checkout questions. - **Terms consent:** with a terms link in Settings → Payments, a link can require customers to agree to your terms before paying. - **Invoices** have their own pay page at the invoice's `url`, with the balance and any deposit. ## Pay button on your website **Checkout tools → Add to your website** in the dashboard writes this code for any of your links. The button is a plain link to the checkout page, so it still works where scripts are stripped; our script (`/embed/anytime-pay.js`) upgrades it to a checkout that opens over your page. **Pay button (opens checkout over your page)** ```html Pay $125.00 ``` ### Inline checkout Place the checkout itself inside your page. It grows with its content. ```html
``` ### Plain link, no script A styled link to the checkout page, in your brand colour. It works anywhere HTML can be pasted, including site builders that don't allow scripts. ```html Pay $125.00 ``` ### Prefill checkout Fill in the customer's email, apply a discount code and attach your own order reference. The reference is stored on the payment as `clientReference` and comes back in the API and in webhooks. A value the checkout can't use is ignored. ```html Pay https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa?prefilled_email=customer%40example.com&code=WELCOME10&ref=order-1042 ``` Your own script can also open a checkout: `AnytimePay.open("pl_…")`, or `AnytimePay.open("pl_…", { email, code, ref })`. ### React to a payment on your page When a payment succeeds, the element that opened the checkout (and the document) receive an `anytime-pay:succeeded` event. Unless you call `preventDefault()`, the page then goes on to the link's success URL when it has one. Use the event for the experience on the page, and the `payment.succeeded` webhook to fulfil the order. ```html ``` ## Your own checkout domain In **Settings → Domains**, connect a subdomain you own, such as `pay.yourbusiness.com`, and add the DNS record the page shows. Once it's connected your payment links, invoices and receipts open there, with Apple Pay and Google Pay set up on it for you. Your main website stays as it is: use a subdomain you don't use for anything else. A business can connect up to 2 domains. ## Your branding In **Settings → Branding & receipts**, upload your logo (PNG, JPEG, WEBP, up to 1 MB) and pick your brand colour. They appear as the merchant on your payment pages, invoices, invoice emails and receipts, with a live preview as you edit. Receipts can also show your support email and phone, your address, a thank-you message and a footer note such as your return policy. Checkout itself stays secured and processed by Anytime Capital Payments. ## Choosing an approach | You want to | Use | | --- | --- | | Sell one thing at a fixed price with no code | A reusable payment link from the dashboard, shared or as a QR code | | Add a Pay button to a site builder or landing page | The Pay button or plain link snippet | | Charge a cart total your app calculates | Create a `singleUse` link per order from your backend and redirect to its `url` | | Bill a client with line items and a due date | An [invoice](https://anytime-capital.com/docs/invoices.md) | | Take a payment face to face | [In-person QR checkout](https://anytime-capital.com/docs/in-person.md) | --- # In-person payments with a QR code > Take payments face to face with no card reader: key in an amount, show a QR code, and your customer pays on their own phone with Apple Pay, Google Pay or card. Source: https://anytime-capital.com/docs/in-person · Markdown: https://anytime-capital.com/docs/in-person.md · All docs: https://anytime-capital.com/docs/llms-full.txt Collect in person from any phone, tablet or computer with a browser. There is no card reader to buy: your customer pays on their own phone, with Apple Pay, Google Pay or their card, by scanning a QR code you show them. The product overview is at [In-person payments](https://anytime-capital.com/business/in-person-payments). ## How it works 1. Open **Checkout tools → Collect in person** in the dashboard. 2. Key in the amount ($1.00 to $10,000.00) on the keypad, or type it, and add an optional note such as the item or table. 3. Show the full-screen QR code to your customer. 4. They scan it with their phone's camera and pay on their own phone. 5. Your screen changes to **Paid** as soon as the payment goes through. Start the next sale. Each sale is a one-time payment link: it closes after its payment and appears in **Payment Links** and **Orders** like any other, with receipts in your branding. You can cancel a sale from the QR screen before it's paid. > **A standing QR code for your counter:** For a fixed price you charge all day (a class, a ticket, a set menu), make a reusable payment link and print its QR code from **Checkout tools → Add to your website → Link**. ## Build it into your own point of sale The same flow works from your own app through the API: create a `singleUse` link for the sale, render its `url` as a QR code, and mark the sale paid when the `payment.succeeded` webhook arrives with `data.source.id` equal to the link's id. ```bash curl -X POST https://anytime-capital.com/api/v1/payment-links \ -H "Authorization: Bearer $ANYTIME_API_KEY" \ -H "Idempotency-Key: pos-7781" \ -H "Content-Type: application/json" \ -d '{ "title": "Table 12", "amountCents": 4850, "singleUse": true, "metadata": { "saleId": "pos-7781" } }' ``` Then show the returned `url` as a QR code with any QR library, and deactivate the link (`POST /api/v1/payment-links/{id}/deactivate`) if the customer walks away. --- # Payment methods > The cards, wallets, bank payments and stablecoins Anytime Capital Payments accepts today, where each is offered, and the methods that are coming soon. Source: https://anytime-capital.com/docs/payment-methods · Markdown: https://anytime-capital.com/docs/payment-methods.md · All docs: https://anytime-capital.com/docs/llms-full.txt What a customer can pay with depends on how you charge them: card checkout (payment links, invoices, subscriptions, the website Pay button and in-person QR) or a stablecoin payment request. Checkout only ever shows a customer the methods they can actually use on their device. ## Available today | Group | Methods | Where | | --- | --- | --- | | Cards | Visa, Mastercard, American Express, Discover, JCB, Diners Club, UnionPay, Maestro | Every checkout, link, invoice and subscription | | Wallets | Apple Pay, Google Pay | Every checkout, including in person | | Bank | ACH bank debit | Payment links and invoices | | Stablecoins | USDC, USDT | Payment requests to your wallet on Ethereum, Solana or Tron | - **Cards, Apple Pay and Google Pay** are on by default. Apple Pay and Google Pay appear on supported devices and browsers, including on your own checkout domain. - **Bank account (ACH)** is turned on in **Settings → Payments**. It is offered on payment links and invoices, not on subscriptions, and payments clear in 3–5 business days. - **Stablecoins** aren't taken at card checkout: send the customer a stablecoin payment request from the dashboard and they pay your business wallet directly. These payments aren't part of the Payments API. ## Coming soon | Group | Methods | Status | | --- | --- | --- | | Pay later & more wallets | Klarna, Afterpay, Affirm, Cash App Pay, PayPal | Not offered at checkout yet | Don't build for these yet: checkout doesn't offer them today, and the API never reports them. ## How a method shows up in the API Each [payment](https://anytime-capital.com/docs/payments.md) reports `paymentMethod.type` (`card`, `apple_pay`, `google_pay` or `us_bank_account`, with more types possible as methods are added) and a readable `paymentMethod.label`, such as “Visa •••• 4242”. Card and card-wallet payments also carry `card.brand` and `card.last4`. Treat an unknown `type` as valid and show its `label`. > **Bank payments settle later:** A bank account payment is `pending` until it clears, then `paid` or `failed`. Ship goods or grant access on the `payment.succeeded` webhook, not when checkout finishes. ## Currency Prices on payment links and invoices are set in US dollars, in integer cents. Customers can pay with cards issued outside the US; international cards and currency conversion may carry additional fees, shown in your dashboard before you accept a payment. --- # Fraud rules, 3D Secure and refunds > Protect your Anytime Capital payments: block card countries, require 3D Secure above an amount, cap payment size, block high-risk scores and auto-refund alerts. Source: https://anytime-capital.com/docs/risk-and-3ds · Markdown: https://anytime-capital.com/docs/risk-and-3ds.md · All docs: https://anytime-capital.com/docs/llms-full.txt Every card payment is screened by our fraud checks before it's charged. On top of that, **Settings → Risk** gives you a handful of rules, each a single control with a plain sentence, plus automatic refunds for pre-dispute alerts. Owners and admins can change the rules, and the owner sets automatic refunds; rules apply to new payments. ## Payment rules | Rule | What it does | Setting | | --- | --- | --- | | Block cards from selected countries | Payments with cards issued in the countries you choose are declined. | Up to 50 countries, by where the card was issued. | | Require 3D Secure above an amount | Customers confirm larger payments with their card issuer, which usually makes the issuer, not you, responsible for fraud disputes on them. | An amount from $0.00 (every payment) up to $1,000,000.00. | | Maximum amount per payment | Card payments over this amount are declined. | An amount from $1.00 to $1,000,000.00. | | Block high-risk payments | Payments our fraud screening scores as risky are declined before the card is charged. | How strict: see the levels below. | ### High-risk levels “Block high-risk payments” declines payments by the 0–100 risk score our fraud screening gives each one: - Only the riskiest payments (score 90 or more) - High-risk payments (score 75 or more) - Elevated and high risk (score 60 or more) ## 3D Secure With “Require 3D Secure above an amount”, customers confirm larger payments with their card issuer, usually in their banking app. That usually makes the issuer, not you, responsible for fraud disputes on those payments. Set the amount to $0.00 to ask for it on every payment. ## Automatic refunds for pre-dispute alerts Card networks sometimes warn us that a customer is about to dispute a payment. A refund before the dispute is opened avoids the dispute. The owner can turn on automatic refunds in Settings → Risk with a limit from $1.00 to $10,000.00 (we suggest $100.00). - Only alerts nobody on your team has acted on, that are still open, are refunded. - The payment must be refundable and untouched: never a second refund, never a payment already refunded or disputed. - Both the payment and the amount the issuer reported must be at or under your limit. - It is always a full refund, and you receive `payment.refunded`. ## Refund approvals In **Settings → Team & approvals**, set an approval limit (up to $1,000,000.00). Refunds above it, made by anyone but the owner, wait in Orders until the owner approves or declines them, and the owner is notified. With no limit there is no approval step. ## Disputes When a customer disputes a payment you receive `dispute.opened`, the payment's `status` becomes `disputed` and `dispute.status` tracks it: `needs_response`, `under_review`, then `won`, `lost` or `closed`, with `dispute.closed` when it's decided. Respond from **Disputes** in the dashboard; your terms and refund policy from Settings → Payments can be used as evidence. --- # Payouts: every way to get your money > Move your Anytime Capital balance instantly to your business account, by RTP, FedNow, wire or ACH, over local rails in 71+ countries, or in stablecoins. Source: https://anytime-capital.com/docs/payouts · Markdown: https://anytime-capital.com/docs/payouts.md · All docs: https://anytime-capital.com/docs/llms-full.txt The money your customers pay lands in your Anytime Capital Payments balance. From there you choose where it goes and how fast, payout by payout, rather than waiting on one fixed schedule. ## Payout options | Option | Speed | What it's for | | --- | --- | --- | | **Your Anytime Capital business account** | Instant, 24/7 | Sweep settled sales into your Anytime Capital business checking in seconds, nights and weekends included, and spend it the same minute. | | **RTP and FedNow instant transfers** | Seconds, any day | Push money to any US bank account that receives instant payments, around the clock, with confirmation the moment it lands. | | **Domestic wire** | Same day | Fedwire for large or time-critical payments: closings, inventory, payroll top-ups and anything a counterparty wants by wire. | | **ACH and same-day ACH** | Same day or next day | Low-touch transfers to any US bank account for vendors, contractors and your own accounts elsewhere, scheduled or on demand. | | **Local rails in 71+ countries** | Minutes to same day | Pay suppliers in their own currency over the rail they already use (SEPA Instant, Faster Payments, PIX, SPEI, UPI, PayNow and mobile money), with SWIFT for everywhere else. | | **Stablecoins: USDC and USDT** | Minutes, including weekends | Same-day on-chain transfers to a supplier, contractor or your own wallet, with no correspondent bank in the way. | | **Crypto liquidity** | Same day | Convert balance to bitcoin, ether, solana and 38+ other assets, or crypto back to dollars, at desk-quoted rates and send it out the same day. | | **Employee and vendor cards** | Instant | Fund physical and virtual business cards straight from your payments balance, with limits per person, team or merchant. | ## Local payout rails in 71+ countries Pay suppliers, contractors and your own accounts abroad in their currency, over the rail they already use. These are the main corridors; SWIFT covers everywhere else. See [Global payouts](https://anytime-capital.com/business/global-payouts) for the product overview. | Market | Currency | Rail | | --- | --- | --- | | United States | USD | RTP, FedNow, ACH, wire | | Eurozone | EUR | SEPA Instant | | United Kingdom | GBP | Faster Payments | | Mexico | MXN | SPEI | | Brazil | BRL | PIX | | India | INR | UPI, NEFT, RTGS | | Singapore | SGD | PayNow, FAST | | Canada | CAD | Bank transfer | | Kenya | KES | Mobile money | | Colombia | COP | Bank transfer, Nequi | | Philippines | PHP | Bank transfer | | Nigeria | NGN | Bank transfer | | United Arab Emirates | AED | Bank transfer | | West & Central Africa | XOF / XAF | Mobile money | ## Keep your finances in one hub Payments, banking, cards, payouts and crypto run on one balance at Anytime Capital, so there is no merchant account to reconcile against a separate bank and no transfer between them to wait for. A sale that settles in the morning can pay a supplier, fund an employee card or move into stablecoins the same day, which means faster access to your money every day. - Sweep sales into your Anytime Capital business checking instantly, nights and weekends included. - Fund physical and virtual business cards straight from the same balance. - Hold part of your balance in USDC or USDT, or convert to and from crypto, without another provider. ## Where payouts are made **Payouts** in the dashboard shows your Anytime Capital Payments balance, every movement in and out, and the history of each payout with the payments that built it. Owners and admins can withdraw; other team members see the balance and history. > **Note:** Payouts aren't part of the REST API or the MCP server today: they're made in the dashboard, so an API key or an AI assistant can never move money out of your balance. --- # Authentication and API keys > Authenticate Anytime Capital Payments API requests with a secret key as a Bearer token: create, store, rotate and revoke keys safely. Source: https://anytime-capital.com/docs/authentication · Markdown: https://anytime-capital.com/docs/authentication.md · All docs: https://anytime-capital.com/docs/llms-full.txt Every request to the API at `https://anytime-capital.com/api/v1` carries a secret key from **Settings → Developers** in your dashboard, sent as a Bearer token. Keys start with `ak_live_` and act for your business with full access to the API, so they belong on your server only. **An authenticated request** ```bash curl "https://anytime-capital.com/api/v1/payments?limit=1" \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` ## Create a key 1. Open **Settings → Developers** in the Anytime Capital dashboard. Owners and admins can create keys. 2. Choose **Create key** and name it after where it will be used, such as “Website backend” or “Claude”. 3. Copy the key straight away. It is shown once, in full, and never again: we keep only a hash of it. 4. Store it as a secret environment variable on your server, for example `ANYTIME_API_KEY`. > **Keep keys on the server:** Never put a key in a browser, a mobile app, a public repository or a log. Anyone holding it can create payment links and invoices and read your payments and customers. If a key may have leaked, revoke it in Settings → Developers and create a new one. ## Who can use the API The API is available once your business is verified and set up for card payments. Until then every request answers `403 NOT_ENROLLED`; finish verification in **Settings → Verification**. ## Managing keys - A business can hold up to 10 active keys at once. Use one per integration so you can revoke one without touching the others. - Settings → Developers lists each key by name, its first characters and last four, when it was created and when it was last used. - Revoking a key takes effect immediately: requests with it fail with `401 UNAUTHORIZED`, exactly like an unknown key. - To rotate a key, create the new one, deploy it, then revoke the old one. ## What a key does on your behalf Everything a key creates is attributed to the team member who created the key, and every change it makes (creating a link or an invoice, sending an invoice, updating or deactivating a link) is written to your business's activity log with the key's name, so you can always see which integration did what. ## Authentication errors | Status | Code | Meaning | | --- | --- | --- | | 401 | `UNAUTHORIZED` | The `Authorization` header is missing, or the key is malformed, unknown or revoked. | | 403 | `NOT_ENROLLED` | The key is valid but the business isn't verified and set up for card payments yet. | | 429 | `RATE_LIMITED` | The key went over its rate limit. See [Rate limits](https://anytime-capital.com/docs/rate-limits.md). | ## The same key works for AI tools The MCP server at `https://anytime-capital.com/api/mcp` takes the same key in the same header, so Claude and other assistants act with exactly the access the REST API gives. See [Build with AI](https://anytime-capital.com/docs/build-with-ai.md). --- # Errors > Every Anytime Capital Payments API error has one JSON shape: a stable code to branch on and a message for people. Status codes, codes and retries. Source: https://anytime-capital.com/docs/errors · Markdown: https://anytime-capital.com/docs/errors.md · All docs: https://anytime-capital.com/docs/llms-full.txt Successful requests answer `200`, or `201` when something was created. Every error, on every endpoint, has the same shape: a stable `code` to branch on and a `message` written for people. Validation messages name the field that needs fixing. **Error response** ```json { "error": { "code": "INVALID_INPUT", "message": "amountCents: The smallest link is $1.00" } } ``` ## Status codes | Status | Codes | What happened | | --- | --- | --- | | 400 | `INVALID_INPUT`, `INVALID_JSON`, `NOT_EDITABLE`, `INVALID_IDEMPOTENCY_KEY` | The request is malformed, or a field is invalid or can't be changed. The message names the field. | | 401 | `UNAUTHORIZED` | The API key is missing, invalid or revoked. | | 403 | `NOT_ENROLLED` | Card payments aren't set up for this business yet. | | 404 | `NOT_FOUND` | No such object for your business, or no such endpoint. | | 409 | `INVOICE_CLOSED`, `TERMS_URL_REQUIRED` | The request conflicts with the object's state or your settings. | | 422 | `IDEMPOTENCY_KEY_REUSED` | The Idempotency-Key was already used with a different request. | | 429 | `RATE_LIMITED`, `TOO_SOON` | Slow down: wait the number of seconds in the `Retry-After` header. | | 5xx | `INTERNAL_ERROR`, `EMAIL_FAILED` | Something failed on our side. Retrying with the same Idempotency-Key is safe. | ## Error codes | Code | Meaning and what to do | | --- | --- | | `INVALID_INPUT` | A field is missing or invalid, e.g. `amountCents: The smallest link is $1.00`. Fix the named field. | | `INVALID_JSON` | The body isn't valid JSON. Send `Content-Type: application/json` and a JSON object. | | `NOT_EDITABLE` | You tried to change a payment link's price or another field that is fixed once a link exists. Create a new link instead. | | `INVALID_IDEMPOTENCY_KEY` | The Idempotency-Key header is empty, too long or has unprintable characters. Use a UUID. | | `UNAUTHORIZED` | Send a live key as `Authorization: Bearer ak_live_…`. | | `NOT_ENROLLED` | Finish verification in the dashboard; the API opens once card payments are set up. | | `NOT_FOUND` | The id doesn't belong to your business, or the path isn't an endpoint. Unknown paths under `/api/v1` answer this JSON too, never an HTML page. | | `INVOICE_CLOSED` | The invoice is already paid, refunded or void, so it can't be sent again. | | `TERMS_URL_REQUIRED` | `requireTermsConsent` needs a link to your terms in Settings → Payments first. | | `IDEMPOTENCY_KEY_REUSED` | Use a new Idempotency-Key for a new request. | | `RATE_LIMITED` | The key made too many requests this minute. Wait for `Retry-After`. | | `TOO_SOON` | The invoice was already emailed in the last 24 hours. Wait for `Retry-After`. | | `EMAIL_FAILED` | We couldn't send the email. Try again. | | `INTERNAL_ERROR` | Something went wrong on our side. Try again with the same Idempotency-Key. | ## Handling errors - Branch on `error.code`, never on the message text, which may be reworded. - Show `error.message` to the person who can fix it; it is written to be read. - On `429`, wait the number of seconds in `Retry-After`, then retry. - On `5xx` or a network failure, retry the same request with the same `Idempotency-Key`: you get the original result if the first attempt went through. - Don't retry other `4xx` errors unchanged: fix the request first. **A small client with retries (Node.js 18+)** ```javascript const API = "https://anytime-capital.com/api/v1"; export async function anytime(path, { method = "GET", body, idempotencyKey } = {}) { for (let attempt = 1; ; attempt++) { const res = await fetch(API + path, { method, headers: { Authorization: `Bearer ${process.env.ANYTIME_API_KEY}`, ...(body ? { "Content-Type": "application/json" } : {}), ...(idempotencyKey ? { "Idempotency-Key": idempotencyKey } : {}), }, body: body ? JSON.stringify(body) : undefined, }); const data = await res.json(); if (res.ok) return data; const retryable = res.status === 429 || res.status >= 500; if (!retryable || attempt === 3) { const error = new Error(`${data.error.code}: ${data.error.message}`); error.code = data.error.code; error.status = res.status; throw error; } const wait = Number(res.headers.get("Retry-After") ?? 2 ** attempt); await new Promise((resolve) => setTimeout(resolve, wait * 1000)); } } ``` --- # Pagination > List endpoints in the Anytime Capital Payments API return the newest objects first, a page at a time. Page with limit and the opaque nextCursor. Source: https://anytime-capital.com/docs/pagination · Markdown: https://anytime-capital.com/docs/pagination.md · All docs: https://anytime-capital.com/docs/llms-full.txt Every list endpoint (payments, payment links, invoices and customers) returns the newest objects first, a page at a time, in one shape. Pass `limit` (1–100, default 25) and, for the next page, the previous page's `nextCursor` as `cursor`. When `hasMore` is `false` you have everything. **A page** ```json { "object": "list", "data": [ { "object": "payment", "id": "pay_7Hq2LmX9cR4tVb", "…": "…" } ], "hasMore": true, "nextCursor": "pay_7Hq2LmX9cR4tVb" } ``` | Field | Type | Meaning | | --- | --- | --- | | `object` | string | Always `"list"`. | | `data` | array | This page's objects, newest first. | | `hasMore` | boolean | Whether there is another page after this one. | | `nextCursor` | string or null | The id of the last object on this page; pass it as `cursor` to get the next page. Null on the last page. | ## Fetching the next page ```bash curl "https://anytime-capital.com/api/v1/payments?limit=100&cursor=pay_7Hq2LmX9cR4tVb" \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` A cursor is only valid for the list it came from and for your own business. An empty, over-long or unknown cursor answers `400 INVALID_INPUT` with the message `Invalid cursor.`; a `limit` outside 1–100 answers the same code naming `limit`. ## Reading every page **Node.js 18+** ```javascript async function* listAll(path, params = {}) { let cursor = null; do { const query = new URLSearchParams({ ...params, limit: "100", ...(cursor ? { cursor } : {}) }); const res = await fetch(`https://anytime-capital.com/api/v1${path}?${query}`, { headers: { Authorization: `Bearer ${process.env.ANYTIME_API_KEY}` }, }); const page = await res.json(); if (!res.ok) throw new Error(`${page.error.code}: ${page.error.message}`); yield* page.data; cursor = page.hasMore ? page.nextCursor : null; } while (cursor); } for await (const payment of listAll("/payments", { status: "paid", createdFrom: "2026-10-01" })) { console.log(payment.id, payment.amountCents); } ``` > **Tip:** Each page is one request against your [rate limit](https://anytime-capital.com/docs/rate-limits.md). Use the largest `limit` you need and filter on the server (`status`, `createdFrom`, `createdTo`, `email`, `active`) rather than paging through everything. --- # Idempotent requests > Send an Idempotency-Key header on every POST to the Anytime Capital Payments API so a retried request never creates a second link, invoice or email. Source: https://anytime-capital.com/docs/idempotency · Markdown: https://anytime-capital.com/docs/idempotency.md · All docs: https://anytime-capital.com/docs/llms-full.txt Every `POST` accepts an `Idempotency-Key` header: any unique string of 1 to 255 printable characters, such as a UUID. If a request times out or the connection drops, send it again with the same key. You get the original response back, with the header `Idempotent-Replayed: true`, instead of creating a second payment link or emailing an invoice twice. ```bash curl -X POST https://anytime-capital.com/api/v1/payment-links \ -H "Authorization: Bearer $ANYTIME_API_KEY" \ -H "Idempotency-Key: 5f1c3e0a-7b2d-4c8e-9a61-2d4b8f0e7c13" \ -H "Content-Type: application/json" \ -d '{"title": "Consulting — October", "amountCents": 12500}' ``` ## How keys behave | Situation | What you get | | --- | --- | | First request with a key | The request runs and, if it succeeds, its response is remembered with the key. | | Same key, same request, within the window | The remembered response, with `Idempotent-Replayed: true`. Nothing runs again. | | Same key, different body or endpoint | `422 IDEMPOTENCY_KEY_REUSED`. Use a new key for a new request. | | Same key while the first request is still running | The second request waits for the first, then gets its result. | | The first request failed | Errors are not remembered, so you can fix the problem and retry with the same key. | | More than 24 hours later | The key is forgotten and the request runs as new. | | Empty, too long or unprintable key | `400 INVALID_IDEMPOTENCY_KEY`. | | No header | The request simply runs. It is still recorded in your activity log. | ## Choosing keys - Generate one key per operation you mean to happen once, such as “create the payment link for order 1042”, and store it with that order before you call the API. - Reuse the stored key on every retry of that operation, including after your own process restarts. - Never reuse a key for a different operation, even for the same customer. - Keys are scoped to your business: another business using the same string doesn't collide with you. > **MCP tools take the same key:** The MCP tools that change something (create, update, deactivate and send) accept an `idempotencyKey` argument and send it as this header, with the same behaviour. See [Build with AI](https://anytime-capital.com/docs/build-with-ai.md). --- # Rate limits > Each Anytime Capital Payments API key may make 100 requests a minute. Over that, requests answer 429 with a Retry-After header in seconds. Source: https://anytime-capital.com/docs/rate-limits · Markdown: https://anytime-capital.com/docs/rate-limits.md · All docs: https://anytime-capital.com/docs/llms-full.txt Each API key may make 100 requests a minute, counted per key, in fixed one-minute windows. MCP tool calls count against the key they use, exactly like REST requests. Past the limit, requests answer `429` with a `Retry-After` header giving the seconds to wait. **Over the limit** ```http HTTP/1.1 429 Too Many Requests Retry-After: 42 Content-Type: application/json { "error": { "code": "RATE_LIMITED", "message": "Too many requests. Each key may make 100 requests a minute." } } ``` ## Staying under the limit - Use webhooks to learn about payments instead of polling the list endpoints. - Page with the largest `limit` you need (up to 100) and filter on the server. - Give each integration its own key: each key has its own limit, and you can revoke one without the others. - On `429`, wait `Retry-After` seconds before retrying; don't retry in a tight loop. ## Other limits | Limit | Answer | | --- | --- | | An invoice can be emailed at most once every 24 hours (Send invoice) | `429 TOO_SOON` with `Retry-After` | | A payment link's price is $1.00 to $10,000.00 | `400 INVALID_INPUT` | | An invoice totals $1.00 to $100,000.00 | `400 INVALID_INPUT` | --- # Payment links API > Create, list, retrieve, update and deactivate hosted payment links with the Anytime Capital Payments API, and prefill checkout from the link's URL. Source: https://anytime-capital.com/docs/payment-links · Markdown: https://anytime-capital.com/docs/payment-links.md · All docs: https://anytime-capital.com/docs/llms-full.txt A payment link is a hosted checkout page for one price. Share its `url` by text, email, DM or QR code, put it behind a button on your site, or create one per order from your backend and send the customer straight to it. Customers pay by card, Apple Pay or Google Pay, and by bank account where you have turned it on. Links made for invoices and subscription plans are managed with those and don't appear here. ## The payment link object ```json { "object": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa", "url": "https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa", "title": "Consulting — October", "description": "Two strategy sessions", "amountCents": 12500, "currency": "usd", "active": true, "singleUse": false, "shippingCents": 0, "collectShipping": false, "allowDiscountCodes": false, "successUrl": null, "confirmationMessage": "Thanks! We'll email your session times within a day.", "requireTermsConsent": false, "metadata": { "campaign": "fall-launch" }, "items": [], "createdAt": "2026-10-01T09:30:00.000Z", "deactivatedAt": null, "allowQuantity": false, "maxQuantity": null, "customFields": [], "tipsEnabled": false, "payWhatYouWant": false, "minAmountCents": null } ``` | Field | Type | Description | | --- | --- | --- | | `id` | string | `pl_` followed by 20 letters and digits. | | `url` | string | The pay page. Share it, redirect to it or embed it. | | `title`, `description` | string | What the customer sees at the top of checkout. | | `amountCents` | integer | The price in cents. With `payWhatYouWant`, the suggested amount. | | `currency` | string | `usd`. | | `active` | boolean | False once the link is deactivated (`deactivatedAt` is set). | | `singleUse` | boolean | The link closes after its first successful payment. | | `shippingCents`, `collectShipping` | integer, boolean | Flat shipping added to each payment; whether a shipping address is asked for. | | `allowDiscountCodes` | boolean | Customers may enter one of your discount codes. | | `successUrl`, `confirmationMessage` | string or null | Where customers go, or what they read, after paying. A link has at most one of them. | | `requireTermsConsent` | boolean | Customers must agree to your terms before paying. | | `metadata` | object | Your own key/value pairs, copied onto each payment made on the link. | | `items` | array | Catalog products, for links made in the dashboard from products. Empty for single-price links. | | `allowQuantity`, `maxQuantity` | boolean, integer or null | Customers choose how many, up to `maxQuantity`. | | `customFields` | array | Questions asked at checkout. | | `tipsEnabled` | boolean | A tip is offered at checkout. | | `payWhatYouWant`, `minAmountCents` | boolean, integer or null | Customers choose the amount, at least `minAmountCents`. | | `createdAt`, `deactivatedAt` | string, string or null | ISO 8601 times in UTC. | ## Endpoints ### List payment links `GET /api/v1/payment-links` Your payment links, newest first, each with the choices it offers the buyer. **Query** | Name | Type | Required | Description | | --- | --- | --- | --- | | `active` | boolean | no | `true` for links taking payments, `false` for deactivated ones. | | `limit` | integer | no | How many objects per page. See [Pagination](https://anytime-capital.com/docs/pagination.md). | | `cursor` | string | no | The previous page's `nextCursor`, for the page after it. | **Request** ```bash curl "https://anytime-capital.com/api/v1/payment-links?active=true&limit=10" \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` **Response** (200) ```json { "object": "list", "data": [ { "object": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa", "url": "https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa", "title": "Consulting — October", "description": "Two strategy sessions", "amountCents": 12500, "currency": "usd", "active": true, "singleUse": false, "shippingCents": 0, "collectShipping": false, "allowDiscountCodes": false, "successUrl": null, "confirmationMessage": "Thanks! We'll email your session times within a day.", "requireTermsConsent": false, "metadata": { "campaign": "fall-launch" }, "items": [], "createdAt": "2026-10-01T09:30:00.000Z", "deactivatedAt": null, "allowQuantity": false, "maxQuantity": null, "customFields": [], "tipsEnabled": false, "payWhatYouWant": false, "minAmountCents": null } ], "hasMore": false, "nextCursor": null } ``` ### Create a payment link `POST /api/v1/payment-links` Creates a single-price link and answers `201` with it. Supports Idempotency-Key. **Body** | Name | Type | Required | Description | | --- | --- | --- | --- | | `title` | string | yes | What the customer is paying for, up to 120 characters. | | `amountCents` | integer | yes | The price, from 100 ($1.00) to 1000000 ($10,000.00). | | `description` | string | no | Shown under the title, up to 500 characters. | | `singleUse` | boolean | no | Close the link after its first successful payment. Use it for one link per order. Default `false`. | | `shippingCents` | integer | no | Flat shipping added to each payment, up to $1,000.00. Default 0. | | `collectShipping` | boolean | no | Ask for a shipping address. Default `false`. | | `allowDiscountCodes` | boolean | no | Let customers enter one of your discount codes. Default `false`. | | `successUrl` | string | no | An `https://` page on your site to send customers to after paying. Not with `confirmationMessage`. | | `confirmationMessage` | string | no | Up to 500 characters shown on our confirmation page after paying, instead of a `successUrl`. | | `requireTermsConsent` | boolean | no | Customers must tick “I agree to the terms” before paying. Needs a terms link in Settings → Payments (`409 TERMS_URL_REQUIRED` otherwise). Default `false`. | | `metadata` | object | no | Up to 20 of your own key/value pairs, e.g. `{"orderId": "1042"}`. Keys: up to 40 letters, numbers, `-` and `_`; values: text up to 500 characters. Copied onto each payment; customers never see it. | | `allowQuantity` | boolean | no | Let customers choose how many. Default `false`. | | `maxQuantity` | integer | no | With `allowQuantity`: the most per payment, 1–99. Default 10. | | `tipsEnabled` | boolean | no | Offer a tip (10%, 15%, 20% or an amount). Default `false`. | | `payWhatYouWant` | boolean | no | Customers choose the amount; `amountCents` is the suggestion. Not with quantity, tips or discount codes. Default `false`. | | `minAmountCents` | integer | no | With `payWhatYouWant`: the smallest amount. Default 100. | | `customFields` | array | no | Up to 3 checkout questions: `{ id, label, type, options, required }` with a label up to 60 characters, `type` one of `text`, `long_text`, `phone` or `dropdown`, and 2–10 `options` for a dropdown. | **Headers** | Header | Type | Required | Description | | --- | --- | --- | --- | | `Idempotency-Key` | string | no | Recommended. See [Idempotency](https://anytime-capital.com/docs/idempotency.md). | **Request** ```bash curl -X POST https://anytime-capital.com/api/v1/payment-links \ -H "Authorization: Bearer $ANYTIME_API_KEY" \ -H "Idempotency-Key: order-1042-link" \ -H "Content-Type: application/json" \ -d '{ "title": "Consulting — October", "description": "Two strategy sessions", "amountCents": 12500, "metadata": { "campaign": "fall-launch" } }' ``` **Response** (201) ```json { "object": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa", "url": "https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa", "title": "Consulting — October", "description": "Two strategy sessions", "amountCents": 12500, "currency": "usd", "active": true, "singleUse": false, "shippingCents": 0, "collectShipping": false, "allowDiscountCodes": false, "successUrl": null, "confirmationMessage": "Thanks! We'll email your session times within a day.", "requireTermsConsent": false, "metadata": { "campaign": "fall-launch" }, "items": [], "createdAt": "2026-10-01T09:30:00.000Z", "deactivatedAt": null, "allowQuantity": false, "maxQuantity": null, "customFields": [], "tipsEnabled": false, "payWhatYouWant": false, "minAmountCents": null } ``` > **Note:** Catalog products (`items`) can't be sent through the API yet: send `amountCents` for a single price. Links built from products in the dashboard still list and retrieve with their `items`. ### Retrieve a payment link `GET /api/v1/payment-links/{id}` Returns the link, or `404 NOT_FOUND` if it isn't one of yours. **Request** ```bash curl https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` **Response** (200) ```json { "object": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa", "url": "https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa", "title": "Consulting — October", "description": "Two strategy sessions", "amountCents": 12500, "currency": "usd", "active": true, "singleUse": false, "shippingCents": 0, "collectShipping": false, "allowDiscountCodes": false, "successUrl": null, "confirmationMessage": "Thanks! We'll email your session times within a day.", "requireTermsConsent": false, "metadata": { "campaign": "fall-launch" }, "items": [], "createdAt": "2026-10-01T09:30:00.000Z", "deactivatedAt": null, "allowQuantity": false, "maxQuantity": null, "customFields": [], "tipsEnabled": false, "payWhatYouWant": false, "minAmountCents": null } ``` ### Update a payment link `POST /api/v1/payment-links/{id}` Send only what changes; everything else stays as it is. Changes apply to the link straight away; payments already made keep what they were charged. Supports Idempotency-Key. **Body** | Name | Type | Required | Description | | --- | --- | --- | --- | | `title, description` | string | no | As on create. A `null` description removes it. | | `successUrl, confirmationMessage` | string or null | no | What customers see after paying. Setting one clears the other; `null` clears it. | | `requireTermsConsent` | boolean | no | Turning it on needs a terms link in Settings → Payments. | | `metadata` | object or null | no | Replaces all of the link's metadata; `null` or `{}` clears it. | | `customFields` | array | no | Replaces the link's checkout questions; `[]` removes them. | | `tipsEnabled, allowQuantity, maxQuantity, collectShipping` | boolean / integer | no | As on create. Quantity and tips stay off on a link where customers choose the amount. | **Request** ```bash curl -X POST https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa \ -H "Authorization: Bearer $ANYTIME_API_KEY" \ -H "Idempotency-Key: 1d2c4b6a-update-title" \ -H "Content-Type: application/json" \ -d '{ "title": "Consulting — November", "metadata": { "campaign": "winter" } }' ``` **Response** (200) ```json { "object": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa", "url": "https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa", "title": "Consulting — November", "description": "Two strategy sessions", "amountCents": 12500, "currency": "usd", "active": true, "singleUse": false, "shippingCents": 0, "collectShipping": false, "allowDiscountCodes": false, "successUrl": null, "confirmationMessage": "Thanks! We'll email your session times within a day.", "requireTermsConsent": false, "metadata": { "campaign": "winter" }, "items": [], "createdAt": "2026-10-01T09:30:00.000Z", "deactivatedAt": null, "allowQuantity": false, "maxQuantity": null, "customFields": [], "tipsEnabled": false, "payWhatYouWant": false, "minAmountCents": null } ``` The price is fixed once a link exists: `amountCents`, `items`, `payWhatYouWant`, `minAmountCents`, `shippingCents`, `allowDiscountCodes` and `singleUse` answer `400 NOT_EDITABLE`. Create a new link to sell at a new price, and deactivate the old one. ### Deactivate a payment link `POST /api/v1/payment-links/{id}/deactivate` The link stops taking payments; anyone who opens it sees that it's closed. Payments already made are unaffected. Deactivating a link that is already off returns it unchanged. Supports Idempotency-Key. **Request** ```bash curl -X POST https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa/deactivate \ -H "Authorization: Bearer $ANYTIME_API_KEY" \ -H "Idempotency-Key: deactivate-pl_4kTz8Q" ``` **Response** (200) ```json { "object": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa", "url": "https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa", "title": "Consulting — October", "description": "Two strategy sessions", "amountCents": 12500, "currency": "usd", "active": false, "singleUse": false, "shippingCents": 0, "collectShipping": false, "allowDiscountCodes": false, "successUrl": null, "confirmationMessage": "Thanks! We'll email your session times within a day.", "requireTermsConsent": false, "metadata": { "campaign": "fall-launch" }, "items": [], "createdAt": "2026-10-01T09:30:00.000Z", "deactivatedAt": "2026-10-16T10:00:00.000Z", "allowQuantity": false, "maxQuantity": null, "customFields": [], "tipsEnabled": false, "payWhatYouWant": false, "minAmountCents": null } ``` ## Prefill checkout Fill in details for your customer by adding parameters to a link's `url`. A value that isn't valid is ignored, never an error. | Parameter | What it does | | --- | --- | | `prefilled_email` | The customer's email for their receipt. They can still change it. | | `code` | One of your discount codes, applied when checkout opens, on links that accept codes. | | `ref` | Your own reference for the payment, up to 200 letters, numbers, spaces and `_ . : / # @ + -`. Stored on the payment as `clientReference` and returned by the API and in webhooks. | ```text https://anytime-capital.com/pay/business/pl_4kTz8QwN2xYb6RcD1mPa?prefilled_email=jordan%40example.com&code=FALL20&ref=order_1042 ``` On your own website, the Pay button and the inline checkout take the same values as `data-email`, `data-code` and `data-ref`. See [Checkout](https://anytime-capital.com/docs/checkout.md). ## One link per order For a cart or an order whose total you work out yourself, create a `singleUse` link per order with the order id in `metadata`, send the customer to its `url`, and mark the order paid when the `payment.succeeded` webhook arrives: `data.metadata` carries your order id and `data.source.id` the link id. Use a stored Idempotency-Key so a retry never makes a second link. For a fixed price you sell again and again, one reusable link with `?ref=` per customer does the same job. --- # Invoices API > Create, list, retrieve and send invoices with the Anytime Capital Payments API. Totals are calculated for you; customers pay by card at the invoice's URL. Source: https://anytime-capital.com/docs/invoices · Markdown: https://anytime-capital.com/docs/invoices.md · All docs: https://anytime-capital.com/docs/llms-full.txt Invoices are emailed from Anytime Capital in your branding and paid at their `url`. Totals are calculated from the line items, an optional discount and tax. A customer can pay a deposit first, and automatic reminders go out around the due date unless you turn them off. ## The invoice object ```json { "object": "invoice", "id": "inv_9QmR2vX7pLk3TzW8cN4b", "number": "INV-0042", "url": "https://anytime-capital.com/pay/invoice/inv_9QmR2vX7pLk3TzW8cN4b", "status": "open", "overdue": false, "customer": { "name": "Northwind LLC", "email": "ap@northwind.example" }, "lineItems": [ { "description": "Website redesign", "quantity": 1, "unitCents": 450000 } ], "subtotalCents": 450000, "discountCents": 0, "taxBps": 825, "taxCents": 37125, "totalCents": 487125, "amountPaidCents": 0, "balanceCents": 487125, "depositCents": null, "currency": "usd", "dueDate": "2026-11-15", "notes": "Thank you for your business.", "paidVia": null, "paidAt": null, "paymentId": null, "sentAt": "2026-10-16T14:00:00.000Z", "voidedAt": null, "createdAt": "2026-10-16T14:00:00.000Z" } ``` | Field | Type | Description | | --- | --- | --- | | `id`, `number` | string | `inv_` followed by 20 letters and digits; your sequential invoice number, e.g. `INV-0042`. | | `url` | string | Where the customer views and pays the invoice. | | `status` | string | One of `open`, `partially_paid`, `paid`, `refunded`, `void`: `partially_paid` after a deposit or part payment, `refunded` when paid and then refunded in full. | | `overdue` | boolean | True while something is owed past the due date. | | `customer` | object | `name` and `email`. | | `lineItems` | array | `description`, `quantity` and `unitCents` per line. | | `subtotalCents`, `discountCents`, `taxBps`, `taxCents`, `totalCents` | integer | Totals, calculated for you. Tax applies after the discount; `taxBps` 825 is 8.25%. | | `amountPaidCents`, `balanceCents` | integer | Paid so far (by card or recorded by you) and still owed. | | `depositCents` | integer or null | The deposit the customer may pay first. | | `dueDate` | string | `YYYY-MM-DD`. | | `paidVia`, `paidAt`, `paymentId` | string or null | How and when it was settled, and the card payment that paid it, if any. | | `sentAt`, `voidedAt`, `createdAt` | string or null | ISO 8601 times in UTC. | ## Endpoints ### List invoices `GET /api/v1/invoices` Your invoices, newest first. **Query** | Name | Type | Required | Description | | --- | --- | --- | --- | | `status` | string | no | Only invoices with this status: `open`, `partially_paid`, `paid`, `refunded`, `void`. | | `limit` | integer | no | How many objects per page. See [Pagination](https://anytime-capital.com/docs/pagination.md). | | `cursor` | string | no | The previous page's `nextCursor`, for the page after it. | **Request** ```bash curl "https://anytime-capital.com/api/v1/invoices?status=open" \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` **Response** (200) ```json { "object": "list", "data": [ { "object": "invoice", "id": "inv_9QmR2vX7pLk3TzW8cN4b", "number": "INV-0042", "url": "https://anytime-capital.com/pay/invoice/inv_9QmR2vX7pLk3TzW8cN4b", "status": "open", "overdue": false, "customer": { "name": "Northwind LLC", "email": "ap@northwind.example" }, "lineItems": [ { "description": "Website redesign", "quantity": 1, "unitCents": 450000 } ], "subtotalCents": 450000, "discountCents": 0, "taxBps": 825, "taxCents": 37125, "totalCents": 487125, "amountPaidCents": 0, "balanceCents": 487125, "depositCents": null, "currency": "usd", "dueDate": "2026-11-15", "notes": "Thank you for your business.", "paidVia": null, "paidAt": null, "paymentId": null, "sentAt": "2026-10-16T14:00:00.000Z", "voidedAt": null, "createdAt": "2026-10-16T14:00:00.000Z" } ], "hasMore": false, "nextCursor": null } ``` ### Create an invoice `POST /api/v1/invoices` Creates an invoice, emails it to the customer unless `send` is `false`, and answers `201`. Totals run from $1.00 to $100,000.00. Supports Idempotency-Key. **Body** | Name | Type | Required | Description | | --- | --- | --- | --- | | `customerName` | string | yes | Who the invoice is for, up to 200 characters. | | `customerEmail` | string | yes | Where we email it. | | `lineItems` | array | yes | 1–50 lines of `description` (up to 200 characters), `quantity` (1–10000) and `unitCents`. | | `dueDate` | string | yes | `YYYY-MM-DD`. | | `discountCents` | integer | no | Taken off the subtotal before tax. Default 0. | | `taxBps` | integer | no | Tax in basis points, 0–3000: 825 is 8.25%. Default 0. | | `notes` | string | no | Printed on the invoice, up to 2,000 characters. | | `deposit` | object | no | `{"type": "amount", "amountCents": 50000}` or `{"type": "percent", "percent": 25}`: what the customer may pay first. At least $1.00, and less than the total with at least $1.00 left to pay. | | `remindersEnabled` | boolean | no | Automatic reminders before, on and after the due date. Default `true`. | | `send` | boolean | no | Email the invoice now. Default `true`; if the email fails, `sentAt` stays null and you can call Send. | | `saveCustomer` | boolean | no | Also add the customer to your customer list (skipped if the email is already there). Default `false`. | **Request** ```bash curl -X POST https://anytime-capital.com/api/v1/invoices \ -H "Authorization: Bearer $ANYTIME_API_KEY" \ -H "Idempotency-Key: invoice-northwind-oct" \ -H "Content-Type: application/json" \ -d '{ "customerName": "Northwind LLC", "customerEmail": "ap@northwind.example", "lineItems": [ { "description": "Website redesign", "quantity": 1, "unitCents": 450000 } ], "taxBps": 825, "dueDate": "2026-11-15" }' ``` **Response** (201) ```json { "object": "invoice", "id": "inv_9QmR2vX7pLk3TzW8cN4b", "number": "INV-0042", "url": "https://anytime-capital.com/pay/invoice/inv_9QmR2vX7pLk3TzW8cN4b", "status": "open", "overdue": false, "customer": { "name": "Northwind LLC", "email": "ap@northwind.example" }, "lineItems": [ { "description": "Website redesign", "quantity": 1, "unitCents": 450000 } ], "subtotalCents": 450000, "discountCents": 0, "taxBps": 825, "taxCents": 37125, "totalCents": 487125, "amountPaidCents": 0, "balanceCents": 487125, "depositCents": null, "currency": "usd", "dueDate": "2026-11-15", "notes": "Thank you for your business.", "paidVia": null, "paidAt": null, "paymentId": null, "sentAt": "2026-10-16T14:00:00.000Z", "voidedAt": null, "createdAt": "2026-10-16T14:00:00.000Z" } ``` > **Note:** Recurring invoices are set up in the dashboard. Sending `recurrence` to the API answers `400 INVALID_INPUT`. ### Retrieve an invoice `GET /api/v1/invoices/{id}` Returns the invoice, or `404 NOT_FOUND` if it isn't one of yours. **Request** ```bash curl https://anytime-capital.com/api/v1/invoices/inv_9QmR2vX7pLk3TzW8cN4b \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` **Response** (200) ```json { "object": "invoice", "id": "inv_9QmR2vX7pLk3TzW8cN4b", "number": "INV-0042", "url": "https://anytime-capital.com/pay/invoice/inv_9QmR2vX7pLk3TzW8cN4b", "status": "open", "overdue": false, "customer": { "name": "Northwind LLC", "email": "ap@northwind.example" }, "lineItems": [ { "description": "Website redesign", "quantity": 1, "unitCents": 450000 } ], "subtotalCents": 450000, "discountCents": 0, "taxBps": 825, "taxCents": 37125, "totalCents": 487125, "amountPaidCents": 0, "balanceCents": 487125, "depositCents": null, "currency": "usd", "dueDate": "2026-11-15", "notes": "Thank you for your business.", "paidVia": null, "paidAt": null, "paymentId": null, "sentAt": "2026-10-16T14:00:00.000Z", "voidedAt": null, "createdAt": "2026-10-16T14:00:00.000Z" } ``` ### Send an invoice `POST /api/v1/invoices/{id}/send` Emails the invoice to the customer: the invoice itself the first time, a reminder after that. At most once every 24 hours per invoice (`429 TOO_SOON` with `Retry-After` otherwise), and only while something is owed (`409 INVOICE_CLOSED`). Supports Idempotency-Key. **Request** ```bash curl -X POST https://anytime-capital.com/api/v1/invoices/inv_9QmR2vX7pLk3TzW8cN4b/send \ -H "Authorization: Bearer $ANYTIME_API_KEY" \ -H "Idempotency-Key: 1b7e5c2a-send-inv-0042" ``` **Response** (200) ```json { "object": "invoice", "id": "inv_9QmR2vX7pLk3TzW8cN4b", "number": "INV-0042", "url": "https://anytime-capital.com/pay/invoice/inv_9QmR2vX7pLk3TzW8cN4b", "status": "open", "overdue": false, "customer": { "name": "Northwind LLC", "email": "ap@northwind.example" }, "lineItems": [ { "description": "Website redesign", "quantity": 1, "unitCents": 450000 } ], "subtotalCents": 450000, "discountCents": 0, "taxBps": 825, "taxCents": 37125, "totalCents": 487125, "amountPaidCents": 0, "balanceCents": 487125, "depositCents": null, "currency": "usd", "dueDate": "2026-11-15", "notes": "Thank you for your business.", "paidVia": null, "paidAt": null, "paymentId": null, "sentAt": "2026-10-16T14:00:00.000Z", "voidedAt": null, "createdAt": "2026-10-16T14:00:00.000Z" } ``` ## Knowing when an invoice is paid Subscribe to the `invoice.paid` webhook, which carries the invoice object once it is paid in full, by card or recorded as paid in the dashboard. Each card payment on an invoice, deposits included, also sends `payment.succeeded` with `source.type` `invoice` and `source.id` the invoice id. See [Webhooks](https://anytime-capital.com/docs/webhooks.md). --- # Customers API > List your saved customers with the Anytime Capital Payments API, newest first, or find one by email address to match payments and invoices to them. Source: https://anytime-capital.com/docs/customers · Markdown: https://anytime-capital.com/docs/customers.md · All docs: https://anytime-capital.com/docs/llms-full.txt Customers are the clients saved on your **Customers** page in the dashboard. The API reads them: list them newest first, or find one by email. Customers are added in the dashboard, or from the API by creating an invoice with `saveCustomer: true`. ## The customer object ```json { "object": "customer", "id": "cus_1042", "name": "Jordan Lee", "email": "jordan@example.com", "phone": "+1 555 0100", "company": "Lee Studio", "notes": null, "createdAt": "2026-09-02T11:20:00.000Z" } ``` | Field | Type | Description | | --- | --- | --- | | `id` | string | `cus_` followed by digits. | | `name` | string | The customer's name. | | `email`, `phone`, `company`, `notes` | string or null | What you saved for them. | | `createdAt` | string | ISO 8601 time in UTC. | ## Endpoints ### List customers `GET /api/v1/customers` Your saved customers, newest first. Customers you removed are never listed. **Query** | Name | Type | Required | Description | | --- | --- | --- | --- | | `email` | string | no | Only customers with this email address, in any letter case. | | `limit` | integer | no | How many objects per page. See [Pagination](https://anytime-capital.com/docs/pagination.md). | | `cursor` | string | no | The previous page's `nextCursor`, for the page after it. | **Request** ```bash curl "https://anytime-capital.com/api/v1/customers?email=jordan@example.com" \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` **Response** (200) ```json { "object": "list", "data": [ { "object": "customer", "id": "cus_1042", "name": "Jordan Lee", "email": "jordan@example.com", "phone": "+1 555 0100", "company": "Lee Studio", "notes": null, "createdAt": "2026-09-02T11:20:00.000Z" } ], "hasMore": false, "nextCursor": null } ``` > **Note:** There is no endpoint to create, update or delete a customer yet. Payments and invoices carry the customer's name and email themselves, so you can match them to your own records without one. --- # Payments API > List and retrieve payments with the Anytime Capital Payments API: status, amounts, net after fees, payment method, customer, metadata and disputes. Source: https://anytime-capital.com/docs/payments · Markdown: https://anytime-capital.com/docs/payments.md · All docs: https://anytime-capital.com/docs/llms-full.txt A payment is one charge — by card, card wallet or bank account — on a payment link, an invoice or a subscription. Payments are created by your customers at checkout; the API reads them. Refunds and dispute responses are handled from **Orders** and **Disputes** in the dashboard, and each one is reported by webhook. ## The payment object ```json { "object": "payment", "id": "pay_7Hq2LmX9cR4tVb", "status": "paid", "amountCents": 12500, "amountRefundedCents": 0, "netCents": 12088, "currency": "usd", "description": "Consulting — October", "source": { "type": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa" }, "customer": { "name": "Jordan Lee", "email": "jordan@example.com", "country": "US" }, "card": { "brand": "visa", "last4": "4242" }, "paymentMethod": { "type": "card", "label": "Visa •••• 4242" }, "clientReference": "order_1042", "metadata": { "campaign": "fall-launch" }, "amountDetails": { "subtotalCents": 12500, "discountCents": 0, "shippingCents": 0, "taxCents": 0, "customerFeeCents": 0 }, "dispute": null, "failureMessage": null, "createdAt": "2026-10-14T16:02:11.000Z", "paidAt": "2026-10-14T16:02:15.000Z" } ``` | Field | Type | Description | | --- | --- | --- | | `id` | string | `pay_` followed by letters and digits. | | `status` | string | One of `paid`, `pending`, `failed`, `canceled`, `refunded`, `partially_refunded`, `disputed`. | | `amountCents`, `amountRefundedCents` | integer | What was charged, and how much of it has been refunded so far. | | `netCents` | integer or null | What you keep after fees, once known. | | `description` | string | The payment link's title, or `Invoice INV-…`. | | `source` | object | `type` is `payment_link`, `invoice`, `subscription` or `manual`; `id` is that object's id (null for manual). | | `customer` | object | `name`, `email` and `country`. | | `paymentMethod` | object or null | `type` (`card`, `apple_pay`, `google_pay` or `us_bank_account`; more may be added) and a readable `label` such as “Visa •••• 4242”. Null until the method is known. | | `card` | object or null | The card's `brand` and `last4`, for cards and card wallets. | | `clientReference` | string or null | Your own reference, from `?ref=` on the link or `data-ref` on your website's Pay button. | | `metadata` | object | The payment link's metadata when the payment was made; `{}` when it had none. | | `amountDetails` | object | `subtotalCents`, `discountCents`, `shippingCents`, `taxCents` and `customerFeeCents`. | | `dispute` | object or null | `status` is `needs_response`, `under_review`, `won`, `lost` or `closed`. | | `failureMessage` | string or null | Why a failed payment failed. | | `createdAt`, `paidAt` | string, string or null | ISO 8601 times in UTC. | > **Bank account payments take days:** A payment by bank account (`us_bank_account`) stays `pending` for 3–5 business days before it is `paid` or `failed`. Fulfil on the `payment.succeeded` webhook, not when checkout finishes. ## Endpoints ### List payments `GET /api/v1/payments` Your payments, newest first. **Query** | Name | Type | Required | Description | | --- | --- | --- | --- | | `status` | string | no | Only payments with this status: `paid`, `pending`, `failed`, `canceled`, `refunded`, `partially_refunded`, `disputed`. | | `createdFrom` | date or date-time | no | Created at or after, e.g. `2026-10-01` (midnight UTC) or `2026-10-01T12:00:00Z`. | | `createdTo` | date or date-time | no | Created before (exclusive). Must be after `createdFrom`. | | `limit` | integer | no | How many objects per page. See [Pagination](https://anytime-capital.com/docs/pagination.md). | | `cursor` | string | no | The previous page's `nextCursor`, for the page after it. | **Request** ```bash curl "https://anytime-capital.com/api/v1/payments?status=paid&createdFrom=2026-10-01&createdTo=2026-11-01" \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` **Response** (200) ```json { "object": "list", "data": [ { "object": "payment", "id": "pay_7Hq2LmX9cR4tVb", "status": "paid", "amountCents": 12500, "amountRefundedCents": 0, "netCents": 12088, "currency": "usd", "description": "Consulting — October", "source": { "type": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa" }, "customer": { "name": "Jordan Lee", "email": "jordan@example.com", "country": "US" }, "card": { "brand": "visa", "last4": "4242" }, "paymentMethod": { "type": "card", "label": "Visa •••• 4242" }, "clientReference": "order_1042", "metadata": { "campaign": "fall-launch" }, "amountDetails": { "subtotalCents": 12500, "discountCents": 0, "shippingCents": 0, "taxCents": 0, "customerFeeCents": 0 }, "dispute": null, "failureMessage": null, "createdAt": "2026-10-14T16:02:11.000Z", "paidAt": "2026-10-14T16:02:15.000Z" } ], "hasMore": true, "nextCursor": "pay_7Hq2LmX9cR4tVb" } ``` ### Retrieve a payment `GET /api/v1/payments/{id}` Returns the payment, or `404 NOT_FOUND` if it isn't one of yours. **Request** ```bash curl https://anytime-capital.com/api/v1/payments/pay_7Hq2LmX9cR4tVb \ -H "Authorization: Bearer $ANYTIME_API_KEY" ``` **Response** (200) ```json { "object": "payment", "id": "pay_7Hq2LmX9cR4tVb", "status": "paid", "amountCents": 12500, "amountRefundedCents": 0, "netCents": 12088, "currency": "usd", "description": "Consulting — October", "source": { "type": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa" }, "customer": { "name": "Jordan Lee", "email": "jordan@example.com", "country": "US" }, "card": { "brand": "visa", "last4": "4242" }, "paymentMethod": { "type": "card", "label": "Visa •••• 4242" }, "clientReference": "order_1042", "metadata": { "campaign": "fall-launch" }, "amountDetails": { "subtotalCents": 12500, "discountCents": 0, "shippingCents": 0, "taxCents": 0, "customerFeeCents": 0 }, "dispute": null, "failureMessage": null, "createdAt": "2026-10-14T16:02:11.000Z", "paidAt": "2026-10-14T16:02:15.000Z" } ``` --- # Webhooks > Get Anytime Capital Payments events by webhook: payments, refunds, disputes, invoices and subscriptions, signed with HMAC-SHA256 and retried for 24 hours. Source: https://anytime-capital.com/docs/webhooks · Markdown: https://anytime-capital.com/docs/webhooks.md · All docs: https://anytime-capital.com/docs/llms-full.txt Add an endpoint in **Settings → Developers** in your dashboard and we POST a JSON event to it as things happen. Each event wraps the same object the API returns, in `data`, so one parser handles both. **An event** ```json { "id": "evt_3f9a1c2b7d4e6f8a0b1c2d3e4f5a6b7c", "type": "payment.succeeded", "created": "2026-10-14T16:02:16.000Z", "data": { "object": "payment", "id": "pay_7Hq2LmX9cR4tVb", "status": "paid", "amountCents": 12500, "amountRefundedCents": 0, "netCents": 12088, "currency": "usd", "description": "Consulting — October", "source": { "type": "payment_link", "id": "pl_4kTz8QwN2xYb6RcD1mPa" }, "customer": { "name": "Jordan Lee", "email": "jordan@example.com", "country": "US" }, "card": { "brand": "visa", "last4": "4242" }, "paymentMethod": { "type": "card", "label": "Visa •••• 4242" }, "clientReference": "order_1042", "metadata": { "campaign": "fall-launch" }, "amountDetails": { "subtotalCents": 12500, "discountCents": 0, "shippingCents": 0, "taxCents": 0, "customerFeeCents": 0 }, "dispute": null, "failureMessage": null, "createdAt": "2026-10-14T16:02:11.000Z", "paidAt": "2026-10-14T16:02:15.000Z" } } ``` ## Add an endpoint 1. In **Settings → Developers**, choose **Add endpoint**. 2. Enter an `https://` URL on a public domain name (not an IP address or `localhost`). 3. Choose the events to receive, or every event, including types added later. 4. Copy the endpoint's signing secret (`whsec_…`), shown when you add the endpoint, into a server-side environment variable such as `ANYTIME_WEBHOOK_SECRET`. Owners can **Reveal** it again later. 5. Choose **Send test event** to check your endpoint answers `2xx`. A business can have up to 10 endpoints, each with its own secret and event selection. Owners and admins manage them, and can replace an endpoint's secret at any time: events signed with the old secret stop verifying immediately, so deploy the new one straight away. ## Event types | Type | `data` is a | When | | --- | --- | --- | | `payment.succeeded` | payment | A card payment went through. Sent once per payment. | | `payment.failed` | payment | A card payment was declined or blocked. | | `payment.refunded` | payment | All or part of a payment was refunded. Sent for each refund. | | `dispute.opened` | payment | A customer disputed a payment with their bank. | | `dispute.closed` | payment | A dispute was decided: won, lost or closed. | | `invoice.paid` | invoice | An invoice was paid in full by card. | | `subscription.created` | subscription | A customer subscribed to one of your plans. | | `subscription.canceled` | subscription | A subscription ended: canceled, expired or completed. | | `webhook.test` | test | Sent by “Send test event”, whatever the endpoint subscribes to. | Payment and dispute events carry the [payment object](https://anytime-capital.com/docs/payments.md), `invoice.paid` the [invoice object](https://anytime-capital.com/docs/invoices.md), and the subscription events a subscription: `id`, `status`, `plan` (`id`, `title`, `amountCents`, `currency`, `interval`), `customer`, `currentPeriodEnd`, `cancelAtPeriodEnd`, `canceledAt` and `createdAt`. ## Delivery and retries - Respond with any `2xx` status within 10 seconds to acknowledge an event; do slow work after responding. - Anything else (another status, a redirect, a timeout) is retried after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours and 24 hours, then marked failed. - Every attempt and response is in the endpoint's delivery log, where you can **Resend** any event. - If several events in a row fail every retry, we turn the endpoint off and email your owners and admins. - Delivery is at least once and events can arrive out of order: use `id` (also in the `Anytime-Event-Id` header) to skip events you've handled, and re-read the object from the API when order matters. | Header | Value | | --- | --- | | `Anytime-Signature` | `t=