Skip to content

Documentation

Invite someone

POST/v1/membersTeam

Emails an invite to join the account with a role; it stays open for 7 days. Inviting an address with an open or expired invite sends a fresh one (200 instead of 201). The person accepts it signed in with that address.

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredDescription
emailstringrequired
roleadmin | editor | viewerrequiredviewer looks around, editor changes links and files, admin also manages the account: domains, people, keys, webhooks and defaults.

Example request

Terminal
curl "https://snip.link/v1/members" \
  -X POST \
  -H "Authorization: Bearer $SNIP_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Example response

Response
{
  "member": {
    "id": "2b7e9c41-5d3a-4f8e-a1c6-7e0d9b2f4a18",
    "email": "sam@example.com",
    "role": "editor",
    "status": "joined",
    "invited_at": "2026-10-20T12:00:00.000Z",
    "joined_at": "2026-10-20T12:14:09.000Z",
    "expires_at": null
  }
}

Response fields

FieldTypeDescription
memberMember
member.idstring
member.emailstring
member.roleadmin | editor | viewerviewer looks around, editor changes links and files, admin also manages the account: domains, people, keys, webhooks and defaults.
member.statusjoined | invited | expiredjoined: works in the account. invited: the invite is open. expired: nobody accepted it in time; invite again to renew it.
member.invited_atstring
member.joined_atstring, null
member.expires_atstring, nullWhen an open invite lapses. Null once joined.

Errors

StatusMeaning
400The body or query is invalid. details names each field.
401The API key is missing, malformed or revoked.
403The plan does not include this. details.upgrade names the plan that does.
409The ending is taken or reserved. Pick another.
429Either the key exceeded its requests-per-second limit (honor Retry-After), or a daily or plan quota is used up (details.reason).

Back to getting started