Members & invitations
17 endpoints, generated from the API's own OpenAPI document. Members, seats, roles, invitations and ownership.
GET /v2/account/members
The roster, split into seated and free members, with the seat counter
Credentials: API key or App session. Operation id orgListMembers.
Lists the active organization's active members: data holds the seated members (owners first, then admins), free_members those without a seat, and seats the counter and the price of one more seat for the plan's billing interval. Any member may call it, with an API key or a session. Removed members are not listed. To buy a seat use POST /v2/account/seats (preview the charge first with POST /v2/account/billing/preview).
Responses
200 success
The roster.
As application/json.
seatsOrgSeatStatealways present- The organization's seat counter. A seat is what makes a member's access paid; a member without one is a free member.
seats.includedintegeralways present- Seats the plan includes (an unexpired DTG override of
seats_includedreplaces the plan's figure), raised tograndfatheredwhile that is set. seats.grandfatheredinteger or null- T163: an organization that had more seated members than its plan's new included count when Regional fell to 10 seats and National to 15 keeps that many included seats until its seated members fall to the plan's count or its plan changes. This is that count; null for every other organization.
seats.purchasedintegeralways present- Extra seats the organization has bought (
POST /v2/account/seats). seats.capacityintegeralways presentincluded+purchased: how many members may be seated.seats.seatedintegeralways present- Active members holding a seat now (owners and admins included). Can exceed
capacity, because owners and admins are always seated. seats.freeintegeralways present- Active members without a seat (free members).
seats.availableintegeralways present- Seats free to give,
max(0, capacity - seated). Seating a member needs this above 0. seats.seat_price_usd_monthstring or nullalways present- The plan's monthly price of one extra seat in US dollars, as a decimal string (for example "8.00"); null on a plan that sells no seats. Kept for older clients; prefer
seat_price_usd. seats.seat_price_usdnumber or nullalways present- The price of one extra seat in US dollars for the plan's billing interval (
seat_price_interval), read from the payment catalog as a checkout charges it. Null on a plan that sells no seats. seats.seat_price_interval"month" | "year"always present- The billing interval
seat_price_usdis charged per (the subscription's interval;monthwhen there is none). dataarray of OrgMemberalways present- Seated members, owners first, then admins, then by join date.
data[].idstring (uuid)always present- The membership id (the
{id}of/v2/account/members/{id}). Not the account id. data[].emailstring (email)always present- The member's sign-in address.
data[].display_namestring or nullalways present- The member's display name; null when they never set one.
data[].role"owner" | "admin" | "member"always present- A member's role in an organization (ORG_LICENSING section 7.1).
owner: everything, including roles, ownership transfer, closing the organization and billing.admin: manages members, invitations, domains and join requests, but never an owner's membership.member: uses the product. Owners and admins always hold a seat. Billing rights are a separate flag (billing_contact). data[].billing_contactbooleanalways present- True when the member may see and manage billing (invoices, payment method) although not an owner.
data[].seatedbooleanalways present- True when the member holds a seat (paid access). False is a free member, who resolves to the Free plan's scope inside this organization.
data[].api_enabledbooleanalways present- True when an owner or admin has allowed this member to hold live API keys (needs a seat and the organization's API add-on).
data[].status"active"always present- Always
activehere; removed members are not listed. data[].last_active_atstring (date-time) or nullalways present- The member's most recent successful data request on any channel (written at most every five minutes); null when they have made none. This is what monthly active users count.
data[].joined_atstring (date-time)always present- When the membership began (or began again, for a returning member).
data[].active_keysintegeralways present- The member's unrevoked API keys in this organization, live and sandbox together.
free_membersarray of OrgMemberalways present- Members without a seat, by join date.
free_members[].idstring (uuid)always present- The membership id (the
{id}of/v2/account/members/{id}). Not the account id. free_members[].emailstring (email)always present- The member's sign-in address.
free_members[].display_namestring or nullalways present- The member's display name; null when they never set one.
free_members[].role"owner" | "admin" | "member"always present- A member's role in an organization (ORG_LICENSING section 7.1).
owner: everything, including roles, ownership transfer, closing the organization and billing.admin: manages members, invitations, domains and join requests, but never an owner's membership.member: uses the product. Owners and admins always hold a seat. Billing rights are a separate flag (billing_contact). free_members[].billing_contactbooleanalways present- True when the member may see and manage billing (invoices, payment method) although not an owner.
free_members[].seatedbooleanalways present- True when the member holds a seat (paid access). False is a free member, who resolves to the Free plan's scope inside this organization.
free_members[].api_enabledbooleanalways present- True when an owner or admin has allowed this member to hold live API keys (needs a seat and the organization's API add-on).
free_members[].status"active"always present- Always
activehere; removed members are not listed. free_members[].last_active_atstring (date-time) or nullalways present- The member's most recent successful data request on any channel (written at most every five minutes); null when they have made none. This is what monthly active users count.
free_members[].joined_atstring (date-time)always present- When the membership began (or began again, for a returning member).
free_members[].active_keysintegeralways present- The member's unrevoked API keys in this organization, live and sandbox together.
reassignment_pendingbooleanalways present- True after a plan change unseated members to fit a smaller seat count and no admin has changed a seat since. The first seat change after that is the free reassignment; any seat change clears the flag.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: no_membership (the account has no active organization membership), account_suspended, org_suspended (DTG suspended the organization; carries organization and possibly reason), org_closed (the organization is closed; carries organization), wrong_instance (a key of the mode this process does not serve; base_url names the address that serves it).
As application/problem+json.
404 error
Not found. Codes: not_found (X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), not_found (404). Every problem is a problem document.
POST /v2/account/members
Invite one address or a pasted list (14-day links)
Credentials: API key or App session. Operation id orgInviteMembers.
Owner or admin. Creates an invitation for each distinct address and mails it (the mail names the inviter and, where the organization has one, its verified domain). Each invitation lasts rules.link_lifetimes.invitation_days (14 by default). An address that already has a pending invitation here has that one revoked and a fresh one sent. An address that belongs to an active member, or is not a usable address, is reported and skipped; the request still answers 201. Inviting does not take a seat: a seat is taken on acceptance when one is free (an admin is always seated). Only an owner may invite admins. Each invitation writes an invite.sent audit row.
Request body
Required; application/json.
emailstring- One address to invite. Trimmed and lower-cased.
emailsarray of string or string- Several addresses, at most 200 after de-duplication. An array of strings, or one string separated by spaces, commas or semicolons (a pasted list). Non-string array items are ignored.
role"member" | "admin"- The role the invitee joins with. Anything other than
adminis treated asmember. Only an owner may invite admins. (default "member")
Responses
201 success
One result per address.
As application/json.
dataarray of OrgInviteResultalways present- One result per distinct address, in request order.
data[].emailstringalways present- The address as processed (trimmed, lower-cased).
data[].status"invited" | "invalid" | "already_member"always presentinvited: an invitation was created and mailed.invalid: not a usable address, nothing sent.already_member: the address already belongs to an active member, nothing sent.data[].invite_idstring (uuid)- The new invitation's id. Present only when
statusisinvited. data[].expires_atstring (date-time)- When the invitation link stops working (14 days by default,
rules.link_lifetimes.invitation_days). Present only whenstatusisinvited.
400 error
Bad request. Codes: bad_request (neither email nor emails gave an address, or more than 200 addresses), malformed_json (the body is not valid JSON).
As application/problem+json.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is a member, or an admin inviting with role: admin; carries required), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
413 error
Payload too large. Codes: body_too_large (over 256 KB; carries limit_bytes).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: bad_request (400), malformed_json (400), unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404), body_too_large (413). Every problem is a problem document.
DELETE /v2/account/members/me
Leave the active organization
Credentials: API key or App session. Operation id orgLeave.
Any role. Ends the caller's membership in the active organization: the seat is freed, every API key the caller holds there (live and sandbox) is revoked, their pending join requests there are closed, and an open ownership claim they made is cancelled (claimant_left). Unlike a removal, the caller's sessions are NOT ended: a session is the person's, not the organization's, and still serves their other organizations; the left organization simply stops resolving at once, and a remembered last-used organization pointing at it is cleared. Writes a member.left audit row and tells the owners in the app. The organization's last owner is refused; transfer ownership first.
Responses
204 success
Left. No body.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
409 error
Conflict. Codes: last_owner (the caller is the organization's only owner; carries organizations: [{orgId, name}], the body account close also answers with).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404), last_owner (409). Every problem is a problem document.
PATCH /v2/account/members/{id}
Change a member's role, seat, API access or billing-contact flag
Credentials: API key or App session. Operation id orgUpdateMember.
Owner or admin; an admin may change members and other admins but never an owner's membership (any field). Only an owner may change role.
role: making someoneowneroradminalso seats them, without a capacity check. The last owner cannot be demoted.seated: trueneeds a free seat. The member is mailed and told in the app.seated: false(members only; owners and admins always hold seats) frees the seat, setsapi_enabledto false and revokes the member's LIVE API keys in this organization. Their sandbox keys stay: a sandbox key needs neither a seat nor the add-on. The member is mailed and told in the app. A seat lost to a plan or seat reduction (the downgrade composite) does the same.api_enabled: trueneeds the organization's API add-on and a seated member (sent in the same request or already).api_enabled: falserevokes the member's LIVE API keys in this organization; sandbox keys stay.billing_contact: grants or removes billing rights.
Any seat change clears reassignment_pending. Writes one member.updated audit row with the before and after of all four fields.
Parameters
idpath · string (uuid)required- The membership id (
idon the roster), not the account id. A value that is not a UUID answers 404.
Request body
Required; application/json.
role"owner" | "admin" | "member"- The new role. Only an owner may change roles. Making someone
owneroradminalso seats them (no seat check; owners and admins may exceed the seat capacity). Demoting the organization's last owner is refused. seatedboolean- Give (
true) or take back (false) a seat. Giving needs a free seat. Owners and admins cannot be unseated. Taking a seat back also setsapi_enabledto false (see the operation description for what happens to keys). api_enabledboolean- Allow (
true) or stop (false) this member holding live API keys.trueneeds the organization's API add-on and a seated member.falserevokes the member's LIVE keys in this organization; their sandbox keys stay. billing_contactboolean- Make the member a billing contact (may see and manage invoices and the payment method) or remove the flag.
Responses
200 success
The membership after the change.
As application/json.
idstring (uuid)always present- The membership id.
org_idstring (uuid)always present- The organization's id.
account_idstring (uuid)always present- The member's account id.
role"owner" | "admin" | "member"always present- A member's role in an organization (ORG_LICENSING section 7.1).
owner: everything, including roles, ownership transfer, closing the organization and billing.admin: manages members, invitations, domains and join requests, but never an owner's membership.member: uses the product. Owners and admins always hold a seat. Billing rights are a separate flag (billing_contact). billing_contactbooleanalways present- True when the member may manage billing.
seatedbooleanalways present- True when the member holds a seat.
api_enabledbooleanalways present- True when the member may hold live API keys.
status"active"always present- Always
active(a removed membership cannot be changed). last_active_atstring (date-time) or nullalways present- The member's most recent successful data request; null when none.
joined_atstring (date-time)always present- When the membership began.
removed_atstring (date-time) or nullalways present- Always null on an active membership (set when a membership is removed).
emailstring (email)always present- The member's sign-in address.
400 error
Bad request. Codes: bad_request (a field of the wrong type or value, nothing to update, unseating an owner or admin, or api_enabled: true for an unseated member), malformed_json (the body is not valid JSON).
As application/problem+json.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is a member, or an admin sent role; carries required when raised by the role check), owner_row_protected (an admin changing an owner's membership), plan_required (api_enabled: true without the API add-on; carries entitlement: api_access), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (no active member with that id in this organization, or X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
409 error
Conflict. Codes: no_seat_available (seating needs a free seat; carries seats; buy one with POST /v2/account/seats), last_owner (demoting the only owner; transfer ownership first).
As application/problem+json.
413 error
Payload too large. Codes: body_too_large (over 256 KB; carries limit_bytes).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: bad_request (400), malformed_json (400), unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), owner_row_protected (403), plan_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404), no_seat_available (409), last_owner (409), body_too_large (413). Every problem is a problem document.
DELETE /v2/account/members/{id}
Remove a member
Credentials: API key or App session. Operation id orgRemoveMember.
Owner or admin; only an owner may remove an owner, and the last owner cannot be removed. The membership ends at once (ORG_LICENSING section 7.4): the seat is freed, EVERY API key the member holds in this organization is revoked (live and sandbox), ALL of the person's sessions are ended (they are signed out everywhere, other organizations included), their pending join requests here are closed, and an open ownership claim they made is cancelled (claimant_left). Counties and clusters stay with the organization; nothing is credited. Removing yourself this way also ends your sessions; use DELETE /v2/account/members/me to leave instead. Writes a member.removed audit row.
Parameters
idpath · string (uuid)required- The membership id (
idon the roster), not the account id. A value that is not a UUID answers 404.
Responses
204 success
Removed. No body.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is a member, or an admin removing an owner), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (no active member with that id in this organization, or X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
409 error
Conflict. Codes: last_owner (the member is the organization's only owner; transfer ownership first).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404), last_owner (409). Every problem is a problem document.
POST /v2/account/members/{id}/transfer-ownership
Make another member the owner and step down to admin
Credentials: API key or App session. Operation id orgTransferOwnership.
Owner only. The member named by {id} becomes an owner and is seated (without a capacity check); the caller becomes an admin and keeps their seat. Both changes happen together. No body is read. Writes an ownership.transferred audit row. No mail is sent.
Parameters
idpath · string (uuid)required- The membership id of the new owner. A value that is not a UUID answers 404.
Responses
200 success
Ownership transferred.
As application/json.
owner_membership_idstring (uuid)always present- The membership that is now an owner (the
{id}of the request). previous_owner_membership_idstring (uuid)always present- The caller's membership, which stepped down.
previous_owner_role"admin"always present- The caller's role now. Always
admin(still seated).
400 error
Bad request. Codes: bad_request ({id} is the caller's own membership).
As application/problem+json.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is not an owner; carries required), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (no active member with that id in this organization, or X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: bad_request (400), unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404). Every problem is a problem document.
GET /v2/account/members/claim-ownership
Read the ownership claim, if any
Credentials: API key or App session. Operation id orgGetOwnershipClaim.
Owner or admin. The ownership claim lifecycle (ORG_LICENSING section 7.3): an admin whose verified address is at a domain the organization has verified may claim ownership when no owner has been present for the notice window (notice_days). The owners are mailed and the claim completes at completes_at (the claimant becomes owner and every current owner becomes admin) unless, before then, an owner is present (signs in, or makes any request on a session; an API key never counts), which cancels it at once as owner_present, or the claimant leaves, is removed or closes their account, which cancels it as claimant_left.
This read returns the open claim, else the most recent claim cancelled within the last notice window (so the owner whose sign-in cancelled it, and the claimant, can see what happened), else claim: null. The claimant is named as they were when they claimed.
Responses
200 success
The claim, or null.
As application/json.
notice_daysintegeralways present- The notice window in days (ORG_LICENSING section 7.3; 7 by default, also served as
rules.ownership_claim_notice_days). claimOrgOwnershipClaim or nullalways present- The open claim, else the most recently cancelled one within one notice window, else null.
claim.idstring (uuid)- The claim's id.
claim.status"pending" | "cancelled"pending: open and counting down.cancelled: ended without completing (seecancel_reason).claim.opened_atstring (date-time)- When the claim was made and the owners were mailed.
claim.completes_atstring (date-time)- When a pending claim completes (opened_at plus
notice_days). claim.cancelled_atstring (date-time)- When the claim was cancelled. Present only when
statusiscancelled. claim.cancel_reason"owner_present" | "claimant_left"- Present only when
statusiscancelled.owner_present: an owner signed in or made a request on a session during the window (an API key never counts).claimant_left: the claimant was removed, left, or closed their account. claim.owner_present_atstring (date-time) or null- Present only when
statusiscancelled. When the owner's presence was recorded; null when the reason isclaimant_left. claim.claimantOrgClaimant- The admin making the claim, as the claim remembers them (their address and display name when it was made).
claim.claimant.membership_idstring (uuid)always present- The claimant's membership id.
claim.claimant.emailstring or nullalways present- The claimant's address when they claimed. Null only for an old claim with no remembered address whose claimant has since closed their account.
claim.claimant.display_namestring or nullalways present- The claimant's display name when they claimed; null when they had none. "A former member" when neither the claim nor a live account can name them.
claim.you_are"claimant" | "owner" | "admin"- The caller's relation to the claim, so one screen can say "your claim" or "a claim against you".
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is a member; carries required), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key).
As application/problem+json.
404 error
Not found. Codes: not_found (X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), not_found (404). Every problem is a problem document.
POST /v2/account/members/claim-ownership
An admin claims ownership of an organization whose owners are absent
Credentials: API key or App session. Operation id orgClaimOwnership.
Admin only (not an owner, not a member). The caller's sign-in address must be verified and at a domain this organization has verified, and no owner may have been present (signed in or made a session request) within the notice window. Opens a claim that completes after notice_days unless an owner is present first (see GET on this path). Every owner is mailed and told in the app; writes an ownership.claimed audit row. If a claim is already open it is returned unchanged with 200 and nothing is sent. No body is read.
Responses
200 success
A claim was already open; it is returned unchanged.
As application/json.
idstring (uuid)always present- The claim's id.
completes_atstring (date-time)always present- When the claim completes unless an owner is present first.
status"pending"always present- Always
pending.
201 success
The claim was opened and the owners notified.
As application/json.
idstring (uuid)always present- The claim's id.
completes_atstring (date-time)always present- When the claim completes unless an owner is present first.
status"pending"always present- Always
pending.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is not an admin), domain_verification_required (the caller's address is unverified or not at a domain this organization has verified), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
409 error
Conflict. Codes: owner_active (an owner signed in or made a session request within the notice window; ask them to transfer ownership).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), domain_verification_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404), owner_active (409). Every problem is a problem document.
GET /v2/account/invites
Pending invitations
Credentials: API key or App session. Operation id orgListInvites.
The owner or an admin (O63 S11, Q22; 403 role_required for anyone else). Invitations of the active organization not yet accepted or revoked, newest first. An expired one stays listed (with expired: true) until it is revoked or resent.
Responses
200 success
The pending invitations.
As application/json.
dataarray of OrgPendingInvitealways present- Pending invitations, newest first.
data[].idstring (uuid)always present- The invitation's id.
data[].emailstringalways present- The invited address.
data[].role"member" | "admin"always present- The role the invitee joins with.
data[].expires_atstring (date-time)always present- When the link stops working.
data[].created_atstring (date-time)always present- When the invitation was first made (a resend does not change it).
data[].invited_bystringalways present- The sign-in address of the person who invited.
data[].expiredbooleanalways present- True when
expires_athas passed; resend to issue a fresh link.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key).
As application/problem+json.
404 error
Not found. Codes: not_found (X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), not_found (404). Every problem is a problem document.
DELETE /v2/account/invites/{id}
Revoke a pending invitation
Credentials: API key or App session. Operation id orgRevokeInvite.
Owner or admin. The link stops working at once. Writes an invite.revoked audit row. No mail is sent.
Parameters
idpath · string (uuid)required- The invitation's id. A value that is not a UUID answers 404.
Responses
204 success
Revoked. No body.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is a member; carries required), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (no pending invitation with that id here, or X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404). Every problem is a problem document.
POST /v2/account/invites/{id}/resend
Resend an invitation with a fresh link and expiry
Credentials: API key or App session. Operation id orgResendInvite.
Owner or admin. Issues a new token (the old link stops working) with a fresh expiry and mails it again, naming the caller as the inviter. Works on an expired invitation too. Writes an invite.resent audit row. No body is read.
Parameters
idpath · string (uuid)required- The invitation's id. A value that is not a UUID answers 404.
Responses
200 success
Resent.
As application/json.
idstring (uuid)always present- The invitation's id (unchanged).
expires_atstring (date-time)always present- The fresh link's expiry.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is a member; carries required), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (no pending invitation with that id here, or X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404). Every problem is a problem document.
GET /v2/invites/preview
What an invitation link is, before signing in (anonymous)
Credentials: none. Operation id orgPreviewInvite.
Anonymous; no credential is read and no per-caller rate limit applies. Names the invited address, the role, the inviting organization and its verified domain, the inviter and the expiry, so the wrong person is told before any click. For an unexpired invitation it also says whether the address already has an account (account_exists: sign in and accept) or can sign up from the invitation (POST /v2/invites/sign-up). Every token that is not an open invitation (unknown, used, revoked or malformed) gets the same 404, so the preview cannot be used to probe addresses.
Parameters
tokenquery · stringrequired- The invitation token from the mailed link.
Responses
200 success
The invitation.
As application/json.
emailstringalways present- The address the invitation was sent to; only that address can accept it.
role"member" | "admin"always present- The role the invitee joins with.
expires_atstring (date-time)always present- When the link stops working.
org_namestringalways present- The inviting organization's name.
expiredbooleanalways present- True when
expires_athas passed. An expired invitation cannot be accepted; ask for a new one. lifetime_daysintegeralways present- How many days an invitation lasts (14 by default).
inviterobjectalways present- Who sent the invitation.
inviter.display_namestring or nullalways present- The inviter's display name, else their address; null when the inviter's account has closed.
inviter.organizationstringalways present- The inviting organization's name (the same as
org_name). org_domainstring or nullalways present- The inviting organization's verified domain (its first, by verification time), as the invitation mail names it; null when it has none. A name with no verified domain beside it is unverified.
signup_verifiedtrue- Present only for an unexpired invitation. Always true; an account made through
POST /v2/invites/sign-upwith this token is verified by it. account_existsboolean- Present only for an unexpired invitation. True when the invited address already has an account (sign in and accept); false means sign up from the invitation.
404 error
Not found. Codes: not_found (the token is not an open invitation).
As application/problem+json.
Problem codes: bad_request (400), not_found (404). Every problem is a problem document.
POST /v2/invites/accept
Accept an invitation as the signed-in invitee
Credentials: API key or App session. Operation id orgAcceptInvite.
Any signed-in person, including one with no organization at all (or whose only one is suspended or closed). The invitation's address must be the caller's sign-in address, and verified. Joins the organization with the invitation's role: a seat is taken when one is free (an admin is always seated), else the person joins as a free member; a former member's membership is re-activated with api_enabled false. The invitation is used up. An active member of the organization is refused and the invitation is left open.
Request body
Required; application/json.
tokenstringrequired- The invitation token from the mailed link (
/invite?token=).
Responses
200 success
Joined.
As application/json.
organizationobjectalways present- The organization, by id and name.
organization.idstring (uuid)always present- The organization joined. Send it as
X-DTG-Orgto act in it. organization.namestringalways present- The organization's name.
membership_idstring (uuid)always present- The new (or re-activated) membership's id.
role"member" | "admin"always present- The role the invitation carried.
seatedbooleanalways present- True when a seat was taken. An admin is always seated; a member is seated only when a seat was free, else joins as a free member.
400 error
Bad request. Codes: bad_request (token missing or empty), malformed_json (the body is not valid JSON).
As application/problem+json.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: email_mismatch (the invitation was sent to a different address), email_unverified (verify your address first), wrong_instance (a key of the mode this process does not serve; base_url names the address that serves it). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (the token is not an open invitation, or X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
409 error
Conflict. Codes: already_member (the caller is already an active member; carries the membership as it stands).
As application/problem+json.
410 error
Gone. Codes: invite_expired (carries expired_at and lifetime_days; ask for a new invitation).
As application/problem+json.
413 error
Payload too large. Codes: body_too_large (over 4 KB; carries limit_bytes).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: bad_request (400), malformed_json (400), unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), email_mismatch (403), email_unverified (403), wrong_instance (403), sandbox_read_only (403), not_found (404), already_member (409), invite_expired (410), body_too_large (413). Every problem is a problem document.
POST /v2/invites/sign-up
Create an account from an invitation, join and sign in, in one request (anonymous)
Credentials: none. Operation id orgInviteSignUp.
Anonymous, behind the human check: send the Cloudflare Turnstile widget token in the x-captcha-response header. Creates the account for the invitation's address with the given name and password (the usual password rules; the person's own organization is created as for every sign-up), marks it verified (the invitation link proved the address, so no confirmation mail is sent), accepts the invitation as POST /v2/invites/accept does, and signs the person in: the 201 carries the session cookie in Set-Cookie. When the address already has an account the request is refused and the invitation stays open (sign in and accept). If the invitation is revoked in the instant between creating the account and accepting, the account stays, verified, and the answer is the accept's refusal. Rate-limited per client address.
Parameters
x-captcha-responseheader · stringrequired- The Cloudflare Turnstile token from the widget on the sign-up page.
Request body
Required; application/json.
tokenstringrequired- The invitation token from the mailed link.
namestringrequired- The new account's display name (trimmed; 1 to 120 characters). (at most 120 characters)
passwordstringrequired- The new account's password, 10 to 128 characters. (at most 128 characters)
marketing_opt_inboolean- The sign-up form's marketing consent box. Absent or false means no marketing mail. (default false)
Responses
201 success
Account created, invitation accepted, signed in.
As application/json.
Set-Cookieheader- The session cookie.
organizationobjectalways present- The organization, by id and name.
organization.idstring (uuid)always present- The organization joined. Send it as
X-DTG-Orgto act in it. organization.namestringalways present- The organization's name.
membership_idstring (uuid)always present- The new (or re-activated) membership's id.
role"member" | "admin"always present- The role the invitation carried.
seatedbooleanalways present- True when a seat was taken. An admin is always seated; a member is seated only when a seat was free, else joins as a free member.
400 error
Bad request. Codes: captcha_missing (no human-check token; errors repeats it), bad_request (token, name (1 to 120 characters), password or marketing_opt_in missing or of the wrong type), password_too_short (carries min_length), password_too_long (carries max_length), malformed_json (the body is not valid JSON).
As application/problem+json.
403 error
Forbidden. Codes: captcha_failed (the human check did not pass).
As application/problem+json.
404 error
Not found. Codes: not_found (the token is not an open invitation).
As application/problem+json.
409 error
Conflict. Codes: account_exists (the address already has an account; sign in and accept the invitation).
As application/problem+json.
410 error
Gone. Codes: invite_expired (carries expired_at and lifetime_days).
As application/problem+json.
413 error
Payload too large. Codes: body_too_large (over 4 KB; carries limit_bytes).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
503 error
Service unavailable. Codes: unavailable (the human-check service could not be reached; retry).
As application/problem+json.
Problem codes: captcha_missing (400), bad_request (400), password_too_short (400), password_too_long (400), malformed_json (400), captcha_failed (403), not_found (404), account_exists (409), invite_expired (410), body_too_large (413), unavailable (503). Every problem is a problem document.
GET /v2/account/join-requests
Pending requests to join the organization
Credentials: API key or App session. Operation id orgListJoinRequests.
The owner or an admin (O63 S11, Q22; 403 role_required for anyone else). Requests filed through POST /v2/orgs/{id}/join at a verified domain whose join policy is request, oldest first.
Responses
200 success
The pending requests.
As application/json.
dataarray of OrgJoinRequestalways present- Pending requests, oldest first.
data[].idstring (uuid)always present- The request's id.
data[].emailstringalways present- The requester's sign-in address.
data[].display_namestring or nullalways present- The requester's display name; null when none.
data[].status"pending"always present- Always
pendinghere. data[].created_atstring (date-time)always present- When the request was made (or last re-made).
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key).
As application/problem+json.
404 error
Not found. Codes: not_found (X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), not_found (404). Every problem is a problem document.
POST /v2/account/join-requests/{id}/approve
Approve a join request
Credentials: API key or App session. Operation id orgApproveJoinRequest.
Owner or admin. The requester joins with the default_role of the organization's verified claim on their email domain (member if the claim is no longer verified). A seat is taken when one is free (an admin is always seated), else they join as a free member. The requester is mailed and told in the app. No body is read.
Parameters
idpath · string (uuid)required- The join request's id. A value that is not a UUID answers 404.
Responses
200 success
Approved; the membership was created or re-activated.
As application/json.
idstring (uuid)always present- The request's id.
status"approved" | "denied"always present- The decision.
membership_idstring (uuid)- Approve only: the new (or re-activated) membership's id.
seatedboolean- Approve only: true when a seat was taken (always for an admin; for a member only when one was free).
rejoinedboolean- Approve only: true when a former membership was re-activated rather than created.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is a member; carries required), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (no pending request with that id here, or X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404). Every problem is a problem document.
POST /v2/account/join-requests/{id}/deny
Deny a join request
Credentials: API key or App session. Operation id orgDenyJoinRequest.
Owner or admin. The requester is mailed (they have no membership here, so no in-app notice). They may ask again later. No body is read.
Parameters
idpath · string (uuid)required- The join request's id. A value that is not a UUID answers 404.
Responses
200 success
Denied.
As application/json.
idstring (uuid)always present- The request's id.
status"approved" | "denied"always present- The decision.
membership_idstring (uuid)- Approve only: the new (or re-activated) membership's id.
seatedboolean- Approve only: true when a seat was taken (always for an admin; for a member only when one was free).
rejoinedboolean- Approve only: true when a former membership was re-activated rather than created.
401 error
Unauthorized. Codes: unauthenticated (no credential, or the key or session is not valid); key_revoked (an API key that was revoked: revoked_at, and reason -- holder, admin, member_removed, seat_removed, api_disabled, addon_ended, account_closed, org_closed, retired, or null for a key revoked before T110 -- and a sentence saying when and why).
As application/problem+json.
403 error
Forbidden. Codes: role_required (the caller is a member; carries required), no_membership, account_suspended, org_suspended, org_closed, wrong_instance (see GET /v2/account/members; base_url names the address that serves the key). A sandbox key: sandbox_read_only (it may write only clusters).
As application/problem+json.
404 error
Not found. Codes: not_found (no pending request with that id here, or X-DTG-Org names an organization the caller is not an active member of).
As application/problem+json.
429 error
rate_limited (the per-minute ceiling, X-RateLimit-* say which), points_exhausted (the monthly points allowance; Retry-After to the end of the UTC month), server_busy or sandbox_busy (load; retry after Retry-After). A refused server_busy request is not metered.
As application/problem+json.
Retry-Afterheader- Seconds to wait before retrying.
X-RateLimit-Limitheader- The per-minute request ceiling that applies.
X-RateLimit-Remainingheader- Requests left in the current window.
X-RateLimit-Resetheader- Seconds until the window refills: on every answer, the time until the bucket is full again; on a refusal, until a request is allowed (as
Retry-After).
Problem codes: unauthenticated (401), key_revoked (401), account_closed (401), org_closed (401), role_required (403), no_membership (403), account_suspended (403), org_suspended (403), org_closed (403), wrong_instance (403), sandbox_read_only (403), not_found (404). Every problem is a problem document.
Generated from taigan/openapi.yaml at catahoula 77925fab712f(API document version 2.0).