Skip to content

Merchant API - Payments

Overview

The Merchant API Payments endpoints allow you to create, manage, and retrieve payment links for accepting cryptocurrency payments. All endpoints require Merchant API Key authentication with an Ed25519 (EdDSA) request signature (RSA-PSS accepted for legacy keys).

Base URL: https://sandboxapi.bitxpay.com/api/v1

Authentication: Merchant API Key (asymmetric Ed25519 / EdDSA signature)


Supported Cryptocurrencies

BITXpay supports multiple cryptocurrencies across various blockchain networks. When creating a payment link, you must specify a valid currency code.

Available Currencies

Currency CodeNameNetworks Available
AVAXAvalanche2 networks
BNBBNB3 networks
ETHEthereum5 networks
LINKChainLink6 networks
USDCUSD Coin7 networks
USDTTether USD7 networks
WBTCWrapped BTC5 networks
WETHWrapped Ethereum6 networks

Get Real-Time Currency List

Use the Get Currencies endpoint to retrieve the current list of supported currencies with their network IDs.

Currency Validation

When creating a payment link:

  1. Currency code is required - You must provide a valid currency code
  2. Case-sensitive - Use uppercase currency codes (e.g., USDT, not usdt)
  3. Length: 3-10 characters
  4. Network selection - The system will automatically select an available network for the currency

Example valid currencies:

json
{
  "currency": "USDT",  // ✅ Valid - Tether USD
  "currency": "ETH",   // ✅ Valid - Ethereum
  "currency": "USDC"   // ✅ Valid - USD Coin
}

Invalid examples:

json
{
  "currency": "usdt",  // ❌ Invalid - must be uppercase
  "currency": "BTC",   // ❌ Invalid - not supported (use WBTC)
  "currency": "XYZ"    // ❌ Invalid - currency doesn't exist
}

Endpoints

1. Get Currencies

Retrieve the complete list of supported cryptocurrencies with their network details.

Request

GET /payment_links/currencies

Authentication

X-API-Key: btxm_test_xxxxxxxxxxxx
X-API-Signature: <base64_encoded_ed25519_signature>
X-API-Timestamp: 2026-01-31T12:00:00Z
Accept: application/json

This endpoint takes no query parameters; it always returns the full supported currency list.

Response (200 OK)

json
{
  "message": "Currencies retrieved successfully",
  "data": [
    {
      "id": "25193059-4008-4522-8eb4-3c2583ee1ebf",
      "code": "USDT",
      "name": "Tether USD"
    },
    {
      "id": "eff091bc-223e-4326-b64f-140625b3f008",
      "code": "USDC",
      "name": "USD Coin"
    },
    {
      "id": "a93e5a54-9725-4af1-85be-c389ce485017",
      "code": "ETH",
      "name": "Ethereum"
    }
    // ... more currencies
  ]
}

Response Fields:

FieldTypeDescription
idstring (UUID)Unique identifier for the currency record
codestringCurrency code (use this when creating payment links)
namestringFull currency name

Multiple Networks

Some currencies like USDT and ETH are available on multiple networks (Ethereum, BSC, Polygon, etc.). This endpoint returns one entry per currency code; network selection is handled automatically server-side. When creating a payment link, you only need to specify the code.

Error Responses

StatusErrorDescription
401UnauthorizedMissing or invalid API key/signature
500Internal Server ErrorServer error

Example Request

bash
curl --location 'https://sandboxapi.bitxpay.com/api/v1/payment_links/currencies' \
  --header 'X-API-Key: btxm_test_xxxxxxxxxxxx' \
  --header 'X-API-Signature: <signature>' \
  --header 'X-API-Timestamp: 2026-01-31T12:00:00Z' \
  --header 'Accept: application/json'

Creates a new payment link for accepting payments.

Request

POST /payment_links

Authentication

X-API-Key: btxm_test_xxxxxxxxxxxx
X-API-Signature: <base64_encoded_ed25519_signature>
X-API-Timestamp: 2026-01-31T12:00:00Z
Content-Type: application/json

Request Body

FieldTypeRequiredDescriptionExample
payment_namestringYesPayment link name (1-100 chars)"Invoice #12345"
amountfloatYesPayment amount (must be > 0)100.50
currencystringYesCurrency code (3-10 chars, uppercase). Must be a valid currency from supported list"USDT"
descriptionstringNoPayment description (max 1000 chars)"Payment for Order #12345"
expires_attimestampNoExpiration time (ISO 8601)"2026-02-01T12:00:00Z"
max_usesintegerNoMaximum number of uses (must be > 0)1
customer_idstringNoMerchant's customer ID (1-100 chars)"AB-001"
customer_namestringNoCustomer name (1-100 chars)"John Doe"
customer_emailstringNoCustomer email (valid email)"john@example.com"
product_namestringNoProduct name (1-200 chars)"Course A"
product_descriptionstringNoProduct description (max 1000 chars)"Art Course for Beginners"
cartobjectNoShopping cart details with items, subtotal, tax, and totalSee cart object below
order_idstringNoMerchant's order ID (auto-generated if not provided)"ORD-20260226-A1B2C3"
auto_fillbooleanNoAuto-fill customer information (default: true)true
success_urlstringNoRedirect URL after success (valid URL, max 500 chars)"https://www.success.io/success.html"
cancel_urlstringNoRedirect URL after cancellation (valid URL, max 500 chars)"https://www.failure.io/cancel.html"
webhook_metadataobjectNoCustom metadata for webhooks
checkout_modestringNoCheckout flow mode"redirect"
originstringNoOrigin URL of the requesting application"https://yoursite.com"

Cart Object Structure:

json
{
  "cart": {
    "items": [
      {
        "name": "Course A",
        "product_id": "prod_001",
        "quantity": 1,
        "unit_price": 100.50,
        "total": 100.50
      }
    ],
    "shipping": 0,
    "subtotal": 100.50,
    "tax": 0,
    "total": 100.50
  }
}
FieldTypeRequiredDescription
itemsarrayYesArray of cart items
items[].namestringYesItem name
items[].product_idstringNoYour internal product identifier
items[].quantityintegerYesItem quantity (must be > 0)
items[].unit_pricefloatYesPrice per single unit
items[].totalfloatYesLine total (quantity × unit_price)
subtotalfloatYesSubtotal amount
shippingfloatNoShipping cost (default: 0)
taxfloatYesTax amount
totalfloatYesTotal amount (should match payment amount)

Response Variations

The API returns different response structures based on the parameters you provide:

  • Minimal Request (only required fields) → Returns minimal response with auto-generated customer_id and order_id
  • Full Request (with optional fields like cart, customer details) → Returns complete response with all provided data

Request Examples

Minimal Request:

json
{
  "payment_name": "Invoice #12345",
  "amount": 100.50,
  "currency": "USDT"
}

Full Request:

json
{
  "payment_name": "Invoice #12345",
  "description": "Payment for Order #12345",
  "amount": 100.50,
  "currency": "USDT",
  "expires_at": "2026-02-01T12:00:00Z",
  "max_uses": 1,
  "customer_id": "AB-001",
  "customer_name": "John Doe",
  "customer_email": "john@example.com",
  "product_name": "Course A",
  "product_description": "Art Course for Beginners",
  "cart": {
    "items": [
      {
        "name": "Course A",
        "product_id": "prod_001",
        "quantity": 1,
        "unit_price": 100.50,
        "total": 100.50
      }
    ],
    "shipping": 0,
    "subtotal": 100.50,
    "tax": 0,
    "total": 100.50
  },
  "checkout_mode": "redirect",
  "origin": "https://yoursite.com",
  "success_url": "https://www.success.io/success.html",
  "cancel_url": "https://www.failure.io/cancel.html",
  "webhook_metadata": {
    "merchant_id": "M-10001",
    "demo": true
  }
}

Response (201 Created)

The response structure varies based on the request parameters provided.

Minimal Response (when only required fields are provided):

json
{
  "message": "Payment link created successfully",
  "data": {
    "id": "f7a9ff0a-678f-45ba-a918-dcafc5d479e9",
    "payment_name": "Invoice #12345",
    "amount": 100.5,
    "currency": "USDT",
    "payment_url": "https://sandboxpay.bitxpay.com/payment_link?payment_id=f7a9ff0a-678f-45ba-a918-dcafc5d479e9",
    "payment_status": "pending",
    "payment_type": "one_time",
    "expires_at": "2026-03-13T15:21:12.988351519+05:00",
    "max_uses": 1,
    "current_uses": 0,
    "is_active": true,
    "customer_id": "CUST-20260312-96D009D4",
    "order_id": "ORD-20260312-E29917C9",
    "auto_fill": true,
    "created_at": "2026-03-12T15:21:12.988356Z"
  }
}

Full Response (when optional fields like cart, customer details are provided):

json
{
  "message": "Payment link created successfully",
  "data": {
    "id": "d26ffcc8-f013-464e-893a-d71ee1e849ae",
    "payment_name": "Invoice #12345",
    "description": "Payment for Order #12345",
    "amount": 100.5,
    "currency": "USDT",
    "payment_url": "https://sandboxpay.bitxpay.com/payment_link?payment_id=d26ffcc8-f013-464e-893a-d71ee1e849ae",
    "payment_status": "pending",
    "payment_type": "one_time",
    "source": "payment_link_api",
    "expires_at": "2026-02-01T12:00:00Z",
    "max_uses": 1,
    "current_uses": 0,
    "is_active": true,
    "is_test": false,
    "customer_id": "AB-001",
    "customer_name": "John Doe",
    "customer_email": "john@example.com",
    "product_name": "Course A",
    "product_description": "Art Course for Beginners",
    "cart": {
      "items": [
        {
          "name": "Course A",
          "product_id": "prod_001",
          "quantity": 1,
          "unit_price": 100.5,
          "total": 100.5
        }
      ],
      "shipping": 0,
      "subtotal": 100.5,
      "tax": 0,
      "total": 100.5
    },
    "order_id": "ORD-20260226-A1B2C3",
    "auto_fill": true,
    "success_url": "https://www.success.io/success.html",
    "cancel_url": "https://www.failure.io/cancel.html",
    "webhook_metadata": {
      "merchant_id": "M-10001",
      "demo": true
    },
    "created_at": "2026-07-05T07:30:05.703759Z"
  }
}

Response Fields:

FieldTypeDescription
idstring (UUID)Unique payment link identifier
payment_namestringPayment link name
descriptionstringPayment description (if provided)
amountfloatPayment amount
currencystringCurrency code
payment_urlstringURL for customers to complete payment
payment_statusstringStatus: pending, processing, completed, expired, cancelled
payment_typestringPayment type: one_time, recurring
sourcestringOrigin of the payment link: payment_link_api
is_testbooleanWhether this is a test payment
expires_attimestampExpiration timestamp
max_usesintegerMaximum number of uses allowed
current_usesintegerCurrent number of uses
is_activebooleanWhether the payment link is active
customer_idstringCustomer ID (auto-generated or provided)
customer_namestringCustomer name (if provided)
customer_emailstringCustomer email (if provided)
product_namestringProduct name (if provided)
product_descriptionstringProduct description (if provided)
cartobjectShopping cart details (if provided)
order_idstringOrder ID (auto-generated or provided)
auto_fillbooleanAuto-fill setting
success_urlstringSuccess redirect URL (if provided)
cancel_urlstringCancel redirect URL (if provided)
webhook_metadataobjectCustom webhook metadata (if provided)
created_attimestampCreation timestamp

Top-level response fields (alongside data):

FieldTypeDescription
messagestringHuman-readable result message

Error Responses

StatusErrorDescription
400Bad RequestInvalid request payload, validation failed, or unsupported currency
401UnauthorizedMissing or invalid API key/signature
409ConflictDuplicate payment link or resource conflict
500Internal Server ErrorServer error

Common 400 Errors:

  • Invalid currency code - Currency not supported or doesn't exist
  • Currency code must be uppercase - Use uppercase letters (e.g., USDT not usdt)
  • Currency is required - Missing currency field

Retrieve all payment links for the authenticated merchant with filtering, searching, and pagination.

Request

GET /payment_links?page=1&limit=20&status=pending&currency=USDT&sort_by=created_at&sort_order=desc

Query Parameters

ParameterTypeDefaultDescriptionExample
pageinteger1Page number (min: 1)1
limitinteger20Items per page (max: 100)20
statusstring-Filter by status: pending, processing, completed, expired, cancelled"pending"
is_activeboolean-Filter by active statustrue
currencystring-Filter by currency (3-10 chars)"USDT"
min_amountfloat-Minimum amount filter (must be > 0)10.00
max_amountfloat-Maximum amount filter (must be > 0)1000.00
created_fromtimestamp-Filter from date (ISO 8601)"2026-01-01T00:00:00Z"
created_totimestamp-Filter to date (ISO 8601)"2026-01-31T23:59:59Z"
searchstring-Search in name and description (max 100 chars)"Invoice"
sort_bystringcreated_atSort field: created_at, updated_at, amount, name"created_at"
sort_orderstringdescSort order: asc, desc"desc"

Response (200 OK)

The response includes an array of payment links with varying detail levels based on how they were created.

json
{
  "message": "Payment links retrieved successfully",
  "data": {
    "data": [
      {
        "id": "fce13397-afb5-4093-84c0-b64178691dbd",
        "payment_name": "Invoice #12345",
        "description": "Payment for Order #12345",
        "amount": 100.5,
        "currency": "USDT",
        "payment_url": "https://sandboxpay.bitxpay.com/payment_link?payment_id=fce13397-afb5-4093-84c0-b64178691dbd",
        "payment_status": "expired",
        "payment_type": "one_time",
        "expires_at": "2026-02-01T12:00:00Z",
        "max_uses": 1,
        "current_uses": 0,
        "is_active": true,
        "is_expired": true,
        "customer_id": "AB-001",
        "customer_name": "John Doe",
        "customer_email": "john@example.com",
        "product_name": "Course A",
        "product_description": "Art Course for Beginners",
        "cart": {
          "items": [
            {
              "name": "Course A",
              "product_id": "prod_001",
              "quantity": 1,
              "unit_price": 100.5,
              "total": 100.5
            }
          ],
          "shipping": 0,
          "subtotal": 100.5,
          "tax": 0,
          "total": 100.5
        },
        "order_id": "ORD-20260226-A1B2C3",
        "auto_fill": true,
        "success_url": "https://www.success.io/success.html",
        "cancel_url": "https://www.failure.io/cancel.html",
        "webhook_metadata": {
          "merchant_id": "M-10001",
          "note": "Test payment",
          "source": "payment_link"
        },
        "created_at": "2026-03-12T15:23:32.084432Z"
      },
      {
        "id": "f7a9ff0a-678f-45ba-a918-dcafc5d479e9",
        "payment_name": "Invoice #12345",
        "amount": 100.5,
        "currency": "USDT",
        "payment_url": "https://sandboxpay.bitxpay.com/payment_link?payment_id=f7a9ff0a-678f-45ba-a918-dcafc5d479e9",
        "payment_status": "processing",
        "payment_type": "one_time",
        "expires_at": "2026-03-13T15:21:12.988351Z",
        "max_uses": 1,
        "current_uses": 0,
        "is_active": true,
        "is_expired": false,
        "customer_id": "CUST-20260312-96D009D4",
        "order_id": "ORD-20260312-E29917C9",
        "auto_fill": true,
        "created_at": "2026-03-12T15:21:12.988356Z"
      }
    ],
    "pagination": {
      "current_page": 1,
      "per_page": 20,
      "total_pages": 2,
      "total_records": 31,
      "has_next_page": true,
      "has_prev_page": false
    },
    "filters": {
      "sort_by": "created_at",
      "sort_order": "desc"
    }
  }
}

Response Variations

Payment links in the list may have different fields depending on how they were created:

  • Links created with minimal data will only show core fields
  • Links created with full details (cart, customer info) will include all those fields

Error Responses

StatusErrorDescription
401UnauthorizedMissing or invalid API key/signature
500Internal Server ErrorServer error

Retrieve a specific payment link with all related details including payers, transactions, and summary statistics.

Request

GET /payment_links/{id}

Path Parameters

ParameterTypeDescriptionExample
idstringPayment Link ID (UUID)"22222222-2222-2222-2222-222222222222"

Response (200 OK)

The response structure varies based on how the payment link was created.

Full Response (payment link created with complete details):

json
{
  "message": "Payment link retrieved successfully",
  "data": {
    "id": "fce13397-afb5-4093-84c0-b64178691dbd",
    "payment_name": "Invoice #12345",
    "description": "Payment for Order #12345",
    "amount": 100.5,
    "currency": "USDT",
    "payment_url": "https://sandboxpay.bitxpay.com/payment_link?payment_id=fce13397-afb5-4093-84c0-b64178691dbd",
    "payment_status": "expired",
    "payment_type": "one_time",
    "expires_at": "2026-02-01T12:00:00Z",
    "max_uses": 1,
    "current_uses": 0,
    "is_active": true,
    "is_expired": true,
    "customer_id": "AB-001",
    "customer_name": "John Doe",
    "customer_email": "john@example.com",
    "product_name": "Course A",
    "product_description": "Art Course for Beginners",
    "cart": {
      "items": [
        {
          "name": "Course A",
          "product_id": "prod_001",
          "quantity": 1,
          "unit_price": 100.5,
          "total": 100.5
        }
      ],
      "shipping": 0,
      "subtotal": 100.5,
      "tax": 0,
      "total": 100.5
    },
    "order_id": "ORD-20260226-A1B2C3",
    "auto_fill": true,
    "success_url": "https://www.success.io/success.html",
    "cancel_url": "https://www.failure.io/cancel.html",
    "webhook_metadata": {
      "merchant_id": "M-10001",
      "note": "Test payment",
      "source": "payment_link"
    },
    "summary": {
      "total_payers": 0,
      "total_transactions": 0,
      "total_amount_received": 0,
      "total_amount_received_crypto": 0,
      "pending_transactions": 0,
      "completed_transactions": 0,
      "failed_transactions": 0
    },
    "created_at": "2026-03-12T15:23:32.084432Z"
  }
}

Minimal Response (payment link created with only required fields):

json
{
  "message": "Payment link retrieved successfully",
  "data": {
    "id": "f7a9ff0a-678f-45ba-a918-dcafc5d479e9",
    "payment_name": "Invoice #12345",
    "amount": 100.5,
    "currency": "USDT",
    "payment_url": "https://sandboxpay.bitxpay.com/payment_link?payment_id=f7a9ff0a-678f-45ba-a918-dcafc5d479e9",
    "payment_status": "processing",
    "payment_type": "one_time",
    "expires_at": "2026-03-13T15:21:12.988351Z",
    "max_uses": 1,
    "current_uses": 0,
    "is_active": true,
    "is_expired": false,
    "customer_id": "CUST-20260312-96D009D4",
    "order_id": "ORD-20260312-E29917C9",
    "auto_fill": true,
    "summary": {
      "total_payers": 0,
      "total_transactions": 0,
      "total_amount_received": 0,
      "total_amount_received_crypto": 0,
      "pending_transactions": 0,
      "completed_transactions": 0,
      "failed_transactions": 0
    },
    "created_at": "2026-03-12T15:21:12.988356Z"
  }
}

Response Fields:

FieldTypeDescription
idstring (UUID)Unique payment link identifier
payment_namestringPayment link name
descriptionstringPayment description (if provided)
amountfloatPayment amount
currencystringCurrency code
payment_urlstringURL for customers to complete payment
payment_statusstringStatus: pending, processing, completed, expired, cancelled
payment_typestringPayment type: one_time, recurring
expires_attimestampExpiration timestamp
max_usesintegerMaximum number of uses allowed
current_usesintegerCurrent number of uses
is_activebooleanWhether the payment link is active (merchant-controlled; distinct from is_expired)
is_expiredbooleanWhether the payment link's expires_at has passed
customer_idstringCustomer ID (auto-generated or provided)
customer_namestringCustomer name (if provided)
customer_emailstringCustomer email (if provided)
product_namestringProduct name (if provided)
product_descriptionstringProduct description (if provided)
cartobjectShopping cart details (if provided)
order_idstringOrder ID (auto-generated or provided)
auto_fillbooleanAuto-fill setting
success_urlstringSuccess redirect URL (if provided)
cancel_urlstringCancel redirect URL (if provided)
webhook_metadataobjectCustom webhook metadata (if provided)
summaryobjectTransaction summary statistics
summary.total_payersintegerTotal number of unique payers
summary.total_transactionsintegerTotal number of transactions
summary.total_amount_receivedfloatTotal amount received in fiat
summary.total_amount_received_cryptofloatTotal amount received in crypto
summary.pending_transactionsintegerNumber of pending transactions
summary.completed_transactionsintegerNumber of completed transactions
summary.failed_transactionsintegerNumber of failed transactions
created_attimestampCreation timestamp

Summary Field

The summary object is always included in the response and provides real-time statistics about payments received for this payment link.

Error Responses

StatusErrorDescription
400Bad RequestInvalid payment link ID format
401UnauthorizedMissing or invalid API key/signature
404Not FoundPayment link not found
500Internal Server ErrorServer error

Soft delete a payment link by its ID.

Request

DELETE /payment_links/{id}

Path Parameters

ParameterTypeDescriptionExample
idstringPayment Link ID (UUID)"22222222-2222-2222-2222-222222222222"

Response (200 OK)

json
{
  "message": "Payment link deleted successfully",
  "data": {
    "id": "22222222-2222-2222-2222-222222222222",
    "payment_name": "Invoice #12345",
    "description": "Payment for Order #12345",
    "amount": 100.50,
    "currency": "USDT",
    "payment_url": "https://sandboxpay.bitxpay.com/payment_link?payment_id=22222222-2222-2222-2222-222222222222",
    "payment_status": "cancelled",
    "payment_type": "one_time",
    "expires_at": "2026-02-01T12:00:00Z",
    "max_uses": 1,
    "current_uses": 0,
    "is_active": false,
    "is_expired": false,
    "customer_id": "AB-001",
    "customer_name": "John Doe",
    "customer_email": "john@example.com",
    "product_name": "Course A",
    "product_description": "Art Course for Beginners",
    "success_url": "https://www.success.io/success.html",
    "cancel_url": "https://www.failure.io/cancel.html",
    "webhook_metadata": {"order_id": "12345"},
    "created_at": "2026-01-31T10:00:00Z"
  }
}

Error Responses

StatusErrorDescription
400Bad RequestInvalid payment link ID
401UnauthorizedMissing or invalid API key/signature
404Not FoundPayment link not found
500Internal Server ErrorServer error

Authentication

All requests require the following headers:

X-API-Key: btxm_test_xxxxxxxxxxxx      # btxm_live_xxxxxxxxxxxx in production
X-API-Signature: <base64_encoded_ed25519_signature>
X-API-Timestamp: 2026-01-31T12:00:00Z
Content-Type: application/json

Signing Process

  1. Construct message:

    message = METHOD + PATH + TIMESTAMP + BODY
  2. Sign with Ed25519 (EdDSA):

    • Do not pre-hash — Ed25519 hashes the message internally (SHA-512)
    • Produce the raw 64-byte signature
    • Encode as Base64
    • (Legacy RSA keys: sign with RSA-PSS + SHA-256 instead, then Base64-encode)
  3. Include in request headers

For detailed implementation examples in various languages, see the Merchant API Authentication Guide.


Rate Limiting

  • Create Payment Link: 10 requests per minute per API key
  • List Payment Links: 30 requests per minute per API key
  • Get Payment Link: 30 requests per minute per API key
  • Delete Payment Link: 10 requests per minute per API key

Common Use Cases

Get Available Currencies

Before creating a payment link, fetch the list of supported currencies:

bash
curl https://sandboxapi.bitxpay.com/api/v1/payment_links/currencies \
  -H "X-API-Key: btxm_test_xxxxxxxxxxxx" \
  -H "X-API-Signature: <signature>" \
  -H "X-API-Timestamp: 2026-01-31T12:00:00Z" \
  -H "Accept: application/json"
bash
curl -X POST https://sandboxapi.bitxpay.com/api/v1/payment_links \
  -H "X-API-Key: btxm_test_xxxxxxxxxxxx" \
  -H "X-API-Signature: <signature>" \
  -H "X-API-Timestamp: 2026-01-31T12:00:00Z" \
  -H "Content-Type: application/json" \
  -d '{
    "payment_name": "Product Purchase",
    "amount": 99.99,
    "currency": "USDT"
  }'
bash
curl -X POST https://sandboxapi.bitxpay.com/api/v1/payment_links \
  -H "X-API-Key: btxm_test_xxxxxxxxxxxx" \
  -H "X-API-Signature: <signature>" \
  -H "X-API-Timestamp: 2026-01-31T12:00:00Z" \
  -H "Content-Type: application/json" \
  -d '{
    "payment_name": "Premium Course",
    "amount": 299.99,
    "currency": "USDC",
    "description": "Advanced Web Development Course",
    "customer_email": "customer@example.com",
    "product_name": "Web Dev Pro",
    "success_url": "https://yoursite.com/success",
    "cancel_url": "https://yoursite.com/cancel"
  }'
bash
curl https://sandboxapi.bitxpay.com/api/v1/payment_links?status=pending&currency=USDT&limit=10 \
  -H "X-API-Key: btxm_test_xxxxxxxxxxxx" \
  -H "X-API-Signature: <signature>" \
  -H "X-API-Timestamp: 2026-01-31T12:00:00Z"
bash
curl -X DELETE https://sandboxapi.bitxpay.com/api/v1/payment_links/{id} \
  -H "X-API-Key: btxm_test_xxxxxxxxxxxx" \
  -H "X-API-Signature: <signature>" \
  -H "X-API-Timestamp: 2026-01-31T12:00:00Z" \
  -H "Content-Type: application/json"

Support

For questions or issues: