> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anyspend.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment Links

Create, manage, and track payment links for accepting crypto payments

Payment links are shareable URLs that allow your customers to pay with any token on any supported chain. Each link can be customized with branding, forms, shipping options, and more.

Payment links automatically handle token routing, gas abstraction, and cross-chain swaps via the AnySpend protocol.

## The Payment Link object

**id**

Unique identifier for the payment link (e.g., `pl_abc123`).

**name**

Display name shown to the customer during checkout.

**url**

The shareable checkout URL (e.g., `https://anyspend.com/pay/pl_abc123`).

**short_url**

Shortened URL for sharing (e.g., `https://as.pay/abc123`).

**token_address**

The token contract address you want to receive payment in.

**chain_id**

The chain ID where you want to receive payment.

**recipient_address**

The wallet address that receives the payment.

**amount**

Fixed payment amount in the token's smallest unit. Null for variable-amount links.

**min_amount**

Minimum allowed amount for variable-amount links.

**max_amount**

Maximum allowed amount for variable-amount links.

**suggested_amount**

Pre-filled suggested amount for variable-amount links.

**description**

Description shown on the checkout page.

**product_id**

Associated product ID, if linked to a product.

**image_url**

Image displayed on the checkout page.

**theme_color**

Hex color code for checkout page branding (e.g., `#6366f1`).

**button_text**

Custom text for the pay button (default: `"Pay"`).

**max_uses**

Maximum number of completed payments allowed. Null for unlimited.

**uses**

Number of completed payments so far.

**expires_at**

ISO 8601 expiration timestamp. Null for no expiration.

**active**

Whether the link is currently accepting payments.

**form_schema**

Custom form fields to collect from the customer during checkout.
  **form_schema properties**

**fields**

Array of form field definitions.
      **field properties**

**id** Unique field identifier.
        **type** Field type: `text`, `email`, `phone`, `select`, `textarea`, `number`, `checkbox`.
        **label** Display label.
        **required** Whether the field is required.
        **placeholder** Placeholder text.
        **options** Options for `select` fields.

**shipping_options**

Available shipping options for physical goods.
  **shipping option properties**

**id** Unique shipping option identifier.
    **name** Display name (e.g., `"Standard Shipping"`).
    **amount** Shipping cost in the token's smallest unit.
    **estimated_days** Estimated delivery time (e.g., `"5-7 business days"`).

**collect_shipping_address**

Whether to collect a shipping address during checkout.

**return_url**

URL to redirect the customer to after payment.

**return_label**

Label for the return button (e.g., `"Back to Store"`).

**branding**

Custom branding configuration.
  **branding properties**

**logo_url** Logo image URL.
    **business_name** Business name displayed on checkout.

**fee_on_top**

Whether the platform fee is added on top of the payment amount (true) or absorbed by the merchant (false).

**items**

Line items attached to this payment link.
  **item properties**

**id** Item ID.
    **name** Item name.
    **amount** Item price.
    **quantity** Item quantity.
    **image_url** Item image URL.

**created_at**

ISO 8601 creation timestamp.

**updated_at**

ISO 8601 last update timestamp.

---

## URL parameters

When sharing a payment link URL, you can append query parameters to pre-fill session data, track attribution, and associate payments with your customers.

| Parameter | Description | Example |
|-----------|-------------|---------|
| `client_reference_id` | Your internal reference ID (order ID, user ID, etc.) | `?client_reference_id=order_123` |
| `metadata[key]` | Arbitrary key-value metadata (bracket notation, up to 50 keys) | `?metadata[user_id]=clerk_abc&metadata[plan]=pro` |
| `session_id` | Use a pre-created checkout session instead of creating a new one | `?session_id=cs_abc123` |
| `success_url` | Override the redirect URL after successful payment | `?success_url=https://example.com/thanks` |
| `cancel_url` | Override the cancel/back URL | `?cancel_url=https://example.com/cart` |
| `utm_source` | UTM source for attribution | `?utm_source=twitter` |
| `utm_medium` | UTM medium for attribution | `?utm_medium=social` |
| `utm_campaign` | UTM campaign for attribution | `?utm_campaign=launch` |

### Metadata limits

- Maximum 50 keys per session
- Key length: up to 40 characters
- Value length: up to 500 characters

### Example: associating payments with your customers

```
https://anyspend.com/pay/abc123?client_reference_id=order_456&metadata[user_id]=clerk_abc&metadata[plan]=pro
```

All parameters are passed through to webhooks, so you can reconcile payments on your backend.

For enterprise integrations that need full control, use the [Checkout Sessions API](/anyspend/api/checkout-sessions-api) to create sessions server-side with `customer_email`, `customer_name`, `metadata`, and `client_reference_id`, then redirect using the returned `url` or append `?session_id=` to your payment link.

---

## List payment links

Search payment links by name or description.

Filter by active status. Omit to return all links.

Sort field. One of: `created_at`, `updated_at`, `name`, `uses`.

Sort order. One of: `asc`, `desc`.

Page number for pagination.

Number of results per page (max 100).

```bash cURL
curl -X GET "https://platform-api.anyspend.com/api/v1/payment-links?active=true&sort=created_at&order=desc&page=1&limit=20" \
  -H "Authorization: Bearer asp_xxx"
```

```typescript SDK
import { AnySpendPlatformClient } from "@b3dotfun/sdk/anyspend/platform";

const platform = new AnySpendPlatformClient(process.env.ANYSPEND_API_KEY!);

const { data, pagination } = await platform.paymentLinks.list({
  active: true,
  sort: "created_at",
  order: "desc",
  page: 1,
  limit: 20,
});
```

**Response**

```json
    {
      "data": [
        {
          "id": "pl_abc123",
          "name": "Premium Plan",
          "url": "https://anyspend.com/pay/pl_abc123",
          "short_url": "https://as.pay/abc123",
          "token_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chain_id": 1,
          "recipient_address": "0x1234...abcd",
          "amount": "50000000",
          "description": "Premium monthly subscription",
          "active": true,
          "uses": 42,
          "max_uses": null,
          "expires_at": null,
          "created_at": "2026-01-15T10:30:00Z",
          "updated_at": "2026-02-20T14:22:00Z"
        }
      ],
      "pagination": {
        "page": 1,
        "limit": 20,
        "total": 1,
        "total_pages": 1,
        "has_more": false
      }
    }
    ```

---

## Create a payment link

Create a new payment link with customizable checkout experience.

Display name for the payment link.

Contract address of the token you want to receive.

Chain ID where you want to receive the token.

Wallet address that receives the payment.

Description displayed on the checkout page.

Fixed payment amount in the token's smallest unit. Omit for variable-amount links.

Minimum amount for variable-amount links.

Maximum amount for variable-amount links.

Pre-filled amount for variable-amount links.

Link to an existing product.

URL of the image to display on the checkout page.

Hex color code for checkout branding (e.g., `"#6366f1"`).

Custom pay button text.

Maximum number of completed payments. Omit for unlimited.

ISO 8601 expiration timestamp.

Custom form fields to collect during checkout. See the Payment Link object above for structure.

Shipping options for physical goods. See the Payment Link object above for structure.

Whether to collect a shipping address.

URL to redirect the customer after payment.

Label for the return button.

Custom branding configuration. See the Payment Link object above for structure.

Add platform fee on top of the payment amount.

Line items to display on checkout.
  **item properties**

Item name.
    Item price in the token's smallest unit.
    Quantity.
    Item image URL.

```bash cURL
curl -X POST "https://platform-api.anyspend.com/api/v1/payment-links" \
  -H "Authorization: Bearer asp_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Premium Plan",
    "token_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "chain_id": 1,
    "recipient_address": "0x1234567890abcdef1234567890abcdef12345678",
    "amount": "50000000",
    "description": "Premium monthly subscription",
    "image_url": "https://example.com/premium.png",
    "theme_color": "#6366f1",
    "button_text": "Subscribe Now",
    "return_url": "https://example.com/thank-you",
    "return_label": "Back to Dashboard",
    "form_schema": {
      "fields": [
        {
          "id": "company_name",
          "type": "text",
          "label": "Company Name",
          "required": true,
          "placeholder": "Acme Inc."
        },
        {
          "id": "team_size",
          "type": "select",
          "label": "Team Size",
          "required": true,
          "options": ["1-10", "11-50", "51-200", "200+"]
        }
      ]
    },
    "items": [
      {
        "name": "Premium Plan - Monthly",
        "amount": "50000000",
        "quantity": 1
      }
    ]
  }'
```

```typescript SDK
import { AnySpendPlatformClient } from "@b3dotfun/sdk/anyspend/platform";

const platform = new AnySpendPlatformClient(process.env.ANYSPEND_API_KEY!);

const paymentLink = await platform.paymentLinks.create({
  name: "Premium Plan",
  tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  chainId: 1,
  recipientAddress: "0x1234567890abcdef1234567890abcdef12345678",
  amount: "50000000",
  description: "Premium monthly subscription",
  imageUrl: "https://example.com/premium.png",
  themeColor: "#6366f1",
  buttonText: "Subscribe Now",
  returnUrl: "https://example.com/thank-you",
  returnLabel: "Back to Dashboard",
  formSchema: {
    fields: [
      {
        id: "company_name",
        type: "text",
        label: "Company Name",
        required: true,
        placeholder: "Acme Inc.",
      },
      {
        id: "team_size",
        type: "select",
        label: "Team Size",
        required: true,
        options: ["1-10", "11-50", "51-200", "200+"],
      },
    ],
  },
  items: [
    {
      name: "Premium Plan - Monthly",
      amount: "50000000",
      quantity: 1,
    },
  ],
});
```

**Response**

```json
    {
      "id": "pl_abc123",
      "name": "Premium Plan",
      "url": "https://anyspend.com/pay/pl_abc123",
      "short_url": "https://as.pay/abc123",
      "token_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "chain_id": 1,
      "recipient_address": "0x1234567890abcdef1234567890abcdef12345678",
      "amount": "50000000",
      "min_amount": null,
      "max_amount": null,
      "suggested_amount": null,
      "description": "Premium monthly subscription",
      "product_id": null,
      "image_url": "https://example.com/premium.png",
      "theme_color": "#6366f1",
      "button_text": "Subscribe Now",
      "max_uses": null,
      "uses": 0,
      "expires_at": null,
      "active": true,
      "form_schema": {
        "fields": [
          {
            "id": "company_name",
            "type": "text",
            "label": "Company Name",
            "required": true,
            "placeholder": "Acme Inc."
          },
          {
            "id": "team_size",
            "type": "select",
            "label": "Team Size",
            "required": true,
            "options": ["1-10", "11-50", "51-200", "200+"]
          }
        ]
      },
      "shipping_options": null,
      "collect_shipping_address": false,
      "return_url": "https://example.com/thank-you",
      "return_label": "Back to Dashboard",
      "branding": null,
      "fee_on_top": false,
      "items": [
        {
          "id": "pli_item001",
          "name": "Premium Plan - Monthly",
          "amount": "50000000",
          "quantity": 1,
          "image_url": null
        }
      ],
      "created_at": "2026-02-27T10:30:00Z",
      "updated_at": "2026-02-27T10:30:00Z"
    }
    ```

---

## Retrieve a payment link

Fetch a single payment link by ID, including its line items.

The payment link ID (e.g., `pl_abc123`).

```bash cURL
curl -X GET "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123" \
  -H "Authorization: Bearer asp_xxx"
```

```typescript SDK
const paymentLink = await platform.paymentLinks.get("pl_abc123");
```

**Response**

Returns the full [Payment Link object](#the-payment-link-object) including `items`.

---

## Update a payment link

Update an existing payment link. Only the fields you include in the request body will be updated.

The payment link ID.

All body parameters from the [create endpoint](#create-a-payment-link) are accepted. Additionally:

Set to `false` to deactivate the link.

Changing `token_address`, `chain_id`, or `recipient_address` on a link that has existing sessions may cause inconsistencies. Create a new link instead if you need to change payment routing.

```bash cURL
curl -X PATCH "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123" \
  -H "Authorization: Bearer asp_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Premium Plan (Updated)",
    "amount": "75000000",
    "button_text": "Upgrade Now"
  }'
```

```typescript SDK
const updated = await platform.paymentLinks.update("pl_abc123", {
  name: "Premium Plan (Updated)",
  amount: "75000000",
  buttonText: "Upgrade Now",
});
```

**Response**

Returns the updated [Payment Link object](#the-payment-link-object).

---

## Delete a payment link

Permanently delete a payment link. This cannot be undone. Active checkout sessions for this link will fail.

The payment link ID.

```bash cURL
curl -X DELETE "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123" \
  -H "Authorization: Bearer asp_xxx"
```

```typescript SDK
await platform.paymentLinks.delete("pl_abc123");
```

**Response**

```json
    {
      "id": "pl_abc123",
      "deleted": true
    }
    ```

---

## Get payment link stats

Retrieve analytics and conversion metrics for a specific payment link.

The payment link ID.

```bash cURL
curl -X GET "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123/stats" \
  -H "Authorization: Bearer asp_xxx"
```

```typescript SDK
const stats = await platform.paymentLinks.stats("pl_abc123");
```

**Response**

```json
    {
      "payment_link_id": "pl_abc123",
      "views": 1250,
      "sessions": 340,
      "completed": 42,
      "conversion_rate": 0.1235,
      "total_volume": "2100000000",
      "utm_breakdown": {
        "sources": {
          "twitter": { "views": 500, "sessions": 120, "completed": 18 },
          "email": { "views": 400, "sessions": 150, "completed": 20 },
          "direct": { "views": 350, "sessions": 70, "completed": 4 }
        },
        "mediums": {
          "social": { "views": 500, "sessions": 120, "completed": 18 },
          "newsletter": { "views": 400, "sessions": 150, "completed": 20 },
          "none": { "views": 350, "sessions": 70, "completed": 4 }
        },
        "campaigns": {
          "launch_feb_2026": { "views": 600, "sessions": 200, "completed": 30 },
          "none": { "views": 650, "sessions": 140, "completed": 12 }
        }
      }
    }
    ```

---

## List payment link sessions

Retrieve checkout sessions associated with a specific payment link.

The payment link ID.

Filter by session status: `open`, `processing`, `completed`, `expired`, `failed`.

Page number.

Results per page (max 100).

```bash cURL
curl -X GET "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123/sessions?status=completed&page=1&limit=10" \
  -H "Authorization: Bearer asp_xxx"
```

```typescript SDK
const { data, pagination } = await platform.paymentLinks.sessions("pl_abc123", {
  status: "completed",
  page: 1,
  limit: 10,
});
```

**Response**

```json
    {
      "data": [
        {
          "id": "cs_sess001",
          "payment_link_id": "pl_abc123",
          "status": "completed",
          "amount": "50000000",
          "token_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "chain_id": 1,
          "payer_address": "0xaabb...ccdd",
          "tx_hash": "0x9f8e...1a2b",
          "form_data": {
            "company_name": "Acme Inc.",
            "team_size": "11-50"
          },
          "created_at": "2026-02-25T08:15:00Z",
          "completed_at": "2026-02-25T08:16:30Z"
        }
      ],
      "pagination": {
        "page": 1,
        "limit": 10,
        "total": 42,
        "total_pages": 5,
        "has_more": true
      }
    }
    ```

---

## List payment link visitors

Retrieve visitor analytics for a specific payment link, including referrer and geographic data.

The payment link ID.

Page number.

Results per page (max 100).

```bash cURL
curl -X GET "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123/visitors?page=1&limit=20" \
  -H "Authorization: Bearer asp_xxx"
```

```typescript SDK
const { data, pagination } = await platform.paymentLinks.visitors("pl_abc123", {
  page: 1,
  limit: 20,
});
```

**Response**

```json
    {
      "data": [
        {
          "id": "vis_001",
          "payment_link_id": "pl_abc123",
          "ip_country": "US",
          "referrer": "https://twitter.com",
          "user_agent": "Mozilla/5.0 ...",
          "utm_source": "twitter",
          "utm_medium": "social",
          "utm_campaign": "launch_feb_2026",
          "started_session": true,
          "visited_at": "2026-02-25T08:10:00Z"
        }
      ],
      "pagination": {
        "page": 1,
        "limit": 20,
        "total": 1250,
        "total_pages": 63,
        "has_more": true
      }
    }
    ```

---

## Duplicate a payment link

Create a copy of an existing payment link with optional field overrides.

The payment link ID to duplicate.

Override the name of the duplicated link. Defaults to `"Copy of {original name}"`.

Any other fields from the [create endpoint](#create-a-payment-link) can be passed as overrides.

```bash cURL
curl -X POST "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123/duplicate" \
  -H "Authorization: Bearer asp_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Premium Plan - EU",
    "recipient_address": "0xabcdef1234567890abcdef1234567890abcdef12"
  }'
```

```typescript SDK
const duplicate = await platform.paymentLinks.duplicate("pl_abc123", {
  name: "Premium Plan - EU",
  recipientAddress: "0xabcdef1234567890abcdef1234567890abcdef12",
});
```

**Response**

Returns a new [Payment Link object](#the-payment-link-object) with a new ID.

---

## List line items

Retrieve all line items attached to a payment link.

The payment link ID.

```bash cURL
curl -X GET "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123/items" \
  -H "Authorization: Bearer asp_xxx"
```

```typescript SDK
const items = await platform.paymentLinks.items("pl_abc123");
```

**Response**

```json
    {
      "data": [
        {
          "id": "pli_item001",
          "payment_link_id": "pl_abc123",
          "name": "Premium Plan - Monthly",
          "amount": "50000000",
          "quantity": 1,
          "image_url": null,
          "created_at": "2026-02-27T10:30:00Z"
        }
      ]
    }
    ```

---

## Add a line item

Add a new line item to an existing payment link.

The payment link ID.

Item name.

Item price in the token's smallest unit.

Quantity.

Item image URL.

```bash cURL
curl -X POST "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123/items" \
  -H "Authorization: Bearer asp_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Add-on: Priority Support",
    "amount": "10000000",
    "quantity": 1
  }'
```

```typescript SDK
const item = await platform.paymentLinks.addItem("pl_abc123", {
  name: "Add-on: Priority Support",
  amount: "10000000",
  quantity: 1,
});
```

**Response**

```json
    {
      "id": "pli_item002",
      "payment_link_id": "pl_abc123",
      "name": "Add-on: Priority Support",
      "amount": "10000000",
      "quantity": 1,
      "image_url": null,
      "created_at": "2026-02-27T11:00:00Z"
    }
    ```

---

## Remove a line item

Remove a line item from a payment link.

The payment link ID.

The line item ID.

```bash cURL
curl -X DELETE "https://platform-api.anyspend.com/api/v1/payment-links/pl_abc123/items/pli_item002" \
  -H "Authorization: Bearer asp_xxx"
```

```typescript SDK
await platform.paymentLinks.removeItem("pl_abc123", "pli_item002");
```

**Response**

```json
    {
      "id": "pli_item002",
      "deleted": true
    }
    ```