Clients
Manage a team's clients — the customers or brands you report on — their contacts, and the accounts linked to each.
A client groups the connector accounts you use to report on a single customer or brand. Endpoints under /teams/{teamId}/clients are team-scoped — they act on a specific team identified by the teamId path parameter, and access is governed by your role in that team.
A contact is a person at a client, saved on the client's Contacts tab in the Hub. You can list, add, edit and delete contacts through the API. Contacts have their own team permissions, separate from the client's: every standard role can view them, and Owner, Admin and Deputy Admin can add, edit and delete them. See the permissions matrix.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /teams/{teamId}/clients | List a team's clients |
GET | /teams/{teamId}/clients/{clientId} | Get a single client |
GET | /teams/{teamId}/clients/{clientId}/accounts | List a client's linked accounts |
GET | /teams/{teamId}/clients/{clientId}/accounts/{connectorId} | List a client's accounts for one connector |
POST | /teams/{teamId}/clients/{clientId}/accounts/{connectorId}/{accountId} | Link an account to a client |
DELETE | /teams/{teamId}/clients/{clientId}/accounts/{connectorId}/{accountId} | Unlink an account from a client |
GET | /teams/{teamId}/clients/{clientId}/contacts | List a client's contacts |
POST | /teams/{teamId}/clients/{clientId}/contacts | Add a contact to a client |
GET | /teams/{teamId}/clients/{clientId}/contacts/{contactId} | Get a single contact |
PUT | /teams/{teamId}/clients/{clientId}/contacts/{contactId} | Change some or all fields of a contact |
DELETE | /teams/{teamId}/clients/{clientId}/contacts/{contactId} | Delete a contact |
The client object
{
"id": "0190f8c0-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
"name": "Acme Corp",
"domain": "acme.com",
"status": "active",
"metadata": {
"logoUrl": "https://assets.gox.ai/tmr/logos/acme.png",
"brandColor": "#0A66C2"
},
"link": "https://hub.twominutereports.com/clients/0190f8c0-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
"createdAt": "2026-01-12T08:15:00.000Z",
"updatedAt": "2026-05-20T11:42:00.000Z",
"createdBy": {
"id": "0190f8b7-3c4d-7e5f-9a0b-1c2d3e4f5a6b",
"name": "Priya Raman",
"avatarUrl": null,
"email": "[email protected]"
},
"updatedBy": {
"id": "0190f8b8-4d5e-7f6a-8b1c-2d3e4f5a6b7c",
"name": "Arun Menon",
"avatarUrl": null,
"email": "[email protected]"
}
}
id
string · uuid v7
Client identifier. Use it as
clientId in the other client endpoints.name
string
The client's display name.
domain
string | null
The client's website domain, or
null if not set.status
string
The client's status. Defaults to
active.metadata
object
Free-form metadata. Common keys are
logoUrl and brandColor (both string | null); additional keys may be present.link
string · url
A link to the client in the Two Minute Reports hub.
createdAt
string
When the client was created.
updatedAt
string | null
When the client was last updated, or
null if it has never been updated.createdBy
object | null
The user who created the client, or
null if unknown.updatedBy
object | null
The user who last edited it, or
null if it has not been edited since it was created. Background refreshes never overwrite this — it always names a person.The contact object
{
"id": "0190f8d2-6b7c-7d8e-9f0a-1b2c3d4e5f6a",
"clientId": "0190f8c0-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
"client": {
"id": "0190f8c0-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
"name": "Acme Corp",
"logoUrl": "https://assets.gox.ai/tmr/logos/acme.png"
},
"firstName": "Sarah",
"lastName": "Chen",
"email": "[email protected]",
"jobTitle": "Marketing Director",
"note": "Wants the monthly report before the board meeting.",
"briefingCount": 2,
"createdAt": "2026-10-02T09:30:00.000Z",
"updatedAt": "2026-10-08T14:05:00.000Z",
"createdBy": {
"id": "0190f8b7-3c4d-7e5f-9a0b-1c2d3e4f5a6b",
"name": "Priya Raman",
"firstName": "Priya",
"lastName": "Raman",
"avatarUrl": null,
"email": "[email protected]"
},
"updatedBy": {
"id": "0190f8b8-4d5e-7f6a-8b1c-2d3e4f5a6b7c",
"name": "Arun Menon",
"firstName": "Arun",
"lastName": "Menon",
"avatarUrl": null,
"email": "[email protected]"
}
}
id
string · uuid v7
Contact identifier. Use it as
contactId in the other contact endpoints.clientId
string · uuid v7
The ID of the client the contact belongs to.
client
object
The contact's client: its
id, name, and logoUrl. logoUrl is null when the client has no logo.firstName
string
The contact's first name. A contact always has one.
lastName
string | null
The contact's last name, or
null if not set.email
string
The contact's email address. We store it trimmed and in lower case, so
[email protected] is returned as [email protected]. Each email address can belong to only one contact of the same client.jobTitle
string | null
The contact's job title, or
null if not set.note
string | null
A free-text note about the contact, or
null if not set. It can contain line breaks.briefingCount
integer
The number of briefings on this client's dashboards that send to this contact's email address, as a To, Cc or Bcc recipient.
0 when no briefing sends to it.createdAt
string
When the contact was added.
updatedAt
string | null
When the contact was last edited, or
null if it has not been edited since it was added.createdBy
object | null
The user who added the contact, or
null if unknown.updatedBy
object | null
The user who last edited it, or
null if it has not been edited since it was added.