---
title: "Finish Plaid Link for a family"
method: POST
path: "/families/{id}/accounts/link-complete"
tags: ["Families"]
---

# Finish Plaid Link for a family

`POST /families/{id}/accounts/link-complete`

## Request

- Base URL: `https://ledgerhq.pro/api/v1`
- URL: `https://ledgerhq.pro/api/v1/families/{id}/accounts/link-complete`
- Auth: one of:
  - HTTP bearer and API key in header `x-organization-id`
  - HTTP bearer and API key in header `x-organization-id`

Firm-side family relationships only. Select the firm with x-organization-id. Owners, Admins and Staff Admins access all firm families; Staff Members need independent family assignment. Company access does not grant family access. OAuth requires the broad mcp grant, not a narrow banking scope; API keys retain ordinary agent permission scopes. No accounting organizations, portal grants, invitations or charges are created. Writes require ordinary firm write entitlement. Cross-firm and inaccessible IDs return 404. Plaid Link runs in the browser: request a link token, open Plaid Link with it, then send the result to link-complete. Requires banking permission. New accounts arrive with no destination. A bank the person (or a linked company) already has connected returns 409 existing_plaid_institution; add accounts through that login instead.

## Path parameters

- `id` string, uuid, required

## Request body

- union
  - object
    - `mode` 'connect', required
    - `organizationId` string, uuid, required
    - `personId` string, uuid, required
    - `publicToken` string, required
    - `attemptId` string, uuid
    - `linkEvidence` object, nullable
    - `institution` object, nullable
    - `allowSeparateInstitutionLogin` boolean
  - object
    - `mode` 'update', required
    - `plaidItemId` string, uuid, required
    - `attemptId` string, uuid
    - `linkEvidence` object, nullable

## Response `200`

Success

- object
  - `success` boolean
  - `familyId` string, uuid
  - `mode` 'connect' | 'update'
  - `plaidItemId` string, uuid
  - `institutionName` string, nullable
  - `accountCount` integer
  - `addedAccounts` integer
  - `newAccountIds` string[]: Connected accounts this Link session brought in, ready to route

## Other responses

- `403`: Firm staff or required permission missing
- `404`: Record not found or not accessible
- `409`: Archived family, last-member removal, identity conflict, already-linked member, explicit owner selection required, or redundant administrator assignment

---

[API](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api.md) · [All operations](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api/revisions/9a8269f0a586?raw)
