2022-02-16 17:42:50 +01:00
{
"openapi" : "3.0.0" ,
"info" : {
"title" : "Budibase API" ,
"description" : "The public API for Budibase apps and its services." ,
"version" : "1.0.0"
} ,
"servers" : [
{
2022-03-07 17:41:22 +01:00
"url" : "https://budibase.app/api/public/v1" ,
"description" : "Budibase Cloud API"
2022-02-17 13:40:08 +01:00
} ,
{
2022-03-07 14:21:30 +01:00
"url" : "{protocol}://{hostname}/api/public/v1" ,
"description" : "Budibase self hosted API" ,
"variables" : {
"protocol" : {
"default" : "http" ,
"description" : "Whether HTTP or HTTPS should be used to communicate with your Budibase instance."
} ,
"hostname" : {
"default" : "localhost:10000" ,
"description" : "The URL of your Budibase instance."
}
}
2022-02-16 17:42:50 +01:00
}
] ,
2022-02-17 19:58:09 +01:00
"components" : {
2022-02-17 20:55:37 +01:00
"parameters" : {
"tableId" : {
"in" : "path" ,
"name" : "tableId" ,
"required" : true ,
2022-02-18 16:47:15 +01:00
"description" : "The ID of the table which this request is targeting." ,
"schema" : {
"type" : "string"
}
} ,
"rowId" : {
"in" : "path" ,
"name" : "rowId" ,
"required" : true ,
"description" : "The ID of the row which this request is targeting." ,
2022-02-17 20:55:37 +01:00
"schema" : {
"type" : "string"
}
2022-02-18 18:44:08 +01:00
} ,
"appId" : {
"in" : "header" ,
2022-02-18 18:54:03 +01:00
"name" : "x-budibase-app-id" ,
2022-02-18 18:44:08 +01:00
"required" : true ,
"description" : "The ID of the app which this request is targeting." ,
"schema" : {
"type" : "string"
}
2022-02-21 20:04:13 +01:00
} ,
"appIdUrl" : {
"in" : "path" ,
"name" : "appId" ,
"required" : true ,
"description" : "The ID of the app which this request is targeting." ,
"schema" : {
"type" : "string"
}
} ,
"queryId" : {
"in" : "path" ,
"name" : "queryId" ,
"required" : true ,
"description" : "The ID of the query which this request is targeting." ,
"schema" : {
"type" : "string"
}
} ,
"userId" : {
"in" : "path" ,
"name" : "userId" ,
"required" : true ,
"description" : "The ID of the user which this request is targeting." ,
"schema" : {
"type" : "string"
}
2022-02-17 20:55:37 +01:00
}
} ,
2022-02-17 19:58:09 +01:00
"examples" : {
2022-02-22 16:06:08 +01:00
"application" : {
2022-02-17 19:58:09 +01:00
"value" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-22 16:06:08 +01:00
"_id" : "app_metadata" ,
"appId" : "app_dev_957b12f943d348faa61db7e18e088d0f" ,
"version" : "1.0.58-alpha.0" ,
"name" : "App name" ,
"url" : "/app-url" ,
"tenantId" : "default" ,
"updatedAt" : "2022-02-22T13:00:54.035Z" ,
"createdAt" : "2022-02-11T18:02:26.961Z" ,
2022-03-01 15:37:35 +01:00
"status" : "development"
2022-02-18 18:44:08 +01:00
}
2022-02-22 15:10:01 +01:00
}
} ,
2022-02-22 16:06:08 +01:00
"applications" : {
2022-02-22 15:10:01 +01:00
"value" : {
2022-03-01 15:37:35 +01:00
"data" : [
2022-02-22 15:10:01 +01:00
{
2022-02-22 16:06:08 +01:00
"_id" : "app_metadata" ,
"appId" : "app_dev_957b12f943d348faa61db7e18e088d0f" ,
"version" : "1.0.58-alpha.0" ,
"name" : "App name" ,
"url" : "/app-url" ,
"tenantId" : "default" ,
"updatedAt" : "2022-02-22T13:00:54.035Z" ,
"createdAt" : "2022-02-11T18:02:26.961Z" ,
2022-03-01 15:37:35 +01:00
"status" : "development"
2022-02-22 15:10:01 +01:00
}
]
}
2022-02-18 18:44:08 +01:00
} ,
2023-03-06 16:55:55 +01:00
"deploymentOutput" : {
"value" : {
"data" : {
"_id" : "ef12381f934b4f129675cdbb76eff3c2" ,
"status" : "SUCCESS" ,
"appUrl" : "/app-url"
}
}
} ,
2022-02-18 18:44:08 +01:00
"inputRow" : {
"value" : {
"_id" : "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4" ,
"type" : "row" ,
"tableId" : "ta_5b1649e42a5b41dea4ef7742a36a7a70" ,
"name" : "Mike" ,
"age" : 30 ,
"relationship" : [
"ro_ta_..."
]
}
} ,
2022-02-18 16:47:15 +01:00
"row" : {
"value" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-22 15:10:01 +01:00
"_id" : "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4" ,
"type" : "row" ,
"tableId" : "ta_5b1649e42a5b41dea4ef7742a36a7a70" ,
"name" : "Mike" ,
"age" : 30 ,
"relationship" : [
{
"primaryDisplay" : "Joe" ,
"_id" : "ro_ta_..."
}
]
}
2022-02-18 16:47:15 +01:00
}
} ,
2022-02-28 13:54:32 +01:00
"enrichedRow" : {
" v a l u e " : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-28 13:54:32 +01:00
"_id" : "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4" ,
"name" : "eg" ,
"tableId" : "ta_5b1649e42a5b41dea4ef7742a36a7a70" ,
"type" : "row" ,
"relationship" : [
{
"_id" : "ro_ta_users_us_8f3d717147d74d759d8cef5b6712062f" ,
"name" : "Joe" ,
"tableId" : "ta_users" ,
"internal" : [
{
"_id" : "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4" ,
"primaryDisplay" : "eg"
}
]
}
]
}
}
} ,
2022-02-22 15:10:01 +01:00
"rows" : {
2022-02-18 16:47:15 +01:00
"value" : {
2022-03-01 15:37:35 +01:00
"data" : [
2022-02-18 16:47:15 +01:00
{
"_id" : "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4" ,
"type" : "row" ,
"tableId" : "ta_5b1649e42a5b41dea4ef7742a36a7a70" ,
"name" : "Mike" ,
"age" : 30 ,
"relationship" : [
{
"primaryDisplay" : "Joe" ,
"_id" : "ro_ta_..."
}
]
}
] ,
"hasNextPage" : true ,
"bookmark" : 10
}
2022-02-22 15:10:01 +01:00
} ,
2022-02-22 16:06:08 +01:00
"table" : {
2022-02-22 15:10:01 +01:00
"value" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-22 16:06:08 +01:00
"_id" : "ta_5b1649e42a5b41dea4ef7742a36a7a70" ,
"name" : "People" ,
"schema" : {
"name" : {
"type" : "string" ,
"name" : "name"
} ,
"age" : {
"type" : "number" ,
"name" : "age"
} ,
"relationship" : {
"type" : "link" ,
"name" : "relationship" ,
"tableId" : "ta_..." ,
"fieldName" : "relatedColumn" ,
"relationshipType" : "many-to-many"
}
2022-02-22 15:10:01 +01:00
}
}
}
} ,
2022-02-22 16:06:08 +01:00
"tables" : {
2022-02-22 15:10:01 +01:00
"value" : {
2022-03-01 15:37:35 +01:00
"data" : [
2022-02-22 15:10:01 +01:00
{
2022-02-22 16:06:08 +01:00
"_id" : "ta_5b1649e42a5b41dea4ef7742a36a7a70" ,
"name" : "People" ,
"schema" : {
"name" : {
"type" : "string" ,
"name" : "name"
} ,
"age" : {
"type" : "number" ,
"name" : "age"
} ,
"relationship" : {
"type" : "link" ,
"name" : "relationship" ,
"tableId" : "ta_..." ,
"fieldName" : "relatedColumn" ,
"relationshipType" : "many-to-many"
}
2022-02-22 15:10:01 +01:00
}
}
]
}
} ,
"query" : {
"value" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-22 15:10:01 +01:00
"_id" : "query_datasource_plus_4d8be0c506b9465daf4bf84d890fdab6_454854487c574d45bc4029b1e153219e" ,
"datasourceId" : "datasource_plus_4d8be0c506b9465daf4bf84d890fdab6" ,
"parameters" : [ ] ,
"fields" : {
"sql" : "select * from persons"
} ,
"queryVerb" : "read" ,
"name" : "Help" ,
"schema" : {
"personid" : {
"name" : "personid" ,
"type" : "string"
} ,
"lastname" : {
"name" : "lastname" ,
"type" : "string"
} ,
"firstname" : {
"name" : "firstname" ,
"type" : "string"
} ,
"address" : {
"name" : "address" ,
"type" : "string"
} ,
"city" : {
"name" : "city" ,
"type" : "string"
}
} ,
"transformer" : "return data" ,
"readable" : true
}
}
} ,
"queries" : {
"value" : {
2022-03-01 15:37:35 +01:00
"data" : [
2022-02-22 15:10:01 +01:00
{
"_id" : "query_datasource_plus_4d8be0c506b9465daf4bf84d890fdab6_454854487c574d45bc4029b1e153219e" ,
"datasourceId" : "datasource_plus_4d8be0c506b9465daf4bf84d890fdab6" ,
"parameters" : [ ] ,
"fields" : {
"sql" : "select * from persons"
} ,
"queryVerb" : "read" ,
"name" : "Help" ,
"schema" : {
"personid" : {
"name" : "personid" ,
"type" : "string"
} ,
"lastname" : {
"name" : "lastname" ,
"type" : "string"
} ,
"firstname" : {
"name" : "firstname" ,
"type" : "string"
} ,
"address" : {
"name" : "address" ,
"type" : "string"
} ,
"city" : {
"name" : "city" ,
"type" : "string"
}
} ,
"transformer" : "return data" ,
"readable" : true
}
]
}
} ,
2022-02-23 19:31:32 +01:00
"restResponse" : {
"value" : {
"data" : [
{
"value" : "<html lang='en-GB'></html>"
}
] ,
"pagination" : {
"cursor" : "2"
} ,
"raw" : "<html lang='en-GB'></html>" ,
"headers" : {
"content-type" : "text/html; charset=ISO-8859-1"
}
}
} ,
"sqlResponse" : {
"value" : {
"data" : [
{
"personid" : 1 ,
"lastname" : "Hughes" ,
"firstname" : "Mike" ,
"address" : "123 Fake Street" ,
"city" : "Belfast"
} ,
{
"personid" : 2 ,
"lastname" : "Smith" ,
"firstname" : "John" ,
"address" : "64 Updown Road" ,
"city" : "Dublin"
}
]
}
} ,
2022-02-22 16:06:08 +01:00
"user" : {
2022-02-22 15:10:01 +01:00
"value" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-22 16:06:08 +01:00
"_id" : "us_693a73206518477283a8d5ae31103252" ,
2024-02-08 17:32:14 +01:00
"email" : "test@example.com" ,
2022-02-22 16:06:08 +01:00
"roles" : {
"app_957b12f943d348faa61db7e18e088d0f" : "BASIC"
} ,
"builder" : {
"global" : false
} ,
"admin" : {
"global" : true
} ,
2022-02-22 15:10:01 +01:00
"tenantId" : "default" ,
2022-02-22 16:06:08 +01:00
"status" : "active" ,
"budibaseAccess" : true ,
"csrfToken" : "9c70291d-7137-48f9-9166-99ab5473a3d4" ,
"userId" : "us_693a73206518477283a8d5ae31103252" ,
"roleId" : "ADMIN" ,
"role" : {
"_id" : "ADMIN" ,
"name" : "Admin" ,
"permissionId" : "admin" ,
"inherits" : "POWER"
}
}
}
} ,
"users" : {
"value" : {
2022-03-01 15:37:35 +01:00
"data" : [
2022-02-22 16:06:08 +01:00
{
2022-02-22 15:10:01 +01:00
"_id" : "us_693a73206518477283a8d5ae31103252" ,
2024-02-08 17:32:14 +01:00
"email" : "test@example.com" ,
2022-02-22 15:10:01 +01:00
"roles" : {
"app_957b12f943d348faa61db7e18e088d0f" : "BASIC"
} ,
"builder" : {
"global" : false
} ,
"admin" : {
"global" : true
} ,
"tenantId" : "default" ,
"status" : "active" ,
"budibaseAccess" : true ,
"csrfToken" : "9c70291d-7137-48f9-9166-99ab5473a3d4" ,
"userId" : "us_693a73206518477283a8d5ae31103252" ,
"roleId" : "ADMIN" ,
"role" : {
"_id" : "ADMIN" ,
"name" : "Admin" ,
"permissionId" : "admin" ,
"inherits" : "POWER"
}
}
]
}
2023-03-06 16:55:55 +01:00
} ,
"metrics" : {
"value" : "# HELP budibase_os_uptime Time in seconds that the host operating system has been up.\n# TYPE budibase_os_uptime counter\nbudibase_os_uptime 54958\n# HELP budibase_os_free_mem Bytes of memory free for usage on the host operating system.\n# TYPE budibase_os_free_mem gauge\nbudibase_os_free_mem 804507648\n# HELP budibase_os_total_mem Total bytes of memory on the host operating system.\n# TYPE budibase_os_total_mem gauge\nbudibase_os_total_mem 16742404096\n# HELP budibase_os_used_mem Total bytes of memory in use on the host operating system.\n# TYPE budibase_os_used_mem gauge\nbudibase_os_used_mem 15937896448\n# HELP budibase_os_load1 Host operating system load average.\n# TYPE budibase_os_load1 gauge\nbudibase_os_load1 1.91\n# HELP budibase_os_load5 Host operating system load average.\n# TYPE budibase_os_load5 gauge\nbudibase_os_load5 1.75\n# HELP budibase_os_load15 Host operating system load average.\n# TYPE budibase_os_load15 gauge\nbudibase_os_load15 1.56\n# HELP budibase_tenant_user_count The number of users created.\n# TYPE budibase_tenant_user_count gauge\nbudibase_tenant_user_count 1\n# HELP budibase_tenant_app_count The number of apps created by a user.\n# TYPE budibase_tenant_app_count gauge\nbudibase_tenant_app_count 2\n# HELP budibase_tenant_production_app_count The number of apps a user has published.\n# TYPE budibase_tenant_production_app_count gauge\nbudibase_tenant_production_app_count 1\n# HELP budibase_tenant_dev_app_count The number of apps a user has unpublished in development.\n# TYPE budibase_tenant_dev_app_count gauge\nbudibase_tenant_dev_app_count 1\n# HELP budibase_tenant_db_count The number of couchdb databases including global tables such as _users.\n# TYPE budibase_tenant_db_count gauge\nbudibase_tenant_db_count 3\n# HELP budibase_quota_usage_apps The number of apps created.\n# TYPE budibase_quota_usage_apps gauge\nbudibase_quota_usage_apps 1\n# HELP budibase_quota_limit_apps The limit on the number of apps that can be created.\n# TYPE budibase_quota_limit_apps gauge\nbudibase_quota_limit_apps 9007199254740991\n# HELP budibase_quota_usage_rows The number of database rows used from the quota.\n# TYPE budibase_quota_usage_rows gauge\nbudibase_quota_usage_rows 0\n# HELP budibase_quota_limit_rows The limit on the number of rows that can be created.\n# TYPE budibase_quota_limit_rows gauge\nbudibase_quota_limit_rows 9007199254740991\n# HELP budibase_quota_usage_plugins The number of plugins in use.\n# TYPE budibase_quota_usage_plugins gauge\nbudibase_quota_usage_plugins 0\n# HELP budibase_quota_limit_plugins The limit on the number of plugins that can be created.\n# TYPE budibase_quota_limit_plugins gauge\nbudibase_quota_limit_plugins 9007199254740991\n# HELP budibase_quota_usage_user_groups The number of user groups created.\n# TYPE budibase_quota_usage_user_groups gauge\nbudibase_quota_usage_user_groups 0\n# HELP budibase_quota_limit_user_groups The limit on the number of user groups that can be created.\n# TYPE budibase_quota_limit_user_groups gauge\nbudibase_quota_limit_user_groups 9007199254740991\n# HELP budibase_quota_usage_queries The number of queries used in the current month.\n# TYPE budibase_quota_usage_queries gauge\nbudibase_quota_usage_queries 0\n# HELP budibase_quota_limit_queries The limit on the number of queries for the current month.\n# TYPE budibase_quota_limit_queries gauge\nbudibase_quota_limit_queries 9007199254740991\n# HELP budibase_quota_usage_automations The number of automations used in the current month.\n# TYPE budibase_quota_usage_automations gauge\nbudibase_quota_usage_automations 0\n# HELP budibase_quota_limit_automations The limit on the number of automations that can be created.\n# TYPE budibase_quota_limit_automations gauge\nbudibase_quota_limit_automations 9007199254740991\n"
2022-02-18 16:47:15 +01:00
}
} ,
"securitySchemes" : {
"ApiKeyAuth" : {
"type" : "apiKey" ,
"in" : "header" ,
"name" : "x-budibase-api-key" ,
"description" : "Your individual API key, this will provide access based on the configured RBAC settings of your user."
2022-02-17 19:58:09 +01:00
}
2022-02-18 18:44:08 +01:00
} ,
"schemas" : {
2022-02-22 16:06:08 +01:00
"application" : {
"type" : "object" ,
2022-02-24 16:42:59 +01:00
"properties" : {
"name" : {
2022-02-28 12:29:48 +01:00
"description" : "The name of the app." ,
2022-02-24 19:15:13 +01:00
"type" : "string"
2022-02-24 16:42:59 +01:00
} ,
"url" : {
2022-02-28 12:29:48 +01:00
"description" : "The URL by which the app is accessed, this must be URL encoded." ,
2022-02-24 16:42:59 +01:00
"type" : "string"
}
2022-02-24 19:15:13 +01:00
} ,
"required" : [
2022-03-10 16:53:23 +01:00
"name"
2022-02-24 19:15:13 +01:00
]
2022-02-22 16:06:08 +01:00
} ,
"applicationOutput" : {
"type" : "object" ,
"properties" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-22 16:06:08 +01:00
"type" : "object" ,
2022-02-24 16:42:59 +01:00
"properties" : {
"name" : {
2022-02-28 12:29:48 +01:00
"description" : "The name of the app." ,
2022-02-24 19:15:13 +01:00
"type" : "string"
2022-02-24 16:42:59 +01:00
} ,
"url" : {
2022-02-28 12:29:48 +01:00
"description" : "The URL by which the app is accessed, this must be URL encoded." ,
"type" : "string"
} ,
2022-03-01 19:35:08 +01:00
"_id" : {
"description" : "The ID of the app." ,
"type" : "string"
} ,
2022-02-28 12:29:48 +01:00
"status" : {
"description" : "The status of the app, stating it if is the development or published version." ,
"type" : "string" ,
"enum" : [
"development" ,
"published"
]
} ,
"createdAt" : {
"description" : "States when the app was created, will be constant. Stored in ISO format." ,
"type" : "string"
} ,
"updatedAt" : {
"description" : "States the last time the app was updated - stored in ISO format." ,
"type" : "string"
} ,
"version" : {
"description" : "States the version of the Budibase client this app is currently based on." ,
"type" : "string"
} ,
"tenantId" : {
"description" : "In a multi-tenant environment this will state the tenant this app is within." ,
"type" : "string"
} ,
"lockedBy" : {
"description" : "The user this app is currently being built by." ,
"type" : "object"
2022-02-24 16:42:59 +01:00
}
2022-02-24 19:15:13 +01:00
} ,
"required" : [
2022-03-01 19:35:08 +01:00
"_id" ,
2022-02-24 19:15:13 +01:00
"name" ,
2022-02-28 12:29:48 +01:00
"url" ,
"status" ,
"createdAt" ,
"updatedAt" ,
2022-03-01 19:35:08 +01:00
"version"
2022-02-24 19:15:13 +01:00
]
2022-02-22 16:06:08 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"required" : [
2022-03-01 15:37:35 +01:00
"data"
2022-02-25 00:21:10 +01:00
]
2022-02-22 16:06:08 +01:00
} ,
2022-03-08 18:42:26 +01:00
"applicationSearch" : {
"type" : "object" ,
"properties" : {
"data" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"name" : {
"description" : "The name of the app." ,
"type" : "string"
} ,
"url" : {
"description" : "The URL by which the app is accessed, this must be URL encoded." ,
"type" : "string"
} ,
"_id" : {
"description" : "The ID of the app." ,
"type" : "string"
} ,
"status" : {
"description" : "The status of the app, stating it if is the development or published version." ,
"type" : "string" ,
"enum" : [
"development" ,
"published"
]
} ,
"createdAt" : {
"description" : "States when the app was created, will be constant. Stored in ISO format." ,
"type" : "string"
} ,
"updatedAt" : {
"description" : "States the last time the app was updated - stored in ISO format." ,
"type" : "string"
} ,
"version" : {
"description" : "States the version of the Budibase client this app is currently based on." ,
"type" : "string"
} ,
"tenantId" : {
"description" : "In a multi-tenant environment this will state the tenant this app is within." ,
"type" : "string"
} ,
"lockedBy" : {
"description" : "The user this app is currently being built by." ,
"type" : "object"
}
} ,
"required" : [
"_id" ,
"name" ,
"url" ,
"status" ,
"createdAt" ,
"updatedAt" ,
"version"
]
}
}
} ,
"required" : [
"data"
]
} ,
fixes for google sheets, admin checklist, and deleting an app from API (#8846)
* fixes for google sheets, admin checklist, and deleting an app from API
* code review
* splitting unpublish endpoint, moving deploy endpoint to applications controller. Still to do public API work and move deployment controller into application controller
* updating REST method for unpublish in API test
* unpublish and publish endpoint on public API, delete endpoint unpublishes and deletes app
* removing skip_setup from prodAppDb call
* removing commented code
* unit tests and open API spec updates
* unpublish, publish unit tests - delete still in progress
* remove line updating app name in API test
* unit tests
* v2.1.46
* Update pro version to 2.1.46
* v2.2.0
* Update pro version to 2.2.0
* Fix for budibase plugin skeleton, which utilises the old import style.
* Fix side nav styles
* v2.2.1
* Update pro version to 2.2.1
* using dist folder to allow importing constants for openAPI specs
* v2.2.2
* Update pro version to 2.2.2
* Fix for user enrichment call (updating to @budibase/nano fork) (#9038)
* Fix for #9029 - this should fix the issue users have been experiencing with user enrichment calls in apps, essentially it utilises a fork of the nano library we use to interact with CouchDB, which has been updated to use a POST request rather than a GET request as it supports a larger set of data being sent as query parameters.
* Incrementing Nano version to attempt to fix yarn registry issues.
* v2.2.3
* Update pro version to 2.2.3
* Fix SQL table `_id` filtering (#9030)
* Re-add support for filtering on _id using external SQL tables and fix filter key prefixes not working with _id field
* Remove like operator from internal tables and only allow basic operators on SQL table _id column
* Update data section filtering to respect new rules
* Update automation section filtering to respect new rules
* Update dynamic filter component to respect new rules
* v2.2.4
* Update pro version to 2.2.4
* lock changes (#9047)
* v2.2.5
* Update pro version to 2.2.5
* Make looping arrow point in right direction (#9053)
* v2.2.6
* Update pro version to 2.2.6
* Types/attaching license to account (#9065)
* adding license type to account
* removing planDuration
* v2.2.7
* Update pro version to 2.2.7
* Environment variable type coercion fix (#9074)
* Environment variable type coercion fix
* Update .gitignore
* v2.2.8
* Update pro version to 2.2.8
* tests passing
* all tests passing, updates to public API response
* update unpublish call to return 204, openAPI spec and unit
* fixing API tests
Co-authored-by: Budibase Release Bot <>
Co-authored-by: mike12345567 <me@michaeldrury.co.uk>
Co-authored-by: Andrew Kingston <andrew@kingston.dev>
Co-authored-by: melohagan <101575380+melohagan@users.noreply.github.com>
Co-authored-by: Rory Powell <rory.codes@gmail.com>
2022-12-19 14:18:00 +01:00
"deploymentOutput" : {
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"_id" : {
"description" : "The ID of the app." ,
"type" : "string"
} ,
"status" : {
"description" : "Status of the deployment, whether it succeeded or failed" ,
"type" : "string" ,
"enum" : [
"SUCCESS" ,
"FAILURE"
]
} ,
"appUrl" : {
"description" : "The URL of the published app" ,
"type" : "string"
}
} ,
"required" : [
"_id" ,
"status" ,
"appUrl"
]
}
} ,
"required" : [
"data"
]
} ,
2023-09-22 14:29:16 +02:00
"appExport" : {
"type" : "object" ,
"properties" : {
"encryptPassword" : {
"description" : "An optional password used to encrypt the export." ,
"type" : "string"
} ,
"excludeRows" : {
"description" : "Set whether the internal table rows should be excluded from the export." ,
"type" : "boolean"
}
} ,
"required" : [
"encryptPassword" ,
"excludeRows"
]
} ,
2022-02-18 18:44:08 +01:00
"row" : {
"description" : "The row to be created/updated, based on the table schema." ,
"type" : "object" ,
"additionalProperties" : {
2022-03-01 23:37:42 +01:00
"description" : "Key value properties of any type, depending on the table schema."
2022-02-18 18:44:08 +01:00
}
2022-02-18 19:06:58 +01:00
} ,
2022-03-01 19:35:08 +01:00
"searchOutput" : {
2022-02-22 16:06:08 +01:00
"type" : "object" ,
2022-03-01 19:35:08 +01:00
"required" : [
"data"
] ,
2022-02-22 16:06:08 +01:00
"properties" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-03-01 19:35:08 +01:00
"description" : "An array of rows, these will each contain an _id field which can be used to update or delete them." ,
"type" : "array" ,
"items" : {
"type" : "object"
}
} ,
"bookmark" : {
"description" : "If pagination in use, this should be provided." ,
"oneOf" : [
{
2022-02-28 13:54:32 +01:00
"type" : "string"
} ,
2022-03-01 19:35:08 +01:00
{
"type" : "integer"
2022-02-28 13:54:32 +01:00
}
2022-03-01 19:35:08 +01:00
]
} ,
"hasNextPage" : {
"description" : "If pagination in use, this will determine if there is another page to fetch." ,
"type" : "boolean"
}
}
} ,
"rowOutput" : {
"type" : "object" ,
"properties" : {
"data" : {
"description" : "The row to be created/updated, based on the table schema." ,
"type" : "object" ,
2022-02-22 16:06:08 +01:00
"additionalProperties" : {
2022-03-01 23:37:42 +01:00
"description" : "Key value properties of any type, depending on the table schema."
2022-03-01 19:35:08 +01:00
} ,
"properties" : {
"_id" : {
"description" : "The ID of the row." ,
"type" : "string"
} ,
"tableId" : {
"description" : "The ID of the table this row comes from." ,
"type" : "string"
}
} ,
"required" : [
"tableId" ,
"_id"
]
2022-02-22 16:06:08 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"required" : [
2022-03-01 15:37:35 +01:00
"data"
2022-02-25 00:21:10 +01:00
]
2022-02-22 16:06:08 +01:00
} ,
2022-02-18 19:06:58 +01:00
"table" : {
"description" : "The table to be created/updated." ,
"type" : "object" ,
2022-02-25 00:21:10 +01:00
"required" : [
"name" ,
"schema"
] ,
2022-02-18 19:06:58 +01:00
"properties" : {
"name" : {
2022-03-01 19:35:08 +01:00
"description" : "The name of the table." ,
2022-02-18 19:06:58 +01:00
"type" : "string"
} ,
2022-02-21 17:37:02 +01:00
"primaryDisplay" : {
"type" : "string" ,
"description" : "The name of the column which should be used in relationship tags when relating to this table."
} ,
2022-02-18 19:06:58 +01:00
"schema" : {
2022-02-25 00:21:10 +01:00
"type" : "object" ,
"additionalProperties" : {
"oneOf" : [
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"link"
] ,
"description" : "A relationship column."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
2022-02-21 17:37:02 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
} ,
"fieldName" : {
"type" : "string" ,
"description" : "The name of the column which a relationship column is related to in another table."
} ,
"tableId" : {
"type" : "string" ,
"description" : "The ID of the table which a relationship column is related to."
} ,
"relationshipType" : {
"type" : "string" ,
"enum" : [
"one-to-many" ,
"many-to-one" ,
"many-to-many"
] ,
"description" : "Defines the type of relationship that this column will be used for."
} ,
"through" : {
"type" : "string" ,
"description" : "When using a SQL table that contains many to many relationships this defines the table the relationships are linked through."
} ,
"foreignKey" : {
"type" : "string" ,
"description" : "When using a SQL table that contains a one to many relationship this defines the foreign key."
} ,
"throughFrom" : {
"type" : "string" ,
"description" : "When using a SQL table that utilises a through table, this defines the primary key in the through table for this table."
} ,
"throughTo" : {
"type" : "string" ,
"description" : "When using a SQL table that utilises a through table, this defines the primary key in the through table for the related table."
2022-02-21 17:37:02 +01:00
}
}
2022-02-25 00:21:10 +01:00
} ,
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"formula"
] ,
"description" : "A formula column."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
2022-02-21 17:37:02 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
} ,
"formula" : {
"type" : "string" ,
"description" : "Defines a Handlebars or JavaScript formula to use, note that Javascript formulas are expected to be provided in the base64 format."
} ,
"formulaType" : {
"type" : "string" ,
"enum" : [
"static" ,
"dynamic"
] ,
"description" : "Defines whether this is a static or dynamic formula."
2022-02-21 17:37:02 +01:00
}
}
2022-02-25 00:21:10 +01:00
} ,
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"longform" ,
"options" ,
"number" ,
"boolean" ,
"array" ,
"datetime" ,
"attachment" ,
2024-04-10 17:38:52 +02:00
"attachment_single" ,
2022-02-25 00:21:10 +01:00
"link" ,
"formula" ,
"auto" ,
"json" ,
2023-03-06 12:51:49 +01:00
"internal" ,
2023-07-20 16:06:43 +02:00
"barcodeqr" ,
2024-06-11 17:00:04 +02:00
"signature_single" ,
2023-10-11 18:49:25 +02:00
"bigint" ,
2024-06-11 17:00:04 +02:00
"bb_reference" ,
"bb_reference_single"
2022-02-25 00:21:10 +01:00
] ,
"description" : "Defines the type of the column, most explain themselves, a link column is a relationship."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
2022-02-21 17:37:02 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
2022-02-21 17:37:02 +01:00
}
}
2022-02-18 19:06:58 +01:00
}
2022-02-25 00:21:10 +01:00
]
}
2022-02-18 19:06:58 +01:00
}
}
2022-02-21 20:04:13 +01:00
} ,
2022-02-22 15:10:01 +01:00
"tableOutput" : {
"type" : "object" ,
"properties" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-22 15:10:01 +01:00
"description" : "The table to be created/updated." ,
"type" : "object" ,
2022-02-25 00:21:10 +01:00
"required" : [
"name" ,
2022-03-01 19:35:08 +01:00
"schema" ,
"_id"
2022-02-25 00:21:10 +01:00
] ,
2022-02-22 15:10:01 +01:00
"properties" : {
"name" : {
2022-03-01 19:35:08 +01:00
"description" : "The name of the table." ,
2022-02-22 15:10:01 +01:00
"type" : "string"
} ,
"primaryDisplay" : {
"type" : "string" ,
"description" : "The name of the column which should be used in relationship tags when relating to this table."
} ,
"schema" : {
2022-02-25 00:21:10 +01:00
"type" : "object" ,
"additionalProperties" : {
"oneOf" : [
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"link"
] ,
"description" : "A relationship column."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
2022-02-22 15:10:01 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
} ,
"fieldName" : {
"type" : "string" ,
"description" : "The name of the column which a relationship column is related to in another table."
} ,
"tableId" : {
"type" : "string" ,
"description" : "The ID of the table which a relationship column is related to."
} ,
"relationshipType" : {
"type" : "string" ,
"enum" : [
"one-to-many" ,
"many-to-one" ,
"many-to-many"
] ,
"description" : "Defines the type of relationship that this column will be used for."
} ,
"through" : {
"type" : "string" ,
"description" : "When using a SQL table that contains many to many relationships this defines the table the relationships are linked through."
} ,
"foreignKey" : {
"type" : "string" ,
"description" : "When using a SQL table that contains a one to many relationship this defines the foreign key."
} ,
"throughFrom" : {
"type" : "string" ,
"description" : "When using a SQL table that utilises a through table, this defines the primary key in the through table for this table."
} ,
"throughTo" : {
"type" : "string" ,
"description" : "When using a SQL table that utilises a through table, this defines the primary key in the through table for the related table."
2022-02-22 15:10:01 +01:00
}
}
2022-02-25 00:21:10 +01:00
} ,
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"formula"
] ,
"description" : "A formula column."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
2022-02-22 15:10:01 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
} ,
"formula" : {
"type" : "string" ,
"description" : "Defines a Handlebars or JavaScript formula to use, note that Javascript formulas are expected to be provided in the base64 format."
} ,
"formulaType" : {
"type" : "string" ,
"enum" : [
"static" ,
"dynamic"
] ,
"description" : "Defines whether this is a static or dynamic formula."
2022-02-22 15:10:01 +01:00
}
}
2022-02-25 00:21:10 +01:00
} ,
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"longform" ,
"options" ,
"number" ,
"boolean" ,
"array" ,
"datetime" ,
"attachment" ,
2024-04-10 17:38:52 +02:00
"attachment_single" ,
2022-02-25 00:21:10 +01:00
"link" ,
"formula" ,
"auto" ,
"json" ,
2023-03-06 12:51:49 +01:00
"internal" ,
2023-07-20 16:06:43 +02:00
"barcodeqr" ,
2024-06-11 17:00:04 +02:00
"signature_single" ,
2023-10-11 18:49:25 +02:00
"bigint" ,
2024-06-11 17:00:04 +02:00
"bb_reference" ,
"bb_reference_single"
2022-02-25 00:21:10 +01:00
] ,
"description" : "Defines the type of the column, most explain themselves, a link column is a relationship."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
2022-02-22 15:10:01 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
2022-02-22 15:10:01 +01:00
}
}
}
2022-02-25 00:21:10 +01:00
]
}
2022-03-01 19:35:08 +01:00
} ,
"_id" : {
"description" : "The ID of the table." ,
"type" : "string"
2022-02-22 15:10:01 +01:00
}
}
}
2022-02-25 00:21:10 +01:00
} ,
"required" : [
2022-03-01 15:37:35 +01:00
"data"
2022-02-25 00:21:10 +01:00
]
2022-02-22 15:10:01 +01:00
} ,
2022-03-08 18:42:26 +01:00
"tableSearch" : {
"type" : "object" ,
"properties" : {
"data" : {
"type" : "array" ,
"items" : {
"description" : "The table to be created/updated." ,
"type" : "object" ,
"required" : [
"name" ,
"schema" ,
"_id"
] ,
"properties" : {
"name" : {
"description" : "The name of the table." ,
"type" : "string"
} ,
"primaryDisplay" : {
"type" : "string" ,
"description" : "The name of the column which should be used in relationship tags when relating to this table."
} ,
"schema" : {
"type" : "object" ,
"additionalProperties" : {
"oneOf" : [
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"link"
] ,
"description" : "A relationship column."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
}
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
} ,
"fieldName" : {
"type" : "string" ,
"description" : "The name of the column which a relationship column is related to in another table."
} ,
"tableId" : {
"type" : "string" ,
"description" : "The ID of the table which a relationship column is related to."
} ,
"relationshipType" : {
"type" : "string" ,
"enum" : [
"one-to-many" ,
"many-to-one" ,
"many-to-many"
] ,
"description" : "Defines the type of relationship that this column will be used for."
} ,
"through" : {
"type" : "string" ,
"description" : "When using a SQL table that contains many to many relationships this defines the table the relationships are linked through."
} ,
"foreignKey" : {
"type" : "string" ,
"description" : "When using a SQL table that contains a one to many relationship this defines the foreign key."
} ,
"throughFrom" : {
"type" : "string" ,
"description" : "When using a SQL table that utilises a through table, this defines the primary key in the through table for this table."
} ,
"throughTo" : {
"type" : "string" ,
"description" : "When using a SQL table that utilises a through table, this defines the primary key in the through table for the related table."
}
}
} ,
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"formula"
] ,
"description" : "A formula column."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
}
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
} ,
"formula" : {
"type" : "string" ,
"description" : "Defines a Handlebars or JavaScript formula to use, note that Javascript formulas are expected to be provided in the base64 format."
} ,
"formulaType" : {
"type" : "string" ,
"enum" : [
"static" ,
"dynamic"
] ,
"description" : "Defines whether this is a static or dynamic formula."
}
}
} ,
{
"type" : "object" ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"longform" ,
"options" ,
"number" ,
"boolean" ,
"array" ,
"datetime" ,
"attachment" ,
2024-04-10 17:38:52 +02:00
"attachment_single" ,
2022-03-08 18:42:26 +01:00
"link" ,
"formula" ,
"auto" ,
"json" ,
2023-03-06 12:51:49 +01:00
"internal" ,
2023-07-20 16:06:43 +02:00
"barcodeqr" ,
2024-06-11 17:00:04 +02:00
"signature_single" ,
2023-10-11 18:49:25 +02:00
"bigint" ,
2024-06-11 17:00:04 +02:00
"bb_reference" ,
"bb_reference_single"
2022-03-08 18:42:26 +01:00
] ,
"description" : "Defines the type of the column, most explain themselves, a link column is a relationship."
} ,
"constraints" : {
"type" : "object" ,
"description" : "A constraint can be applied to the column which will be validated against when a row is saved." ,
"properties" : {
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number" ,
"object" ,
"boolean"
]
} ,
"presence" : {
"type" : "boolean" ,
"description" : "Defines whether the column is required or not."
}
}
} ,
"name" : {
"type" : "string" ,
"description" : "The name of the column."
} ,
"autocolumn" : {
"type" : "boolean" ,
"description" : "Defines whether the column is automatically generated."
}
}
}
]
}
} ,
"_id" : {
"description" : "The ID of the table." ,
"type" : "string"
}
}
}
}
} ,
"required" : [
"data"
]
} ,
2022-03-01 19:35:08 +01:00
"executeQuery" : {
2022-03-28 19:33:54 +02:00
"description" : "The parameters required for executing a query." ,
2022-02-22 16:06:08 +01:00
"type" : "object" ,
2022-03-28 19:33:54 +02:00
"properties" : {
"parameters" : {
"type" : "object" ,
"description" : "This contains the required parameters for the query, this depends on query type, setup and bindings." ,
"additionalProperties" : {
"description" : "Key value properties of any type, depending on the query output schema."
}
} ,
"pagination" : {
"type" : "object" ,
"description" : "For supported query types (currently on REST) pagination can be performed using these properties." ,
"properties" : {
"page" : {
"type" : "string" ,
"description" : "The page which has been returned from a previous query."
} ,
"limit" : {
"type" : "number" ,
"description" : "The number of rows to return per page."
}
}
}
2022-02-25 20:26:19 +01:00
}
2022-02-22 16:06:08 +01:00
} ,
2022-03-01 19:35:08 +01:00
"executeQueryOutput" : {
"type" : "object" ,
"properties" : {
"data" : {
"description" : "The data response from the query." ,
"type" : "array" ,
"items" : {
"type" : "object"
}
} ,
"extra" : {
"description" : "Extra information that is not part of the main data, e.g. headers." ,
"type" : "object" ,
"properties" : {
"headers" : {
"description" : "If carrying out a REST request, this will contain the response headers." ,
"type" : "object"
} ,
"raw" : {
"description" : "The raw query response, as a string." ,
"type" : "string"
}
}
} ,
"pagination" : {
"description" : "If pagination is supported, this will contain the bookmark/anchor information for it." ,
"type" : "object"
}
} ,
"required" : [
"data"
]
} ,
"query" : {
"type" : "object" ,
"properties" : {
"_id" : {
"description" : "The ID of the query." ,
"type" : "string"
} ,
"datasourceId" : {
2022-09-14 13:11:20 +02:00
"description" : "The ID of the datasource the query belongs to." ,
2022-03-01 19:35:08 +01:00
"type" : "string"
} ,
"parameters" : {
"description" : "The bindings which are required to perform this query." ,
"type" : "array" ,
"items" : {
"type" : "string"
}
} ,
"fields" : {
"description" : "The fields that are used to perform this query, e.g. the sql statement" ,
"type" : "object"
} ,
"queryVerb" : {
"description" : "The verb that describes this query." ,
"enum" : [
"create" ,
"read" ,
"update" ,
"delete"
]
} ,
"name" : {
"description" : "The name of the query." ,
"type" : "string"
} ,
"schema" : {
"description" : "The schema of the data returned when the query is executed." ,
"type" : "object"
} ,
"transformer" : {
"description" : "The JavaScript transformer function, applied after the query responds with data." ,
"type" : "string"
} ,
"readable" : {
"description" : "Whether the query has readable data." ,
"type" : "boolean"
}
} ,
"required" : [
"name" ,
"schema" ,
"_id"
]
} ,
2022-03-08 18:42:26 +01:00
"querySearch" : {
"type" : "object" ,
"properties" : {
"data" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"_id" : {
"description" : "The ID of the query." ,
"type" : "string"
} ,
"datasourceId" : {
2022-09-14 13:11:20 +02:00
"description" : "The ID of the datasource the query belongs to." ,
2022-03-08 18:42:26 +01:00
"type" : "string"
} ,
"parameters" : {
"description" : "The bindings which are required to perform this query." ,
"type" : "array" ,
"items" : {
"type" : "string"
}
} ,
"fields" : {
"description" : "The fields that are used to perform this query, e.g. the sql statement" ,
"type" : "object"
} ,
"queryVerb" : {
"description" : "The verb that describes this query." ,
"enum" : [
"create" ,
"read" ,
"update" ,
"delete"
]
} ,
"name" : {
"description" : "The name of the query." ,
"type" : "string"
} ,
"schema" : {
"description" : "The schema of the data returned when the query is executed." ,
"type" : "object"
} ,
"transformer" : {
"description" : "The JavaScript transformer function, applied after the query responds with data." ,
"type" : "string"
} ,
"readable" : {
"description" : "Whether the query has readable data." ,
"type" : "boolean"
}
} ,
"required" : [
"name" ,
"schema" ,
"_id"
]
}
}
} ,
"required" : [
"data"
]
} ,
2022-02-22 16:06:08 +01:00
"user" : {
"type" : "object" ,
2022-02-25 20:26:19 +01:00
"properties" : {
"email" : {
"description" : "The email address of the user, this must be unique." ,
"type" : "string"
} ,
"password" : {
"description" : "The password of the user if using password based login - this will never be returned. This can be left out of subsequent requests (updates) and will be enriched back into the user structure." ,
"type" : "string"
} ,
"status" : {
"description" : "The status of the user, if they are active." ,
"type" : "string" ,
"enum" : [
"active"
]
} ,
"firstName" : {
"description" : "The first name of the user" ,
"type" : "string"
} ,
"lastName" : {
"description" : "The last name of the user" ,
"type" : "string"
} ,
"forceResetPassword" : {
"description" : "If set to true forces the user to reset their password on first login." ,
"type" : "boolean"
2023-08-15 18:33:22 +02:00
} ,
"builder" : {
"description" : "Describes if the user is a builder user or not. This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"properties" : {
"global" : {
"description" : "If set to true the user will be able to build any app in the system." ,
"type" : "boolean"
}
}
} ,
"admin" : {
"description" : "Describes if the user is an admin user or not. This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"properties" : {
"global" : {
"description" : "If set to true the user will be able to administrate the system." ,
"type" : "boolean"
}
}
} ,
"roles" : {
"description" : "Contains the roles of the user per app (assuming they are not a builder user). This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"additionalProperties" : {
"type" : "string" ,
"description" : "A map of app ID (production app ID, minus the _dev component) to a role ID, e.g. ADMIN."
}
2022-02-25 20:26:19 +01:00
}
} ,
"required" : [
2023-09-20 11:51:21 +02:00
"email"
2022-02-25 20:26:19 +01:00
]
2022-02-22 16:06:08 +01:00
} ,
2022-02-22 15:10:01 +01:00
"userOutput" : {
"type" : "object" ,
"properties" : {
2022-03-01 15:37:35 +01:00
"data" : {
2022-02-22 15:10:01 +01:00
"type" : "object" ,
2022-02-25 20:26:19 +01:00
"properties" : {
"email" : {
"description" : "The email address of the user, this must be unique." ,
"type" : "string"
} ,
"password" : {
"description" : "The password of the user if using password based login - this will never be returned. This can be left out of subsequent requests (updates) and will be enriched back into the user structure." ,
"type" : "string"
} ,
"status" : {
"description" : "The status of the user, if they are active." ,
"type" : "string" ,
"enum" : [
"active"
]
} ,
"firstName" : {
"description" : "The first name of the user" ,
"type" : "string"
} ,
"lastName" : {
"description" : "The last name of the user" ,
"type" : "string"
} ,
"forceResetPassword" : {
"description" : "If set to true forces the user to reset their password on first login." ,
"type" : "boolean"
} ,
2023-08-15 18:33:22 +02:00
"builder" : {
"description" : "Describes if the user is a builder user or not. This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"properties" : {
"global" : {
"description" : "If set to true the user will be able to build any app in the system." ,
"type" : "boolean"
}
}
} ,
"admin" : {
"description" : "Describes if the user is an admin user or not. This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"properties" : {
"global" : {
"description" : "If set to true the user will be able to administrate the system." ,
"type" : "boolean"
}
}
} ,
"roles" : {
"description" : "Contains the roles of the user per app (assuming they are not a builder user). This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"additionalProperties" : {
"type" : "string" ,
"description" : "A map of app ID (production app ID, minus the _dev component) to a role ID, e.g. ADMIN."
}
} ,
2022-03-01 19:35:08 +01:00
"_id" : {
"description" : "The ID of the user." ,
"type" : "string"
2022-02-25 20:26:19 +01:00
}
} ,
"required" : [
"email" ,
2022-03-01 19:35:08 +01:00
"_id"
2022-02-25 20:26:19 +01:00
]
2022-02-22 15:10:01 +01:00
}
2022-02-25 00:21:10 +01:00
} ,
"required" : [
2022-03-01 15:37:35 +01:00
"data"
2022-02-25 00:21:10 +01:00
]
2022-02-22 15:10:01 +01:00
} ,
2022-03-08 18:42:26 +01:00
"userSearch" : {
"type" : "object" ,
"properties" : {
"data" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"email" : {
"description" : "The email address of the user, this must be unique." ,
"type" : "string"
} ,
"password" : {
"description" : "The password of the user if using password based login - this will never be returned. This can be left out of subsequent requests (updates) and will be enriched back into the user structure." ,
"type" : "string"
} ,
"status" : {
"description" : "The status of the user, if they are active." ,
"type" : "string" ,
"enum" : [
"active"
]
} ,
"firstName" : {
"description" : "The first name of the user" ,
"type" : "string"
} ,
"lastName" : {
"description" : "The last name of the user" ,
"type" : "string"
} ,
"forceResetPassword" : {
"description" : "If set to true forces the user to reset their password on first login." ,
"type" : "boolean"
} ,
2023-08-15 18:33:22 +02:00
"builder" : {
"description" : "Describes if the user is a builder user or not. This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"properties" : {
"global" : {
"description" : "If set to true the user will be able to build any app in the system." ,
"type" : "boolean"
}
}
} ,
"admin" : {
"description" : "Describes if the user is an admin user or not. This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"properties" : {
"global" : {
"description" : "If set to true the user will be able to administrate the system." ,
"type" : "boolean"
}
}
} ,
"roles" : {
"description" : "Contains the roles of the user per app (assuming they are not a builder user). This field can only be set on a business or enterprise license." ,
"type" : "object" ,
"additionalProperties" : {
"type" : "string" ,
"description" : "A map of app ID (production app ID, minus the _dev component) to a role ID, e.g. ADMIN."
}
} ,
2022-03-08 18:42:26 +01:00
"_id" : {
"description" : "The ID of the user." ,
"type" : "string"
}
} ,
"required" : [
"email" ,
"_id"
]
}
}
} ,
"required" : [
"data"
]
} ,
2022-09-15 20:51:11 +02:00
"rowSearch" : {
"type" : "object" ,
"properties" : {
"query" : {
"type" : "object" ,
"properties" : {
"allOr" : {
"type" : "boolean" ,
"description" : "Specifies that a row should be returned if it satisfies any of the specified options, rather than requiring it to fulfill all the search parameters. This defaults to false, meaning AND logic will be used."
} ,
"string" : {
"type" : "object" ,
"example" : {
"columnName1" : "value" ,
"columnName2" : "value"
} ,
"description" : "A map of field name to the string to search for, this will look for rows that have a value starting with the string value." ,
"additionalProperties" : {
"type" : "string" ,
"description" : "The value to search for in the column."
}
} ,
"fuzzy" : {
"type" : "object" ,
2024-04-10 17:38:52 +02:00
"description" : "Searches for a sub-string within a string column, e.g. searching for 'dib' will match 'Budibase'."
2022-09-15 20:51:11 +02:00
} ,
"range" : {
"type" : "object" ,
"description" : "Searches within a range, the format of this must be in the format of an object with a \"low\" and \"high\" property." ,
"example" : {
"columnName1" : {
"low" : 10 ,
"high" : 20
}
}
} ,
"equal" : {
"type" : "object" ,
"description" : "Searches for rows that have a column value that is exactly the value set."
} ,
"notEqual" : {
"type" : "object" ,
"description" : "Searches for any row which does not contain the specified column value."
} ,
"empty" : {
"type" : "object" ,
"description" : "Searches for rows which do not contain the specified column. The object should simply contain keys of the column names, these can map to any value." ,
"example" : {
"columnName1" : ""
}
} ,
"notEmpty" : {
"type" : "object" ,
"description" : "Searches for rows which have the specified column."
} ,
"oneOf" : {
"type" : "object" ,
"description" : "Searches for rows which have a column value that is any of the specified values. The format of this must be columnName -> [value1, value2]."
2024-04-10 17:38:52 +02:00
} ,
"contains" : {
"type" : "object" ,
2024-04-10 18:02:03 +02:00
"description" : "Searches for a value, or set of values in array column types (such as a multi-select). If an array of search options is provided then it must match all." ,
2024-04-10 17:38:52 +02:00
"example" : {
"arrayColumn" : [
"a" ,
"b"
]
}
} ,
"notContains" : {
"type" : "object" ,
2024-04-10 18:02:03 +02:00
"description" : "The logical inverse of contains. Only works on array column types. If an array of values is passed, the row must not match any of them to be returned in the response." ,
2024-04-10 17:38:52 +02:00
"example" : {
"arrayColumn" : [
"a" ,
"b"
]
}
} ,
"containsAny" : {
"type" : "object" ,
2024-04-10 18:02:03 +02:00
"description" : "As with the contains search, only works on array column types and searches for any of the provided values when given an array." ,
2024-04-10 17:38:52 +02:00
"example" : {
"arrayColumn" : [
"a" ,
"b"
]
}
2022-09-15 20:51:11 +02:00
}
}
} ,
"paginate" : {
"type" : "boolean" ,
"description" : "Enables pagination, by default this is disabled."
} ,
"bookmark" : {
"oneOf" : [
{
"type" : "string"
} ,
{
"type" : "integer"
}
] ,
"description" : "If retrieving another page, the bookmark from the previous request must be supplied."
} ,
"limit" : {
"type" : "integer" ,
"description" : "The maximum number of rows to return, useful when paginating, for internal tables this will be limited to 1000, for SQL tables it will be 5000."
} ,
"sort" : {
"type" : "object" ,
"description" : "A set of parameters describing the sort behaviour of the search." ,
"properties" : {
"order" : {
"type" : "string" ,
"enum" : [
"ascending" ,
"descending"
] ,
"description" : "The order of the sort, by default this is ascending."
} ,
"column" : {
"type" : "string" ,
"description" : "The name of the column by which the rows will be sorted."
} ,
"type" : {
"type" : "string" ,
"enum" : [
"string" ,
"number"
] ,
"description" : "Defines whether the column should be treated as a string or as numbers when sorting."
}
}
}
} ,
"required" : [
"query"
]
} ,
2022-02-22 15:28:57 +01:00
"nameSearch" : {
"type" : "object" ,
"properties" : {
"name" : {
"type" : "string" ,
"description" : "The name to be used when searching - this will be used in a case insensitive starts with match."
}
2022-02-25 00:21:10 +01:00
} ,
"required" : [
"name"
]
2023-08-04 19:01:45 +02:00
} ,
"rolesAssign" : {
"type" : "object" ,
"properties" : {
2023-08-15 18:33:22 +02:00
"appBuilder" : {
2023-08-04 19:01:45 +02:00
"type" : "object" ,
"properties" : {
2023-08-15 18:33:22 +02:00
"appId" : {
"description" : "The app that the users should have app builder privileges granted for." ,
"type" : "string"
2023-08-04 19:01:45 +02:00
}
} ,
2023-08-15 18:33:22 +02:00
"description" : "Allow setting users to builders per app." ,
2023-08-04 19:01:45 +02:00
"required" : [
2023-08-15 18:33:22 +02:00
"appId"
2023-08-04 19:01:45 +02:00
]
} ,
2023-08-15 18:33:22 +02:00
"builder" : {
"type" : "boolean" ,
"description" : "Add/remove global builder permissions from the list of users."
} ,
2023-08-04 19:01:45 +02:00
"admin" : {
2023-08-15 18:33:22 +02:00
"type" : "boolean" ,
"description" : "Add/remove global admin permissions from the list of users."
2023-08-04 19:01:45 +02:00
} ,
"role" : {
"type" : "object" ,
"properties" : {
"roleId" : {
"description" : "The role ID, such as BASIC, ADMIN or a custom role ID." ,
"type" : "string"
} ,
"appId" : {
"description" : "The app that the role relates to." ,
"type" : "string"
}
} ,
"description" : "Add/remove a per-app role, such as BASIC, ADMIN etc." ,
"required" : [
"roleId" ,
"appId"
]
} ,
"userIds" : {
"description" : "The user IDs to be updated to add/remove the specified roles." ,
"type" : "array" ,
"items" : {
"type" : "string"
}
}
} ,
"required" : [
"userIds"
]
} ,
"rolesUnAssign" : {
"type" : "object" ,
"properties" : {
2023-08-15 18:33:22 +02:00
"appBuilder" : {
2023-08-04 19:01:45 +02:00
"type" : "object" ,
"properties" : {
2023-08-15 18:33:22 +02:00
"appId" : {
"description" : "The app that the users should have app builder privileges granted for." ,
"type" : "string"
2023-08-04 19:01:45 +02:00
}
} ,
2023-08-15 18:33:22 +02:00
"description" : "Allow setting users to builders per app." ,
2023-08-04 19:01:45 +02:00
"required" : [
2023-08-15 18:33:22 +02:00
"appId"
2023-08-04 19:01:45 +02:00
]
} ,
2023-08-15 18:33:22 +02:00
"builder" : {
"type" : "boolean" ,
"description" : "Add/remove global builder permissions from the list of users."
} ,
2023-08-04 19:01:45 +02:00
"admin" : {
2023-08-15 18:33:22 +02:00
"type" : "boolean" ,
"description" : "Add/remove global admin permissions from the list of users."
2023-08-04 19:01:45 +02:00
} ,
"role" : {
"type" : "object" ,
"properties" : {
"roleId" : {
"description" : "The role ID, such as BASIC, ADMIN or a custom role ID." ,
"type" : "string"
} ,
"appId" : {
"description" : "The app that the role relates to." ,
"type" : "string"
}
} ,
"description" : "Add/remove a per-app role, such as BASIC, ADMIN etc." ,
"required" : [
"roleId" ,
"appId"
]
} ,
"userIds" : {
"description" : "The user IDs to be updated to add/remove the specified roles." ,
"type" : "array" ,
"items" : {
"type" : "string"
}
}
} ,
"required" : [
"userIds"
]
} ,
"rolesOutput" : {
"type" : "object" ,
"properties" : {
2023-08-15 18:33:22 +02:00
"data" : {
"type" : "object" ,
"properties" : {
"userIds" : {
"description" : "The updated users' IDs" ,
"type" : "array" ,
"items" : {
"type" : "string"
}
}
} ,
"required" : [
"userIds"
]
2023-08-04 19:01:45 +02:00
}
} ,
"required" : [
2023-08-15 18:33:22 +02:00
"data"
2023-08-04 19:01:45 +02:00
]
2022-02-18 18:44:08 +01:00
}
2022-02-17 19:58:09 +01:00
}
} ,
2022-02-18 16:47:15 +01:00
"security" : [
{
"ApiKeyAuth" : [ ]
}
] ,
2022-02-24 19:15:13 +01:00
"paths" : {
"/applications" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "appCreate" ,
2022-03-01 15:37:35 +01:00
"summary" : "Create an application" ,
2022-02-24 19:15:13 +01:00
"tags" : [
"applications"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appId"
}
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/application"
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns the created application." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/applicationOutput"
} ,
"examples" : {
"application" : {
"$ref" : "#/components/examples/application"
}
}
}
}
}
}
}
} ,
"/applications/{appId}" : {
"put" : {
2023-02-28 19:10:56 +01:00
"operationId" : "appUpdate" ,
2022-03-01 15:37:35 +01:00
"summary" : "Update an application" ,
2022-02-24 19:15:13 +01:00
"tags" : [
"applications"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appIdUrl"
}
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/application"
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns the updated application." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/applicationOutput"
} ,
"examples" : {
"application" : {
"$ref" : "#/components/examples/application"
}
}
}
}
}
}
} ,
"delete" : {
2023-02-28 19:10:56 +01:00
"operationId" : "appDestroy" ,
2022-03-01 15:37:35 +01:00
"summary" : "Delete an application" ,
2022-02-24 19:15:13 +01:00
"tags" : [
"applications"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appIdUrl"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the deleted application." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/applicationOutput"
} ,
"examples" : {
"application" : {
"$ref" : "#/components/examples/application"
}
}
}
}
}
}
} ,
"get" : {
2023-02-28 19:10:56 +01:00
"operationId" : "appGetById" ,
2022-03-01 15:37:35 +01:00
"summary" : "Retrieve an application" ,
2022-02-24 19:15:13 +01:00
"tags" : [
"applications"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appIdUrl"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the retrieved application." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/applicationOutput"
} ,
"examples" : {
"application" : {
"$ref" : "#/components/examples/application"
}
}
}
}
}
}
}
} ,
fixes for google sheets, admin checklist, and deleting an app from API (#8846)
* fixes for google sheets, admin checklist, and deleting an app from API
* code review
* splitting unpublish endpoint, moving deploy endpoint to applications controller. Still to do public API work and move deployment controller into application controller
* updating REST method for unpublish in API test
* unpublish and publish endpoint on public API, delete endpoint unpublishes and deletes app
* removing skip_setup from prodAppDb call
* removing commented code
* unit tests and open API spec updates
* unpublish, publish unit tests - delete still in progress
* remove line updating app name in API test
* unit tests
* v2.1.46
* Update pro version to 2.1.46
* v2.2.0
* Update pro version to 2.2.0
* Fix for budibase plugin skeleton, which utilises the old import style.
* Fix side nav styles
* v2.2.1
* Update pro version to 2.2.1
* using dist folder to allow importing constants for openAPI specs
* v2.2.2
* Update pro version to 2.2.2
* Fix for user enrichment call (updating to @budibase/nano fork) (#9038)
* Fix for #9029 - this should fix the issue users have been experiencing with user enrichment calls in apps, essentially it utilises a fork of the nano library we use to interact with CouchDB, which has been updated to use a POST request rather than a GET request as it supports a larger set of data being sent as query parameters.
* Incrementing Nano version to attempt to fix yarn registry issues.
* v2.2.3
* Update pro version to 2.2.3
* Fix SQL table `_id` filtering (#9030)
* Re-add support for filtering on _id using external SQL tables and fix filter key prefixes not working with _id field
* Remove like operator from internal tables and only allow basic operators on SQL table _id column
* Update data section filtering to respect new rules
* Update automation section filtering to respect new rules
* Update dynamic filter component to respect new rules
* v2.2.4
* Update pro version to 2.2.4
* lock changes (#9047)
* v2.2.5
* Update pro version to 2.2.5
* Make looping arrow point in right direction (#9053)
* v2.2.6
* Update pro version to 2.2.6
* Types/attaching license to account (#9065)
* adding license type to account
* removing planDuration
* v2.2.7
* Update pro version to 2.2.7
* Environment variable type coercion fix (#9074)
* Environment variable type coercion fix
* Update .gitignore
* v2.2.8
* Update pro version to 2.2.8
* tests passing
* all tests passing, updates to public API response
* update unpublish call to return 204, openAPI spec and unit
* fixing API tests
Co-authored-by: Budibase Release Bot <>
Co-authored-by: mike12345567 <me@michaeldrury.co.uk>
Co-authored-by: Andrew Kingston <andrew@kingston.dev>
Co-authored-by: melohagan <101575380+melohagan@users.noreply.github.com>
Co-authored-by: Rory Powell <rory.codes@gmail.com>
2022-12-19 14:18:00 +01:00
"/applications/{appId}/unpublish" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "appUnpublish" ,
fixes for google sheets, admin checklist, and deleting an app from API (#8846)
* fixes for google sheets, admin checklist, and deleting an app from API
* code review
* splitting unpublish endpoint, moving deploy endpoint to applications controller. Still to do public API work and move deployment controller into application controller
* updating REST method for unpublish in API test
* unpublish and publish endpoint on public API, delete endpoint unpublishes and deletes app
* removing skip_setup from prodAppDb call
* removing commented code
* unit tests and open API spec updates
* unpublish, publish unit tests - delete still in progress
* remove line updating app name in API test
* unit tests
* v2.1.46
* Update pro version to 2.1.46
* v2.2.0
* Update pro version to 2.2.0
* Fix for budibase plugin skeleton, which utilises the old import style.
* Fix side nav styles
* v2.2.1
* Update pro version to 2.2.1
* using dist folder to allow importing constants for openAPI specs
* v2.2.2
* Update pro version to 2.2.2
* Fix for user enrichment call (updating to @budibase/nano fork) (#9038)
* Fix for #9029 - this should fix the issue users have been experiencing with user enrichment calls in apps, essentially it utilises a fork of the nano library we use to interact with CouchDB, which has been updated to use a POST request rather than a GET request as it supports a larger set of data being sent as query parameters.
* Incrementing Nano version to attempt to fix yarn registry issues.
* v2.2.3
* Update pro version to 2.2.3
* Fix SQL table `_id` filtering (#9030)
* Re-add support for filtering on _id using external SQL tables and fix filter key prefixes not working with _id field
* Remove like operator from internal tables and only allow basic operators on SQL table _id column
* Update data section filtering to respect new rules
* Update automation section filtering to respect new rules
* Update dynamic filter component to respect new rules
* v2.2.4
* Update pro version to 2.2.4
* lock changes (#9047)
* v2.2.5
* Update pro version to 2.2.5
* Make looping arrow point in right direction (#9053)
* v2.2.6
* Update pro version to 2.2.6
* Types/attaching license to account (#9065)
* adding license type to account
* removing planDuration
* v2.2.7
* Update pro version to 2.2.7
* Environment variable type coercion fix (#9074)
* Environment variable type coercion fix
* Update .gitignore
* v2.2.8
* Update pro version to 2.2.8
* tests passing
* all tests passing, updates to public API response
* update unpublish call to return 204, openAPI spec and unit
* fixing API tests
Co-authored-by: Budibase Release Bot <>
Co-authored-by: mike12345567 <me@michaeldrury.co.uk>
Co-authored-by: Andrew Kingston <andrew@kingston.dev>
Co-authored-by: melohagan <101575380+melohagan@users.noreply.github.com>
Co-authored-by: Rory Powell <rory.codes@gmail.com>
2022-12-19 14:18:00 +01:00
"summary" : "Unpublish an application" ,
"tags" : [
"applications"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appIdUrl"
}
] ,
"responses" : {
"204" : {
"description" : "The app was published successfully."
}
}
}
} ,
"/applications/{appId}/publish" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "appPublish" ,
2023-11-30 11:56:04 +01:00
"summary" : "Publish an application" ,
fixes for google sheets, admin checklist, and deleting an app from API (#8846)
* fixes for google sheets, admin checklist, and deleting an app from API
* code review
* splitting unpublish endpoint, moving deploy endpoint to applications controller. Still to do public API work and move deployment controller into application controller
* updating REST method for unpublish in API test
* unpublish and publish endpoint on public API, delete endpoint unpublishes and deletes app
* removing skip_setup from prodAppDb call
* removing commented code
* unit tests and open API spec updates
* unpublish, publish unit tests - delete still in progress
* remove line updating app name in API test
* unit tests
* v2.1.46
* Update pro version to 2.1.46
* v2.2.0
* Update pro version to 2.2.0
* Fix for budibase plugin skeleton, which utilises the old import style.
* Fix side nav styles
* v2.2.1
* Update pro version to 2.2.1
* using dist folder to allow importing constants for openAPI specs
* v2.2.2
* Update pro version to 2.2.2
* Fix for user enrichment call (updating to @budibase/nano fork) (#9038)
* Fix for #9029 - this should fix the issue users have been experiencing with user enrichment calls in apps, essentially it utilises a fork of the nano library we use to interact with CouchDB, which has been updated to use a POST request rather than a GET request as it supports a larger set of data being sent as query parameters.
* Incrementing Nano version to attempt to fix yarn registry issues.
* v2.2.3
* Update pro version to 2.2.3
* Fix SQL table `_id` filtering (#9030)
* Re-add support for filtering on _id using external SQL tables and fix filter key prefixes not working with _id field
* Remove like operator from internal tables and only allow basic operators on SQL table _id column
* Update data section filtering to respect new rules
* Update automation section filtering to respect new rules
* Update dynamic filter component to respect new rules
* v2.2.4
* Update pro version to 2.2.4
* lock changes (#9047)
* v2.2.5
* Update pro version to 2.2.5
* Make looping arrow point in right direction (#9053)
* v2.2.6
* Update pro version to 2.2.6
* Types/attaching license to account (#9065)
* adding license type to account
* removing planDuration
* v2.2.7
* Update pro version to 2.2.7
* Environment variable type coercion fix (#9074)
* Environment variable type coercion fix
* Update .gitignore
* v2.2.8
* Update pro version to 2.2.8
* tests passing
* all tests passing, updates to public API response
* update unpublish call to return 204, openAPI spec and unit
* fixing API tests
Co-authored-by: Budibase Release Bot <>
Co-authored-by: mike12345567 <me@michaeldrury.co.uk>
Co-authored-by: Andrew Kingston <andrew@kingston.dev>
Co-authored-by: melohagan <101575380+melohagan@users.noreply.github.com>
Co-authored-by: Rory Powell <rory.codes@gmail.com>
2022-12-19 14:18:00 +01:00
"tags" : [
"applications"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appIdUrl"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the deployment object." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/deploymentOutput"
} ,
"examples" : {
"deployment" : {
"$ref" : "#/components/examples/deploymentOutput"
}
}
}
}
}
}
}
} ,
2023-09-21 19:04:15 +02:00
"/applications/{appId}/import" : {
"post" : {
"operationId" : "appImport" ,
2023-09-22 14:29:16 +02:00
"summary" : "Import an app to an existing app 🔒" ,
"description" : "This endpoint is only available on a business or enterprise license." ,
2023-09-21 19:04:15 +02:00
"tags" : [
"applications"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appIdUrl"
}
] ,
"requestBody" : {
"content" : {
"multipart/form-data" : {
"schema" : {
"type" : "object" ,
"properties" : {
"encryptedPassword" : {
"description" : "Password for the export if it is encrypted." ,
"type" : "string"
} ,
"appExport" : {
"description" : "The app export to import." ,
"type" : "string" ,
"format" : "binary"
}
} ,
"required" : [
"appExport"
]
}
}
}
} ,
"responses" : {
"204" : {
"description" : "Application has been updated."
}
}
}
} ,
2023-09-22 14:29:16 +02:00
"/applications/{appId}/export" : {
"post" : {
"operationId" : "appExport" ,
"summary" : "Export an app 🔒" ,
"description" : "This endpoint is only available on a business or enterprise license." ,
"tags" : [
"applications"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appIdUrl"
}
] ,
"requestBody" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/appExport"
}
}
}
} ,
"responses" : {
"200" : {
"description" : "A gzip tarball containing the app export, encrypted if password provided." ,
"content" : {
"application/gzip" : {
"schema" : {
"type" : "string" ,
"format" : "binary" ,
"example" : "Tarball containing database and object store contents..."
}
}
}
}
}
}
} ,
2022-02-25 00:21:10 +01:00
"/applications/search" : {
2022-02-24 19:15:13 +01:00
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "appSearch" ,
2022-03-01 15:37:35 +01:00
"summary" : "Search for applications" ,
"description" : "Based on application properties (currently only name) search for applications." ,
2022-02-24 19:15:13 +01:00
"tags" : [
2022-02-25 00:21:10 +01:00
"applications"
2022-02-24 19:15:13 +01:00
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/nameSearch"
}
}
}
} ,
"responses" : {
"200" : {
2022-02-25 00:21:10 +01:00
"description" : "Returns the applications that were found based on the search parameters." ,
2022-02-24 19:15:13 +01:00
"content" : {
"application/json" : {
"schema" : {
2022-03-08 18:42:26 +01:00
"$ref" : "#/components/schemas/applicationSearch"
2022-02-24 19:15:13 +01:00
} ,
"examples" : {
2022-02-25 00:21:10 +01:00
"applications" : {
"$ref" : "#/components/examples/applications"
2022-02-24 19:15:13 +01:00
}
}
}
}
}
}
}
} ,
2023-03-06 12:51:49 +01:00
"/metrics" : {
"get" : {
2023-03-06 18:41:24 +01:00
"operationId" : "metricsGet" ,
2023-03-06 12:51:49 +01:00
"summary" : "Retrieve Budibase tenant metrics" ,
"description" : "Output metrics in OpenMetrics format compatible with Prometheus" ,
"tags" : [
"metrics"
] ,
"responses" : {
"200" : {
"description" : "Returns tenant metrics." ,
"content" : {
2023-03-06 16:55:55 +01:00
"text/plain" : {
"schema" : {
"type" : "string"
} ,
"examples" : {
"metrics" : {
"$ref" : "#/components/examples/metrics"
}
}
}
2023-03-06 12:51:49 +01:00
}
}
}
}
} ,
2022-02-24 19:15:13 +01:00
"/queries/{queryId}" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "queryExecute" ,
2022-03-01 15:37:35 +01:00
"summary" : "Execute a query" ,
2022-03-01 19:35:08 +01:00
"description" : "Queries which have been created within a Budibase app can be executed using this," ,
"tags" : [
"queries"
] ,
2022-02-24 19:15:13 +01:00
"parameters" : [
{
"$ref" : "#/components/parameters/queryId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
2022-03-01 19:35:08 +01:00
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/executeQuery"
}
}
}
} ,
2022-02-24 19:15:13 +01:00
"responses" : {
"200" : {
"description" : "Returns the result of the query execution." ,
"content" : {
"application/json" : {
"schema" : {
2022-03-01 19:35:08 +01:00
"$ref" : "#/components/schemas/executeQueryOutput"
2022-02-24 19:15:13 +01:00
} ,
"examples" : {
"REST" : {
2022-02-25 00:21:10 +01:00
"$ref" : "#/components/examples/restResponse"
} ,
"SQL" : {
"$ref" : "#/components/examples/sqlResponse"
2022-02-24 19:15:13 +01:00
}
}
}
}
}
2022-02-25 00:21:10 +01:00
}
}
} ,
"/queries/search" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "querySearch" ,
2022-03-01 15:37:35 +01:00
"summary" : "Search for queries" ,
"description" : "Based on query properties (currently only name) search for queries." ,
2022-02-25 00:21:10 +01:00
"tags" : [
"queries"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appId"
}
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/nameSearch"
}
}
}
2022-02-24 19:15:13 +01:00
} ,
"responses" : {
"200" : {
2022-02-25 00:21:10 +01:00
"description" : "Returns the queries found based on the search parameters." ,
2022-02-24 19:15:13 +01:00
"content" : {
"application/json" : {
"schema" : {
2022-03-08 18:42:26 +01:00
"$ref" : "#/components/schemas/querySearch"
2022-02-24 19:15:13 +01:00
} ,
"examples" : {
2022-02-25 00:21:10 +01:00
"queries" : {
"$ref" : "#/components/examples/queries"
2022-02-24 19:15:13 +01:00
}
}
}
}
}
}
}
} ,
2023-08-04 19:01:45 +02:00
"/roles/assign" : {
"post" : {
"operationId" : "roleAssign" ,
"summary" : "Assign a role to a list of users" ,
2023-08-15 18:33:22 +02:00
"description" : "This is a business/enterprise only endpoint" ,
2023-08-04 19:01:45 +02:00
"tags" : [
"roles"
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/rolesAssign"
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns a list of updated user IDs" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/rolesOutput"
}
}
}
}
}
}
} ,
"/roles/unassign" : {
"post" : {
"operationId" : "roleUnAssign" ,
"summary" : "Un-assign a role from a list of users" ,
2023-08-15 18:33:22 +02:00
"description" : "This is a business/enterprise only endpoint" ,
2023-08-04 19:01:45 +02:00
"tags" : [
"roles"
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/rolesUnAssign"
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns a list of updated user IDs" ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/rolesOutput"
}
}
}
}
}
}
} ,
2022-02-24 19:15:13 +01:00
"/tables/{tableId}/rows" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "rowCreate" ,
2022-03-01 15:37:35 +01:00
"summary" : "Create a row" ,
"description" : "Creates a row within the specified table." ,
2022-02-24 19:15:13 +01:00
"tags" : [
"rows"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/tableId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/row"
} ,
"examples" : {
"row" : {
"$ref" : "#/components/examples/inputRow"
}
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns the created row, including the ID which has been generated for it. This can be found in the Budibase portal, viewed under the developer information." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/rowOutput"
} ,
"examples" : {
"row" : {
"$ref" : "#/components/examples/row"
}
}
}
}
}
}
}
} ,
"/tables/{tableId}/rows/{rowId}" : {
"put" : {
2023-02-28 19:10:56 +01:00
"operationId" : "rowUpdate" ,
2022-03-01 15:37:35 +01:00
"summary" : "Update a row" ,
"description" : "Updates a row within the specified table." ,
2022-02-24 19:15:13 +01:00
"tags" : [
"rows"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/tableId"
} ,
{
"$ref" : "#/components/parameters/rowId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/row"
} ,
"examples" : {
"row" : {
"$ref" : "#/components/examples/inputRow"
}
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns the created row, including the ID which has been generated for it." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/rowOutput"
} ,
"examples" : {
"row" : {
"$ref" : "#/components/examples/row"
}
}
}
}
}
}
} ,
"delete" : {
2023-02-28 19:10:56 +01:00
"operationId" : "rowDestroy" ,
2022-03-01 15:37:35 +01:00
"summary" : "Delete a row" ,
"description" : "Deletes a row within the specified table." ,
2022-02-24 19:15:13 +01:00
"tags" : [
"rows"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/tableId"
} ,
{
"$ref" : "#/components/parameters/rowId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the deleted row, including the ID which has been generated for it." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/rowOutput"
} ,
"examples" : {
"row" : {
"$ref" : "#/components/examples/row"
}
}
}
}
}
}
} ,
"get" : {
2023-02-28 19:10:56 +01:00
"operationId" : "rowGetById" ,
2022-03-01 15:37:35 +01:00
"summary" : "Retrieve a row" ,
2022-02-28 13:54:32 +01:00
"description" : "This gets a single row, it will be enriched with the full related rows, rather than the squashed \"primaryDisplay\" format returned by the search endpoint." ,
2022-02-24 19:15:13 +01:00
"tags" : [
"rows"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/tableId"
} ,
{
"$ref" : "#/components/parameters/rowId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the retrieved row." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/rowOutput"
} ,
"examples" : {
2022-02-28 13:54:32 +01:00
"enrichedRow" : {
"$ref" : "#/components/examples/enrichedRow"
2022-02-24 19:15:13 +01:00
}
}
}
}
}
}
}
} ,
2022-07-05 20:54:11 +02:00
"/tables/{tableId}/rows/search" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "rowSearch" ,
2022-07-05 20:54:11 +02:00
"summary" : "Search for rows" ,
"tags" : [
"rows"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/tableId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
2022-09-15 20:51:11 +02:00
"$ref" : "#/components/schemas/rowSearch"
2022-07-05 20:54:11 +02:00
}
}
}
} ,
"responses" : {
"200" : {
"description" : "The response will contain an array of rows that match the search parameters." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/searchOutput"
} ,
"examples" : {
"search" : {
"$ref" : "#/components/examples/rows"
}
}
}
}
}
}
}
} ,
2022-02-24 19:15:13 +01:00
"/tables" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "tableCreate" ,
2022-03-01 15:37:35 +01:00
"summary" : "Create a table" ,
"description" : "Create a table, this could be internal or external." ,
2022-02-24 19:15:13 +01:00
"tags" : [
"tables"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appId"
}
] ,
"requestBody" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/table"
} ,
"examples" : {
"table" : {
"$ref" : "#/components/examples/table"
}
}
}
}
} ,
"responses" : {
"200" : {
2022-09-14 13:11:20 +02:00
"description" : "Returns the created table, including the ID which has been generated for it. This can be internal or external datasources." ,
2022-02-24 19:15:13 +01:00
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/tableOutput"
} ,
"examples" : {
"table" : {
"$ref" : "#/components/examples/table"
}
}
}
}
}
}
}
} ,
"/tables/{tableId}" : {
"put" : {
2023-02-28 19:10:56 +01:00
"operationId" : "tableUpdate" ,
2022-03-01 15:37:35 +01:00
"summary" : "Update a table" ,
"description" : "Update a table, this could be internal or external." ,
2022-02-24 19:15:13 +01:00
"tags" : [
"tables"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/tableId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
"requestBody" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/table"
} ,
"examples" : {
"table" : {
"$ref" : "#/components/examples/table"
}
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns the updated table." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/tableOutput"
} ,
"examples" : {
"table" : {
"$ref" : "#/components/examples/table"
}
}
}
}
}
}
} ,
"delete" : {
2023-02-28 19:10:56 +01:00
"operationId" : "tableDestroy" ,
2022-03-01 15:37:35 +01:00
"summary" : "Delete a table" ,
"description" : "Delete a table, this could be internal or external." ,
2022-02-24 19:15:13 +01:00
"tags" : [
"tables"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/tableId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the deleted table." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/tableOutput"
} ,
"examples" : {
"table" : {
"$ref" : "#/components/examples/table"
}
}
}
}
}
}
} ,
"get" : {
2023-02-28 19:10:56 +01:00
"operationId" : "tableGetById" ,
2022-03-01 15:37:35 +01:00
"summary" : "Retrieve a table" ,
"description" : "Lookup a table, this could be internal or external." ,
2022-02-24 19:15:13 +01:00
"tags" : [
"tables"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/tableId"
} ,
{
"$ref" : "#/components/parameters/appId"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the retrieved table." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/tableOutput"
} ,
"examples" : {
"table" : {
"$ref" : "#/components/examples/table"
}
}
}
}
}
}
}
} ,
2022-02-25 00:21:10 +01:00
"/tables/search" : {
2022-02-24 19:15:13 +01:00
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "tableSearch" ,
2022-03-01 15:37:35 +01:00
"summary" : "Search for tables" ,
"description" : "Based on table properties (currently only name) search for tables. This could be an internal or an external table." ,
2022-02-24 19:15:13 +01:00
"tags" : [
2022-02-25 00:21:10 +01:00
"tables"
2022-02-24 19:15:13 +01:00
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/appId"
}
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/nameSearch"
}
}
}
} ,
"responses" : {
"200" : {
2022-02-25 00:21:10 +01:00
"description" : "Returns the found tables, based on the search parameters." ,
2022-02-24 19:15:13 +01:00
"content" : {
"application/json" : {
"schema" : {
2022-03-08 18:42:26 +01:00
"$ref" : "#/components/schemas/tableSearch"
2022-02-24 19:15:13 +01:00
} ,
"examples" : {
2022-02-25 00:21:10 +01:00
"tables" : {
"$ref" : "#/components/examples/tables"
2022-02-24 19:15:13 +01:00
}
}
}
}
}
}
}
} ,
"/users" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "userCreate" ,
2022-03-01 15:37:35 +01:00
"summary" : "Create a user" ,
2022-02-24 19:15:13 +01:00
"tags" : [
"users"
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/user"
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns the created user." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/userOutput"
} ,
"examples" : {
"user" : {
"$ref" : "#/components/examples/user"
}
}
}
}
}
}
}
} ,
"/users/{userId}" : {
"put" : {
2023-02-28 19:10:56 +01:00
"operationId" : "userUpdate" ,
2022-03-01 15:37:35 +01:00
"summary" : "Update a user" ,
2022-02-24 19:15:13 +01:00
"tags" : [
"users"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/userId"
}
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/user"
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns the updated user." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/userOutput"
} ,
"examples" : {
"user" : {
"$ref" : "#/components/examples/user"
}
}
}
}
}
}
} ,
"delete" : {
2023-02-28 19:10:56 +01:00
"operationId" : "userDestroy" ,
2022-03-01 15:37:35 +01:00
"summary" : "Delete a user" ,
2022-02-24 19:15:13 +01:00
"tags" : [
"users"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/userId"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the deleted user." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/userOutput"
} ,
"examples" : {
"user" : {
"$ref" : "#/components/examples/user"
}
}
}
}
}
}
} ,
"get" : {
2023-02-28 19:10:56 +01:00
"operationId" : "userGetById" ,
2022-03-01 15:37:35 +01:00
"summary" : "Retrieve a user" ,
2022-02-24 19:15:13 +01:00
"tags" : [
"users"
] ,
"parameters" : [
{
"$ref" : "#/components/parameters/userId"
}
] ,
"responses" : {
"200" : {
"description" : "Returns the retrieved user." ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/userOutput"
} ,
"examples" : {
"user" : {
"$ref" : "#/components/examples/user"
}
}
}
}
}
}
}
2022-02-25 00:21:10 +01:00
} ,
"/users/search" : {
"post" : {
2023-02-28 19:10:56 +01:00
"operationId" : "userSearch" ,
2022-03-01 15:37:35 +01:00
"summary" : "Search for users" ,
"description" : "Based on user properties (currently only name) search for users." ,
2022-02-25 00:21:10 +01:00
"tags" : [
"users"
] ,
"requestBody" : {
"required" : true ,
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/nameSearch"
}
}
}
} ,
"responses" : {
"200" : {
"description" : "Returns the found users based on search parameters." ,
"content" : {
"application/json" : {
"schema" : {
2022-03-08 18:42:26 +01:00
"$ref" : "#/components/schemas/userSearch"
2022-02-25 00:21:10 +01:00
} ,
"examples" : {
"users" : {
"$ref" : "#/components/examples/users"
}
}
}
}
}
}
}
2022-02-24 19:15:13 +01:00
}
} ,
2022-02-16 17:42:50 +01:00
"tags" : [ ]
}