Skip to main content

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:

FieldTypeRequiredDescription
plan_idstringYesPlan identifier
quantityintegerYesNumber of seats
payment_method_idstringYesStripe payment method
coupon_codestringNoDiscount 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:

FieldTypeDefaultDescription
cancel_immediatelybooleanfalseCancel now vs end of period
reasonstring-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

EventDescription
subscription.createdNew subscription created
subscription.updatedSubscription modified
subscription.canceledSubscription canceled
subscription.expiredSubscription expired
invoice.createdNew invoice generated
invoice.paidInvoice payment successful
invoice.payment_failedPayment failed
payment_method.attachedNew payment method added
payment_method.removedPayment 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
});