Detailed API Index

Auth and base

Base URL: https://api.licensechain.app/v1

Header format: Authorization: Bearer <token> where token is either user JWT or app API key.

Products

  • GET /products list seller-owned products with filters and pagination
  • POST /products create product
  • GET /products/:id get one product
  • PUT /products/:id update product (replace provided fields)
  • PATCH /products/:id partial update (same body rules as PUT)
  • DELETE /products/:id delete product (409 if linked licenses/subscriptions exist)

Create product payload

{
  "name": "Pro Monthly",
  "description": "Recurring access to premium feature set",
  "price": 49.99,
  "currency": "USD",
  "active": true,
  "successUrl": "https://merchant.example.com/pay/success",
  "cancelUrl": "https://merchant.example.com/pay/cancel",
  "helpUrl": "https://merchant.example.com/help",
  "supportUrl": "https://merchant.example.com/support",
  "termsUrl": "https://merchant.example.com/terms",
  "privacyUrl": "https://merchant.example.com/privacy",
  "refundUrl": "https://merchant.example.com/refund",
  "productType": "subscription",
  "billingType": "recurring",
  "interval": "month",
  "stripePriceIdRecurring": "price_1AbCdEfGhIjKlMn",
  "stripeTaxEnabled": true,
  "stripeIdentityRequired": false,
  "cryptoPaymentsEnabled": true,
  "hideEmail": false,
  "autoRedirect": false
}

Product response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "userId": "user_123",
  "name": "Pro Monthly",
  "description": "Recurring access to premium feature set",
  "price": 49.99,
  "currency": "USD",
  "active": true,
  "successUrl": "https://merchant.example.com/pay/success",
  "cancelUrl": "https://merchant.example.com/pay/cancel",
  "helpUrl": "https://merchant.example.com/help",
  "supportUrl": "https://merchant.example.com/support",
  "termsUrl": "https://merchant.example.com/terms",
  "privacyUrl": "https://merchant.example.com/privacy",
  "refundUrl": "https://merchant.example.com/refund",
  "productType": "subscription",
  "billingType": "recurring",
  "interval": "month",
  "stripePriceIdRecurring": "price_1AbCdEfGhIjKlMn",
  "stripeTaxEnabled": true,
  "stripeIdentityRequired": false,
  "cryptoPaymentsEnabled": true,
  "hideEmail": false,
  "autoRedirect": false,
  "licenseEmails": [
    "licenses-a@merchant.example.com",
    "licenses-b@merchant.example.com"
  ],
  "sendLicenseToCustomer": true,
  "callbackSecret": "base64url_or_base64_secret_from_product_record",
  "createdAt": "2026-05-11T07:00:00.000Z",
  "updatedAt": "2026-05-11T07:00:00.000Z"
}

Transactions

  • POST /transactions batched transaction details by ids/email/window
  • POST /transaction/status status for one transaction id

Status request

{
  "transaction": "pi_3RxExample123"
}

Status response

{
  "status": 200,
  "transactionStatus": "paid",
  "transactionStatusReason": "Transaction successfully completed",
  "info": "",
  "transaction": {
    "transactionId": "pi_3RxExample123",
    "transactionStatus": "paid",
    "statusReason": "Transaction successfully completed",
    "licenseId": "lic_abc123",
    "productId": "prod_8c9a1d74",
    "amount": 49.99,
    "currency": "USD",
    "email": "buyer@example.com",
    "timestamp": "2026-05-11T07:01:00.000Z",
    "paymentProvider": "stripe"
  }
}

Licenses and verification

  • POST /licenses/verify public license verification
  • GET /licenses/jwks JWT verification keys
  • POST /licenses/introspect live token introspection
  • POST /licenses/revoke-token revoke by jti
  • GET /apps/:appId/licenses and POST /apps/:appId/licenses app-scoped license CRUD

Verify request/response

{
  "key": "LC-XXXXXX-XXXXXX-XXXXXX",
  "hwuid": "optional-device-id"
}
{
  "valid": true,
  "status": "ACTIVE",
  "expiresAt": "2025-12-31T23:59:59Z",
  "email": "user@example.com",
  "verificationType": "custom",
  "license_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImxpY2Vuc2VjaGFpbi0xIn0....signature",
  "license_token_expires_at": "2024-01-01T01:00:00.000Z",
  "license_jwks_uri": "https://api.licensechain.app/v1/licenses/jwks"
}

Webhooks and analytics

  • GET/POST /webhooks, GET/PUT/DELETE /webhooks/:id, POST /webhooks/:id/test
  • GET /analytics/stats, /analytics/revenue, /analytics/licenses, /analytics/users
  • POST /stripe/create-payment-intent, /stripe/confirm-payment, /stripe/webhook