PersonalBusinessEnterprise
    In a rush? Schedule an Appointment
    Fetching local time...
    Anytime CapitalforBusiness
    Pricing

    Get started

    • Overview
    • Quickstart
    • Test mode
    • Guides & recipes
    • Switch from Stripe
    • Import from Shopify
    • Import from WooCommerce
    • Import from Square
    • Import a CSV file
    • Stripe API mapping
    • Pricing
    • Support
    • FAQ

    Payments

    • Checkout & website
    • Guide: Next.js checkout
    • In person (QR)
    • Payment methods
    • Stablecoin checkout
    • Guide: take stablecoins
    • Fraud rules & 3D Secure
    • Dispute evidence
    • International customers
    • Guide: safe refunds
    • Bank transfers on invoices

    Billing

    • Subscription discounts
    • Guide: sell subscriptions
    • Usage billing
    • Guide: report usage

    Money movement

    • Payout options
    • Guide: reconcile payouts
    • Accounting sync
    • Revenue analytics

    Developers

    • Authentication
    • Errors & retries
    • Pagination
    • Idempotency
    • Rate limits
    • Webhooks
    • Verify webhooks
    • Node SDK (preview)
    • CLI (preview)
    • Postman collection

    AI

    • AI agents hub
    • Safe AI agents
    • Custom agents
    • Prompt library

    Integrations

    • Website builders
    • Shopify
    • Shopify orders by invoice
    • WooCommerce
    • Zapier
    • Slack, Discord and Teams

    Reference

    • Payments
    • Refunds
    • Disputes
    • Payment links
    • Invoices
    • Customers
    • Products
    • Subscriptions & plans
    • Discount codes
    • Meters & usage events
    • Payouts & balance
    • Webhook endpoints
    • Events
    • Test helpers
    • OpenAPI spec
    • Error codes
    • Changelog
    • Glossary

    For AI tools

    • llms-full.txt
    • MCP server
    • openapi.json
    Docs menu · Payment links

    Get started

    • Overview
    • Quickstart
    • Test mode
    • Guides & recipes
    • Switch from Stripe
    • Import from Shopify
    • Import from WooCommerce
    • Import from Square
    • Import a CSV file
    • Stripe API mapping
    • Pricing
    • Support
    • FAQ

    Payments

    • Checkout & website
    • Guide: Next.js checkout
    • In person (QR)
    • Payment methods
    • Stablecoin checkout
    • Guide: take stablecoins
    • Fraud rules & 3D Secure
    • Dispute evidence
    • International customers
    • Guide: safe refunds
    • Bank transfers on invoices

    Billing

    • Subscription discounts
    • Guide: sell subscriptions
    • Usage billing
    • Guide: report usage

    Money movement

    • Payout options
    • Guide: reconcile payouts
    • Accounting sync
    • Revenue analytics

    Developers

    • Authentication
    • Errors & retries
    • Pagination
    • Idempotency
    • Rate limits
    • Webhooks
    • Verify webhooks
    • Node SDK (preview)
    • CLI (preview)
    • Postman collection

    AI

    • AI agents hub
    • Safe AI agents
    • Custom agents
    • Prompt library

    Integrations

    • Website builders
    • Shopify
    • Shopify orders by invoice
    • WooCommerce
    • Zapier
    • Slack, Discord and Teams

    Reference

    • Payments
    • Refunds
    • Disputes
    • Payment links
    • Invoices
    • Customers
    • Products
    • Subscriptions & plans
    • Discount codes
    • Meters & usage events
    • Payouts & balance
    • Webhook endpoints
    • Events
    • Test helpers
    • OpenAPI spec
    • Error codes
    • Changelog
    • Glossary

    For AI tools

    • llms-full.txt
    • MCP server
    • openapi.json
    DocsReferencePayment links

    Payment links API

    Create, update and deactivate hosted payment links with the Anytime Capital Payments API: one per order or reusable, with metadata, and prefilled checkout.

    View as MarkdownOpen in Claude

    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 or stablecoin where you have turned them on. Links made for invoices and subscription plans are managed with those and aren't listed here.

    TopicDetail
    Endpoints`POST /api/v1/payment-links`, `GET /api/v1/payment-links`, `GET /api/v1/payment-links/{id}`, `POST /api/v1/payment-links/{id}`, `POST /api/v1/payment-links/{id}/deactivate`
    Key permissionspayment_links:write, payment_links:read
    Samplescurl; Node.js 18+ with the built-in fetch (in an ES module); the Node SDK (preview: not on npm yet); Python with requests.
    Every request can also answer401 UNAUTHORIZED, 401 API_KEY_EXPIRED, 403 NOT_ENROLLED, 403 PERMISSION_DENIED, 403 IP_NOT_ALLOWED, 429 RATE_LIMITED, 500 INTERNAL_ERROR. See Error codes.

    The payment link object

    JSON
    {
      "object": "payment_link",
      "livemode": true,
      "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
    }
    FieldTypeDescription
    objectstringThe type of object. Always payment_link.
    livemodebooleanFalse for test-mode data (an ak_test_ key); true for live data.
    idstringpl_ followed by 20 letters and digits.
    urlstring (uri)The pay page. Share it, redirect to it or embed it.
    titlestringWhat the customer pays for.
    descriptionstring or nullShown under the title.
    amountCentsintegerThe price in cents. With payWhatYouWant, the suggested amount.
    currencystringusd.
    activebooleanTaking payments.
    singleUsebooleanCloses after its first payment.
    shippingCentsintegerFlat shipping. Integer cents.
    collectShippingbooleanAsks for a shipping address.
    allowDiscountCodesbooleanAccepts discount codes.
    successUrlstring or nullWhere customers go after paying. A link has at most one of successUrl and confirmationMessage.
    requireTermsConsentbooleanCustomers must agree to your terms.
    confirmationMessagestring or nullShown after paying.
    metadataobjectYour own key/value data.
    itemsobject[]Catalog products, for links made in the dashboard from products. Empty for single-price links.
    createdAtstring (date-time)Created.
    deactivatedAtstring (date-time) or nullDeactivated.
    allowQuantitybooleanCustomers choose how many.
    maxQuantityinteger or nullMost per payment.
    customFieldsobject[]
    customFields[].idstringYour id.
    customFields[].labelstringThe question.
    customFields[].typestringtext, long_text, phone, dropdown.
    customFields[].optionsstring[]
    customFields[].requiredbooleanMust be answered.
    tipsEnabledbooleanOffers a tip.
    payWhatYouWantbooleanCustomers choose the amount.
    minAmountCentsinteger or nullSmallest amount with payWhatYouWant. Integer cents.

    Endpoints

    Create a payment link

    POST/api/v1/payment-links
    Permission payment_links:writeSupports Idempotency-Key.

    A hosted payment page for one price. 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.

    Headers

    Idempotency-Key
    string
    Recommended. A unique key such as a UUID: a retry with the same key within 24 hours gets the first response back instead of acting twice. See Idempotency.

    Body

    title
    stringrequired
    What the customer is paying for. Up to 120 characters.
    amountCents
    integerrequired
    The price in cents. With payWhatYouWant, the suggested amount. From 100 ($1.00) to 1,000,000 ($10,000.00).
    description
    string
    Shown under the title. Up to 500 characters.
    singleUse
    boolean
    Close the link after its first successful payment. Default false.
    shippingCents
    integer
    Flat shipping added to each payment. Default 0. From 0 ($0.00) to 100,000 ($1,000.00).
    collectShipping
    boolean
    Ask for a shipping address. Default false.
    allowDiscountCodes
    boolean
    Let customers enter one of your discount codes. Default false.
    successUrl
    string (uri)
    An https:// page on your site customers go to after paying. Not with confirmationMessage. Up to 500 characters.
    confirmationMessage
    string
    Shown on the confirmation page after paying, instead of a successUrl. Up to 500 characters.
    requireTermsConsent
    boolean
    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
    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 made on the link; customers never see it.
    allowQuantity
    boolean
    Let customers choose how many. Default false.
    maxQuantity
    integer
    With allowQuantity: the most per payment (default 10). From 1 to 99.
    tipsEnabled
    boolean
    Offer a tip. Default false.
    payWhatYouWant
    boolean
    Customers choose the amount. Not with quantity, tips or discount codes. Default false.
    minAmountCents
    integer
    With payWhatYouWant: the smallest amount. From 100 ($1.00) to 1,000,000 ($10,000.00).
    customFields
    object[]
    Up to 3 questions asked at checkout. Up to 3 items.
    customFields[].id
    stringrequired
    Your id for the question; answers are keyed by it.
    customFields[].label
    stringrequired
    Up to 60 characters.
    customFields[].type
    stringrequired
    One of text, long_text, phone, dropdown.
    customFields[].options
    string[]
    Dropdown only: 2–10 different choices. Up to 10 items.
    customFields[].required
    boolean
    Request
    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,
        "singleUse": true,
        "metadata": {
          "orderId": "1042"
        }
      }'
    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": "order-1042-link",
      },
      body: JSON.stringify({
        title: "Consulting — October",
        description: "Two strategy sessions",
        amountCents: 12500,
        singleUse: true,
        metadata: { orderId: "1042" },
      }),
    });
    const link = await res.json();
    if (!res.ok) throw new Error(`${link.error.code}: ${link.error.message}`);
    import { AnytimeCapital } from "@anytimecapital/node";
    
    const client = new AnytimeCapital({ apiKey: process.env.ANYTIME_API_KEY! });
    
    const link = await client.paymentLinks.create(
      {
        title: "Consulting — October",
        description: "Two strategy sessions",
        amountCents: 12500,
        singleUse: true,
        metadata: { orderId: "1042" },
      },
      { idempotencyKey: "order-1042-link" },
    );
    import os
    
    import requests
    
    res = requests.post(
        "https://anytime-capital.com/api/v1/payment-links",
        headers={
            "Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}",
            "Idempotency-Key": "order-1042-link",
        },
        json={
            "title": "Consulting — October",
            "description": "Two strategy sessions",
            "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']}")
    Response 201
    {
      "object": "payment_link",
      "livemode": true,
      "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": 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
    }

    Errors

    400INVALID_JSON
    The body isn't valid JSON, or couldn't be read. An empty body reads as {}. Send Content-Type: application/json and a JSON object.
    400INVALID_INPUT
    A field, filter, limit or cursor is missing or invalid. The message starts with the field's name, as in amountCents: …, or reads Invalid cursor. Fix the named field. Don't retry the same request unchanged.
    400INVALID_IDEMPOTENCY_KEY
    The Idempotency-Key header is empty, longer than 255 characters, or has characters other than printable ASCII. Use a UUID. See Idempotency.
    409TERMS_URL_REQUIRED
    requireTermsConsent needs a link to your terms, and the business hasn't set one. Add your terms link in Settings → Payments, then retry.
    422IDEMPOTENCY_KEY_REUSED
    The Idempotency-Key was used in the last 24 hours with a different body or endpoint. Use a new key for a new request; reuse a key only to retry the same request.

    List payment links

    GET/api/v1/payment-links
    Permission payment_links:read

    Payment links with their pay page url and buyer choices. Links behind invoices and plans aren't listed.

    Query

    active
    boolean
    true for live objects, false for deactivated or archived ones.
    limit
    integer
    How many objects per page, 1–100. Default 25. See Pagination.
    cursor
    string
    The previous page's nextCursor, for the page after it.
    Request
    curl "https://anytime-capital.com/api/v1/payment-links?active=true&limit=10" \
      -H "Authorization: Bearer $ANYTIME_API_KEY"
    const res = await fetch("https://anytime-capital.com/api/v1/payment-links?active=true&limit=10", {
      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}`);
    import { AnytimeCapital } from "@anytimecapital/node";
    
    const client = new AnytimeCapital({ apiKey: process.env.ANYTIME_API_KEY! });
    
    const page = await client.paymentLinks.list({ active: true, limit: 10 });
    import os
    
    import requests
    
    res = requests.get(
        "https://anytime-capital.com/api/v1/payment-links",
        headers={"Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}"},
        params={"active": "true", "limit": "10"},
        timeout=30,
    )
    page = res.json()
    if not res.ok:
        raise RuntimeError(f"{page['error']['code']}: {page['error']['message']}")
    Response 200
    {
      "object": "list",
      "data": [
        {
          "object": "payment_link",
          "livemode": true,
          "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
    }

    Errors

    400INVALID_INPUT
    A field, filter, limit or cursor is missing or invalid. The message starts with the field's name, as in amountCents: …, or reads Invalid cursor. Fix the named field. Don't retry the same request unchanged.

    Get a payment link

    GET/api/v1/payment-links/{id}
    Permission payment_links:read

    One payment link by id.

    Path

    id
    stringrequired
    pl_…
    Request
    curl https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa \
      -H "Authorization: Bearer $ANYTIME_API_KEY"
    const res = await fetch("https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa", {
      headers: { Authorization: `Bearer ${process.env.ANYTIME_API_KEY}` },
    });
    const link = await res.json();
    if (!res.ok) throw new Error(`${link.error.code}: ${link.error.message}`);
    import { AnytimeCapital } from "@anytimecapital/node";
    
    const client = new AnytimeCapital({ apiKey: process.env.ANYTIME_API_KEY! });
    
    const link = await client.paymentLinks.retrieve("pl_4kTz8QwN2xYb6RcD1mPa");
    import os
    
    import requests
    
    res = requests.get(
        "https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa",
        headers={"Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}"},
        timeout=30,
    )
    link = res.json()
    if not res.ok:
        raise RuntimeError(f"{link['error']['code']}: {link['error']['message']}")
    Response 200
    {
      "object": "payment_link",
      "livemode": true,
      "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
    }

    Errors

    404NOT_FOUND
    No such object on your business (an id from another business reads the same), or no such endpoint under /api/v1, which still answers in JSON. Check the id and the path. Ids are case-sensitive.

    Update a payment link

    POST/api/v1/payment-links/{id}
    Permission payment_links:writeSupports Idempotency-Key.

    Send only what changes. The price is fixed: 400 NOT_EDITABLE names a field that can't change. Changes apply straight away; payments already made keep what they were charged. The price and how it is priced are fixed: amountCents, items, payWhatYouWant, minAmountCents, shippingCents, allowDiscountCodes and singleUse answer 400 NOT_EDITABLE.

    Path

    id
    stringrequired
    pl_…

    Headers

    Idempotency-Key
    string
    Recommended. A unique key such as a UUID: a retry with the same key within 24 hours gets the first response back instead of acting twice. See Idempotency.

    Body

    title
    string
    Up to 120 characters.
    description
    string or null
    New description; null removes it. Up to 500 characters.
    successUrl
    string (uri) or null
    An https:// page to send customers to after paying; setting it clears confirmationMessage, null clears it. Up to 500 characters.
    confirmationMessage
    string or null
    Message after paying; setting it clears successUrl, null clears it. Up to 500 characters.
    requireTermsConsent
    boolean
    metadata
    object or null
    Replaces all of the link's metadata; null clears it. Up to 20 entries.
    customFields
    object[]
    Up to 3 questions asked at checkout. Up to 3 items.
    customFields[].id
    stringrequired
    Your id for the question; answers are keyed by it.
    customFields[].label
    stringrequired
    Up to 60 characters.
    customFields[].type
    stringrequired
    One of text, long_text, phone, dropdown.
    customFields[].options
    string[]
    Dropdown only: 2–10 different choices. Up to 10 items.
    customFields[].required
    boolean
    tipsEnabled
    boolean
    allowQuantity
    boolean
    maxQuantity
    integer or null
    With allowQuantity: the most per payment. From 1 to 99.
    collectShipping
    boolean
    Request
    curl -X POST https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa \
      -H "Authorization: Bearer $ANYTIME_API_KEY" \
      -H "Idempotency-Key: update-pl_4kTz8Q-title" \
      -H "Content-Type: application/json" \
      -d '{
        "title": "Consulting — November",
        "metadata": {
          "campaign": "winter"
        }
      }'
    const res = await fetch("https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${process.env.ANYTIME_API_KEY}`,
        "Content-Type": "application/json",
        "Idempotency-Key": "update-pl_4kTz8Q-title",
      },
      body: JSON.stringify({ title: "Consulting — November", metadata: { campaign: "winter" } }),
    });
    const link = await res.json();
    if (!res.ok) throw new Error(`${link.error.code}: ${link.error.message}`);
    import { AnytimeCapital } from "@anytimecapital/node";
    
    const client = new AnytimeCapital({ apiKey: process.env.ANYTIME_API_KEY! });
    
    const link = await client.paymentLinks.update(
      "pl_4kTz8QwN2xYb6RcD1mPa",
      { title: "Consulting — November", metadata: { campaign: "winter" } },
      { idempotencyKey: "update-pl_4kTz8Q-title" },
    );
    import os
    
    import requests
    
    res = requests.post(
        "https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa",
        headers={
            "Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}",
            "Idempotency-Key": "update-pl_4kTz8Q-title",
        },
        json={"title": "Consulting — November", "metadata": {"campaign": "winter"}},
        timeout=30,
    )
    link = res.json()
    if not res.ok:
        raise RuntimeError(f"{link['error']['code']}: {link['error']['message']}")
    Response 200
    {
      "object": "payment_link",
      "livemode": true,
      "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
    }

    Errors

    400INVALID_JSON
    The body isn't valid JSON, or couldn't be read. An empty body reads as {}. Send Content-Type: application/json and a JSON object.
    400INVALID_INPUT
    A field, filter, limit or cursor is missing or invalid. The message starts with the field's name, as in amountCents: …, or reads Invalid cursor. Fix the named field. Don't retry the same request unchanged.
    400INVALID_IDEMPOTENCY_KEY
    The Idempotency-Key header is empty, longer than 255 characters, or has characters other than printable ASCII. Use a UUID. See Idempotency.
    400NOT_EDITABLE
    The update names a field that is fixed once a link exists: amountCents, items, payWhatYouWant, minAmountCents, shippingCents, allowDiscountCodes or singleUse. The message names it. Create a new link at the new price and deactivate the old one.
    404NOT_FOUND
    No such object on your business (an id from another business reads the same), or no such endpoint under /api/v1, which still answers in JSON. Check the id and the path. Ids are case-sensitive.
    409TERMS_URL_REQUIRED
    requireTermsConsent needs a link to your terms, and the business hasn't set one. Add your terms link in Settings → Payments, then retry.
    422IDEMPOTENCY_KEY_REUSED
    The Idempotency-Key was used in the last 24 hours with a different body or endpoint. Use a new key for a new request; reuse a key only to retry the same request.

    Deactivate a payment link

    POST/api/v1/payment-links/{id}/deactivate
    Permission payment_links:writeSupports Idempotency-Key.

    Stop a link taking payments. Safe to repeat. Anyone who opens the link sees that it's closed. There's no API to turn it back on.

    Path

    id
    stringrequired
    pl_…

    Headers

    Idempotency-Key
    string
    Recommended. A unique key such as a UUID: a retry with the same key within 24 hours gets the first response back instead of acting twice. See Idempotency.
    Request
    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"
    const res = await fetch("https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa/deactivate", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${process.env.ANYTIME_API_KEY}`,
        "Idempotency-Key": "deactivate-pl_4kTz8Q",
      },
    });
    const link = await res.json();
    if (!res.ok) throw new Error(`${link.error.code}: ${link.error.message}`);
    import { AnytimeCapital } from "@anytimecapital/node";
    
    const client = new AnytimeCapital({ apiKey: process.env.ANYTIME_API_KEY! });
    
    const link = await client.paymentLinks.deactivate(
      "pl_4kTz8QwN2xYb6RcD1mPa",
      { idempotencyKey: "deactivate-pl_4kTz8Q" },
    );
    import os
    
    import requests
    
    res = requests.post(
        "https://anytime-capital.com/api/v1/payment-links/pl_4kTz8QwN2xYb6RcD1mPa/deactivate",
        headers={
            "Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}",
            "Idempotency-Key": "deactivate-pl_4kTz8Q",
        },
        timeout=30,
    )
    link = res.json()
    if not res.ok:
        raise RuntimeError(f"{link['error']['code']}: {link['error']['message']}")
    Response 200
    {
      "object": "payment_link",
      "livemode": true,
      "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
    }

    Errors

    400INVALID_IDEMPOTENCY_KEY
    The Idempotency-Key header is empty, longer than 255 characters, or has characters other than printable ASCII. Use a UUID. See Idempotency.
    404NOT_FOUND
    No such object on your business (an id from another business reads the same), or no such endpoint under /api/v1, which still answers in JSON. Check the id and the path. Ids are case-sensitive.
    422IDEMPOTENCY_KEY_REUSED
    The Idempotency-Key was used in the last 24 hours with a different body or endpoint. Use a new key for a new request; reuse a key only to retry the same request.

    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.

    ParameterWhat it does
    prefilled_emailThe customer's email for their receipt. They can still change it.
    codeOne of your discount codes, applied when checkout opens, on links that accept codes.
    refYour 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.

    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, data.paymentLinkId the link id and data.customer.email the buyer. 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. The Next.js guide builds this end to end.

    ProductsYour catalog: what links built in the dashboard sell.Discount codesCodes customers enter on links that allow them.Checkout & websiteThe Pay button, inline checkout and your branding.
    PreviousDisputesNext Invoices

    Anytime Capital is a fintech company, not a bank. Payment processing, banking and payout services are provided by Anytime Capital's licensed partners. 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.

    On this page

    • The payment link object
    • Endpoints
    • Create a payment link
    • List payment links
    • Get a payment link
    • Update a payment link
    • Deactivate a payment link
    • Prefill checkout
    • One link per order
    Anytime Capital
    (470) 748-2530
    App Store

    Business

    • Business Checking
    • Business Debit Cards
    • Payments
    • Ecommerce Payments
    • Invoicing
    • Developer Docs

    Solutions

    • CPAs & Accountants
    • Financial Advisors
    • Boat & Auto Dealerships
    • Dental & Medical Practices
    • Creators & Coaches
    • All solutions

    Crypto

    • Crypto Wallet
    • Tether Wallet
    • Buy Digital Assets
    • Explore Markets
    • Security & Licenses
    • Compare Platforms
    • Bitcoin ATM Alternative

    Company

    • Our Story
    • Schedule Appointment
    • Careers
    • Media & Press
    • Investor Relations
    • FAQ

    Branches

    • Atlanta, Georgia
    • Miami, Florida
    • Houston, Texas
    • All branches

    Legal

    • Platform Agreement
    • Terms & Conditions
    • Privacy Policy
    • Your Privacy Choices
    • Fraud Notice

    © 2026 Anytime Capital LLC. Anytime Capital is a fintech company, not a bank.

    The Anytime Capital Mastercard® Prepaid Card is issued by Pathward®, N.A., Member FDIC. Mastercard® is a registered trademark of Mastercard International Incorporated. All other trademarks and service marks belong to their respective owners.

    • English
    • Español
    • 한국어
    Mastercard