Skip to the documentation

Invitations

Bring people into the org by email.

List open invitations

GET/api/v1/org/invites

The org's open invitations, newest first. Admins only.

An API key carrying the scope named here, or a signed-in session.

Scope
org:read
Key kinds
Organization
Access
The caller must administer the organization.

Required and optional fields, allowed values and errors, as the page shows them.

Examples

curl "https://liviamatch.com/api/v1/org/invites" \
  -H "Authorization: Bearer $LIVIA_API_KEY"

Responses

200

The open invitations.

One open invitation
{
  "data": [
    {
      "id": "a4d7f0b3-1c68-4e92-8b5d-6a3c9e1f2d70",
      "email": "sam@hearthandkey.example",
      "role": "member",
      "createdAt": "2026-10-02T09:15:00.000Z",
      "expiresAt": "2026-10-05T09:15:00.000Z"
    }
  ]
}
Fields (6)
FieldTypeDescription
dataobject[]
data[].idstring (uuid)
data[].emailstring
data[].rolestring
data[].createdAtstring (date-time)
data[].expiresAtstring (date-time)

Errors

StatusCodeWhen
403forbiddenThe caller does not administer the org.

Any call of this kind can also answer401 unauthenticated401 invalid-api-key403 insufficient-scope429 rate-limited429 monthly-cap-reached500 internal

Invite someone

POST/api/v1/org/invites

Invites a person by email and mails them the join link. An invitation grants member or admin, never owner. It expires after 3 days. A failed send still returns the invitation; sending a fresh one recovers it. An address already on the team, or the caller's own, is refused before anything is mailed. The org may send 30 invitations a day, across Settings and the API.

An API key carrying the scope named here, or a signed-in session.

Scope
members:write
Key kinds
Organization
Access
The caller must administer the organization.

Required and optional fields, allowed values and errors, as the page shows them.

Request body

Who, and as what.

Fields (2)
FieldTypeRequiredDescription
emailstringRequiredWho to invite. Lowercased and trimmed; not your own address and not someone already on the team.
rolestringOptionalmember or admin. Never owner: that seat moves only by transfer, in Settings.default "member"
Examples
{
  "email": "sam@hearthandkey.example",
  "role": "member"
}

Examples

curl -X POST "https://liviamatch.com/api/v1/org/invites" \
  -H "Authorization: Bearer $LIVIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "sam@hearthandkey.example",
  "role": "member"
}'

Responses

201

The invitation.

An invitation
{
  "data": {
    "id": "a4d7f0b3-1c68-4e92-8b5d-6a3c9e1f2d70",
    "email": "sam@hearthandkey.example",
    "role": "member",
    "createdAt": "2026-10-02T09:15:00.000Z",
    "expiresAt": "2026-10-05T09:15:00.000Z"
  }
}
Fields (6)
FieldTypeDescription
dataobject
data.idstring (uuid)
data.emailstring
data.rolestring
data.createdAtstring (date-time)
data.expiresAtstring (date-time)

Errors

StatusCodeWhen
403forbiddenThe caller does not administer the org.
400invalidThe body failed validation; issues names each field.
400invalid-jsonThe body is empty or not JSON.
429invite-cap-reachedThe org sent its most invitations for the UTC day.

Any call of this kind can also answer401 unauthenticated401 invalid-api-key403 insufficient-scope429 rate-limited429 monthly-cap-reached500 internal

Revoke an invitation

DELETE/api/v1/org/invites/{inviteId}

Cancels one of the org's open invitations so its link stops working.

An API key carrying the scope named here, or a signed-in session.

Scope
members:write
Key kinds
Organization
Access
The caller must administer the organization.

Required and optional fields, allowed values and errors, as the page shows them.

Parameters

NameInTypeRequiredDescription
inviteIdPathstring (uuid)RequiredThe invitation's id: id from GET /api/v1/org/invites.

Examples

curl -X DELETE "https://liviamatch.com/api/v1/org/invites/a4d7f0b3-1c68-4e92-8b5d-6a3c9e1f2d70" \
  -H "Authorization: Bearer $LIVIA_API_KEY"

Responses

200

The invitation is revoked.

Revoked
{
  "data": {
    "id": "a4d7f0b3-1c68-4e92-8b5d-6a3c9e1f2d70",
    "revoked": true
  }
}
Fields (3)
FieldTypeDescription
dataobject
data.idstring (uuid)
data.revokedtrue

Errors

StatusCodeWhen
403forbiddenThe caller does not administer the org.
404not-foundNo such open invitation in the org.

Any call of this kind can also answer401 unauthenticated401 invalid-api-key403 insufficient-scope429 rate-limited429 monthly-cap-reached500 internal