POST /v1/signup and GET /v1/plans to activate billing for the new account.1234567curl -X POST https://api.v2.dealmachine.com/v1/checkout \ -H "Authorization: Bearer dm_sk_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "price_id": "price_xxx_monthly", "quantity": 1 }'
12345{ "checkout_url": "https://checkout.stripe.com/c/pay/cs_test_123", "session_id": "cs_test_123", "expires_at": "2026-06-17T19:00:00.000Z" }
| Field | Type | Required | Description |
price_id | string | Yes | Stripe price ID from GET /v1/plans |
quantity | number | No | Seat quantity. Defaults to 1. |
stripe_price_ids.monthly or stripe_price_ids.annual value returned by GET /v1/plans.POST /v1/checkout only accepts public self-serve prices returned by GET /v1/plans.| Rule | Behavior |
| Scale plans | Rejected. Scale is sales-managed and not self-serve. |
| Private offer plans | Rejected unless they become public in the shared plan catalog. |
| Unknown Stripe prices | Rejected with invalid_price_id. |
| Quantity above plan max | Rejected with invalid_request. |
| More than 60,000 monthly data credits | Rejected with invalid_request. |
429 billing_rate_limited.| Field | Type | Description |
checkout_url | string | Stripe-hosted checkout URL |
session_id | string | Stripe checkout session ID |
expires_at | string | ISO 8601 timestamp when the session expires |