# Payment Link (/en/api-reference/objects/payment-link)

A Payment Link is a shareable URL you can send to a customer to collect a single payment or set up a subscription, without writing any checkout code. Open the URL in any browser and we render the hosted checkout, collect payment details, and process the payment. Use Payment Links for one-off invoices, social-media checkout, in-person QR codes, or anywhere you need a checkout page without integrating the SDK.

## Fields

- `id` (string, required) — Unique identifier for this Payment Link. Always prefixed with `plink_`.
- `object` (string, required) — String identifying the object type. Always `payment_link` for this resource.
- `merchantId` (string, required) — Merchant ID
- `active` (boolean, required) — Whether the payment link is active
- `expiresAt` (string) — Expiration timestamp (ISO 8601)
- `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required) — Currency
- `computedAmount` (number, required) — Computed total amount from line items
- `nameCollection` (boolean, required) — Whether to collect customer name
- `billingAddressCollection` (boolean, required) — Whether to collect billing address
- `shippingAddressCollection` (boolean, required) — Whether to collect shipping address
- `phoneNumberCollection` (boolean, required) — Whether to collect phone number
- `allowPromotionCodes` (boolean, required) — Whether to allow promotion codes
- `submitType` (enum("PAY" | "SUBSCRIBE" | "BOOK" | "DONATE"), required) — Submit type
- `customerCreation` (enum("always" | "if_required")) — When to create customer
- `afterCompletion` (AfterCompletionResponse) — After completion settings
  - `type` (enum("redirect" | "hosted_confirmation"), required) — After completion type
  - `redirect` (AfterCompletionRedirectResponse) — Redirect configuration
    - `url` (string, required) — Redirect URL
  - `hostedConfirmation` (AfterCompletionHostedConfirmationResponse) — Hosted confirmation configuration
    - `customMessage` (string) — Custom message
    - `returnUrl` (string) — Return URL
- `lineItems` (Array<LineItem>, required) — Line items
  - `id` (string, required) — Line item ID
  - `quantity` (number, required) — Quantity
  - `price` (Price, required) — Price information
    - `id` (string, required) — Price ID
    - `unitAmount` (number) — Price amount in smallest currency unit
    - `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required) — Currency
    - `type` (enum("ONE_TIME" | "RECURRING" | "CUSTOM"), required) — Price type
    - `recurring` (Recurring) — Recurring configuration (for recurring prices)
    - `customUnitAmount` (CustomUnitAmount) — Custom unit amount configuration — present for CUSTOM-type prices
    - `createdAt` (string, required) — Creation timestamp (ISO 8601)
    - `active` (boolean, required) — Whether the price is active. `false` means the merchant archived it.
    - `stock` (number | null) — Remaining stock. `null` means unlimited. Decremented on PaymentIntent success. May go negative under race conditions (oversold).
    - `startDate` (string | null) — Start date (before which the price is not usable in checkout), ISO 8601
    - `expirationDate` (string | null) — Expiration date (at/after which the price is not usable in checkout), ISO 8601
    - `product` (Product, required) — Product associated with this price
  - `adjustableQuantity` (AdjustableQuantity) — Adjustable quantity settings
    - `enabled` (boolean, required) — Whether adjustable quantity is enabled
    - `minimum` (number) — Minimum quantity allowed
    - `maximum` (number) — Maximum quantity allowed
  - `amountSubtotal` (number) — Total before any discounts or taxes (unitAmount × quantity)
  - `amountTotal` (number) — Total after discounts and taxes
  - `amountDiscount` (number) — Discount amount applied to this item
  - `amountTax` (number) — Tax amount applied to this item
  - `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY")) — Currency for the amounts (ISO 4217)
  - `description` (string) — Description from price/product
  - `presentmentDetails` (LineItemPresentmentDetails) — Customer-facing view of this line item. Populated on checkout-session snapshots when the merchant prices in a currency different from processing. Uses the session's locked exchange rate.
    - `unitAmount` (number, required) — Unit amount in presentment smallest unit
    - `amountSubtotal` (number, required) — Line subtotal (unitAmount × quantity) in presentment smallest unit
    - `amountDiscount` (number, required) — Line discount allocated to this item, in presentment smallest unit
    - `amountTotal` (number, required) — Line total after discount + tax, in presentment smallest unit
    - `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required) — Presentment currency for this line — matches session.presentmentDetails.currency
- `customFields` (Array<CustomField>) — Custom fields
  - `label` (string, required) — Field label
  - `type` (enum("TEXT" | "NUMBER" | "DROPDOWN" | "CHECKBOX"), required) — Field type
  - `isOptional` (boolean, required) — Whether the field is optional
  - `hasLimits` (boolean, required) — Whether validation limits are enabled
  - `limitType` (enum("AT_MOST" | "BETWEEN" | "AT_LEAST" | "EXACTLY")) — Type of validation limit
  - `minCharacters` (number) — Minimum number of characters
  - `maxCharacters` (number) — Maximum number of characters
  - `dropdownOptions` (Array<DropdownOption>) — Dropdown options (only for DROPDOWN type)
    - `label` (string, required) — Option label
- `feeConfig` (ResolvedFeeConfig) — Fee configuration
  - `feesPassThrough` (boolean, required) — Whether customer pays platform fee (false = merchant pays)
  - `vatCollectionEnabled` (boolean, required) — Whether to collect VAT from customer
  - `vatCollectionRate` (number) — VAT collection rate in basis points (e.g., 1400 = 14%)
  - `source` (enum("session" | "merchant" | "system"), required) — Where this config came from
- `metadata` (object) — Custom metadata
- `brandingSettings` (BrandingSettingsResponse) — Branding settings
  - `colorMode` (enum("light" | "dark" | "system")) — Dark mode preference
  - `borderStyle` (enum("rounded" | "sharp" | "pill")) — Border style for inputs, buttons, cards
  - `spacing` (enum("condensed" | "normal" | "spacious")) — Spacing density
  - `inputSize` (enum("small" | "medium" | "large")) — Input field size
  - `inputStyle` (enum("flat" | "outlined" | "filled")) — Input field style
  - `formLayout` (enum("compact" | "spacious")) — Form layout density
  - `colors` (ColorCustomizationResponse) — Color customization options
    - `primary` (string) — Primary brand color (buttons, links, accents). Hex only, e.g. `#635bff`.
    - `primaryForeground` (string) — Primary foreground (text on primary background). Hex only.
    - `background` (string) — Page background color. Hex only.
    - `foreground` (string) — Main text color. Hex only.
    - `border` (string) — Border color. Hex only.
    - `input` (string) — Input, button, and dropdown border color. Hex only.
    - `ring` (string) — Focus ring color. Hex only.
    - `muted` (string) — Muted/secondary background. Hex only.
    - `mutedForeground` (string) — Muted text color. Hex only.
    - `accent` (string) — Accent background. Hex only.
    - `accentForeground` (string) — Accent text color. Hex only.
    - `destructive` (string) — Destructive/error color. Hex only.
  - `fontFamily` (string) — Font family override
- `paymentMethodConfigurationId` (string) — Payment method configuration ID
- `createdAt` (string, required) — Creation timestamp (ISO 8601)
- `updatedAt` (string, required) — Last update timestamp (ISO 8601)