accounts.revertSeatCancellation
Undo a scheduled seat cancellation before it takes effect.
Prerequisites
- A Curviate API key, passed as
apiKeywhen you construct the client. Quickstart shows how to create one.
Signature
revertSeatCancellation(seatId: string): Promise<SeatCancelRevertResult>Example
import { Curviate } from "@curviate/sdk";
const curviate = new Curviate({
apiKey: "cvt_live_...",
baseUrl: "https://api.curviate.com",
});
await curviate.accounts.revertSeatCancellation("seat_123");Parameters
| Name | Type | Required | Description |
|---|---|---|---|
seatId | string | Yes | The seat ID (seat_...) whose scheduled cancellation to revert. |
Returns
Resolves to SeatCancelRevertResult. Top-level fields: reverted, 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. |
CANCELLATION_ALREADY_EFFECTIVE | Nothing is scheduled to revert: the seat was never cancelled, was already reverted, or its cancellation took effect. |
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. |
INVALID_CANCELLATION_SOURCE | The whole subscription is scheduled to cancel, not this seat, so seats cannot be restored one at a time. Resume the subscription instead. |
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. |
STRIPE_DRIFT_DETECTED | The seat price configured on our side does not match the price you were shown, so completing this would bill an amount you never saw. Nothing was charged. Not something you can fix by retrying: it fails identically until we correct the price, so stop and contact support. |
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.