Product overview
Everything in
one commerce
API.
A batteries-included backend that stays out of your UI. Deploy once, use from any frontend, framework, or platform.
Read the API Reference →[Screenshot: Product catalog UI]
Order management that gets out of your way
From cart to fulfillment, every order state is a first-class API concept. Track line items, apply discounts, record fulfillment events, handle partial returns — all via REST. Build your own checkout UI or use ours.
- —Custom order statuses and lifecycle hooks
- —Line-item level discount and tax support
- —Partial fulfillment and split shipments
- —Order notes, tags, and internal metadata
[Screenshot: Orders list with filters]
Rich profiles, full data ownership
Every customer is a stored profile with order history, saved addresses, and custom metadata. No vendor lock-in — your data lives in your PostgreSQL database.
- —Full customer CRUD with address book
- —Order history and lifetime value
- —Searchable, filterable customer list
- —GDPR-friendly — delete or export any record
[Screenshot: Customer profile view]
Real-time events, delivered reliably
Subscribe to commerce events and receive signed HTTP payloads at your endpoints. Automatic retries with exponential backoff, a delivery log for every attempt.
- —HMAC-signed payloads for security
- —Automatic retry with exponential backoff
- —Per-webhook delivery logs and status
- —Event types: orders, payments, inventory
[Screenshot: Webhook event log]
Asset management on Cloudflare R2
Upload product images and files directly to Cloudflare R2 via presigned URLs. No egress fees, instant global CDN delivery, and a media browser in the admin panel.
- —Direct browser-to-R2 uploads via presigned URLs
- —Zero egress costs compared to S3
- —Instant CDN via Cloudflare global network
- —Media library in the admin UI
[Screenshot: R2 media browser]
Typed JS/TS SDK
included.
Use the @cartd/sdk package for a typed, intuitive client that wraps the entire REST API. Full IntelliSense, zero manual fetch calls.
import { Cartd } from '@cartd/sdk'
const client = new Cartd({
apiKey: process.env.CARTD_API_KEY,
storeId: process.env.CARTD_STORE_ID,
})
// List active products
const { products } = await client.products.list({
status: 'active',
page: 1,
limit: 20,
})
// Create an order
const order = await client.orders.create({
customerId: 'cus_01HX...',
items: [
{ productId: 'prod_01HX...', quantity: 2 },
],
shippingAddress: {
line1: '123 Main St',
city: 'San Francisco',
country: 'US',
},
})
// Register a webhook
await client.webhooks.register({
url: 'https://your-app.com/api/webhooks',
events: ['order.created', 'payment.captured'],
})How we stack up.
| Feature | cartd | Medusa | Shopify |
|---|---|---|---|
| Self-hosted | ✓ | ✓ | ✗ |
| Open source | ✓ | ✓ | ✗ |
| REST API first | ✓ | ✓ | Partial |
| TypeScript SDK | ✓ | ✓ | ✗ |
| Bring your own frontend | ✓ | ✓ | Partial |
| Built-in admin UI | ✓ | ✓ | ✓ |
| No platform fees | ✓ | ✓ | ✗ |
| BYOK emails | ✓ | ✗ | ✗ |
| Cloudflare R2 media | ✓ | ✗ | ✗ |
| Zero-config Railway deploy | ✓ | ✗ | ✓ |