---
title: "Complete an in-flight bank connection"
method: POST
path: "/v1/banks/connections/complete"
tags: ["Banks"]
---

# Complete an in-flight bank connection

`POST /v1/banks/connections/complete`

## Request

- Base URL: `https://api.banksync.io`
- URL: `https://api.banksync.io/v1/banks/connections/complete`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Exchanges the provider callback payload (public_token or connection_id) for a persisted bank connection. Returns the bank ID, whether it was newly created, and live account data.

## Request body

- object
  - `providerInstanceId` string, required
  - `attemptId` string
  - `payload` union, required
    - object
      - `kind` 'plaid_public_token', required
      - `publicToken` string, required
      - `institutionId` string
    - object
      - `kind` 'provider_connection_id', required
      - `connectionId` string, required
      - `institutionId` string

## Response `200`

Connection established

- object
  - `success` true, required
  - `bankId` string, required
  - `created` boolean, required
  - `accounts` object[], required

## Other responses

- `400`: Invalid payload
- `401`: Unauthorized
- `403`: Forbidden or plan limit reached
- `501`: Provider not available in this environment

---

[API](https://skmtc.dev/banksync/apis/banksync-api.md) · [All operations](https://skmtc.dev/banksync/apis/banksync-api/llms.txt) · [OpenAPI document](https://skmtc.dev/banksync/apis/banksync-api/revisions/94465f5ee922?raw)
