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.teamobject

    The team

  • data.team.idstring

    Unique team identifier

  • data.team.namestring

    Display name of the team

  • data.team.slugstring

    URL-friendly team identifier

  • data.team.logostring | null

    URL to the team's logo image

  • data.team.ownerIdstring

    User ID of the team owner

  • data.team.createdAtinteger

    Unix timestamp in milliseconds of the creation

  • data.team.updatedAtinteger

    Unix timestamp in milliseconds of the last update

Errors (2)
StatusTypeMeaning
401unauthorizedThe API key is missing or invalid
403forbiddenThe API key lacks the required scope
Response fields (200)
  • dataobjectRequired
    Show nested fields
    • teamobjectRequired
      Show nested fields
      • idstringRequired
      • namestringRequired
      • slugstringRequired
      • logostring | nullRequired

        Logo URL; null without one

      • ownerIdstringRequired
      • createdAtintegerRequired

        Epoch milliseconds

      • updatedAtintegerRequired

        Epoch milliseconds

  • metaobjectRequired
    Show nested fields
    • requestIdstringRequired

      Format: uuid.

    • timestampstringRequired

      Format: date-time.

cURL

Terminal
curl https://uptime.sergiodxa.com/api/v1/team \
  -H "Authorization: Bearer uptime_your_api_key"
request.js
let response = await fetch("https://uptime.sergiodxa.com/api/v1/team", {
	headers: {
		"Authorization": "Bearer uptime_your_api_key",
	},
});
let result = await response.json();

Response

json
{
	"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.

  • namestring

    Team display name (1-255 characters)

  • logoUrlstring | null

    URL to the team's logo image (must start with https://); null clears 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)
StatusTypeMeaning
400validation-errorThe request failed validation
401unauthorizedThe API key is missing or invalid
403forbiddenThe API key lacks the required scope
Response fields (200)
  • dataobjectRequired
    Show nested fields
    • teamobjectRequired
      Show nested fields
      • idstringRequired
      • namestringRequired
      • slugstringRequired
      • logostring | nullRequired

        Logo URL; null without one

      • ownerIdstringRequired
      • createdAtintegerRequired

        Epoch milliseconds

      • updatedAtintegerRequired

        Epoch milliseconds

  • metaobjectRequired
    Show nested fields
    • requestIdstringRequired

      Format: uuid.

    • timestampstringRequired

      Format: date-time.

cURL

Terminal
curl -X PATCH https://uptime.sergiodxa.com/api/v1/team \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/merge-patch+json" \
  -d '{
    "name": "Acme Corporation",
    "logoUrl": "https://cdn.example.com/logos/acme-new.png"
  }'
request.js
let response = await fetch("https://uptime.sergiodxa.com/api/v1/team", {
	method: "PATCH",
	headers: {
		"Authorization": "Bearer uptime_your_api_key",
		"Content-Type": "application/merge-patch+json",
	},
	body: JSON.stringify({
		"name": "Acme Corporation",
		"logoUrl": "https://cdn.example.com/logos/acme-new.png"
	}),
});
let result = await response.json();

Response

json
{
	"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

  • perPageinteger

    Results per page, 1-200 (default: 50)

  • cursorstring

    Page to fetch, taken from a Link header

Response Fields

  • data.membershipsarray

    One page of team memberships

  • data.memberships[].idstring

    Unique membership identifier

  • data.memberships[].subjectIdstring

    User ID of the team member

  • data.memberships[].teamIdstring

    Team ID this membership belongs to

  • data.memberships[].rolestring

    Member's role: owner, admin, or member

  • data.memberships[].createdAtinteger

    Unix timestamp in milliseconds of the creation

  • data.memberships[].updatedAtinteger

    Unix timestamp in milliseconds of the last update

  • meta.requestIdstring

    Identifier for this request

  • meta.timestampstring

    ISO 8601 timestamp of the response

  • meta.pagination.nextstring | null

    Cursor for the following page, null on the last

  • meta.pagination.prevstring | null

    Cursor for the preceding page, null on the first

  • meta.pagination.perPageinteger

    Results this page was built with

  • meta.pagination.totalinteger

    Memberships matching, across every page

Errors (3)
StatusTypeMeaning
400bad-requestThe request is malformed
401unauthorizedThe API key is missing or invalid
403forbiddenThe API key lacks the required scope
Response fields (200)
  • dataobjectRequired
    Show nested fields
    • membershipsMembership[]Required
      Show nested fields
      • idstringRequired
      • subjectIdstringRequired
      • teamIdstringRequired
      • rolestringRequired

        One of member, admin.

      • createdAtintegerRequired

        Epoch milliseconds

      • updatedAtintegerRequired

        Epoch milliseconds

  • metaobjectRequired
    Show nested fields
    • requestIdstringRequired

      Format: uuid.

    • timestampstringRequired

      Format: date-time.

    • paginationobjectRequired
      Show nested fields
      • nextstring | nullRequired

        Cursor of the following page

      • prevstring | nullRequired

        Cursor of the preceding page

      • perPageintegerRequired
      • totalinteger

cURL

Terminal
curl -i "https://uptime.sergiodxa.com/api/v1/memberships?perPage=100" \
  -H "Authorization: Bearer uptime_your_api_key"

Response

json
{
	"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

  • perPageinteger

    Results per page, 1-200 (default: 50)

  • cursorstring

    Page to fetch, taken from a Link header

Response Fields

  • data.teamDomainsarray

    One page of team domains

  • data.teamDomains[].idstring

    Unique domain identifier

  • data.teamDomains[].hostnamestring

    The custom domain hostname

  • data.teamDomains[].verifiedAtinteger | null

    Unix timestamp in milliseconds of the verification

  • data.teamDomains[].teamIdstring

    Team ID this domain belongs to

  • data.teamDomains[].createdAtinteger

    Unix timestamp in milliseconds of the creation

  • data.teamDomains[].updatedAtinteger

    Unix timestamp in milliseconds of the last update

  • meta.requestIdstring

    Identifier for this request

  • meta.timestampstring

    ISO 8601 timestamp of the response

  • meta.pagination.nextstring | null

    Cursor for the following page, null on the last

  • meta.pagination.prevstring | null

    Cursor for the preceding page, null on the first

  • meta.pagination.perPageinteger

    Results this page was built with

  • meta.pagination.totalinteger

    Domains matching, across every page

Errors (3)
StatusTypeMeaning
400bad-requestThe request is malformed
401unauthorizedThe API key is missing or invalid
403forbiddenThe API key lacks the required scope
Response fields (200)
  • dataobjectRequired
    Show nested fields
    • teamDomainsTeamDomain[]Required
      Show nested fields
      • idstringRequired
      • hostnamestringRequired
      • verifiedAtinteger | nullRequired

        When verified; null while pending

      • teamIdstringRequired
      • createdAtintegerRequired

        Epoch milliseconds

      • updatedAtintegerRequired

        Epoch milliseconds

  • metaobjectRequired
    Show nested fields
    • requestIdstringRequired

      Format: uuid.

    • timestampstringRequired

      Format: date-time.

    • paginationobjectRequired
      Show nested fields
      • nextstring | nullRequired

        Cursor of the following page

      • prevstring | nullRequired

        Cursor of the preceding page

      • perPageintegerRequired
      • totalinteger

cURL

Terminal
curl -i "https://uptime.sergiodxa.com/api/v1/team-domains?perPage=100" \
  -H "Authorization: Bearer uptime_your_api_key"

Response

json
{
	"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

  • hostnamestringRequired

    The custom domain hostname (1-255 characters)

Errors (7)
StatusTypeMeaning
400validation-errorThe request failed validation
400idempotency-key-invalidThe Idempotency-Key header is not valid
401unauthorizedThe API key is missing or invalid
403forbiddenThe API key lacks the required scope
409conflictThe resource's state prevents this request
409idempotency-key-in-useA request with this idempotency key is still being processed
422idempotency-key-reusedThis idempotency key was already used for a different request
Response fields (201)
  • dataobjectRequired
    Show nested fields
    • teamDomainobjectRequired
      Show nested fields
      • idstringRequired
      • hostnamestringRequired
      • verifiedAtinteger | nullRequired

        When verified; null while pending

      • teamIdstringRequired
      • createdAtintegerRequired

        Epoch milliseconds

      • updatedAtintegerRequired

        Epoch milliseconds

  • metaobjectRequired
    Show nested fields
    • requestIdstringRequired

      Format: uuid.

    • timestampstringRequired

      Format: date-time.

cURL

Terminal
curl -X POST https://uptime.sergiodxa.com/api/v1/team-domains \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "hostname": "status.example.com"
  }'
request.js
let response = await fetch("https://uptime.sergiodxa.com/api/v1/team-domains", {
	method: "POST",
	headers: {
		"Authorization": "Bearer uptime_your_api_key",
		"Content-Type": "application/json",
	},
	body: JSON.stringify({
		"hostname": "status.example.com"
	}),
});
let result = await response.json();

Response

json
{
	"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

  • idstringRequired

    The domain ID to remove (dom_ prefix)

Errors (4)
StatusTypeMeaning
400validation-errorThe request failed validation
401unauthorizedThe API key is missing or invalid
403forbiddenThe API key lacks the required scope
404not-foundThe resource does not exist
Response fields (200)
  • dataobjectRequired
    Show nested fields
    • deletedtrueRequired
  • metaobjectRequired
    Show nested fields
    • requestIdstringRequired

      Format: uuid.

    • timestampstringRequired

      Format: date-time.

cURL

Terminal
curl -X DELETE https://uptime.sergiodxa.com/api/v1/team-domains \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "dom_ghi789"
  }'
request.js
let response = await fetch("https://uptime.sergiodxa.com/api/v1/team-domains", {
	method: "DELETE",
	headers: {
		"Authorization": "Bearer uptime_your_api_key",
		"Content-Type": "application/json",
	},
	body: JSON.stringify({
		"id": "dom_ghi789"
	}),
});
let result = await response.json();

Response

json
{
	"data": {
		"deleted": true
	},
	"meta": {
		"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
		"timestamp": "2026-02-14T10:30:00.000Z"
	}
}
Documentation