Projects
A project holds an app's parts: its apps and functions, SQL databases, caches, buckets, queues, flags and secrets, with environments (production, development, a preview per branch). Names are unique within a project; every resource's routes sit under its project, /v1/projects/{project}/..., and each product has a team list with ?project=.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anyany
Response
200object
projectsProjectSummary[]requiredidstringrequirednamestringrequiredcreated_atstring (date-time)appsintegerrequiredfunctionsintegerrequiredresourcesintegerrequiredits SQL databases, caches, buckets and queues
next_cursorstring | nullsend as
cursorfor the next page; null on the last page
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects" \
-H "Authorization: Bearer $KEY"- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Request bodyapplication/json
namestringrequiredlowercase letters, digits and single hyphens, 1-63 characters; unique in the team, whatever its case
Response
201ProjectSummary
idstringrequirednamestringrequiredcreated_atstring (date-time)appsintegerrequiredfunctionsintegerrequiredresourcesintegerrequiredits SQL databases, caches, buckets and queues
environmentsstring[]
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_name, bad_json |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 409 | Conflict: name_taken |
| 500 | internal: an unexpected failure |
Example
curl -X POST "https://api.ibel.ai/v1/projects" \
-H "Authorization: Bearer $KEY" \
-d '{"name":"my-api"}'/v1/projects/{project}Get a project and what it holds#
Its apps, functions and resources, and the other projects' resources connected to it.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
any
Response
200ProjectDetail
idstringrequirednamestringrequiredcreated_atstring (date-time)appsobject[]requiredidstringnamestringhost_labelstringcreated_atstring (date-time)
functionsobject[]requiredidstringnamestringhost_labelstringcreated_atstring (date-time)
databasesResourceRef[]requiredidstringrequirednamestringrequiredcreated_atstring (date-time)
cachesResourceRef[]requiredidstringrequirednamestringrequiredcreated_atstring (date-time)
bucketsResourceRef[]requiredidstringrequirednamestringrequiredcreated_atstring (date-time)
queuesResourceRef[]requiredidstringrequirednamestringrequiredcreated_atstring (date-time)
connectionsobject[]requiredother projects' resources this project uses, each with its owner
kindstringone of
database,cache,bucket,queueidstringnamestringprojectProjectRefidstringrequiredprj_and 16 hex charactersnamestringrequired
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects/my-api" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}Delete an empty project#
Refused while it holds anything (delete or move it first) or while one of its resources is connected to another project.
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
- Step-up
- With a dashboard session, a second factor confirmed in the last 10 minutes; API keys pass.
Parameters
any
Response
200object
idstringnamestringdeletedbooleanrequired
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: not_empty, connected, has_deleted_items |
| 500 | internal: an unexpected failure |
Example
curl -X DELETE "https://api.ibel.ai/v1/projects/my-api" \
-H "Authorization: Bearer $KEY"- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
any
Request bodyapplication/json
namestringrequired
Response
200object
idstringnamestringcreated_atstring (date-time)
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_name |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 409 | Conflict: name_taken |
| 500 | internal: an unexpected failure |
Example
curl -X PATCH "https://api.ibel.ai/v1/projects/my-api" \
-H "Authorization: Bearer $KEY" \
-d '{"name":"my-api"}'/v1/projects/{project}/membersWho may use a project#
The team's unlimited members, and limited members through a grant on the project (their own or a group's). A grant on a project reaches everything in it.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anyanyany
Response
200ResourceMembers
resourceobjectkindstringone of
project,function,app,database,cache,bucket,queue,secretsnamestringprojectstring
teamobject[]idstringemailstringrolestring
limitedobject[]idstringemailstringrolestringviaobject[]typestringone of
direct,groupnamestringrolestring
next_cursorstring | nullsend as
cursorfor the next page; null on the last page
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects/my-api/members" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/usageA project's usage and cost#
Every app's, function's and resource's meters at list price, with their environment instances, summed.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anydaysintegerquery1–90 · default
30
Response
200ProjectUsage
projectProjectRefrequiredidstringrequiredprj_and 16 hex charactersnamestringrequired
daysintegerrequiredfromstring (date-time)tostring (date-time)per_environmentbooleanlist_rialsintegerrequireditemsobject[]requiredkindstringrequiredone of
app,function,database,cache,bucket,queueidstringrequirednamestringrequiredlist_rialsintegerrequiredmetersResourceMeter[]requiredmeterstringrequiredlabelstringunitstringlabel_fastring | nullunit_fastring | nullquantitynumberrequiredlist_rialsintegerrequired
notestring
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects/my-api/usage" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/environmentsList a project's environments#
production, development once used, and each live or kept preview, with its addresses and the instance of each resource it uses.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anyanyany
Response
200object
environmentsEnvironment[]requirednamestringrequiredproduction,developmentorpreview-<label>kindstringrequiredone of
production,development,previewkeptbooleana preview kept past its branch (staging); previews only
created_atstring (date-time) | nulllast_used_atstring (date-time) | nulladdressesstring[]requiredinstancesobjectrequireddatabasesobject[]namestringbranchstring | nullthe database branch it uses; null before it has one
cachesobject[]namestringendpointstring | null
bucketsobject[]namestringendpointstring | null
queuesobject[]namestringendpointstring | null
next_cursorstring | nullsend as
cursorfor the next page; null on the last page
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects/my-api/environments" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/environments/{environment}Get an environment#
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anyenvironmentstringpathrequiredproduction,developmentorpreview-<label>
Response
200Environment
namestringrequiredproduction,developmentorpreview-<label>kindstringrequiredone of
production,development,previewkeptbooleana preview kept past its branch (staging); previews only
created_atstring (date-time) | nulllast_used_atstring (date-time) | nulladdressesstring[]requiredinstancesobjectrequireddatabasesobject[]namestringbranchstring | nullthe database branch it uses; null before it has one
cachesobject[]namestringendpointstring | null
bucketsobject[]namestringendpointstring | null
queuesobject[]namestringendpointstring | null
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects/my-api/environments/environment" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/environments/{environment}Delete a preview#
Its addresses, its caches and queues, and its database branches.
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
anyenvironmentstringpathrequiredproduction,developmentorpreview-<label>
Response
200object
namestringrequireddeletedbooleanrequireddatabase_branchesstring[]cachesstring[]queuesstring[]
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 409 | Conflict: not_a_preview |
| 500 | internal: an unexpected failure |
Example
curl -X DELETE "https://api.ibel.ai/v1/projects/my-api/environments/environment" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/environments/{environment}Keep a preview, or let it expire#
A kept preview stays after its branch is merged or deleted, and is not deleted when idle (staging).
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
anyenvironmentstringpathrequiredproduction,developmentorpreview-<label>
Request bodyapplication/json
keptbooleanrequired
Response
200Environment
namestringrequiredproduction,developmentorpreview-<label>kindstringrequiredone of
production,development,previewkeptbooleana preview kept past its branch (staging); previews only
created_atstring (date-time) | nulllast_used_atstring (date-time) | nulladdressesstring[]requiredinstancesobjectrequireddatabasesobject[]namestringbranchstring | nullthe database branch it uses; null before it has one
cachesobject[]namestringendpointstring | null
bucketsobject[]namestringendpointstring | null
queuesobject[]namestringendpointstring | null
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_kept |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 409 | Conflict: not_a_preview |
| 500 | internal: an unexpected failure |
Example
curl -X PATCH "https://api.ibel.ai/v1/projects/my-api/environments/environment" \
-H "Authorization: Bearer $KEY" \
-d '{"kept":true}'/v1/projects/{project}/environments/development/resetReset development#
Each SQL database's development branch made again from main, and development's caches and queues emptied. The preview bucket it shares stays.
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
any
Response
200object
environmentstringrequireddatabasesobject[]requirednamestringrequired
cachesstring[]queuesstring[]
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 POST "https://api.ibel.ai/v1/projects/my-api/environments/development/reset" \
-H "Authorization: Bearer $KEY"/v1/deletedThe team's deleted items#
Functions, apps, databases, caches and queues deleted in the last 7 days, across the team's projects (?project= for one), newest first. Each is switched off and unreachable, its name reserved, until it is restored or the purge job removes it.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anykindstringqueryonly this kind's (
functions,apps,databases,caches,queues)limitintegerquery1–500 · default
100cursorstringquerythe
next_cursorof the page before
Response
200DeletedItemList
itemsDeletedItem[]requiredidstringrequiredits id, as before it was deleted
kindstringrequiredone of
function,app,database,cache,queuenamestringrequiredprojectProjectRefrequiredidstringrequiredprj_and 16 hex charactersnamestringrequired
deleted_atstring (date-time)requireddeleted_bystringrequiredperson:<id>orkey:<id>, as in the audit logpurge_afterstring (date-time)requiredwhen the purge job removes it for good (7 days after
deleted_at)stored_bytesinteger | nullrequiredthe stored data that bills while it waits (a database's, a cache's), last measured; null for apps, functions and queues
next_cursorstring | nullrequiredsend as
cursorfor the next page; null on the last page
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_kind, bad_param, bad_cursor |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/deleted" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/deletedA project's deleted items#
Its functions, apps, databases, caches and queues deleted in the last 7 days, newest first.
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anykindstringqueryonly this kind's (
functions,apps,databases,caches,queues)limitintegerquery1–500 · default
100cursorstringquerythe
next_cursorof the page before
Response
200DeletedItemList
itemsDeletedItem[]requiredidstringrequiredits id, as before it was deleted
kindstringrequiredone of
function,app,database,cache,queuenamestringrequiredprojectProjectRefrequiredidstringrequiredprj_and 16 hex charactersnamestringrequired
deleted_atstring (date-time)requireddeleted_bystringrequiredperson:<id>orkey:<id>, as in the audit logpurge_afterstring (date-time)requiredwhen the purge job removes it for good (7 days after
deleted_at)stored_bytesinteger | nullrequiredthe stored data that bills while it waits (a database's, a cache's), last measured; null for apps, functions and queues
next_cursorstring | nullrequiredsend as
cursorfor the next page; null on the last page
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_kind, bad_param, bad_cursor |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects/my-api/deleted" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/deleted/{kind}/{name}A deleted item#
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anykindstringpathrequiredfunctions,apps,databases,cachesorqueuesone of
functions,apps,databases,caches,queuesnamestringpathrequiredthe deleted item's name (any case) or its id
Response
200DeletedItem
idstringrequiredits id, as before it was deleted
kindstringrequiredone of
function,app,database,cache,queuenamestringrequiredprojectProjectRefrequiredidstringrequiredprj_and 16 hex charactersnamestringrequired
deleted_atstring (date-time)requireddeleted_bystringrequiredperson:<id>orkey:<id>, as in the audit logpurge_afterstring (date-time)requiredwhen the purge job removes it for good (7 days after
deleted_at)stored_bytesinteger | nullrequiredthe stored data that bills while it waits (a database's, a cache's), last measured; null for apps, functions and queues
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects/my-api/deleted/kind/my-api" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/deleted/{kind}/{name}Delete a deleted item now#
Removes it for good without waiting for the purge job: its data and history are erased and it cannot be restored.
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
- Step-up
- With a dashboard session, a second factor confirmed in the last 10 minutes; API keys pass.
Parameters
anykindstringpathrequiredfunctions,apps,databases,cachesorqueuesone of
functions,apps,databases,caches,queuesnamestringpathrequiredthe deleted item's name (any case) or its id
Response
200object
idstringrequiredkindstringrequirednamestringrequireddeletedbooleanrequiredpurgedbooleanrequired
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden, step_up_required |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl -X DELETE "https://api.ibel.ai/v1/projects/my-api/deleted/kind/my-api" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/deleted/{kind}/{name}/restoreRestore a deleted item#
Puts it back, switched on, under its own name and address, with its data, versions, variables, credentials and settings. Its name stayed reserved, so 409 name_taken cannot normally happen; when it does, or when an app's or function's address is in use (409 address_taken), the item stays in deleted items and nothing is renamed or overwritten. A plan that now allows fewer of them is refused as on create.
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
anykindstringpathrequiredfunctions,apps,databases,cachesorqueuesone of
functions,apps,databases,caches,queuesnamestringpathrequiredthe deleted item's name (any case) or its id
Response
200DeletedItem
idstringrequiredits id, as before it was deleted
kindstringrequiredone of
function,app,database,cache,queuenamestringrequiredprojectProjectRefrequiredidstringrequiredprj_and 16 hex charactersnamestringrequired
deleted_atstring (date-time)requireddeleted_bystringrequiredperson:<id>orkey:<id>, as in the audit logpurge_afterstring (date-time)requiredwhen the purge job removes it for good (7 days after
deleted_at)stored_bytesinteger | nullrequiredthe stored data that bills while it waits (a database's, a cache's), last measured; null for apps, functions and queues
restoredbooleanrequired
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 402 | Payment required: free_limit_reached |
| 403 | Not allowed: forbidden, limit |
| 404 | Not found: not_found |
| 409 | Conflict: name_taken, address_taken |
| 500 | internal: an unexpected failure |
Example
curl -X POST "https://api.ibel.ai/v1/projects/my-api/deleted/kind/my-api/restore" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/connectionsA project's connections#
Both ways: this project's resources used by other projects (out), and other projects' resources used here (in).
- Credential
- An API key or a dashboard session
- Roles
- Any role
Parameters
anyanyany
Response
200object
connectionsConnection[]requiredkindstringrequiredone of
database,cache,bucket,queueidstringrequirednamestringrequiredrefstringrequiredhow the connected project binds it:
<owner>/<name>directionstringrequiredout: this project's resource used elsewhere; in: another project's used here
one of
in,outprojectProjectRefrequiredthe owning project
idstringrequiredprj_and 16 hex charactersnamestringrequired
connected_toProjectRefrequiredidstringrequiredprj_and 16 hex charactersnamestringrequired
created_atstring (date-time)created_bystring | null
next_cursorstring | nullsend as
cursorfor the next page; null on the last page
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 404 | Not found: not_found |
| 500 | internal: an unexpected failure |
Example
curl "https://api.ibel.ai/v1/projects/my-api/connections" \
-H "Authorization: Bearer $KEY"/v1/projects/{project}/connectionsConnect a resource to another project#
The other project's apps and functions then bind it as <project>/<name>. Called on the owning project. Not for members limited to chosen projects.
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
any
Request bodyapplication/json
kindstringrequiredone of
database,cache,bucket,queuenamestringrequiredthe resource's name or id in this project
projectstringrequiredthe other project's name or id
Response
201Connection
kindstringrequiredone of
database,cache,bucket,queueidstringrequirednamestringrequiredrefstringrequiredhow the connected project binds it:
<owner>/<name>directionstringrequiredout: this project's resource used elsewhere; in: another project's used here
one of
in,outprojectProjectRefrequiredthe owning project
idstringrequiredprj_and 16 hex charactersnamestringrequired
connected_toProjectRefrequiredidstringrequiredprj_and 16 hex charactersnamestringrequired
created_atstring (date-time)created_bystring | null
Errors
| Status | Description |
|---|---|
| 400 | Bad request: bad_kind, bad_name, bad_project |
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 409 | Conflict: same_project, connected |
| 500 | internal: an unexpected failure |
Example
curl -X POST "https://api.ibel.ai/v1/projects/my-api/connections" \
-H "Authorization: Bearer $KEY" \
-d '{"kind":"database","name":"my-api","project":"my-api"}'/v1/projects/{project}/connections/{kind}/{name}/{to}Remove a connection#
Refused while a live version (production or a preview) of the connected project binds it.
- Credential
- An API key or a dashboard session
- Roles
- owner, admin, developer
Parameters
anykindstringpathrequiredone of
databases,caches,buckets,queuesnamestringpathrequiredthe resource's name in the project (any case) or its id
tostringpathrequiredthe connected project's name or id
Response
200object
kindstringidstringnamestringprojectProjectRefidstringrequiredprj_and 16 hex charactersnamestringrequired
connected_toProjectRefidstringrequiredprj_and 16 hex charactersnamestringrequired
removedboolean
Errors
| Status | Description |
|---|---|
| 401 | unauthorized: missing, invalid, expired or revoked credential |
| 403 | Not allowed: forbidden |
| 404 | Not found: not_found |
| 409 | Conflict: bound |
| 500 | internal: an unexpected failure |
Example
curl -X DELETE "https://api.ibel.ai/v1/projects/my-api/connections/kind/my-api/2026-11-04T06%3A00%3A00Z" \
-H "Authorization: Bearer $KEY"