---
title: "Initiate partner settlement"
method: POST
path: "/api/network/v2/enterprises/{enterpriseId}/partners/settlements"
tags: ["Partner Settlements & Transfers"]
---

# Initiate partner settlement

`POST /api/network/v2/enterprises/{enterpriseId}/partners/settlements`

Used by dispute enabled exchange partners to stage a settlement for connected clients.

This endpoint will:
1. Authenticate the request by verifying the payload and signature provided.
2. Create entities:
a. Create the settlement entity
b. Map provided settlement amounts to settlement transfer records for execution.
3. Assign closed, unassigned disputes from prior settlements to this settlement
a. Pull in any adjustedSettlementTransfers from said disputes.
b. Update the settledInSettlementId on said disputes.
4. Verify the relevant connection balances against liabilities based on provided settlementAmounts
and assigned settlement transfers from disputes being assigned.
5. Notify connection owners of a new settlement.
6. Queue an event to finalize the settlement once the dispute window ends.

This endpoint is idempotent and can safely be called again with the same exact request body
without worrying about creating multiple settlements.

Please note that provided settlement amounts should be based solely on new trading activity
that was not included in the last settlement. Instructions from closed, unsettled disputes should
not be included in the calculation of settlement instructions on the
Settlement will be processed asynchronously once initiated, after dispute / top up window have elapsed.

* Error scenarios:
- 400: Invalid Request Error
- Occurs when the request parameters are invalid or malformed.
- Examples: Invalid format for settlement amounts, missing required fields,
invalid signature.

- 401: Authentication Error or Incomplete Settlement
- Occurs when the request is not authorized or cannot be completed immediately.
- Examples: Caller is not a member of the enterprise, signature verification failed.

- 403: Permission Denied Error
- Occurs when the authenticated partner doesn't have necessary permissions.
- Examples: Enterprise does not have OES license, partner is inactive

- 409: Conflict Error
- Occurs when the request conflicts with current state.
- Examples: Settlement already exists with the same externalId and different properties.

- 422: Unprocessable Content
- Occurs when the request is authenticated and permitted but is unable to be processed.
- Examples: the liabilities for one or more connection exceed their allocated balance.

- 500: Internal Server Error or Incomplete Settlement
- Occurs when there's an unexpected server error processing the request.
- Examples: Database connection issues, settlement initiated but not completed due to transient errors.

**Requires access token scopes:** `settlement_network_read`, `settlement_network_write`

## Path parameters

- `enterpriseId` string, required

## Request body

- object
  - `externalId` string, required — External identifier for the settlement request. This should be unique for each settlement request and is used for idempotence and correlation with partner systems.
  - `notes` string — Optional notes about the settlement. Can contain additional context or information about the purpose of the settlement.
  - `settlementAmounts` union, required
    - UnmappedPartySettlementAmountsRecord
    - UnmappedCounterpartyPartySettlementAmountsRecord
  - `nonce` string, required — A unique nonce value used for cryptographic operations. This provides additional security for settlement operations.
  - `payload` string, required
  - `signature` string, required
  - `cutoffAt` string, date-time, required — The date and time of the most recent trade being settled, represented in ISO 8601 format

## Response `200`

OK

- V2PartnerSettlementOkPayload
  - `settlement` V2PendingSettlement, required
    - `cutoffAt` string, date-time, required — The date and time of the newest trade being settled in the partner system. This is a timestamp in ISO 8601 format. This field is only populated for dispute enabled partners.
    - `settlingDisputes` object[], required
      - `settledInSettlementId` string, required
      - `disputeClosureId` string, required
      - `disputeClosure` DisputeClosureOutput, required
        - `id` string, required — The unique identifier of the dispute closure.
        - `closedBy` 'client' | 'admin', required
        - `userId` string, required — The id of the user who closed the dispute.
        - `notes` string, required — notes entered by the user when closing the dispute.
        - `adjustedSettlementTransfers` object[], required
          - `id` string, required — The unique identifier of the settlement transfer.
          - `sourceTradingAccountId` string, required — The go account id of the source party.
          - `destinationTradingAccountId` string, required — The go account id of the destination party.
          - `destinationNetworkAccountId` string, required — The network account id of the destination party.
          - `disputeClosureId` string, required — The unique identifier of the dispute closure the settlement transfer was created from. This is a UUID that uniquely identifies dispute closure if the transfer was created as a result of closing a dispute.
          - `currency` string, required — The currency involved in the settlement movement.
          - `quantity` string, required
          - `status` 'pending' | 'pending_onchain' | 'onchain_initiated' | 'onchain_failed' | 'completed' | 'failed' | 'rejected' | 'disputed' | 'pending_settlement_assignment', required
          - `createdAt` string, date-time, required — The date and time when the settlement transfer was created. Represented as an ISO 8601 formatted date string.
          - `updatedAt` string, date-time, required — The date and time when the settlement transfer was last updated. Represented as an ISO 8601 formatted date string.
          - `settlementId` string — The unique identifier of the settlement the settlement transfer is associated with. This is a UUID that uniquely identifies the settlement. Will only be undefined if the settlement transfer is in `pending_settlement_assignment` status.
          - `sourceNetworkAccountId` string — The network account id of the source party.
        - `createdAt` string, date-time, required — The date and time when the dispute closure was created.
        - `status` 'pending_review' | 'approved' | 'rejected', required
        - `adjustedTransfers` ExpectedTransfers, required
        - `reviewedBy` string — The id of the admin who reviewed the dispute closure.
        - `reviewNotes` string — Any comments entered by the admin when reviewing the dispute closure.
      - `id` string, required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
      - `connectionId` string, required
      - `disputedSettlementId` string, required
      - `userId` string, required
      - `expectedTransfers` ExpectedTransfersOutput, required
      - `retracted` boolean, required
      - `reason` string
      - `retractedBy` string
      - `retractedAt` string, date-time
      - `retractedReason` string
    - `id` string, required — The unique identifier of the settlement. This is a UUID that uniquely identifies the settlement record.
    - `partnerId` string, required — The unique identifier of the partner the settlement is associated with. This is a UUID that uniquely identifies the partner.
    - `externalId` string, required — External identifier provided by the partner when creating the settlement.
    - `status` 'pending', required
    - `settlementType` 'onchain' | 'offchain', required
    - `reconciled` boolean, required — Whether or not the settlement is reconciled against trade data. Currently there are no reconciled settlements. This field is always false.
    - `initiatedBy` string, required — Id of the user which initiated the settlement.
    - `notes` string — The notes associated with the settlement. This is a free-form text field that can contain any additional information about the settlement.
    - `createdAt` string, date-time, required — The date and time when the settlement was created. This is a timestamp in ISO 8601 format.
    - `updatedAt` string, date-time, required — The date and time when the settlement was last updated. This is a timestamp in ISO 8601 format.
    - `rtId` string — Routed transaction id associated with the settlement. This is a UUID that uniquely identifies the routed transaction. This field is only populated for on-chain settlements for partners with automation enabled.
    - `lossSLAAlertSent` boolean, required — Whether or not an alert has been sent if loss settlement SLA is close to being breached. Only relevant for on-chain settlements.
    - `gainSLAAlertSent` boolean, required — Whether or not an alert has been sent if gain settlement SLA is close to being breached. Only relevant for on-chain settlements.
    - `disputed` boolean — Whether or not a dispute was raised on this settlement.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `409` — Conflict
- `422` — Unprocessable Entity
- `500` — Internal Server Error

---

[API](https://skmtc.net/bitgo/apis/bitgo-api.md) · [All operations](https://skmtc.net/bitgo/apis/bitgo-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bitgo/bitgo-api/revisions/e445c15e5bee/schema)
