Developer API
Programmatically manage VPN subscriptions for your users. Give us an email — get back a ready-to-use subscription link.
Quick Start (3 steps)
Example — create a subscription
Authentication
All requests must include your API Key in the X-Api-Key header.
Base URL
API Endpoints
/openapi/v1/subscriptions
Create subscription
Creates a new subscription for the given email. Returns the subscription URL to deliver to your user.
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
| string | required | Subscriber email (unique per subscription) | |
| plan_id | string | optional | 7d / 30d / 90d / 365d — default: 30d |
| memo | string | optional | Internal note (not shown to user, logged in audit trail) |
Example Request
Response 201
409 is returned if the email already has an active subscription — use /renew to extend.
/openapi/v1/subscriptions/{email}
Query subscription
Retrieve the current status of a subscription by email.
Response 200
/openapi/v1/subscriptions/{email}/renew
Renew subscription
Extend an existing subscription. Two modes: extend (adds days to current expiry) or reset (starts fresh from today).
| Field | Type | Required | Description |
|---|---|---|---|
| plan_id | string | required | 7d / 30d / 90d / 365d |
| mode | string | optional | extend (default) or reset |
Response 200
/openapi/v1/subscriptions/{email}
Revoke subscription
Disables (soft-revokes) the subscription for this email. The subscription record is retained but its status becomes revoked, and access is removed on the next sync. Only acts on subscriptions created by your API key.
Response 200
/openapi/v1/subscriptions
List subscriptions
Paginated list of subscriptions created by your API key. Only your own subscriptions are returned — other tenants' data is never exposed.
| Field | Type | Required | Description |
|---|---|---|---|
| page | int | optional | Page number, 1-based. Default 1. |
| per_page | int | optional | Items per page. Default 20, max 100 (clamped). |
| status | string | optional | Filter: active / expired / all (default all). |
Response 200
/openapi/v1/me
API Key info
Get information about the current API key and today's usage.
Error Codes
All errors follow a consistent format:
| HTTP | error.code | Description |
|---|---|---|
| 400 | invalid_email | Invalid email format |
| 400 | invalid_plan_id | plan_id not recognized |
| 401 | missing_api_key | X-Api-Key header missing |
| 401 | invalid_api_key | API Key invalid or revoked |
| 403 | ip_not_whitelisted | Source IP not in whitelist |
| 404 | subscription_not_found | No subscription for this email |
| 409 | email_already_exists | Active subscription exists — use renew |
| 429 | rate_limit_exceeded | Rate limit exceeded — check Retry-After header |
| 500 | internal_error | Server error |
Rate Limits
When a limit is exceeded, the response is 429 with a Retry-After header indicating seconds to wait. Limits can be raised — contact us.
Apply for API Access
Fill in the form below to apply. We'll review your application and get back to you with your API Key.
Have a key already? Jump to the Quick Start above. Contact support