List pending invites
const url = 'http://localhost:8000/api/team/invites/';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url http://localhost:8000/api/team/invites/ \ --header 'Authorization: Bearer <token>'Returns the active team’s invites that are still out — neither accepted nor cancelled — newest first. An invite past its expires_at stays in the list with status: "expired": its link no longer works, and the owner renews it by POSTing the same email again, which cancels it and sends a fresh invite. Every other row reads pending. Accepted and cancelled invites are excluded — history isn’t exposed because the UI surfaces only what’s actionable. Empty array when no team or nothing is out.
Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”Full invite row — owner-facing (pending invites list).
object
Invite UUID — use to cancel via DELETE /api/team/invites/
Recipient email.
Friendly name as supplied at invite creation (optional).
pending / accepted / cancelled / expired. Effective status: a pending invite past expires_at reads expired — its link no longer works — even though the stored row still says pending.
pending- Pendingaccepted- Acceptedexpired- Expiredcancelled- Cancelled
ISO-8601 UTC. When the accept link stops working: 14 days after the invite was sent. Inviting the same email again starts a fresh 14 days.
Stamped when the recipient accepts. Null otherwise.
When the invite was sent.
Examples
One pending invite
[ { "id": "9b1c7e2a-4d3f-4a8b-9c0d-1e2f3a4b5c6d", "email": "newcoach@club.example", "display_name": "New Coach", "status": "pending", "expires_at": "2026-06-10T00:00:00Z", "accepted_at": null, "created_at": "2026-05-27T09:00:00Z" }]One expired invite
Past expires_at the invite stays listed, as expired, until the owner renews it (POST the same email) or cancels it.
[ { "id": "3e8f1a6c-2b7d-4c9e-8f0a-5d6b7c8e9f01", "email": "physio@club.example", "display_name": "", "status": "expired", "expires_at": "2026-05-20T00:00:00Z", "accepted_at": null, "created_at": "2026-05-06T00:00:00Z" }]object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Example generated
{ "detail": "example"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Example generated
{ "detail": "example"}