Payment links

Payment links are reusable hosted payment pages you can share with any number of buyers, unlike a checkout session, which is single-use and tied to one buyer. A link supports three modes: standard for fixed line items or subscription signup via subscription_plan_id, donation for variable buyer-chosen amounts, and event for ticket-tier sales. Each completed checkout through a link creates its own order behind the scenes, keeping payment links inside the orders-first model.

Links stay active until you deactivate them, they expire, or they hit an optional completion limit. Line items can come from your catalog (variants or bundles) or be defined ad hoc, with optional quantity and amount adjustment controls, custom fields, tipping, and promotion support.

The public read, GET /v1/payment-links/{payment_link_id}/public, returns the merchant's current display name. If Flint can't load the merchant, the read fails with 500 INTERNAL_ERROR instead of returning a placeholder name; retry it.

A catalog-backed line item stores only the reference, so reads add resolved_name and resolved_unit_price_money to show what the catalog says right now, and is_catalog_item_unavailable when the variant or bundle is missing, deleted, or inactive. These are current catalog values, not a stored snapshot: checkout resolves the catalog again when a buyer opens the link, so a later catalog edit changes what the buyer pays. They are read-only and ignored on writes.

Note:

Start with the Payment links guide. For choosing between hosted surfaces, see Payment links vs checkout sessions vs invoices.

The link's version covers its template, image, and delivery selection. Set delivery_method_ids on create or replace the array on PATCH with expected_version. PATCH requires that version when line_items, custom_fields, or delivery_method_ids is present. Omit an array to leave it unchanged; send [] to clear delivery methods or custom fields. Null and duplicate delivery method IDs are invalid. A link without delivery methods offers settings.checkout.default_delivery_method_ids when its order has items to deliver, so buyers can still choose shipping or pickup. A stale save returns PAYMENT_LINK_CHANGED; retrieve the link before retrying. Use promotion_config.codes_enabled to control promotion-code entry.

The Payment link object#

Every field on a payment link, as returned by retrieve and carried by the endpoints below.

Attributes

completed_countintegerRequired
created_atstring

RFC3339 timestamp.

custom_fieldsarray of object
custom_textobject
customer_collectionobject
delivery_method_idsarray of string

Delivery methods the link offers. Empty when the link has none, and then its checkouts offer settings.checkout.default_delivery_method_ids when the order has items to deliver.

descriptionstring
donation_max_amount_moneyobject

Monetary amount represented as integer minor units plus an ISO 4217 currency code.

donation_min_amount_moneyobject

Monetary amount represented as integer minor units plus an ISO 4217 currency code.

donation_suggested_amount_money_optionsarray of object
event_configobject
expirationobject
external_reference_idstring

Caller-owned identifier for this resource in an external system.

imageobject
inactive_messagestring
inventory_routing_sourceone of
legalobject
line_itemsarray of one of
max_completionsinteger
merchant_idstring
metadatamap of string
namestringRequired
payment_link_idstringRequired
payment_link_typeenum
  • standard
  • donation
  • event
paymentsobject
promotion_configobject
redirectsobject
statusenumRequired
  • active
  • inactive
subscription_planobject or null
subscription_plan_idstring
taxobject
themeobject
tipobject
total_quantity_soldinteger

Whole-number quantity; fractional quantities are not supported.

updated_atstring

RFC3339 timestamp.

urlstringRequired
versionintegerRequired
JSON
{
  "completed_count": 3,
  "created_at": "2026-03-17T14:30:00Z",
  "custom_fields": [
    {
      "custom_field_type": "dropdown",
      "key": "meal_preference",
      "label": "Meal preference",
      "options": [
        "Vegetarian",
        "Chicken",
        "Fish"
      ],
      "payment_link_custom_field_id": "plcf_123",
      "required": true
    }
  ],
  "description": "Event checkout",
  "event_config": {
    "event_at": "2026-05-12T19:00:00Z",
    "max_total_quantity": 500,
    "send_ticket_emails": true,
    "ticket_prefix": "GAL",
    "venue": "Pier 57, New York"
  },
  "image": {
    "alt": "Spring gala",
    "height": 900,
    "url": "https://images.withflintpay.com/ia_spring_gala/original",
    "width": 1600
  },
  "line_items": [
    {
      "is_catalog_item_unavailable": false,
      "key": "general-admission",
      "name": "General Admission",
      "payment_link_line_item_id": "plli_123",
      "quantity": 1,
      "unit_price_money": {
        "amount": 2500,
        "currency": "USD"
      }
    }
  ],
  "merchant_id": "mer_123",
  "metadata": {
    "campaign": "spring-gala"
  },
  "name": "Spring Gala",
  "payment_link_id": "pl_123",
  "payment_link_type": "event",
  "payments": {
    "enabled_payment_options": [
      "card",
      "apple_pay",
      "google_pay"
    ]
  },
  "status": "active",
  "total_quantity_sold": 42,
  "updated_at": "2026-03-17T14:30:00Z",
  "url": "https://checkout.withflintpay.com/pay/pl_123",
  "version": 1
}

Get public payment link#

GET/v1/payment-links/{payment_link_id}/public

No API key required

Returns the sanitized buyer-facing payment-link snapshot and a private resolution context for this browser operation.

Path parameters

payment_link_idstringRequired

Flint payment link ID.

Response · 200

dataobjectRequired
metaobject
request_idstring
curl https://api.withflintpay.com/v1/payment-links/pl_123/public \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": {
    "checkout_theme": {
      "accent_color": "#f59e0b",
      "primary_color": "#0f766e"
    },
    "merchant_icon": {
      "alt": "Merchant icon",
      "height": 256,
      "url": "https://images.withflintpay.com/ia_merchant_icon/original",
      "width": 256
    },
    "merchant_logo": {
      "alt": "Merchant logo",
      "height": 512,
      "url": "https://images.withflintpay.com/ia_merchant_logo/original",
      "width": 512
    },
    "merchant_name": "Cedar & Stone Coffee",
    "payment_link": {
      "completed_count": 3,
      "custom_fields": [
        {
          "custom_field_type": "dropdown",
          "key": "roast_preference",
          "label": "Roast preference",
          "options": [
            "Light",
            "Medium",
            "Dark"
          ],
          "payment_link_custom_field_id": "plcf_123",
          "required": true
        }
      ],
      "description": "Monthly coffee membership",
      "image": {
        "alt": "Monthly roast box",
        "height": 800,
        "url": "https://images.withflintpay.com/ia_roast_box/original",
        "width": 1200
      },
      "name": "Roaster's club membership",
      "payment_link_id": "pl_123",
      "payment_link_type": "standard",
      "payments": {
        "enabled_payment_options": [
          "card",
          "apple_pay",
          "google_pay"
        ]
      },
      "status": "active",
      "subscription_plan_id": "plan_01JZEXAMPLEPLAN1234567890",
      "version": 1
    },
    "resolution_context": "plrc_v1.example_signed_resolution_context",
    "resolution_context_expires_at": "2026-05-13T19:00:00Z",
    "resolution_context_start_deadline_at": "2026-05-13T18:58:00Z",
    "subscription_preview": {
      "billing_interval": "monthly",
      "billing_interval_count": 1,
      "contract_term_months": 12,
      "delivery_required": false,
      "early_termination_fee_money": {
        "amount": 5000,
        "currency": "USD"
      },
      "plan_image": {
        "alt": "Monthly roast box",
        "height": 800,
        "url": "https://images.withflintpay.com/ia_roast_box/original",
        "width": 1200
      },
      "plan_name": "Roaster's club",
      "recurring_total_money": {
        "amount": 2400,
        "currency": "USD"
      },
      "setup_fee_money": {
        "amount": 1000,
        "currency": "USD"
      },
      "trial_period_days": 14
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Was this helpful?