Invites

Create and manage team invitations. Invite new members via email.

Last updated: 2026-09-05

Manage team invitations to onboard new members. Invites are sent via email and expire after 7 days if not accepted.

GET /api/v1/invites

Returns the pending and accepted invitations for your team.

The list is paginated. See Pagination for how to walk it a page at a time.

Required Scope

invites:read

Query Parameters

ParameterTypeRequiredDescription
perPageintegerNoResults per page, 1-200 (default: 50)
cursorstringNoPage to fetch, taken from a Link header

Example Request

cURL

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

Response

{
	"data": {
		"invites": [
			{
				"id": "inv_abc123",
				"email": "alice@example.com",
				"senderId": "usr_xyz789",
				"teamId": "team_def456",
				"acceptedAt": 1770733800000,
				"createdAt": 1770542100000,
				"updatedAt": 1770733800000
			},
			{
				"id": "inv_def456",
				"email": "bob@example.com",
				"senderId": "usr_xyz789",
				"teamId": "team_def456",
				"acceptedAt": null,
				"createdAt": 1770894000000,
				"updatedAt": 1770894000000
			}
		]
	},
	"meta": {
		"requestId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
		"timestamp": "2026-02-14T12:00:00.000Z",
		"pagination": {
			"next": null,
			"prev": null,
			"perPage": 100,
			"total": 2
		}
	}
}

Response Fields

FieldTypeDescription
data.invitesarrayOne page of invites
data.invites[].idstringUnique invite identifier
data.invites[].emailstringEmail address of the invited user
data.invites[].senderIdstringUser ID of the team member who sent the invite
data.invites[].teamIdstringTeam ID the invite is for
data.invites[].acceptedAtinteger | nullUnix timestamp in milliseconds of the acceptance
data.invites[].createdAtintegerUnix timestamp in milliseconds of the creation
data.invites[].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, null on the last
meta.pagination.prevstring | nullCursor for the preceding page, null on the first
meta.pagination.perPageintegerResults this page was built with
meta.pagination.totalintegerInvites matching, across every page

Possible Errors

StatusCodeDescription
400BAD_REQUESTInvalid or malformed cursor
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have invites:read scope
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": ["data", "meta"],
	"properties": {
		"data": {
			"type": "object",
			"required": ["invites"],
			"properties": {
				"invites": {
					"type": "array",
					"items": {
						"type": "object",
						"required": [
							"id",
							"email",
							"senderId",
							"teamId",
							"acceptedAt",
							"createdAt",
							"updatedAt"
						],
						"properties": {
							"id": {
								"type": "string"
							},
							"email": {
								"type": "string",
								"format": "email"
							},
							"senderId": {
								"type": "string"
							},
							"teamId": {
								"type": "string"
							},
							"acceptedAt": {
								"type": ["integer", "null"]
							},
							"createdAt": {
								"type": "integer"
							},
							"updatedAt": {
								"type": "integer"
							}
						}
					}
				}
			}
		},
		"meta": {
			"type": "object",
			"required": ["requestId", "timestamp"],
			"properties": {
				"requestId": {
					"type": "string",
					"format": "uuid"
				},
				"timestamp": {
					"type": "string",
					"format": "date-time"
				},
				"pagination": {
					"type": "object",
					"required": ["next", "prev", "perPage"],
					"properties": {
						"next": {
							"type": ["string", "null"]
						},
						"prev": {
							"type": ["string", "null"]
						},
						"perPage": {
							"type": "integer"
						},
						"total": {
							"type": "integer"
						}
					}
				}
			}
		}
	}
}

POST /api/v1/invites

Create a new invitation and send it to the specified email address. The invite expires after 7 days.

Required Scope

invites:write

Request Body

FieldTypeRequiredDescription
emailstringYesValid email address of the person to invite

Example Request

cURL

curl -X POST https://uptime.sergiodxa.com/api/v1/invites \
  -H "Authorization: Bearer uptime_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "newuser@example.com"}'

Response

{
	"id": "inv_ghi789",
	"email": "newuser@example.com",
	"senderId": "usr_xyz789",
	"teamId": "team_def456",
	"acceptedAt": null,
	"createdAt": "2026-02-14T16:45:00Z",
	"updatedAt": "2026-02-14T16:45:00Z"
}

Possible Errors

StatusCodeDescription
400VALIDATION_ERRORInvalid email address
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have invites:write scope
409CONFLICTAn invite for this email already exists
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Request Body Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": ["email"],
	"properties": {
		"email": {
			"type": "string",
			"format": "email"
		}
	}
}

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": ["id", "email", "senderId", "teamId", "acceptedAt", "createdAt", "updatedAt"],
	"properties": {
		"id": {
			"type": "string"
		},
		"email": {
			"type": "string",
			"format": "email"
		},
		"senderId": {
			"type": "string"
		},
		"teamId": {
			"type": "string"
		},
		"acceptedAt": {
			"type": ["string", "null"],
			"format": "date-time"
		},
		"createdAt": {
			"type": "string",
			"format": "date-time"
		},
		"updatedAt": {
			"type": "string",
			"format": "date-time"
		}
	}
}

DELETE /api/v1/invites/:id

Revoke a pending invitation. This prevents the invited user from joining the team using this invite.

Required Scope

invites:write

Path Parameters

ParameterTypeDescription
idstringThe invite ID to delete

Example Request

cURL

curl -X DELETE https://uptime.sergiodxa.com/api/v1/invites/inv_ghi789 \
  -H "Authorization: Bearer uptime_your_api_key"

Response

{
	"deleted": true
}

Possible Errors

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENAPI key doesn't have invites:write scope
404NOT_FOUNDInvite not found
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORServer error

Response Schema

{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"type": "object",
	"required": ["deleted"],
	"properties": {
		"deleted": {
			"type": "boolean",
			"const": true
		}
	}
}