---
title: "Complete an authorized Plaid bank connection"
method: POST
path: "/companies/{companyId}/financial-sync/plaid/exchange"
tags: ["Integrations"]
---

# Complete an authorized Plaid bank connection

`POST /companies/{companyId}/financial-sync/plaid/exchange`

## Request

- Base URL: `https://api.medianfi.com/api/v1`
- URL: `https://api.medianfi.com/api/v1/companies/{companyId}/financial-sync/plaid/exchange`
- Auth: HTTP bearer

## Request body

- object
  - `publicToken` string, required
  - `institutionId` string, required
  - `state` string, required: authorizationState returned by the company Link-token endpoint.
  - `redirectUri` string, uri, required

## Response `201`

Connection result, including an existing owner when no new account was connected

- object
  - `success` boolean
  - `data` object
    - `integrationId` string, uuid
    - `connection` object
    - `accounts` object[]
    - `syncJob` object, nullable
    - `alreadyConnected` true: Present only when a duplicate Item was parked and the existing owner was returned without importing new accounts or starting a sync job.

## Other responses

- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `409`: Authorization or account ownership conflict
- `422`: Validation error

---

[API](https://skmtc.dev/medianfi/apis/median-api.md) · [All operations](https://skmtc.dev/medianfi/apis/median-api/llms.txt) · [OpenAPI document](https://skmtc.dev/medianfi/apis/median-api/revisions/20090ea32b0d?raw)
