Commerce API
Manage subscriptions, billing, and payments.
Subscriptions
List Subscriptions
GET /v1/subscriptions
curl https://api.coditect.ai/v1/subscriptions \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"data": [
{
"id": "sub_abc123",
"status": "active",
"plan": {
"id": "plan_pro",
"name": "Professional",
"price": 4900,
"currency": "usd",
"interval": "month"
},
"quantity": 10,
"current_period_start": "2026-01-01T00:00:00Z",
"current_period_end": "2026-02-01T00:00:00Z",
"cancel_at_period_end": false
}
]
}
Create Subscription
POST /v1/subscriptions
curl -X POST https://api.coditect.ai/v1/subscriptions \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"plan_id": "plan_pro",
"quantity": 10,
"payment_method_id": "pm_xxx"
}'
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
plan_id | string | Yes | Plan identifier |
quantity | integer | Yes | Number of seats |
payment_method_id | string | Yes | Stripe payment method |
coupon_code | string | No | Discount code |
Response:
{
"data": {
"id": "sub_abc123",
"status": "active",
"client_secret": "pi_xxx_secret_xxx",
"requires_action": false
}
}
Cancel Subscription
POST /v1/subscriptions/{id}/cancel
curl -X POST https://api.coditect.ai/v1/subscriptions/sub_abc123/cancel \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cancel_immediately": false,
"reason": "Not using the product"
}'
Request Body:
| Field | Type | Default | Description |
|---|---|---|---|
cancel_immediately | boolean | false | Cancel now vs end of period |
reason | string | - | Cancellation reason |
Update Subscription
PATCH /v1/subscriptions/{id}
curl -X PATCH https://api.coditect.ai/v1/subscriptions/sub_abc123 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"quantity": 15
}'
Plans
List Plans
GET /v1/plans
curl https://api.coditect.ai/v1/plans
Response:
{
"data": [
{
"id": "plan_starter",
"name": "Starter",
"description": "For individuals and small teams",
"price": 0,
"currency": "usd",
"interval": "month",
"features": {
"seats": 1,
"ai_assistance": true,
"cloud_workstations": false,
"priority_support": false
}
},
{
"id": "plan_pro",
"name": "Professional",
"description": "For growing teams",
"price": 4900,
"currency": "usd",
"interval": "month",
"features": {
"seats": "unlimited",
"ai_assistance": true,
"cloud_workstations": true,
"priority_support": true
}
},
{
"id": "plan_enterprise",
"name": "Enterprise",
"description": "For large organizations",
"price": null,
"currency": "usd",
"interval": "month",
"contact_sales": true,
"features": {
"seats": "unlimited",
"ai_assistance": true,
"cloud_workstations": true,
"priority_support": true,
"sso": true,
"audit_logs": true,
"dedicated_support": true
}
}
]
}
Invoices
List Invoices
GET /v1/invoices
curl https://api.coditect.ai/v1/invoices \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"data": [
{
"id": "inv_abc123",
"number": "INV-2026-0001",
"status": "paid",
"amount_due": 49000,
"amount_paid": 49000,
"currency": "usd",
"created_at": "2026-01-01T00:00:00Z",
"paid_at": "2026-01-01T00:05:00Z",
"pdf_url": "https://api.coditect.ai/v1/invoices/inv_abc123/pdf",
"lines": [
{
"description": "Professional Plan (10 seats)",
"quantity": 10,
"unit_amount": 4900,
"amount": 49000
}
]
}
]
}
Download Invoice PDF
GET /v1/invoices/{id}/pdf
curl https://api.coditect.ai/v1/invoices/inv_abc123/pdf \
-H "Authorization: Bearer YOUR_TOKEN" \
-o invoice.pdf
Payment Methods
List Payment Methods
GET /v1/payment-methods
curl https://api.coditect.ai/v1/payment-methods \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"data": [
{
"id": "pm_abc123",
"type": "card",
"card": {
"brand": "visa",
"last4": "4242",
"exp_month": 12,
"exp_year": 2028
},
"is_default": true
}
]
}
Add Payment Method
POST /v1/payment-methods
curl -X POST https://api.coditect.ai/v1/payment-methods \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"payment_method_id": "pm_xxx",
"set_default": true
}'
Remove Payment Method
DELETE /v1/payment-methods/{id}
curl -X DELETE https://api.coditect.ai/v1/payment-methods/pm_abc123 \
-H "Authorization: Bearer YOUR_TOKEN"
Usage
Get Usage Summary
GET /v1/usage
curl https://api.coditect.ai/v1/usage \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"data": {
"period_start": "2026-01-01T00:00:00Z",
"period_end": "2026-02-01T00:00:00Z",
"seats": {
"included": 10,
"used": 8,
"peak": 10
},
"ai_tokens": {
"included": 1000000,
"used": 450000
},
"storage_gb": {
"included": 100,
"used": 23.5
}
}
}
Webhook Events
| Event | Description |
|---|---|
subscription.created | New subscription created |
subscription.updated | Subscription modified |
subscription.canceled | Subscription canceled |
subscription.expired | Subscription expired |
invoice.created | New invoice generated |
invoice.paid | Invoice payment successful |
invoice.payment_failed | Payment failed |
payment_method.attached | New payment method added |
payment_method.removed | Payment method removed |
SDK Examples
Python
from coditect import Client
client = Client(api_key="cdt_live_abc123...")
# Create subscription
subscription = client.subscriptions.create(
plan_id="plan_pro",
quantity=10,
payment_method_id="pm_xxx"
)
# List invoices
invoices = client.invoices.list()
for invoice in invoices:
print(f"{invoice.number}: ${invoice.amount_due / 100}")
JavaScript
import { CoditectClient } from '@coditect/sdk';
const client = new CoditectClient({
apiKey: 'cdt_live_abc123...'
});
// Create subscription
const subscription = await client.subscriptions.create({
planId: 'plan_pro',
quantity: 10,
paymentMethodId: 'pm_xxx'
});
// Cancel at period end
await client.subscriptions.cancel(subscription.id, {
cancelImmediately: false
});