# Organization API: Customers: Staff

> The 26 Organization API operations for staff.

Source: https://docs.coritan.com/api/reference/organizations/customers/staff/

Part of [Customers](/api/reference/organizations/customers/).

## Operations

| Method | Path | Summary |
| --- | --- | --- |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers`](#op-get-api-v1-orgs-org-slug-staff-customers) | Directory for this brand, separate from the mixed desk search |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers`](#op-post-api-v1-orgs-org-slug-staff-customers) | An account for someone who ordered by phone or email |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/bulk`](#op-post-api-v1-orgs-org-slug-staff-customers-bulk) | Staff customers bulk |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/export.csv`](#op-get-api-v1-orgs-org-slug-staff-customers-export-csv) | The directory as it is filtered, as a CSV |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/tags`](#op-get-api-v1-orgs-org-slug-staff-customers-tags) | Every label in use on this brand, with how many customers carry it |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id) | Staff customer hub |
| PATCH | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}`](#op-patch-api-v1-orgs-org-slug-staff-customers-customer-id) | Fix the profile (support), or change the account's standing (admin) |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/activity`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-activity) | Staff customer activity |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/chat-mute`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-chat-mute) | Silence a handle in community chat and the forum for a while, or lift it |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/close`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-close) | Staff close customer |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/credit`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-credit) | Staff add credit |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/credit-ledger`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-credit-ledger) | Staff credit ledger |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/data-export`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-data-export) | Everything held about the customer, as one JSON file, for a privacy request |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/emails`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-emails) | Staff customer emails |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/impersonate`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-impersonate) | Staff impersonate customer |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/mark-verified`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-mark-verified) | Vouch for an address the customer proved another way (a call, a ticket from that inbox) |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/notes`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-notes) | List customer notes |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/notes`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-notes) | Add customer note |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/payment-methods`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-payment-methods) | Staff customer payment methods |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/related`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-related) | Staff customer related |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/resend-verification`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-resend-verification) | Staff resend verification |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/reset-mfa`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-reset-mfa) | For a customer who lost their phone: remove their second factor and end their sessions |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/reset-password`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-reset-password) | Staff reset customer password |
| POST | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/revoke-sessions`](#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-revoke-sessions) | Staff revoke customer sessions |
| GET | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/sessions`](#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-sessions) | Staff customer sessions |
| PUT | [`/api/v1/orgs/{org_slug}/staff/customers/{customer_id}/tags`](#op-put-api-v1-orgs-org-slug-staff-customers-customer-id-tags) | Staff set customer tags |

### Directory for this brand, separate from the mixed desk search {#op-get-api-v1-orgs-org-slug-staff-customers}

`GET /api/v1/orgs/{org_slug}/staff/customers`

Directory for this brand, separate from the mixed desk search.

``status_filter`` is an account status or one of ``CUSTOMER_BUCKETS``
(``unverified``, ``new_7d``, ``paying``, ``free``). ``counts`` carries one
figure per status and per bucket. ``unverified`` is accounts whose email
was never verified, ``new_7d`` signups inside the last seven days,
``paying`` accounts with at least one non-free service and ``free`` the
rest. Every figure is counted under the audience the request carries, and
none is narrowed by ``q``, ``tag`` or the filter itself, so the tiles keep
reading as the whole directory while the list is narrowed.

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `org_slug` | path | string | yes |  |
| `q` | query | string or null | no |  |
| `status_filter` | query | string or null | no |  |
| `tag` | query | string or null | no |  |
| `audience` | query | string or null | no |  |
| `limit` | query | integer | no | Default: `50`. |
| `offset` | query | integer | no | Default: `0`. |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### An account for someone who ordered by phone or email {#op-post-api-v1-orgs-org-slug-staff-customers}

`POST /api/v1/orgs/{org_slug}/staff/customers`

An account for someone who ordered by phone or email. No password is
set here; the customer gets a link to choose their own, so staff never
know it.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `email` | string (email) | yes |
| `first_name` | string or null | no |
| `last_name` | string or null | no |
| `company` | string or null | no |
| `phone` | string or null | no |
| `currency` | string or null | no |
| `send_setup_email` | boolean | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `201` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff customers bulk {#op-post-api-v1-orgs-org-slug-staff-customers-bulk}

`POST /api/v1/orgs/{org_slug}/staff/customers/bulk`

Suspend, unsuspend or terminate every order a selection of customers
has, or ban the accounts outright.

The fleet's bulk route acts on servers picked one by one; this one is for
the search that turned up a dozen accounts with the same email pattern.
Same gate: support may suspend and unsuspend; anything that ends an order
or an account is an org admin who has stepped up in the last ten minutes.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `customer_ids` | array of integer | yes |
| `action` | string | yes |
| `reason` | string | yes |
| `delete_after_days` | integer or null | no |
| `open_ticket` | boolean | no |
| `notify_customer` | boolean | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### The directory as it is filtered, as a CSV {#op-get-api-v1-orgs-org-slug-staff-customers-export-csv}

`GET /api/v1/orgs/{org_slug}/staff/customers/export.csv`

The directory as it is filtered, as a CSV. Billing roles only: an
export is every customer's contact details in one file. ``status_filter``
takes the same values as the directory, the tile buckets included.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |
| `q` | query | string or null | no |
| `status_filter` | query | string or null | no |
| `tag` | query | string or null | no |
| `audience` | query | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Every label in use on this brand, with how many customers carry it {#op-get-api-v1-orgs-org-slug-staff-customers-tags}

`GET /api/v1/orgs/{org_slug}/staff/customers/tags`

Every label in use on this brand, with how many customers carry it.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff customer hub {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}`

One customer's record: the account (with ``display_name``), their
services, invoices, tickets and staff notes. Each ticket carries its
``department`` and ``assigned_agent_name`` (the team member's first and
last name, else their email; ``null`` when unassigned), as the inbox
shows them.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Fix the profile (support), or change the account's standing (admin) {#op-patch-api-v1-orgs-org-slug-staff-customers-customer-id}

`PATCH /api/v1/orgs/{org_slug}/staff/customers/{customer_id}`

Fix the profile (support), or change the account's standing (admin).

A new email address is unverified again and gets a fresh verification
mail: the old inbox proved nothing about the new one. Leaving ``active``
ends every session the customer has, so a ban is not decorative.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `email` | string (email) or null | no |
| `first_name` | string or null | no |
| `last_name` | string or null | no |
| `company` | string or null | no |
| `phone` | string or null | no |
| `status` | string or null | no |
| `reason` | string or null | no |
| `currency` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff customer activity {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-activity}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/activity`

One timeline, newest first: what staff did to the account, what the
customer did, and what billing and support recorded.

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `customer_id` | path | integer | yes |  |
| `org_slug` | path | string | yes |  |
| `limit` | query | integer | no | Default: `100`. |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Silence a handle in community chat and the forum for a while, or lift it {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-chat-mute}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/chat-mute`

Silence a handle in community chat and the forum for a while, or lift it.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json`

| Field | Type | Required |
| --- | --- | --- |
| `minutes` | integer or null | no |
| `reason` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff close customer {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-close}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/close`

Close and anonymise, with the same guard the customer's own close has:
no active services, no unpaid invoices.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `reason` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff add credit {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-credit}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/credit`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `amount` | number or string | yes |
| `description` | string | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff credit ledger {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-credit-ledger}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/credit-ledger`

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `customer_id` | path | integer | yes |  |
| `org_slug` | path | string | yes |  |
| `limit` | query | integer | no | Default: `50`. |
| `offset` | query | integer | no | Default: `0`. |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Everything held about the customer, as one JSON file, for a privacy request {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-data-export}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/data-export`

Everything held about the customer, as one JSON file, for a privacy request.

The privacy policy promises a copy of their data to anyone who asks; this
is the copy. Admin and stepped-up like closing the account, because it is
the whole person in one download; rate-limited with the other exports; and
audited *before* the document is built, so the document itself records
that it was produced, by whom, and when.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff customer emails {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-emails}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/emails`

Every transactional email the brand sent this customer and whether it
went, so "we emailed your server details on this date" can be shown
rather than asserted.

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `customer_id` | path | integer | yes |  |
| `org_slug` | path | string | yes |  |
| `limit` | query | integer | no | Default: `50`. |
| `offset` | query | integer | no | Default: `0`. |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff impersonate customer {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-impersonate}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/impersonate`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json`

| Field | Type | Required |
| --- | --- | --- |
| `mode` | string or null | no |
| `elevated` | boolean | no |
| `reason` | string or null | no |
| `next` | string or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Vouch for an address the customer proved another way (a call, a ticket from that inbox) {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-mark-verified}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/mark-verified`

Vouch for an address the customer proved another way (a call, a
ticket from that inbox). Admin only, and on the record.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### List customer notes {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-notes}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/notes`

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `customer_id` | path | integer | yes |  |
| `org_slug` | path | string | yes |  |
| `limit` | query | integer | no | Default: `50`. |
| `offset` | query | integer | no | Default: `0`. |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Add customer note {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-notes}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/notes`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `body` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `201` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff customer payment methods {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-payment-methods}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/payment-methods`

What the customer has on file, as the customer sees it: a label, a
brand, the last four digits, the expiry. The gateway token never leaves
the row.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff customer related {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-related}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/related`

Other customers on this brand that share a sign-up IP, a sign-up
fingerprint, a phone number or a recent session address with this one.

Signals, not verdicts: a household shares an IP. Each match says which
signal it came from so the person reading can weigh it.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff resend verification {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-resend-verification}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/resend-verification`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### For a customer who lost their phone: remove their second factor and end their sessions {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-reset-mfa}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/reset-mfa`

For a customer who lost their phone: remove their second factor and end
their sessions. They sign in again and, if the brand requires it, enrol.

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff reset customer password {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-reset-password}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/reset-password`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `password` | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff revoke customer sessions {#op-post-api-v1-orgs-org-slug-staff-customers-customer-id-revoke-sessions}

`POST /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/revoke-sessions`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json`

| Field | Type | Required |
| --- | --- | --- |
| `token_id` | integer or null | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff customer sessions {#op-get-api-v1-orgs-org-slug-staff-customers-customer-id-sessions}

`GET /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/sessions`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |

### Staff set customer tags {#op-put-api-v1-orgs-org-slug-staff-customers-customer-id-tags}

`PUT /api/v1/orgs/{org_slug}/staff/customers/{customer_id}/tags`

#### Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `customer_id` | path | integer | yes |
| `org_slug` | path | string | yes |

#### Request body

`application/json` (required)

| Field | Type | Required |
| --- | --- | --- |
| `tags` | array of string | no |

#### Responses

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `422` | The request is not valid. `detail` lists each problem. |
