auth.pollCheckpoint

Poll for mobile-app approval of a pending checkpoint challenge until it leaves pending.

Prerequisites

  • A Curviate API key, passed as apiKey when you construct the client. Quickstart shows how to create one.
  • A connected LinkedIn account. This call takes a real account id owned by your tenant; a placeholder is rejected. Quickstart covers connecting one, and accounts.list returns the account_id of each account already connected.

Signature

pollCheckpoint(accountId: string): Promise<AuthPollCheckpointResult>

Example

import { Curviate } from "@curviate/sdk";
 
const curviate = new Curviate({
  apiKey: "cvt_live_...",
  baseUrl: "https://api.curviate.com",
});
 
const result = await curviate.auth.pollCheckpoint("acc_YOUR_ACCOUNT_ID");
console.log(result.status);

Parameters

NameTypeRequiredDescription
accountIdstringYesThe account whose mobile-app-approval connect is mid-flight (returned with the 202 checkpoint_required response).

Returns

Resolves to AuthPollCheckpointResult. Top-level fields: object, status, recovered, account_id, full_name, headline, seat_id, attached_seat_id, external_id, owner_user_id, team_access, connection_location, expires_at, challenge_type, contracts, challenges, recovery_hint, safety_warning.

Error codes

CodeWhat it means, and what to do
UNAUTHORIZEDThe API key is missing, malformed, or revoked. Check the key you passed to the client.
INVALID_REQUESTA parameter failed validation. The message names the offending field; fix the request rather than retrying it.
RATE_LIMIT_ACCOUNTThis account's own quota is exhausted. Wait for the window in the Retry-After header, then retry.
RATE_LIMIT_TENANTThe tenant-wide quota is exhausted across all accounts. Slow the whole workload, not just this call.
PLATFORM_RATE_LIMITLinkedIn is throttling this account. Back off well beyond the hinted delay; sustained pressure risks the account.
PLATFORM_ERRORAn 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_NOT_FOUNDNo connected account with that id belongs to this tenant. List your accounts to get a current id.
CHECKPOINT_ALREADY_RESOLVEDThe challenge is already solved. Poll for the account's status instead.
CHECKPOINT_EXPIREDThe challenge timed out. Request a fresh one and solve it promptly.
CHECKPOINT_INVALID_CODEThe code was wrong. Ask the account owner for the current one and resubmit.
CHECKPOINT_MAX_ATTEMPTSToo many wrong codes. Restart the connect flow from the beginning.
CHECKPOINT_NOT_FOUNDNo challenge is pending for that account. Start the connect flow again.
CHECKPOINT_UNSUPPORTEDThis challenge type cannot be solved through the API. Sign in on LinkedIn directly first.
CONNECTION_IN_PROGRESSA connection attempt for this LinkedIn account is already open. Wait for it to finish or expire before starting another.
CONNECTION_LOCATION_UNAVAILABLENo connection is free in that country right now, or the change landed elsewhere. Try a nearby country or allow fallback; read connectionLocation for where the account connects from now.
INTERNALAn unexpected server error. Retry once; if it persists, it is ours, not yours.
LINKEDIN_AUTH_FAILEDLinkedIn rejected the credentials. Confirm them with the account owner.
LINKEDIN_COOKIE_INVALIDThe session cookie is expired or invalid. Supply a fresh one, or connect with credentials.
LINKEDIN_RATE_LIMITEDLinkedIn is rate limiting the sign-in itself. Wait substantially longer before retrying.
LINKEDIN_SERVICE_UNAVAILABLELinkedIn is unavailable, or the resource is still being prepared upstream. Retry with backoff.
PAYLOAD_TOO_LARGEThree limits can trigger this. The platform's own ceiling on total request size is the lowest and the one you are most likely to hit: it starts rejecting at roughly 1 MB, so a handful of photo-sized images is refused even though it clears everything below. Above that, this API caps one attachment at 5 MiB of file content and the whole request body at 9 MiB. Attachments travel base64-encoded, which inflates them by about a third, so a 5 MiB file costs roughly 6.7 MiB of the body budget. Send fewer or smaller attachments; retrying unchanged will not help.
REAUTH_REQUIREDA cookie replay cannot change an account's scope. Re-authenticate with credentials instead.
RESOURCE_NOT_FOUNDThe id in the path does not exist, or is not visible to this account. Re-read it from the list endpoint that produced it.

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.
  • auth.getSession: Poll a credential connect session by its account id, a pure status read that makes no external call and does not itself complete the connection.
  • auth.intent: Authenticate a LinkedIn account with credentials or a session cookie.
  • SDK Quick Start: installation, the client, account scoping, and pagination.