Skip to main content

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:

TierLocationsPrice per location
Starter1 -- 10€15/month
Growth11 -- 50€12/month
Scale51 -- 250€9/month
Enterprise251+€7/month

Example calculation

For 30 locations:

RangeCountRateSubtotal
1 -- 1010€15€150
11 -- 3020€12€240
Total30€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:

LocationsRate limit tierRequests/min
1 -- 10Starter1,000
11 -- 50Growth5,000
51 -- 250Scale5,000
251+Enterprise20,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:

EventAction
invoice.payment_succeededAccount restored if previously suspended
invoice.payment_failedAccount suspended, notification email sent
customer.subscription.deletedAccount suspended, notification email sent
customer.subscription.updatedUpdate 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.