762 lines
22 KiB
JSON
762 lines
22 KiB
JSON
{
|
|
"openapi": "3.0.0",
|
|
"info": {
|
|
"title": "Budibase API",
|
|
"description": "The public API for Budibase apps and its services.",
|
|
"version": "1.0.0"
|
|
},
|
|
"servers": [
|
|
{
|
|
"url": "http://budibase.app/api/public/v1",
|
|
"description": "Budibase Cloud API"
|
|
},
|
|
{
|
|
"url": "{protocol}://{hostname}:10000/api/public/v1",
|
|
"description": "Budibase self hosted API"
|
|
}
|
|
],
|
|
"components": {
|
|
"parameters": {
|
|
"tableId": {
|
|
"in": "path",
|
|
"name": "tableId",
|
|
"required": true,
|
|
"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.",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"appId": {
|
|
"in": "header",
|
|
"name": "x-budibase-app-id",
|
|
"required": true,
|
|
"description": "The ID of the app which this request is targeting.",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"examples": {
|
|
"table": {
|
|
"value": {
|
|
"_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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tables": {
|
|
"value": [
|
|
{
|
|
"_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"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"inputRow": {
|
|
"value": {
|
|
"_id": "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4",
|
|
"type": "row",
|
|
"tableId": "ta_5b1649e42a5b41dea4ef7742a36a7a70",
|
|
"name": "Mike",
|
|
"age": 30,
|
|
"relationship": [
|
|
"ro_ta_..."
|
|
]
|
|
}
|
|
},
|
|
"row": {
|
|
"value": {
|
|
"_id": "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4",
|
|
"type": "row",
|
|
"tableId": "ta_5b1649e42a5b41dea4ef7742a36a7a70",
|
|
"name": "Mike",
|
|
"age": 30,
|
|
"relationship": [
|
|
{
|
|
"primaryDisplay": "Joe",
|
|
"_id": "ro_ta_..."
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"search": {
|
|
"value": {
|
|
"rows": [
|
|
{
|
|
"_id": "ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4",
|
|
"type": "row",
|
|
"tableId": "ta_5b1649e42a5b41dea4ef7742a36a7a70",
|
|
"name": "Mike",
|
|
"age": 30,
|
|
"relationship": [
|
|
{
|
|
"primaryDisplay": "Joe",
|
|
"_id": "ro_ta_..."
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"hasNextPage": true,
|
|
"bookmark": 10
|
|
}
|
|
}
|
|
},
|
|
"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."
|
|
}
|
|
},
|
|
"schemas": {
|
|
"row": {
|
|
"description": "The row to be created/updated, based on the table schema.",
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "object"
|
|
},
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "boolean"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"table": {
|
|
"description": "The table to be created/updated.",
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"description": "The name of the table",
|
|
"type": "string"
|
|
},
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"string",
|
|
"longform",
|
|
"options",
|
|
"number",
|
|
"boolean",
|
|
"array",
|
|
"datetime",
|
|
"attachment",
|
|
"link",
|
|
"formula",
|
|
"auto",
|
|
"json",
|
|
"internal"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"paths": {
|
|
"/tables/{tableId}/rows/search": {
|
|
"post": {
|
|
"summary": "Used to search for rows within a table.",
|
|
"tags": [
|
|
"rows"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/tableId"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/appId"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"query": {
|
|
"type": "object",
|
|
"properties": {
|
|
"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",
|
|
"description": "A fuzzy search, only supported by internal tables."
|
|
},
|
|
"range": {
|
|
"type": "object",
|
|
"description": "Searches within a range, the format of this must be columnName -> [low, high].",
|
|
"example": {
|
|
"columnName1": [
|
|
10,
|
|
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]."
|
|
}
|
|
}
|
|
},
|
|
"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."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "The response will contain an array of rows that match the search parameters.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"rows": {
|
|
"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": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "integer"
|
|
}
|
|
],
|
|
"description": "If pagination in use, this should be provided."
|
|
},
|
|
"hasNextPage": {
|
|
"description": "If pagination in use, this will determine if there is another page to fetch.",
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"examples": {
|
|
"search": {
|
|
"$ref": "#/components/examples/search"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tables/{tableId}/rows": {
|
|
"post": {
|
|
"summary": "Creates a new row within a specified table.",
|
|
"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": {
|
|
"type": "object"
|
|
},
|
|
"examples": {
|
|
"row": {
|
|
"$ref": "#/components/examples/row"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tables/{tableId}/rows/{rowId}": {
|
|
"put": {
|
|
"summary": "Update a single row within a specified table.",
|
|
"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": {
|
|
"type": "object"
|
|
},
|
|
"examples": {
|
|
"row": {
|
|
"$ref": "#/components/examples/row"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"summary": "Delete a single row from the specified table.",
|
|
"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": {
|
|
"type": "object"
|
|
},
|
|
"examples": {
|
|
"row": {
|
|
"$ref": "#/components/examples/row"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"get": {
|
|
"summary": "Get a single row from the specified table.",
|
|
"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": {
|
|
"type": "object"
|
|
},
|
|
"examples": {
|
|
"row": {
|
|
"$ref": "#/components/examples/row"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tables/search": {
|
|
"post": {
|
|
"summary": "Search internal and external tables based on their name.",
|
|
"tags": [
|
|
"tables"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/appId"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The name of the table, this should be an exact match (ignoring case)."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the found tables, based on the search parameters.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"examples": {
|
|
"tables": {
|
|
"$ref": "#/components/examples/tables"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tables": {
|
|
"post": {
|
|
"summary": "Create a new table.",
|
|
"tags": [
|
|
"tables"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/appId"
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/table"
|
|
},
|
|
"examples": {
|
|
"table": {
|
|
"$ref": "#/components/examples/table"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the created table, including the ID which has been generated for it. This can be internal or external data sources.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object"
|
|
},
|
|
"examples": {
|
|
"table": {
|
|
"$ref": "#/components/examples/table"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"get": {
|
|
"summary": "Get all the tables, internal and external within an app.",
|
|
"tags": [
|
|
"tables"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/tableId"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/appId"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns all of the tables which were found.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object"
|
|
},
|
|
"examples": {
|
|
"table": {
|
|
"$ref": "#/components/examples/row"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tables/:tableId": {
|
|
"put": {
|
|
"summary": "Update the specified table. This can be for internal or external tables.",
|
|
"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": {
|
|
"type": "object"
|
|
},
|
|
"examples": {
|
|
"table": {
|
|
"$ref": "#/components/examples/row"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tables/{tableId}": {
|
|
"delete": {
|
|
"summary": "Delete a single table and all of its data.",
|
|
"tags": [
|
|
"tables"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"$ref": "#/components/parameters/tableId"
|
|
},
|
|
{
|
|
"$ref": "#/components/parameters/appId"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the deleted table.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object"
|
|
},
|
|
"examples": {
|
|
"table": {
|
|
"$ref": "#/components/examples/table"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": []
|
|
} |