Share or transfer
Lend an account
The account must be one your workspace owns, past its LinkedIn login, and not already a side of another share or transfer. A billing hold does not block a loan. LinkedIn only, so passing"channel": "email" is not supported. The receiving workspace must exist and be neither suspended
nor deleted; target it by to_email (resolved to that user’s working team) or by to_team_sid,
exactly one of the two. One call lends one account, so lending five accounts is five calls.
201 answers with item.sid (ac_sh_...) and item.status: "pending": the row was written, the
loan has not started. Poll POST /api/account-shares/search (the loans you issued) until the status
is active. The receiving side polls POST /api/account-shares/list-received, scoped to loans made to them.
There is no error response for a loan that fails after the
201: the outcome lands on the row as
status plus failure_reason, so poll it. A background reconciler re-drives any share that
stalls, every 5 minutes, until it advances or a human intervenes.Statuses
Nothing leaves a terminal status, and there is no
expired status. failure_reason is one of
park_failed, export_failed, copy_refused, probe_stale or team_purged on a share, and
park_failed, copy_refused or probe_stale on a transfer.
A row on
owner_parked whose phase_attempts passes 10 with no failure_reason is stuck in the
copy retry, which never terminates on its own. An export failure is different: it gives up after 5
attempts and lands failed with export_failed. Send support the share sid plus the exact status
and phase_attempts.What happens on your side
Account status and browser status both becomeshared_out (the Senders list shows the browser as
shared out, hold reason “Lent to another workspace”), the browser session is stopped and its
automation server is released. The account leaves every scheduler, dispatcher and stale-heartbeat
sweep, so silence from a parked account is expected, not a fault.
You keep two things while the account is away: a cloud-browser session on the parked original, and
its proxy. That session is how you fix a LinkedIn logout mid-loan, and nobody is notified when one
happens, so the borrower has to tell you. You cannot delete the parked account or re-connect the
same LinkedIn member to work around the share: both answer 409 conflict, account_shared_out.
What the receiving side gets
One exception: if the receiving workspace held this account before and its old copy is still
soft-deleted, that row is restored rather than created fresh: same sid, old conversation and
connection history back, sync clocks preserved, no full backfill. Use
reset-sync to force one.
The receiving side also cannot:
- See the browser profile id.
vendor_profile_idreads back as***on every borrowed browser, during the loan and after it ends, so an ex-holder cannot re-bind the profile later. - Re-share it (an account can be in at most one live share), manage the proxy (no proxy field crosses), or inherit your roles: permissions are never granted across workspaces, and the copy is governed entirely by their own roles.
subscription_required
while away; the check re-runs when it comes back. Lending out an already-downgraded account is allowed.
End a share
Teardown soft-deletes the borrowed copy, stops its browser, revokes every cloud-browser key it minted,
and fails its pending activity rows with
browser_deleted. The borrower keeps the conversations and
connections that copy synced. Your original is un-parked: browser back to stopped, account status recomputed from its own signals.
planned_return_at does not auto-return anything. When it passes, an hourly job emails the owner
once that the date passed, and stamps expiry_notified_at. The loan runs until somebody ends it. A
soft-deleted workspace changes nothing: the 30-day recovery window has to elapse and the purge has to
run before the loan is driven to a terminal status.Refusals
An active share blocks a transfer of the same account (
409 account_currently_shared, recall first), and an in-flight transfer blocks a share.
Transfer permanently
Transfers use the same machinery and the same body as a share, minusplanned_return_at. Create with
POST /api/account-transfers, then poll GET /api/account-transfers/{sid} or POST /api/account-transfers/search.
Transferring out of a billing hold is allowed, and is the intended exit for an account you no longer want to pay for.
Who gets told
Emails go to the counterparty, not to whoever made the call. The receiving workspace owner getsaccount_share_received, account_share_recalled and account_transfer_received; you get
account_share_returned, account_share_expired and account_share_failed.
Webhooks are owner-side only and fan out to the workspace that owns the row: account-shares.created,
account-shares.returned, .recalled and .failed, plus account-transfers.completed and .failed.
The borrowing side has no webhook, so its arrival signal is the email plus polling list-received.
Related
- Full request and response shapes: API reference
- Connect a LinkedIn account
- Antidetect browsers and proxies
- Billing and plans
- Sync windows and auto-suspend