accounts.cancelSeat
Schedule a seat's cancellation at the end of the current period.
Prerequisites
- A Curviate API key, passed as
apiKeywhen you construct the client. Quickstart shows how to create one.
Signature
cancelSeat(seatId: string): Promise<SeatCancelResult>Example
import { Curviate } from "@curviate/sdk";
const curviate = new Curviate({
apiKey: "cvt_live_...",
baseUrl: "https://api.curviate.com",
});
const { effective_at } = await curviate.accounts.cancelSeat("seat_123");Parameters
| Name | Type | Required | Description |
|---|---|---|---|
seatId | string | Yes | The seat ID (seat_...) to cancel. |
Returns
Resolves to SeatCancelResult. Top-level fields: effective_at, safety_warning.
Error codes
| Code | What it means, and what to do |
|---|---|
UNAUTHORIZED | The API key is missing, malformed, or revoked. Check the key you passed to the client. |
INVALID_REQUEST | A parameter failed validation. The message names the offending field; fix the request rather than retrying it. |
RATE_LIMIT_ACCOUNT | This account's own quota is exhausted. Wait for the window in the Retry-After header, then retry. |
RATE_LIMIT_TENANT | The tenant-wide quota is exhausted across all accounts. Slow the whole workload, not just this call. |
PLATFORM_ERROR | An upstream failure, usually transient: retry once with backoff before treating it as a real error. Check the response first, though. When it carries retry_likely_to_succeed: false and retry_hint: {kind: "never"}, retrying cannot help and backing off only delays the real answer. |
ACCOUNT_DISPUTED | A payment on this workspace is disputed. Settle it with your bank or card issuer, or contact support; retrying will not help. |
ALREADY_CANCELLED | The seat's cancellation already took effect. Add a new seat instead. |
INSUFFICIENT_ROLE | Your role in the team does not allow this action. Ask a team Owner to do it or to change your role; retrying will not help. |
PAYMENT_REQUIRED | The workspace has no active subscription, or its subscription is past due. Subscribe, or update the payment method, then retry. |
SEAT_NOT_FOUND | The seat id does not exist for this tenant. |
SUBSCRIPTION_BUSY | Another change to this subscription was in progress. After a seat add, check the seat count before retrying, since the purchase may have gone through; otherwise retry in a few seconds. |
SUBSCRIPTION_NOT_FOUND | No active subscription exists for this tenant. Buy one first, then retry. |
TRIAL_ACTIVE_SEAT_LIMIT | The workspace is on a free trial, which cannot add or change seats. Buy a seat to convert to a paid subscription first. |
Every code above is a stable CurviateError.code you can branch on. The full list, the response envelope, and retry semantics are in the Error codes reference.
Next steps
- Quickstart: connect a LinkedIn account. An empty account list means the key works and nothing is connected yet.
accounts.list: List the tenant's connected LinkedIn accounts, cursor-paginated.accounts.listSeats: List the workspace's live seats: each seat_id, whether an account occupied it, and that account_id (null when free).- SDK Quick Start: installation, the client, account scoping, and pagination.