Skip to content
Pathbound DOCS

Identities API

Identities represent the senders behind outreach actions — the email accounts and LinkedIn profiles that send messages on behalf of a tenant. Every action requires an identity_id.

Read endpoints require identities:read; write and LinkedIn endpoints require identities:write.

POST /v1/identities

Required scope: identities:write

FieldTypeRequiredDescription
firstNamestringyesFirst name.
lastNamestringyesLast name.
rolestringyesRole or job title.
{
"status": "success",
"identity": { /* identity object */ }
}

GET /v1/identities

Required scope: identities:read

Returns all identities for the authenticated user’s tenant. Credentials are never returned.


GET /v1/identities/:identity_id

Required scope: identities:read


PUT /v1/identities/:identity_id

Required scope: identities:write

FieldTypeRequiredDescription
firstNamestringnoFirst name.
lastNamestringnoLast name.
jobTitlestringnoJob title.

DELETE /v1/identities/:identity_id

Required scope: identities:write


Connecting LinkedIn is a multi-step asynchronous flow. You start a login, poll for status, and (if challenged) submit a 2FA code. Most calls complete within 30 seconds; verification can take longer.

POST /v1/identities/:identity_id/linkedin/login

Required scope: identities:write

FieldTypeRequiredDescription
usernamestringnoLinkedIn username / email.
passwordstringnoLinkedIn password.
countrystringnoCountry code for the login request (default: US).
max_verification_wait_timenumbernoMax seconds to wait for verification (default: 600).

If the identity already has a stored LinkedIn profile_id, you can omit username and password to re-authenticate using the existing session.

{
"status": "success",
"message": "LinkedIn login initiated",
"identity_id": "id_abc",
"login_result": {
"profile_id": "li_abc",
"session_id": "sess_xyz",
"status": "queued"
}
}
GET /v1/identities/:identity_id/linkedin/status/:session_id

Required scope: identities:write

Poll every 2–3 seconds. Possible status values:

StatusMeaning
queuedJob accepted, not yet picked up.
runningLogin in progress.
awaiting_2faLinkedIn challenged with a verification code.
awaiting_emailLinkedIn requires confirmation via email link.
completedLogged in successfully.
failedLogin failed (see error field).
POST /v1/identities/:identity_id/linkedin/code/:session_id

Required scope: identities:write

FieldTypeRequiredDescription
codestringyesTwo-factor auth code.

After submitting, return to step 2 (polling) until status: "completed".

GET /v1/identities/:identity_id/linkedin/check

Required scope: identities:write

Returns whether the identity currently has a valid LinkedIn session, without starting a new login.

{
"status": "success",
"connected": true,
"profile_id": "li_abc",
"checked_at": "2026-04-29T12:00:00.000Z"
}
StatusMeaning
400Invalid request (e.g. missing 2FA code, invalid country).
401LinkedIn rejected the credentials.
408Verification timed out (max_verification_wait_time exceeded).
423LinkedIn account is locked. User must unlock via linkedin.com.