Lucius API
Contracts

Create a sample test contract

POST /v1/billing/contracts with `{ customer_id }`. Lucius generates the contract id, a sample CSA, and usage metrics `domestic_wire` and `international_wire`.

A dashboard customer is not a billing contract. After you create the customer under Counterparties, call this endpoint with that UUID.

curl -X POST https://api-dev.lucius.finance/v1/billing/contracts \
  -H "Authorization: Bearer luc_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"customer_id":"YOUR_CUSTOMER_UUID"}'

Production host: https://api.lucius.finance. Body is only customer_id — do not send a name or a contract id. Lucius sets id to {slug}-test (timestamp suffix if that id already exists).

POST
/v1/billing/contracts

Authorization

AuthorizationBearer <token>

API key as Bearer token: Authorization: Bearer luc_live_.... Create keys in the dashboard under Settings > API Keys.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X POST "https://example.com/v1/billing/contracts" \  -H "Content-Type: application/json" \  -d '{    "customer_id": "316301ff-ecd8-48cc-a4c4-92c7c6ba33f1"  }'
{  "object": "contract",  "id": "acme-corp-test",  "customer_id": "316301ff-ecd8-48cc-a4c4-92c7c6ba33f1",  "customer_name": "Acme Corp",  "status": "active",  "start_date": "2026-09-29",  "end_date": "2027-09-29",  "currency": "USD",  "billing_cadence": "monthly",  "metrics": [    "domestic_wire",    "international_wire"  ],  "pdf_url": "https://example.blob.vercel-storage.com/sample.pdf",  "sample": true}

{  "error": "Missing API key"}

{  "error": "Not found"}