Accounts

Update an account's metadata or connection location

Updates metadata, external_id, the connection location (country) or your own proxy (null plus a country returns to a managed location). Returns the account; connection_location is re-read after a location change.

patch/v1/accounts/{account_id}

Request

  • Base URL: https://api.curviate.com
  • URL: https://api.curviate.com/v1/accounts/{account_id}
  • Auth: HTTP bearer

Path parameters

account_idstring required

The account ID (acc_...) of the account to update.

Request body

metadataobject nullable

Your own flat string map for this account (up to 16 keys, key 40 chars, value 500). Replaces the stored map whole; null clears it.

external_idstring nullable

Your own id for this account's end user (1-255 chars), or null to clear it. Omit to leave it unchanged.

country'AE' | 'AO' | 'AR' | 'AT' | 'AU' | 'BD' | 'BE' | 'BG' | 'BR' | 'CA' | 'CH' | 'CL' | 'CN' | 'CO' | 'CY' | 'CZ' | 'DE' | 'DK' | 'EE' | 'EG' | 'ES' | 'FI' | 'FR' | 'GB' | 'GT' | 'HK' | 'ID' | 'IE' | 'IL' | 'IN' | 'IT' | 'JP' | 'KR' | 'KZ' | 'MA' | 'MX' | 'MY' | 'NL' | 'NO' | 'PA' | 'PH' | 'PK' | 'PL' | 'PR' | 'PT' | 'RO' | 'SA' | 'SE' | 'SG' | 'TH' | 'TN' | 'TR' | 'UA' | 'US' | 'VN' | 'ZA'

Move this account's connection location to this supported ISO 3166-1 alpha-2 country (e.g. US, DE). LinkedIn sees a new IP in that country and may ask the owner to verify, so change it only when the current location is wrong. Strict unless allow_country_fallback is true. On an account using your own proxy, send proxy: null with it.

allow_country_fallbackboolean

Optional. false (the default with country or ip): only ever connect from that country; a connect fails when no connection is free there. true: a connection from another country may be used when none is free in the chosen one. Not accepted with proxy.

Response

The updated account: the object GET /v1/accounts/{account_id} returns, without quotas and event_log (read those on GET). After a location change, connection_location is re-read from LinkedIn's side, so it shows where the account really connects from now. metadata and external_id are stored by Curviate; a PATCH carrying only those makes no LinkedIn call.

object'account'

Response type discriminator.

account_idstring
status'active' | 'reconnect_needed' | 'restricted' | 'connecting' | 'disconnected'
auth_methodstring
full_namestring nullable
headlinestring nullable
connected_atstring nullable

ISO-8601 UTC connection timestamp.

last_checked_atstring

ISO-8601 UTC time the account state was last checked.

seat_idstring nullable

The seat this account occupies (null for an admin seatless account).

requested_productsstring[] nullable

The connection scope this account was last connected with (e.g. ["classic","company","sales_navigator","recruiter"]). A connect asks for every product and LinkedIn activates the ones the account actually has, so this is what was ASKED for, narrowed only by an explicit linkedin_premium on that connect. A linkedin_premium narrowing is not remembered between connects, so this shows what the LAST connect asked for and a reconnect that omits the field widens it again. Null for accounts connected before this was recorded; not attachment truth for Company Pages.

external_idstring nullable

Your own id for this account's end user, as set on connect or PATCH. Null when none. Not unique.

metadataobject nullable

Your own flat string map for this account, as last set by PATCH. Null when none.

substrate_created_atstring nullable

ISO-8601 UTC creation timestamp of the underlying LinkedIn account, distinct from connected_at. Null until the first background enrichment lands.

account_statesstring[]

Platform conditions this LinkedIn account is currently in, additive to status and independent of it. recruiter_session_evicted: the account is signed in somewhere else and LinkedIn allows one session at a time for it, so a person has to close the other session; reconnecting will not help. commercial_use_limited: LinkedIn's commercial-use limit has tripped, so people search returns only a handful of results per query. It is a paywall, not a penalty, and nothing else about the account is affected. profile_view_limited: profile views outside this account's own network are being blocked; first-degree views still work. The two limits are detected from their symptom: LinkedIn publishes no threshold for either, exposes no counter, and lifts neither on request, so no number is reported. commercial_use_limited is a present-tense reading and a genuinely narrow search can also produce the shape it looks for, so treat it as a reason to check rather than a certainty; the next people search that returns a full page clears it. An account in none of these reports an empty array.

Example response

{
  "safety_warning": {
    "row": "profile_views",
    "reset_at": "2026-09-05T00:00:00.000Z",
    "hint": {
      "parameter": "profile_views.ceiling",
      "message": "This account is at its ceiling for profile_views. This action went through because profile_views.posture is warn, and it counted: 101 of 100 this window. Raise profile_views.ceiling, or wait for the window to reset at 2026-09-05T00:00:00.000Z."
    },
    "reason": "ceiling",
    "blocked": false
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.