curl -X POST "https://api.60db.ai/60db/license/LICENSE_ID/seats?workspace_id=WORKSPACE_ID" \
-H "Authorization: Bearer USER_JWT" \
-H "X-60db-Client: flow/1.5.0" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'
{
"success": true,
"data": {
"license_id": "2f1c9a4e-6b7d-4c1e-9f0a-1d2e3f4a5b6c",
"user_id": 88,
"email": "[email protected]",
"status": "pending",
"seats": 3,
"seats_used": 2,
"account_created": true,
"joined_workspace": true,
"set_password_sent": true
}
}
60db Flow
Invite by email
Owner: invite anyone to a Flow Team seat by email
POST
/
60db
/
license
/
:license_id
/
seats
curl -X POST "https://api.60db.ai/60db/license/LICENSE_ID/seats?workspace_id=WORKSPACE_ID" \
-H "Authorization: Bearer USER_JWT" \
-H "X-60db-Client: flow/1.5.0" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'
{
"success": true,
"data": {
"license_id": "2f1c9a4e-6b7d-4c1e-9f0a-1d2e3f4a5b6c",
"user_id": 88,
"email": "[email protected]",
"status": "pending",
"seats": 3,
"seats_used": 2,
"account_created": true,
"joined_workspace": true,
"set_password_sent": true
}
}
Reserves a seat and emails the invitee. In one step the server:
- creates a 60db account if the email has none (own workspace + Free plan, no password yet),
- adds the person to the licence workspace as a
member(Flow works inside the licence’s workspace), - adds a pending seat, sends an in-app notification and the email “<owner> invited you to 60db Flow” with a Set your password button (account without a password) or an Open 60db button.
Request
Headers
string
required
Bearer <login token> of the signed-in 60db user. API keys (sk_...) are not accepted for Flow.string
flow/<app-version>, e.g. flow/1.5.0 (send it from the 60db Flow app)Path Parameters
string
required
Licence id (
license_id from Get Flow plan)Query Parameters
integer
The licence’s workspace. Seat management is checked against it: send it when the user’s current workspace is a different one.
Body
string
required
Email address to invite
Response
integer
Invitee user id (use it to cancel the invite)
string
Invitee email
string
pendinginteger
Seats on the licence
integer
Seats taken after this invite
boolean
A new 60db account was created for this email
boolean
The invitee was added to the licence workspace
boolean
The email contains a “Set your password” link
Errors
Errors use{ "success": false, "message": "...", "error_code": "..." }. Show message to the user.
| Status | error_code | Meaning |
|---|---|---|
| 400 | INVALID_EMAIL | Not a valid email address |
| 400 | DISPOSABLE_EMAIL | Disposable email providers are not allowed |
| 400 | SEAT_LIMIT_REACHED | All seats are used; remove a seat or cancel an invite first |
| 400 | LICENSE_INACTIVE | Licence refunded, revoked or expired |
| 403 | NOT_LICENSE_OWNER | Only the buyer can manage seats |
| 404 | LICENSE_NOT_FOUND | Unknown licence id |
| 409 | SEAT_ALREADY_ASSIGNED | This person already has a seat or a pending invite |
| 429 | RATE_LIMIT_EXCEEDED | More than 20 invitations in an hour |
Example
curl -X POST "https://api.60db.ai/60db/license/LICENSE_ID/seats?workspace_id=WORKSPACE_ID" \
-H "Authorization: Bearer USER_JWT" \
-H "X-60db-Client: flow/1.5.0" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'
{
"success": true,
"data": {
"license_id": "2f1c9a4e-6b7d-4c1e-9f0a-1d2e3f4a5b6c",
"user_id": 88,
"email": "[email protected]",
"status": "pending",
"seats": 3,
"seats_used": 2,
"account_created": true,
"joined_workspace": true,
"set_password_sent": true
}
}