Account & billing
Profile and company
| Method | Endpoint | Purpose |
|---|---|---|
GET | /profile | The member the key belongs to. |
PUT | /profile | Update that member's profile. |
GET | /company | Company record. |
PUT | /company | Update it. |
GET / PUT | /settings | Company settings. |
GET / PUT | /white-labelling | White-label branding. |
GET /profile is the cheapest way to verify a key works and see which member and company it resolves to. Use it as a health check.
Members and roles
| Method | Endpoint | Purpose |
|---|---|---|
GET / POST / DELETE | /member | List / invite / remove. |
POST | /member/bulk | Invite many at once. |
GET / PUT | /member/:id | One member. |
PUT | /member/block/:id | Block. |
PUT | /member/unblock/:id | Unblock. |
PUT | /member/transfer-ownership/:id | Transfer company ownership. |
ALL | /member/invite/:id | Resend an invitation. |
GET / POST / DELETE | /role | Manage roles. |
GET / PUT | /role/:id | One role. |
:::warning Roles do not constrain an API key Roles gate the web-app session path. The key path skips role enforcement entirely — see What a key can reach. Managing roles through the API is still useful for the humans in the account; it does not limit the key doing the managing. :::
Ownership transfer is irreversible without the new owner's cooperation. Confirm before calling it.
Plans and subscriptions
These sit above the subscription check, so they stay reachable when a subscription has lapsed.
| Method | Endpoint | Purpose |
|---|---|---|
GET | /plans | Available plans. |
GET | /plans/:id | One plan. |
POST | /subscription | Create a subscription. |
POST | /subscription/preview | Price a change before making it. |
POST | /subscription/change | Change plan. |
POST | /subscription/seats/preview | Price a seat change. |
POST | /subscription/seats/change | Change seats. |
GET | /subscription/history | Past subscriptions. |
GET | /subscription/list | All subscriptions. |
GET | /subscription/upcoming | Queued future changes. |
DELETE | /subscription/queued | Cancel all queued changes. |
DELETE | /subscription/queued/:subscriptionId | Cancel one queued change. |
DELETE | /subscription/current | Cancel the current subscription. |
DELETE | /subscription/:subscriptionId | Cancel a specific one. |
Always preview before change — it returns the proration and the amount that will actually be charged.
Payments
| Method | Endpoint | Provider |
|---|---|---|
POST | /razorpay | Create a Razorpay order. |
POST | /razorpay/capture | Capture it. |
POST | /stripe | Stripe. |
POST | /paypal | PayPal. |
POST | /payu | PayU. |
POST | /phonepe | PhonePe. |
POST | /manual-payment | Record an offline payment. |
GET | /coupons/:code | Validate a coupon. |
:::note PayU has no capture endpoint here
PayU returns the browser to a public success/failure URL and notifies a public webhook, neither of which carries your credentials. Both live on the public (unauthenticated) routes, not under /key/protected.
:::
Transactions
| Method | Endpoint | Purpose |
|---|---|---|
GET | /transaction-history | All transactions. |
GET | /transaction-history/:id | One transaction. |
GET | /transaction-history/:id/invoice | Invoice PDF. |
Reference data
| Method | Endpoint | Purpose |
|---|---|---|
GET | /timezone | List timezones. |
GET | /timezone/search?q= | Search. |
GET | /timezone/stats | Statistics. |
GET / PUT / DELETE | /timezone/:id | One timezone. |
POST | /timezone | Create. |
POST | /timezone/initialize | Seed from the bundled dataset. |
GET | /geography/search?q= | Autocomplete cities, states and countries. |
/geography/search needs at least two characters and returns up to six cities, six states and six countries, each with a label and a type. Use it to normalize location input before writing it to a contact.