JavaScript SDK: swarmhit.accounts.checkpoint.solve(accountId, params)
Answer the verification step LinkedIn asked for. code is the verification code for 2FA and OTP, the phone number for PHONE_REGISTER (with its dialling code in brackets, e.g. (+33)0612345678), or the literal TRY_ANOTHER_WAY to make LinkedIn offer a different method — the way out of an in-app approval nobody can reach.
status is connected once the sender is live, or checkpoint_required with the next checkpoint when LinkedIn chained another step. A rejected, expired or unanswerable challenge is a 400 whose error.code is one of checkpoint_code_rejected, checkpoint_expired (the five-minute window closed, so reconnect to start a fresh attempt), checkpoint_rate_limited, checkpoint_restricted, checkpoint_no_code (this type has nothing to type; approve it in the LinkedIn app or on the hosted page), checkpoint_no_alternative, checkpoint_phone_format, checkpoint_empty_code, checkpoint_none (nothing is pending), checkpoint_account_gone or checkpoint_not_connected. When the challenge itself was fine but the attempt could not reach LinkedIn, the 400 carries proxy_failed (the sender's proxy did not respond), provider_timeout or rate_limited instead. A 502 means LinkedIn could not be reached at all: retry.
Authorization
bearerAuth An API key created on the Access tokens page.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/accounts/string/checkpoint" \ -H "Content-Type: application/json" \ -d '{ "code": "string" }'{ "data": { "id": "string", "label": "string", "senderId": "string", "fullName": "string", "firstName": "string", "lastName": "string", "headline": "string", "publicIdentifier": "string", "profileUrl": "string", "profilePicture": "string", "connectionMethod": "cookie", "connectedVia": "app", "hostedLinkId": "string", "status": "active", "connectionStatus": "string", "isVerified": true, "isPremium": true, "linkedinPlan": "classic", "error": "string", "limits": {}, "usage": {}, "paused": true, "pausedReason": "user", "pausedAt": "2019-08-24T14:15:22Z", "cooldownUntil": "2019-08-24T14:15:22Z", "cooldownReason": "invite_daily_limit", "checkpoint": { "type": "2FA", "input": "code", "requestedAt": "2019-08-24T14:15:22Z", "expiresAt": "2019-08-24T14:15:22Z", "expired": true, "canResend": true, "canTryAnotherWay": true, "liveView": true }, "inmailCredits": { "balance": 0, "syncedAt": "2019-08-24T14:15:22Z" }, "ssi": { "score": 0, "brand": 0, "people": 0, "insights": 0, "relationships": 0, "industryTop": 0, "networkTop": 0, "industryAverage": 0, "networkAverage": 0, "industryName": "string", "unavailable": true, "syncedAt": "2019-08-24T14:15:22Z" }, "country": "string", "stoppedReason": "proxy_drift", "connection": { "country": "string", "isp": "string", "changedAt": "2019-08-24T14:15:22Z" }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "status": "connected", "checkpoint": { "type": "2FA", "input": "code", "requestedAt": "2019-08-24T14:15:22Z", "expiresAt": "2019-08-24T14:15:22Z", "expired": true, "canResend": true, "canTryAnotherWay": true, "liveView": true }}Skip or restore the warm-up (retired) POST
Human rhythm was retired on 2026-10-15, so there is no warm-up to skip. Kept for compatibility: a valid body (`skipWarmup` true or false) always answers 409, an invalid one 400.
Sync account information POST
**JavaScript SDK:** [`swarmhit.accounts.sync(accountId)`](/smart-api/sdk/methods#accounts) Refresh this sender account's LinkedIn profile (name, headline, picture, public identifier) and paid-plan flag from LinkedIn, then return the updated account. Useful right after connecting, or when the stored identity looks stale. Fails with 400 when the account is not connected yet or LinkedIn returns no profile.