Products API
Create, search, update, and deactivate reusable catalog items via the Corinthian API.
Products represent reusable catalog entries for the services or goods you invoice repeatedly. Each product stores a default name, price, currency, optional SKU, optional billing unit, and optional tax rate that Corinthian can reuse when you build invoices.
The Product Object
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Web Development Package",
"description": "Full-stack web development services",
"sku": "WDP-001",
"price": "1500.00",
"currency": "USD",
"unit": "hour",
"taxRate": "8.50",
"isActive": true,
"usageCount": 12,
"userId": "8c8398b5-0732-4f92-b04e-0dfd4af8c7de",
"organizationId": "org_01abc",
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}price and taxRate are returned as decimal strings so clients do not lose precision.
Common Units
| Unit | Description |
|---|---|
hour | Hourly rate |
unit | Per unit/item |
project | Flat project fee |
month | Monthly recurring |
license | Per-seat or per-license billing |
Create a Product
POST /productsParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Product name |
description | string | No | Detailed description |
sku | string | null | No | Internal SKU or reference code |
price | string | Yes | Decimal string price such as "1500.00" |
currency | string | No | Three-letter ISO currency code. Defaults to USD. |
unit | string | No | Billing unit (see above) |
taxRate | string | null | No | Decimal percentage string such as "8.50" |
Example Request
curl -X POST https://api.conduitt.io/products \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Web Development Package",
"description": "Full-stack web development services",
"sku": "WDP-001",
"price": "1500.00",
"currency": "USD",
"unit": "hour",
"taxRate": "8.50"
}'Response
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Web Development Package",
"description": "Full-stack web development services",
"sku": "WDP-001",
"price": "1500.00",
"currency": "USD",
"unit": "hour",
"taxRate": "8.50",
"isActive": true,
"usageCount": 0,
"userId": "8c8398b5-0732-4f92-b04e-0dfd4af8c7de",
"organizationId": "org_01abc",
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}
}Retrieve a Product
GET /products/:idcurl https://api.conduitt.io/products/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer YOUR_API_KEY"List Products
GET /productsQuery Parameters
| Parameter | Type | Description |
|---|---|---|
limit | number | Results per page (1-100, default 50) |
offset | number | Number of products to skip (default 0) |
q | string | Case-insensitive partial match on product name |
includeInactive | boolean | Set to true to include inactive products |
Example
curl "https://api.conduitt.io/products?limit=20&offset=0&q=web&includeInactive=false" \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Web Development Package",
"price": "1500.00",
"unit": "hour",
"currency": "USD",
"isActive": true
},
{
"id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"name": "SEO Audit",
"price": "2500.00",
"unit": "project",
"currency": "USD",
"isActive": true
}
],
"meta": {
"total": 2,
"limit": 20,
"offset": 0
}
}Search Products
GET /products/searchUse the dedicated search endpoint when you want name, description, or SKU matching with active products only.
curl "https://api.conduitt.io/products/search?q=web&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"Update a Product
PATCH /products/:idOnly fields you send are updated. Existing invoice line items keep their original copied values even if you later change the product defaults.
curl -X PATCH https://api.conduitt.io/products/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"price": "1750.00",
"description": "Full-stack web development and consulting",
"isActive": false
}'Setting isActive to false hides the product from search and product pickers without deleting it.
Delete a Product
DELETE /products/:idDeleting a product permanently removes it from the catalog. Existing invoice line items that already copied the product data are not affected.
curl -X DELETE https://api.conduitt.io/products/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"id": "550e8400-e29b-41d4-a716-446655440000"
}Delete is permanent. If you want to keep historical catalog data while removing the product from future selection, update it with isActive: false instead.