Accounts
POST
/accounts

Connect a LinkedIn sender with its email/username and password; optionally a proxy and country. The sender lands in the effective workspace (the one named by the X-Swarmhit-Workspace header, if set), consuming a seat from its allocation. Credentials are stored encrypted and never returned. The outcome and later changes arrive via the account.* webhooks.

Add a 2FA setup key (totpSecret) for automatic (infinite) login: the sign-in then completes hands-free, solving a 2FA challenge from the secret. Anything else fails with 400 and an account.connection_failed webhook rather than leaving a half-connected sender holding a seat.

Without a totpSecret the connect is interactive. If LinkedIn asks for a verification step the response is 200 with status checkpoint_required and a checkpoint object describing it; answer it on POST /accounts/{id}/checkpoint within five minutes. An account.checkpoint_required webhook fires at the same time.

On failure the error body carries a stable error.code to branch on and a plain-language error.message describing what went wrong. Codes for this endpoint: invalid-credentials (wrong email/password), rate-limited (LinkedIn is throttling sign-in; retry later), proxy-failed (the proxy sent with the request did not respond, so the sign-in never reached LinkedIn), provider-timeout / provider-unreachable (LinkedIn answered too slowly, or could not be reached at all; safe to retry), checkpoint-code-rejected (the account's 2FA setup key is wrong, so the authenticator code is rejected), checkpoint-restricted (LinkedIn has restricted the account; clear it on linkedin.com and connect again), unsupported-verification (automatic login was requested but the account signs in with a method other than authenticator 2FA — connect it without a totpSecret and answer the challenge instead), verification-required / verification-failed (a verification step that can't be completed automatically), invalid-totp-secret (the 2FA key isn't a valid authenticator key), already-connected, no-plan, and seat-limit-reached (409), and connection-failed for anything else, where error.message carries the specific reason. The same code is included on the account.connection_failed webhook.

Authorization

bearerAuth
AuthorizationBearer <token>

An API key created under Settings → API & Webhooks.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/accounts" \  -H "Content-Type: application/json" \  -d '{    "username": "string",    "password": "string"  }'
{  "data": {    "id": "string",    "label": "string",    "fullName": "string",    "firstName": "string",    "lastName": "string",    "headline": "string",    "publicIdentifier": "string",    "profileUrl": "string",    "profilePicture": "string",    "connectionMethod": "cookie",    "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": "string",    "checkpoint": {      "type": "2FA",      "input": "code",      "requestedAt": "2019-08-24T14:15:22Z",      "expiresAt": "2019-08-24T14:15:22Z",      "expired": true,      "canResend": true,      "canTryAnotherWay": 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",    "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  }}