---
title: "For a firm: bind and unbind on the team table as it stands, and send it with confirm"
method: POST
path: "/v1/admin/tenants/{tenant}/connector/team/apply"
tags: ["admin"]
---

# For a firm: bind and unbind on the team table as it stands, and send it with confirm

`POST /v1/admin/tenants/{tenant}/connector/team/apply`

## Request

- Base URL: `https://api.sixminute.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.sixminute.ai/v1/admin/tenants/{tenant}/connector/team/apply`
- Auth: HTTP bearer

The binds, in order, then the unbinds, laid on the table as it stands. A bind is a MOVE: the member is taken off whichever employee held them. While the connector is `pending_mapping`, a row nobody bound takes the email pre-match; on a connected firm it stays as it is. An employee the practice system does not have is a 422. Without `confirm` the answer is the whole table it would send and nothing is written; with it the table goes through `PUT /v1/connector/team`'s own code and the answer carries the connector after the confirmation and its sync. 404 with no connector, or for a kind whose identity is a per-user sign-in. Audited as `connector.team` either way, with `confirm`.

## Path parameters

- `tenant` string, required

## Request body

- object
  - `bind` object[]
    - `external_ref` string, required
    - `member_id` string, required
  - `unbind` string[]
  - `confirm` boolean

## Response `200`

The table sent, or the one confirm would send.

- object
  - `sent` boolean, required
  - `confirmation` object[], required
    - `external_ref` string, required
    - `member_id` string, nullable, required
  - `connector` object, nullable, required
    - `kind` 'urios' | 'legalsense' | 'fake', required
    - `status` 'pending_mapping' | 'connected' | 'needs_reconnect' | 'disabled', required
    - `capabilities` object, required
      - `accepts_by` 'billing' | 'approval', required
      - `identity` 'mapping' | 'sign_in', required
      - `change_feed` 'modified_since' | 'full_list', required
      - `narrative_max_chars` integer, nullable, required
      - `note_max_chars` integer, nullable
      - `insolvency_groups` false, required
      - `matter_visibility` 'firm' | 'member'
      - `reviewer` 'self' | 'configurable'
      - `fields` object[], required
        - `key` string, required
        - `label` string, required
        - `scope` 'firm' | 'matter', required
        - `required` boolean, required
        - `standard` 'utbms_task' | 'utbms_activity', nullable, required
    - `settings` object, nullable
      - `notation` string, nullable
      - `reviewer` union
        - object
          - `mode` 'timekeeper', required
        - object
          - `mode` 'person', required
          - `external_ref` string, required
          - `name` string, required
        - unknown
      - `auto_approve` string[]
    - `counts` object, required
      - `matters` integer, required
      - `clients` integer, required
      - `timekeepers` integer, required
      - `options` integer, required
    - `team_bound` integer, required
    - `team_unbound` integer, required
    - `last_sync_at` string, date-time, nullable
    - `last_error` string, nullable

## Other responses

- `400`: The body, query or path did not validate; `errors` lists the fields.
- `401`: No bearer token, or one that does not verify or has expired.
- `403`: The token verified but may not do this: no organisation, not provisioned, wrong role, or a device problem.
- `404`: No such row for this tenant.
- `409`: The id or the email already belongs to something else.
- `422`: The request is well-formed but cannot be carried out as it stands.
- `503`: A capability this service was not configured with, or a practice system that could not be reached; the `type` says which.

---

[API](https://skmtc.dev/sixminute/apis/sixminute-api.md) - [All operations](https://skmtc.dev/sixminute/apis/sixminute-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sixminute/apis/sixminute-api/revisions/605577eadc10?raw)
