Billing Guide
Zyntem uses Stripe for subscription management with per-location volume pricing. Your monthly cost scales with the number of locations you onboard.
Pricing tiers
Zyntem uses graduated (cumulative) pricing -- each tier applies only to locations within that range:
| Tier | Locations | Price per location |
|---|---|---|
| Starter | 1 -- 10 | €15/month |
| Growth | 11 -- 50 | €12/month |
| Scale | 51 -- 250 | €9/month |
| Enterprise | 251+ | €7/month |
Example calculation
For 30 locations:
| Range | Count | Rate | Subtotal |
|---|---|---|---|
| 1 -- 10 | 10 | €15 | €150 |
| 11 -- 30 | 20 | €12 | €240 |
| Total | 30 | €390/month |
Annual billing
Choose annual billing (billing_interval: "year") for a discounted rate. Annual pricing is configured in Stripe and applied automatically when you create or update your subscription.
Creating a subscription
curl -X POST https://api.zyntem.dev/v1/subscriptions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer zyn_test_abc123def456..." \
-d '{
"company_name": "Acme Corp",
"billing_email": "billing@acme.com",
"payment_method_id": "pm_1234567890",
"location_count": 10,
"billing_interval": "month"
}'
This creates a Stripe customer, attaches your payment method, and starts a subscription with the specified location count.
Response
{
"id": "sub_abc123",
"account_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"stripe_customer_id": "cus_abc123",
"stripe_subscription_id": "sub_stripe_abc123",
"status": "active",
"location_count": 10,
"billing_interval": "month",
"current_tier": "starter",
"monthly_amount": 15000,
"created_at": "2026-03-15T12:00:00Z"
}
The monthly_amount is in cents (€150.00 = 15000).
Updating location count
As you onboard more locations, update your subscription to reflect the new count:
curl -X PATCH https://api.zyntem.dev/v1/subscriptions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer zyn_test_abc123def456..." \
-d '{
"location_count": 30
}'
Stripe automatically prorates the charge for the remainder of the billing period.
Checking your subscription
curl https://api.zyntem.dev/v1/subscriptions \
-H "Authorization: Bearer zyn_test_abc123def456..."
Rate limit tiers
Your subscription's location count determines your API rate limit tier:
| Locations | Rate limit tier | Requests/min |
|---|---|---|
| 1 -- 10 | Starter | 1,000 |
| 11 -- 50 | Growth | 5,000 |
| 51 -- 250 | Scale | 5,000 |
| 251+ | Enterprise | 20,000 |
See the Rate Limiting guide for details on token bucket behavior and response headers.
Stripe webhooks
Zyntem processes Stripe webhook events to handle billing lifecycle changes:
| Event | Action |
|---|---|
invoice.payment_succeeded | Account restored if previously suspended |
invoice.payment_failed | Account suspended, notification email sent |
customer.subscription.deleted | Account suspended, notification email sent |
customer.subscription.updated | Update logged |
See the Stripe Webhooks API reference for endpoint details and signature verification.
Account suspension
If a payment fails or your subscription is cancelled, your account is suspended:
- API requests return errors
- Existing data is preserved
- Successful payment automatically restores access
A notification email is sent to your billing address when suspension begins.