accounts.update

Update an account's configuration.

Prerequisites

  • A Curviate API key, passed as apiKey when you construct the client. Quickstart shows how to create one.

Signature

update(accountId: string, body: AccountUpdateBody): Promise<AccountUpdateResult>

Example

import { Curviate } from "@curviate/sdk";
 
const curviate = new Curviate({
  apiKey: "cvt_live_...",
  baseUrl: "https://api.curviate.com",
});
 
await curviate.accounts.update("acc_123", { save_connections_as_contacts: false });

Parameters

NameTypeRequiredDescription
accountIdstringYesThe account ID (acc_...) of the account to update.
metadataobjectNoYour 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_idstringNoYour own id for this account's end user (1-255 chars), or null to clear it. Omit to leave it unchanged.
proxyobjectNoYour own proxy, or null to stop using it and return to the Curviate proxy (null requires country in the same request). Omit to leave it unchanged.
countrystringNoMove 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_fallbackbooleanNoOptional. 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.
save_connections_as_contactsbooleanNoSave this account's Connections as Contacts (Automate; on by default): each person becomes one Contact in your team, an existing Contact is only filled in, do-not-contact people are skipped. true also saves the Connections already synced; false keeps the Contacts saved so far.

Returns

Resolves to AccountUpdateResult. Top-level fields: object, account_id, status, auth_method, full_name, headline, connected_at, last_checked_at, seat_id, requested_products, external_id, owner_user_id, team_access, metadata, connection_location, substrate_created_at, status_reason, warm_up, inmail_balance, motions_count, motion_refs, photo_url, profile_url, public_identifier, location, account_states, health, activity_window, save_connections_as_contacts, save_connections_paused_reason.

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.
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.
NO_ACTIVE_SEATThe targeted account is not on an active seat. Buy or attach a seat in Billing, then retry.
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.
PLATFORM_NOT_IMPLEMENTEDThe requested configuration is not supported for this account. Retrying will not help.
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.
TEAM_REQUIREDSee the error codes reference.

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.
  • accounts.list: List the tenant's connected LinkedIn accounts, cursor-paginated.
  • accounts.listSeats: List the workspace's live seats: each seat_id, whether an account occupied it, and that account_id (null when free).
  • SDK Quick Start: installation, the client, account scoping, and pagination.