Teams
People, roles, invites and shared teams.
/v1/meThe person and their teams#
- Credential
- An API key or a dashboard session
- Roles
- Any role
Response
200Me
personPerson | nullrequiredidstring (uuid)requiredemailstringrequiredphonestring | null
teamTeamrequiredidstring (uuid)requirednamestringrequiredpersonalbooleanrolestringrequiredone of
owner,admin,developer,billing,viewer
teamsTeam[]requiredidstring (uuid)requirednamestringrequiredpersonalbooleanrolestringrequiredone of
owner,admin,developer,billing,viewer
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/me" \
-H "Authorization: Bearer $KEY"/v1/me/teamSwitch the session's team#
- Credential
- A dashboard session only (API keys are refused)
- Roles
- Any role
Request bodyapplication/json
teamstring (uuid)required
Response
200object
teamstring (uuid)rolestringone of
owner,admin,developer,billing,viewer
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: session_only |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl -X POST "https://api.ibel.ai/v1/me/team" \
-H "Authorization: Bearer $SESSION" \
-d '{"team":"8c1e0c55-1f2a-4d3b-9e8f-0a1b2c3d4e5f"}'/v1/teamsMake a shared team#
- Credential
- A dashboard session only (API keys are refused)
- Roles
- Any role
Request bodyapplication/json
namestringrequired1–60 characters
Response
201object
idstring (uuid)namestring
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_name, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: session_only |
| 500 | internal: an unexpected failure |
Example
curl -X POST "https://api.ibel.ai/v1/teams" \
-H "Authorization: Bearer $SESSION" \
-d '{"name":"Shop team"}'/v1/team/membersMembers and open invites#
invites is filled only for admins and owners. seats: members that take a developer seat.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Response
200object
membersMember[]requiredidstring (uuid)requiredemailstringrequiredrolestringrequiredone of
owner,admin,developer,billing,viewercreated_atstring (date-time)youbooleanseatbooleantakes a developer seat: owner, admin or developer
restrictedbooleanlimited to chosen projects
groupsobject[]idstring (uuid)namestring
seatsintegerinvitesInvite[]requiredidstring (uuid)requiredemailstringrequiredrolestringrequiredone of
owner,admin,developer,billing,viewerexpires_atstring (date-time)created_atstring (date-time)seatbooleanthe role takes a developer seat when they join
restrictedbooleanlimited to chosen projects
groupsstring (uuid)[]
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/team/members" \
-H "Authorization: Bearer $KEY"/v1/team/invitesInvite a person by email#
An admin or developer invite needs a seat: refused on Hobby (one seat, the owner's); on Pro the wallet must pay the seat now (charged when the invite is accepted).
- Credential
- An API key or a dashboard session
- Roles
- owner, admin
- Step-up
- With a dashboard session, a second factor confirmed in the last 10 minutes; API keys pass.
Request bodyapplication/json
emailstringrequiredrolestringone of
admin,developer,billing,viewer· default"developer"restrictedbooleandeveloper or viewer only: the member joins limited to chosen projects
groupsstring (uuid)[]access groups the member joins (with restricted: true)
0–20 items
Response
200object
invitestring (uuid)emailstringrolestringone of
owner,admin,developer,billing,viewerexpires_in_daysinteger
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_email, bad_role, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 402 | Payment required: insufficient_balance |
| 403 | Not allowed: forbidden, role_too_wide, step_up_required |
| 409 | Conflict: member, seat_limit |
| 429 | Too many requests: rate_limited |
| 500 | internal: an unexpected failure |
Example
curl -X POST "https://api.ibel.ai/v1/team/invites" \
-H "Authorization: Bearer $KEY" \
-d '{"email":"you@example.com"}'/v1/team/invites/{id}Withdraw an invite#
- Credential
- An API key or a dashboard session
- Roles
- owner, admin
Parameters
idstring (uuid)pathrequiredinvite id
Response
200object
deletedboolean
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl -X DELETE "https://api.ibel.ai/v1/team/invites/88e2fe1d-6d75-4de5-8c8f-27380ec66903" \
-H "Authorization: Bearer $KEY"/v1/team/invites/lookupWhat an invite link is for#
- Credential
- None
Parameters
tokenstringquerythe invite token
Response
200object
teamstringemailstringrolestringone of
owner,admin,developer,billing,viewer
Errors
| Status | Description |
|---|---|
| 404 | Not found: bad_invite |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/team/invites/lookup"/v1/team/invites/acceptJoin a team with an invite#
Joining with a seat role charges the team's wallet for the seat (the days left in the month).
- Credential
- A dashboard session only (API keys are refused)
- Roles
- Any role
Request bodyapplication/json
tokenstringrequired
Response
200object
teamstring (uuid)rolestringone of
owner,admin,developer,billing,viewer
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_invite, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 402 | Payment required: insufficient_balance |
| 403 | Not allowed: bad_invite, session_only |
| 404 | Not found: bad_invite |
| 409 | Conflict: seat_limit |
| 500 | internal: an unexpected failure |
Example
curl -X POST "https://api.ibel.ai/v1/team/invites/accept" \
-H "Authorization: Bearer $SESSION" \
-d '{"token":"…"}'/v1/team/members/{person}Remove a member, or leave#
- Credential
- An API key or a dashboard session
- Roles
- owner, admin to remove others (not a wider role); any member to leave
- Step-up
- With a dashboard session, a second factor confirmed in the last 10 minutes; API keys pass.
Parameters
personstring (uuid)pathrequiredthe person's id
Response
200object
removedstring (uuid)
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden, step_up_required |
| 404 | Not found: not_found |
| 409 | Conflict: last_owner, personal |
| 500 | internal: an unexpected failure |
Example
curl -X DELETE "https://api.ibel.ai/v1/team/members/5b0f4c2e-8f1d-4a7e-9c3b-2d6e1f0a9b8c" \
-H "Authorization: Bearer $KEY"/v1/team/members/{person}Change a member's role#
To a seat role from viewer or billing: refused on Hobby; on Pro the days left in the month are charged now. To a free role: no refund, the seat stays paid to the month's end.
- Credential
- An API key or a dashboard session
- Roles
- owner
- Step-up
- With a dashboard session, a second factor confirmed in the last 10 minutes; API keys pass.
Parameters
personstring (uuid)pathrequiredthe person's id
Request bodyapplication/json
rolestringone of
owner,admin,developer,billing,viewerrestrictedbooleanlimit a developer or viewer to chosen projects (access groups), or give the whole team back
Response
200object
personstring (uuid)rolestringone of
owner,admin,developer,billing,viewer
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_role, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 402 | Payment required: insufficient_balance |
| 403 | Not allowed: forbidden, step_up_required |
| 404 | Not found: not_found |
| 409 | Conflict: last_owner, seat_limit |
| 500 | internal: an unexpected failure |
Example
curl -X PATCH "https://api.ibel.ai/v1/team/members/5b0f4c2e-8f1d-4a7e-9c3b-2d6e1f0a9b8c" \
-H "Authorization: Bearer $KEY" \
-d '{"role":"owner","restricted":true}'/v1/teamDelete the current shared team#
- Credential
- A dashboard session only (API keys are refused)
- Roles
- owner
- Step-up
- With a dashboard session, a second factor confirmed in the last 10 minutes; API keys pass.
Response
200object
deletedstring
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden, step_up_required, session_only |
| 409 | Conflict: personal, not_empty, unpaid, balance |
| 500 | internal: an unexpected failure |
Example
curl -X DELETE "https://api.ibel.ai/v1/team" \
-H "Authorization: Bearer $SESSION"- Credential
- An API key or a dashboard session
- Roles
- owner, admin
Request bodyapplication/json
namestringrequired1–60 characters
Response
200object
idstring (uuid)namestring
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_name, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 500 | internal: an unexpected failure |
Example
curl -X PATCH "https://api.ibel.ai/v1/team" \
-H "Authorization: Bearer $KEY" \
-d '{"name":"Shop team"}'/v1/team/envList shared variables#
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
environmentstringquerythe variables that apply there
one of
production,preview,developmentkeystringqueryone key
projectstringquerythe ones linked to this app or function
decryptstringquery1: plain values (owner, admin, developer)
one of
1
Response
200EnvVarList
variablesEnvVar[]requiredidstring (uuid)requiredkeystringrequiredpattern
^[A-Za-z_][A-Za-z0-9_]{0,63}$environmentsstring[]requiredbranchstring | nullrequireda git branch; only with environments [preview]
scopestringrequiredteam: a shared variable
one of
project,teamtypestringrequiredsensitive: never shown again, production and preview only
one of
plain,sensitivevaluestring | nullrequiredthe text only when revealed (?decrypt=1) and plain
created_atstring (date-time)updated_atstring (date-time)created_byobject | nulltypestringone of
person,keynamestring | null
updated_byobject | nulltypestringone of
person,keynamestring | null
projectsobject[]shared variables only
namestringkindstringone of
function,app
sharedEnvVar[]a project's list: the team's shared variables linked to it
idstring (uuid)requiredkeystringrequiredpattern
^[A-Za-z_][A-Za-z0-9_]{0,63}$environmentsstring[]requiredbranchstring | nullrequireda git branch; only with environments [preview]
scopestringrequiredteam: a shared variable
one of
project,teamtypestringrequiredsensitive: never shown again, production and preview only
one of
plain,sensitivevaluestring | nullrequiredthe text only when revealed (?decrypt=1) and plain
created_atstring (date-time)updated_atstring (date-time)created_byobject | nulltypestringone of
person,keynamestring | null
updated_byobject | nulltypestringone of
person,keynamestring | null
projectsobject[]shared variables only
namestringkindstringone of
function,app
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_environments |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/team/env" \
-H "Authorization: Bearer $KEY"/v1/team/envAdd or import shared variables#
Linked to the apps and functions in projects; a project's own variable with the same key wins.
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Request bodyapplication/json
one of: {key, value, …}, {variables: [...]}, {dotenv}
keystringvaluestringup to 5120 characters
variablesEnvVarInput[]several, up to 128
keystringrequiredvaluestringrequiredup to 5120 characters
environmentsstring[]default: all three; production and preview when sensitive; preview with a branch
branchstringa git branch: only its previews
typestringone of
plain,sensitivesensitiveboolean
dotenvstring.env text to import
environmentsstring[]for every row that leaves them out
branchstringprojects only
typestringone of
plain,sensitivesensitivebooleanupsertbooleanreplace the value of a variable with the same key, branch and environments
projectsstring[]shared variables only: the apps and functions it reaches
Response
201EnvVarAdded
variablesEnvVar[]requiredidstring (uuid)requiredkeystringrequiredpattern
^[A-Za-z_][A-Za-z0-9_]{0,63}$environmentsstring[]requiredbranchstring | nullrequireda git branch; only with environments [preview]
scopestringrequiredteam: a shared variable
one of
project,teamtypestringrequiredsensitive: never shown again, production and preview only
one of
plain,sensitivevaluestring | nullrequiredthe text only when revealed (?decrypt=1) and plain
created_atstring (date-time)updated_atstring (date-time)created_byobject | nulltypestringone of
person,keynamestring | null
updated_byobject | nulltypestringone of
person,keynamestring | null
projectsobject[]shared variables only
namestringkindstringone of
function,app
createdintegerrequiredupdatedintegerrequired
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_variable, bad_key, bad_value, bad_environments, bad_type, bad_branch, sensitive_development, policy_sensitive, bad_dotenv, duplicate, bad_projects, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 409 | Conflict: env_conflict, sensitive, too_many |
| 500 | internal: an unexpected failure |
Example
curl -X POST "https://api.ibel.ai/v1/team/env" \
-H "Authorization: Bearer $KEY" \
-d '{"key":"STRIPE_KEY","value":"s3cr3t","variables":[{"key":"STRIPE_KEY","value":"s3cr3t","environments":["production"],"branch":"dev","type":"plain","sensitive":true}],"dotenv":"…","environments":["production"],"branch":"dev","type":"plain","sensitive":true,"upsert":true,"projects":["…"]}'/v1/team/env/{id}One shared variable#
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
idstring (uuid)pathrequiredthe variable's id
decryptstringquery1: plain values (owner, admin, developer)
one of
1
Response
200EnvVar
idstring (uuid)requiredkeystringrequiredpattern
^[A-Za-z_][A-Za-z0-9_]{0,63}$environmentsstring[]requiredbranchstring | nullrequireda git branch; only with environments [preview]
scopestringrequiredteam: a shared variable
one of
project,teamtypestringrequiredsensitive: never shown again, production and preview only
one of
plain,sensitivevaluestring | nullrequiredthe text only when revealed (?decrypt=1) and plain
created_atstring (date-time)updated_atstring (date-time)created_byobject | nulltypestringone of
person,keynamestring | null
updated_byobject | nulltypestringone of
person,keynamestring | null
projectsobject[]shared variables only
namestringkindstringone of
function,app
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/team/env/88e2fe1d-6d75-4de5-8c8f-27380ec66903" \
-H "Authorization: Bearer $KEY"/v1/team/env/{id}Delete a shared variable#
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
idstring (uuid)pathrequiredthe variable's id
Response
200object
idstring (uuid)keystringdeletedboolean
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl -X DELETE "https://api.ibel.ai/v1/team/env/88e2fe1d-6d75-4de5-8c8f-27380ec66903" \
-H "Authorization: Bearer $KEY"/v1/team/env/{id}Change a shared variable#
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
idstring (uuid)pathrequiredthe variable's id
Request bodyapplication/json
keystringvaluestringup to 5120 characters
environmentsstring[]branchstring | nulltypestringone of
plain,sensitivesensitivebooleanprojectsstring[]shared variables only: replaces the links
Response
200EnvVar
idstring (uuid)requiredkeystringrequiredpattern
^[A-Za-z_][A-Za-z0-9_]{0,63}$environmentsstring[]requiredbranchstring | nullrequireda git branch; only with environments [preview]
scopestringrequiredteam: a shared variable
one of
project,teamtypestringrequiredsensitive: never shown again, production and preview only
one of
plain,sensitivevaluestring | nullrequiredthe text only when revealed (?decrypt=1) and plain
created_atstring (date-time)updated_atstring (date-time)created_byobject | nulltypestringone of
person,keynamestring | null
updated_byobject | nulltypestringone of
person,keynamestring | null
projectsobject[]shared variables only
namestringkindstringone of
function,app
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_key, bad_value, bad_environments, bad_type, bad_branch, sensitive_development, policy_sensitive, bad_projects, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 409 | Conflict: env_conflict, sensitive, too_many |
| 500 | internal: an unexpected failure |
Example
curl -X PATCH "https://api.ibel.ai/v1/team/env/88e2fe1d-6d75-4de5-8c8f-27380ec66903" \
-H "Authorization: Bearer $KEY" \
-d '{"key":"STRIPE_KEY","value":"s3cr3t","environments":["production"],"branch":"dev","type":"plain","sensitive":true,"projects":["…"]}'/v1/team/env-summaryHow many variables the team has#
- Credential
- An API key or a dashboard session
- Roles
- Any role
Response
200EnvSummary
totalintegerrequiredprojectintegerrequiredprojects' own variables
sharedintegerrequiredthe team's shared variables
sensitiveintegerrequiredprojectsintegerrequiredprojects with variables of their own
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/team/env-summary" \
-H "Authorization: Bearer $KEY"/v1/team/env-policyThe team policy for variables#
- Credential
- An API key or a dashboard session
- Roles
- Any role
Response
200object
sensitive_by_defaultbooleanrequired
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/team/env-policy" \
-H "Authorization: Bearer $KEY"/v1/team/env-policySensitive by default: on or off#
When on, every new variable for production or preview is sensitive and cannot be made plain.
- Credential
- An API key or a dashboard session
- Roles
- owner
- Step-up
- With a dashboard session, a second factor confirmed in the last 10 minutes; API keys pass.
Request bodyapplication/json
sensitive_by_defaultbooleanrequired
Response
200object
sensitive_by_defaultboolean
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_policy, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden, step_up_required |
| 500 | internal: an unexpected failure |
Example
curl -X PUT "https://api.ibel.ai/v1/team/env-policy" \
-H "Authorization: Bearer $KEY" \
-d '{"sensitive_by_default":true}'/v1/logsThe team's logs across its apps and functions#
Every project's entries merged newest first (newest last in the page), each naming its project and product.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
sincestringqueryISO time, epoch ms, or back from now: 30m, 1h, 7d
untilstringqueryISO time or epoch ms
levelstringqueryerror, warning, info (comma list)
sourcestringqueryrequest, static, fetch, cron, console (comma list)
statusstringquerycodes or classes, e.g. 404,5xx
pathstringqueryrequest paths (comma list); end with * for a prefix
environmentstringqueryproduction or preview
branchstringquerya preview's branch
deploymentstringquerya version number, e.g. 12 or v12
qstringquerytext the entry contains
limitintegerquery1-1000, default 100
1–1000 · default
100cursorstringquerynext_cursor of the page before
facetsstringquery1: counts per filter value
bucketsintegerquerya histogram of the range in this many bars (up to 120)
0–120
projectstringqueryproject names (comma list)
Response
200LogPage
logsLogEntry[]requirednewest last
idstringrequiredtintegermilliseconds since 1970
kindstringlevelstringmsgstringmethodstringpathstringstatusintegermsnumberversionintegerstaticbooleancronstringoutcomestringhoststringthe hostname a request was served on
tracestringthe request's trace id (32 hex), when its trace was kept; open it with GET /v1/traces/{trace_id}
severitystringone of
error,warning,infosourcestringone of
request,static,fetch,cron,consoleenvironmentstringone of
production,previewbranchstring | nulla preview's branch, when known
projectstringteam logs: the project
productstringone of
function,app
next_cursorstring | nullrequiredpass as cursor for older entries
matchedintegerrequiredentries in the range that match
scannedintegerrequiredtruncatedbooleanthe team's request read only part of its logs
facetsobjectwith facets=1: counts per filter value, each over what the other filters leave
levelobjectsourceobjectstatusobjectenvironmentobjectpathobjectprojectobject
histogramobjectwith buckets=n: the range in n bars, per level
fromintegertointegerbucketsobject[]fromintegererrorintegerwarningintegerinfointeger
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_param |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/logs" \
-H "Authorization: Bearer $KEY"/v1/previewsThe team's previews across its projects#
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
limitintegerquery1-200, default 20
1–200 · default
20
Response
200object
previewsTeamPreview[]requiredbranchstringrequiredurlstringrequiredversionintegerrequiredupdated_atstring (date-time)git_branchstring | nullthe git branch the build came from
commitstring | nullmessagestring | nullthe commit's first line
projectstringrequiredkindstringrequiredone of
function,app
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/previews" \
-H "Authorization: Bearer $KEY"