Skip to content
Nowlark
API reference menu

Teams

A team is a set of accounts that agreed to be one. Nobody types an email address or sets a password: a person joins by redeeming an invite code with the account key they already have, and what their teammates see of them is a display name they chose for that team and nothing else. These endpoints take an account key (nla_…), like the rest of the account API. The app has screens for join, members, your display name and leave (Settings, then Teams); teams are created in the web console, and Settings, then Console, calls POST /v1/web/pairings; the rest is the web console and this API.

Roles, lowest to highest: member (receives), sender (may make channel keys), admin (people, channels, invites), owner (everything; the only one who changes roles or deletes the team). Creating a team or joining one needs no Upgrade Pass; a team sends once it has a plan (see Plans and billing). A team you are not on answers 404, the same as one that does not exist, and a role too low answers 403 forbidden.

Endpoint Role Does
POST /v1/teams {"name"}
any account
Create. You are the owner. 5 teams per owner
GET /v1/teams
any account
The teams you are on, with your role
POST /v1/teams/join {"code"}
any account
Redeem an invite. 20 attempts an hour; every failure is one 404 invalid_code. A code carries its maker's authority, judged when it is redeemed: one made by someone since removed, gone, or demoted below the role that could issue it lets no one in. 409 sso_required or 409 provisioned when the team adds people through its company sign‑in or its identity provider
GET /v1/teams/{id}
member
The team and its members (member_id, role, name, joined)
PATCH /v1/teams/{id}/me {"display_name"}
member
Your name on this team only
DELETE /v1/teams/{id}/members/me
member
Leave. An owner cannot: delete the team instead
DELETE /v1/teams/{id}/members/{member_id}
admin
Remove someone strictly below your role
PATCH /v1/teams/{id}/members/{member_id} {"role"}
owner
admin, sender or member. The owner's role never changes
DELETE /v1/teams/{id}
owner
Delete the team, its channels and keys, and every member's copies
POST /v1/teams/{id}/invites {"role","expires_in","max_uses"}
admin
Make a code (shown once; only its hash is kept). An admin can invite sender or member, an owner also admin. Nobody invites an owner. 60 s to 30 days; 1 to 100 uses
GET /v1/teams/{id}/invites, DELETE …/invites/{invite_id}
admin
List live invites (never their codes), revoke
POST /v1/teams/{id}/channels {"name","ack_policy","members"}
admin
ack_policy is any or all; members is "all", a list of at most 25 member ids, or omitted for just you
GET /v1/teams/{id}/channels
member
Your channels (an admin sees all)
GET /v1/channels/{id}
member
A channel and who is on it
PATCH /v1/channels/{id} {"everyone": true}
admin
Set the channel's everyone flag. On: every current team member is put on it, and each later joiner is too. Off: no one is removed. Answers {id, everyone, members}. everyone also shows in channel create, get and list. The same call takes unopened_after (see Destinations)
DELETE /v1/channels/{id}
admin
Delete it, its keys, and every member's copies
PUT / DELETE /v1/channels/{id}/members/{member_id}
admin
Put someone on, or take them off (their copies go too)
POST / GET /v1/channels/{id}/destinations, DELETE …/{destination_id}
admin
Add, list or remove a destination
POST …/destinations/{destination_id}/test, /enable, /resend
admin
Send a test event, switch a disabled one back on, resend an email's verification
POST / GET /v1/teams/{id}/forms, PATCH / DELETE …/{slug}
admin (list: member)
Create, list, change or delete a team's form
GET …/forms/{slug}/submissions, …/{submission_id}
member on the form's channel
The inbox, and one submission. ?tag=lead and ?assigned_to=acct_… narrow the inbox
PATCH …/submissions/{id}
member on the form's channel
Set status, a private note, tags (the whole list) or assigned_to (a member_id, or null)
POST …/{id}/claim
member on the form's channel
Take it, so nobody else does
DELETE …/submissions/{id}, GET …/export
admin
Erase one, with everything it spread to; export CSV or JSON
GET …/forms/{slug}/attachments/{id}
member on the form's channel
A submission's file
GET …/forms/{slug}/test; POST …/test, PATCH …/test/b, POST …/test/keep
member; admin
Two versions of a form: the numbers; start, change version B, keep a winner
GET /v1/teams/{id}/rules; POST, PATCH, DELETE, PUT …/rules/order
member; admin
Routing rules: read them; add, change, delete or reorder them
PUT / GET / DELETE /v1/channels/{id}/escalation
admin
Set, read or clear the channel's escalation policy
POST /v1/channels/{id}/keys
sender
A key for this channel, shown once. A sender can make one only for a channel they are on
GET /v1/channels/{id}/keys
admin
Its keys, and who made each
DELETE /v1/channels/{id}/keys/{key_id}
sender
A sender revokes their own, an admin anyone's

What taking someone off a team takes#

Removing a member, or their leaving, ends their place now: their channel memberships, the channel keys they made, and their copies of everything the team sent. Their own account, keys, devices and personal history are not touched. Deleting a team does the same for all members, and so does deleting the owner's account, because the team's data was the team's.