Team
Get and update team settings. Manage team domains for custom status page URLs.
Manage your team settings, memberships, and custom domains for status pages.
GET /api/v1/team
Returns the current team's details.
Required scope: teams:read
Response Fields
data.teamobjectThe team
data.team.idstringUnique team identifier
data.team.namestringDisplay name of the team
data.team.slugstringURL-friendly team identifier
data.team.logostring | nullURL to the team's logo image
data.team.ownerIdstringUser ID of the team owner
data.team.createdAtintegerUnix timestamp in milliseconds of the creation
data.team.updatedAtintegerUnix timestamp in milliseconds of the last update
Errors (2)
| Status | Type | Meaning |
|---|---|---|
| 401 | unauthorized | The API key is missing or invalid |
| 403 | forbidden | The API key lacks the required scope |
Response fields (200)
dataobjectRequiredShow nested fields
teamobjectRequiredShow nested fields
idstringRequirednamestringRequiredslugstringRequiredlogostring | nullRequiredLogo URL; null without one
ownerIdstringRequiredcreatedAtintegerRequiredEpoch milliseconds
updatedAtintegerRequiredEpoch milliseconds
metaobjectRequiredShow nested fields
requestIdstringRequiredFormat: uuid.
timestampstringRequiredFormat: date-time.
cURL
Response
{
"data": {
"team": {
"id": "team_abc123",
"name": "Acme Inc",
"slug": "acme-inc",
"logo": "https://cdn.example.com/logos/acme.png",
"ownerId": "usr_xyz789",
"createdAt": 1749974400000,
"updatedAt": 1768919400000
}
},
"meta": {
"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"timestamp": "2026-02-14T12:00:00.000Z"
}
}PATCH /api/v1/team
Updates the current team's settings with a JSON merge patch.
Required scope: teams:write
Request Body
Include only the fields you want to change. null on logoUrl removes the logo; name cannot be removed. A logoUrl that is not an https:// URL answers 400 with a validation-error at /logoUrl.
namestringTeam display name (1-255 characters)
logoUrlstring | nullURL to the team's logo image (must start with
https://);nullclears it
Update With PUT
PUT /api/v1/team takes the same fields, for integrations written before PATCH existed. At least one field must be provided, a field you leave out keeps its value, and null is refused, so PUT cannot remove the logo.
Required scope: teams:write
Errors (3)
| Status | Type | Meaning |
|---|---|---|
| 400 | validation-error | The request failed validation |
| 401 | unauthorized | The API key is missing or invalid |
| 403 | forbidden | The API key lacks the required scope |
Response fields (200)
dataobjectRequiredShow nested fields
teamobjectRequiredShow nested fields
idstringRequirednamestringRequiredslugstringRequiredlogostring | nullRequiredLogo URL; null without one
ownerIdstringRequiredcreatedAtintegerRequiredEpoch milliseconds
updatedAtintegerRequiredEpoch milliseconds
metaobjectRequiredShow nested fields
requestIdstringRequiredFormat: uuid.
timestampstringRequiredFormat: date-time.
cURL
Response
{
"data": {
"team": {
"id": "team_abc123",
"name": "Acme Corporation",
"slug": "acme-inc",
"logo": "https://cdn.example.com/logos/acme-new.png",
"ownerId": "usr_xyz789",
"createdAt": 1749974400000,
"updatedAt": 1771065900000
}
},
"meta": {
"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"timestamp": "2026-02-14T10:45:00.000Z"
}
}GET /api/v1/memberships
Returns the memberships of the current team.
This endpoint is paginated. See Pagination for how to page through the full list.
Required scope: teams:read
Query Parameters
perPageintegerResults per page, 1-200 (default: 50)
cursorstringPage to fetch, taken from a
Linkheader
Response Fields
data.membershipsarrayOne page of team memberships
data.memberships[].idstringUnique membership identifier
data.memberships[].subjectIdstringUser ID of the team member
data.memberships[].teamIdstringTeam ID this membership belongs to
data.memberships[].rolestringMember's role:
owner,admin, ormemberdata.memberships[].createdAtintegerUnix timestamp in milliseconds of the creation
data.memberships[].updatedAtintegerUnix timestamp in milliseconds of the last update
meta.requestIdstringIdentifier for this request
meta.timestampstringISO 8601 timestamp of the response
meta.pagination.nextstring | nullCursor for the following page,
nullon the lastmeta.pagination.prevstring | nullCursor for the preceding page,
nullon the firstmeta.pagination.perPageintegerResults this page was built with
meta.pagination.totalintegerMemberships matching, across every page
Errors (3)
| Status | Type | Meaning |
|---|---|---|
| 400 | bad-request | The request is malformed |
| 401 | unauthorized | The API key is missing or invalid |
| 403 | forbidden | The API key lacks the required scope |
Response fields (200)
dataobjectRequiredShow nested fields
membershipsMembership[]RequiredShow nested fields
idstringRequiredsubjectIdstringRequiredteamIdstringRequiredrolestringRequiredOne of
member,admin.createdAtintegerRequiredEpoch milliseconds
updatedAtintegerRequiredEpoch milliseconds
metaobjectRequiredShow nested fields
requestIdstringRequiredFormat: uuid.
timestampstringRequiredFormat: date-time.
paginationobjectRequiredShow nested fields
nextstring | nullRequiredCursor of the following page
prevstring | nullRequiredCursor of the preceding page
perPageintegerRequiredtotalinteger
cURL
curl -i "https://uptime.sergiodxa.com/api/v1/memberships?perPage=100" \
-H "Authorization: Bearer uptime_your_api_key"Response
{
"data": {
"memberships": [
{
"id": "mem_abc123",
"subjectId": "usr_xyz789",
"teamId": "team_abc123",
"role": "owner",
"createdAt": 1750060800000,
"updatedAt": 1750060800000
},
{
"id": "mem_def456",
"subjectId": "usr_def456",
"teamId": "team_abc123",
"role": "admin",
"createdAt": 1755700200000,
"updatedAt": 1764580500000
},
{
"id": "mem_ghi789",
"subjectId": "usr_ghi789",
"teamId": "team_abc123",
"role": "member",
"createdAt": 1768042800000,
"updatedAt": 1768042800000
}
]
},
"meta": {
"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"timestamp": "2026-02-14T12:00:00.000Z",
"pagination": {
"next": "eyJkIjoiYWZ0ZXIi",
"prev": null,
"perPage": 100,
"total": 142
}
}
}GET /api/v1/team-domains
Returns the custom domains configured for the team's status pages.
Results arrive a page at a time; follow the Link header as described in Pagination to reach every domain.
Required scope: team-domains:read
Query Parameters
perPageintegerResults per page, 1-200 (default: 50)
cursorstringPage to fetch, taken from a
Linkheader
Response Fields
data.teamDomainsarrayOne page of team domains
data.teamDomains[].idstringUnique domain identifier
data.teamDomains[].hostnamestringThe custom domain hostname
data.teamDomains[].verifiedAtinteger | nullUnix timestamp in milliseconds of the verification
data.teamDomains[].teamIdstringTeam ID this domain belongs to
data.teamDomains[].createdAtintegerUnix timestamp in milliseconds of the creation
data.teamDomains[].updatedAtintegerUnix timestamp in milliseconds of the last update
meta.requestIdstringIdentifier for this request
meta.timestampstringISO 8601 timestamp of the response
meta.pagination.nextstring | nullCursor for the following page,
nullon the lastmeta.pagination.prevstring | nullCursor for the preceding page,
nullon the firstmeta.pagination.perPageintegerResults this page was built with
meta.pagination.totalintegerDomains matching, across every page
Errors (3)
| Status | Type | Meaning |
|---|---|---|
| 400 | bad-request | The request is malformed |
| 401 | unauthorized | The API key is missing or invalid |
| 403 | forbidden | The API key lacks the required scope |
Response fields (200)
dataobjectRequiredShow nested fields
teamDomainsTeamDomain[]RequiredShow nested fields
idstringRequiredhostnamestringRequiredverifiedAtinteger | nullRequiredWhen verified; null while pending
teamIdstringRequiredcreatedAtintegerRequiredEpoch milliseconds
updatedAtintegerRequiredEpoch milliseconds
metaobjectRequiredShow nested fields
requestIdstringRequiredFormat: uuid.
timestampstringRequiredFormat: date-time.
paginationobjectRequiredShow nested fields
nextstring | nullRequiredCursor of the following page
prevstring | nullRequiredCursor of the preceding page
perPageintegerRequiredtotalinteger
cURL
curl -i "https://uptime.sergiodxa.com/api/v1/team-domains?perPage=100" \
-H "Authorization: Bearer uptime_your_api_key"Response
{
"data": {
"teamDomains": [
{
"id": "dom_abc123",
"hostname": "status.acme.com",
"verifiedAt": 1756728000000,
"teamId": "team_abc123",
"createdAt": 1756641600000,
"updatedAt": 1756728000000
},
{
"id": "dom_def456",
"hostname": "uptime.acme.io",
"verifiedAt": null,
"teamId": "team_abc123",
"createdAt": 1768469400000,
"updatedAt": 1768469400000
}
]
},
"meta": {
"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"timestamp": "2026-02-14T12:00:00.000Z",
"pagination": {
"next": null,
"prev": null,
"perPage": 100,
"total": 2
}
}
}POST /api/v1/team-domains
Adds a custom domain for the team's status pages, pending verification. Answers 201 Created.
Required scope: team-domains:write
Request Body
hostnamestringRequiredThe custom domain hostname (1-255 characters)
Errors (7)
| Status | Type | Meaning |
|---|---|---|
| 400 | validation-error | The request failed validation |
| 400 | idempotency-key-invalid | The Idempotency-Key header is not valid |
| 401 | unauthorized | The API key is missing or invalid |
| 403 | forbidden | The API key lacks the required scope |
| 409 | conflict | The resource's state prevents this request |
| 409 | idempotency-key-in-use | A request with this idempotency key is still being processed |
| 422 | idempotency-key-reused | This idempotency key was already used for a different request |
Response fields (201)
dataobjectRequiredShow nested fields
teamDomainobjectRequiredShow nested fields
idstringRequiredhostnamestringRequiredverifiedAtinteger | nullRequiredWhen verified; null while pending
teamIdstringRequiredcreatedAtintegerRequiredEpoch milliseconds
updatedAtintegerRequiredEpoch milliseconds
metaobjectRequiredShow nested fields
requestIdstringRequiredFormat: uuid.
timestampstringRequiredFormat: date-time.
cURL
Response
{
"data": {
"teamDomain": {
"id": "dom_ghi789",
"hostname": "status.example.com",
"verifiedAt": null,
"teamId": "team_abc123",
"createdAt": 1771063200000,
"updatedAt": 1771063200000
}
},
"meta": {
"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"timestamp": "2026-02-14T10:00:00.000Z"
}
}DELETE /api/v1/team-domains
Removes a custom domain from the team.
Required scope: team-domains:write
Request Body
idstringRequiredThe domain ID to remove (
dom_prefix)
Errors (4)
| Status | Type | Meaning |
|---|---|---|
| 400 | validation-error | The request failed validation |
| 401 | unauthorized | The API key is missing or invalid |
| 403 | forbidden | The API key lacks the required scope |
| 404 | not-found | The resource does not exist |
Response fields (200)
dataobjectRequiredShow nested fields
deletedtrueRequired
metaobjectRequiredShow nested fields
requestIdstringRequiredFormat: uuid.
timestampstringRequiredFormat: date-time.
cURL
Response
{
"data": {
"deleted": true
},
"meta": {
"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"timestamp": "2026-02-14T10:30:00.000Z"
}
}