Skip to content

Orders And Subscriptions ​

Use this page to link external commerce records to licenses and reporting without treating LicenseKit as a billing engine.

Who This Is For ​

  • teams syncing order or subscription records from another system
  • developers linking commercial context to license issuance and renewal
  • operators using reporting filters tied to commerce records

When To Use This ​

Use orders and subscriptions when you need external commerce linkage, attribution, and reporting filters.

Do not use them as a replacement for your billing provider.

How It Works ​

Commerce management routes:

  • GET /api/v1/products/{id}/subscriptions
  • POST /api/v1/products/{id}/subscriptions
  • GET /api/v1/subscriptions/{id}
  • PATCH /api/v1/subscriptions/{id}
  • GET /api/v1/products/{id}/orders
  • POST /api/v1/products/{id}/orders
  • GET /api/v1/orders/{id}
  • PATCH /api/v1/orders/{id}

Scope split:

  • reads use product:read
  • writes use product:write

Important semantics from the API contract:

  • subscriptions require current_period_start and current_period_end
  • orders may omit period fields, but if one is present the other must be too
  • the service stores these records as linked external facts
  • the service does not add proration or billing-provider-specific behavior

License linkage behavior:

  • license create can persist order_id and subscription_id
  • if the order already links to a subscription and subscription_id is omitted, the subscription link is inferred
  • renewal-time order and subscription values are validated and written to audit metadata, but do not rewrite stored origin linkage

Example ​

Create a subscription:

bash
curl -X POST https://api.licensekit.dev/api/v1/products/prod_123/subscriptions \
  -H "Authorization: Bearer $LICENSEKIT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "cust_123",
    "external_system": "stripe",
    "external_id": "sub_abc",
    "status": "active",
    "current_period_start": "2026-04-01T00:00:00Z",
    "current_period_end": "2026-05-01T00:00:00Z"
  }'

Create an order:

bash
curl -X POST https://api.licensekit.dev/api/v1/products/prod_123/orders \
  -H "Authorization: Bearer $LICENSEKIT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "cust_123",
    "subscription_id": "sub_123",
    "external_system": "stripe",
    "external_id": "ord_abc",
    "status": "paid"
  }'

Common Mistakes ​

  • assuming orders and subscriptions imply billing-engine behavior
  • linking records across products that should not be linked
  • assuming renewal rewrites the license’s stored origin linkage

Prototype docs shell for the rewrite workspace.