Xano Metadata Records & Content API
Browse, retrieve, create, update, search, and delete database records (table content) individually or in batches through the Metadata API content endpoints.
Browse, retrieve, create, update, search, and delete database records (table content) individually or in batches through the Metadata API content endpoints.
openapi: 3.0.1
info:
title: Xano Metadata API
description: >-
The Xano Metadata API lets you programmatically manage the contents of a Xano
workspace - database tables, column schema, indexes, table records (content),
files, branches, API groups and their endpoints. It is served from each Xano
instance at the templated host below, appended with the `/api:meta` path, and
is authenticated with scoped Bearer access tokens generated from instance
settings. Separately, each user-built API group in a workspace auto-generates
its own OpenAPI/Swagger document served at that group's `/api:{token}` path;
those generated, per-workspace specifications are not enumerated here.
termsOfService: https://www.xano.com/legal/
contact:
name: Xano Support
url: https://docs.xano.com/xano-features/metadata-api
version: '1.0'
servers:
- url: https://{instance}.xano.io/api:meta
description: >-
Per-instance Metadata API base URL. Replace {instance} with your Xano
instance subdomain (for example, x1a2-b3c4-d5e6). The host varies per
account and region; copy the exact instance domain from your Xano
instance settings.
variables:
instance:
default: your-instance
description: Your Xano instance subdomain.
security:
- bearerAuth: []
tags:
- name: Auth
description: Authenticated user and accessible workspaces.
- name: Workspace
description: Workspace details, branches, import/export.
- name: Tables
description: Database tables, schema, and indexes.
- name: Content
description: Table records (database content) CRUD and search.
- name: Files
description: Workspace file library.
- name: API Groups
description: API groups, their endpoints, and generated OpenAPI.
paths:
/auth/me:
get:
operationId: getAuthenticatedUser
tags:
- Auth
summary: Retrieve the authenticated user.
responses:
'200':
description: The user associated with the supplied access token.
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'401':
$ref: '#/components/responses/Unauthorized'
/workspace:
get:
operationId: listWorkspaces
tags:
- Workspace
summary: List workspaces accessible to the token.
responses:
'200':
description: An array of workspaces.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Workspace'
'401':
$ref: '#/components/responses/Unauthorized'
/workspace/{workspace_id}:
get:
operationId: getWorkspace
tags:
- Workspace
summary: Retrieve workspace details.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
responses:
'200':
description: Workspace details.
content:
application/json:
schema:
$ref: '#/components/schemas/Workspace'
'404':
$ref: '#/components/responses/NotFound'
/workspace/{workspace_id}/branch:
get:
operationId: listBranches
tags:
- Workspace
summary: List branches in the workspace.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
responses:
'200':
description: An array of branches.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Branch'
/workspace/{workspace_id}/branch/{branch_id}:
delete:
operationId: deleteBranch
tags:
- Workspace
summary: Delete a branch.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/BranchId'
responses:
'200':
$ref: '#/components/responses/Success'
'404':
$ref: '#/components/responses/NotFound'
/workspace/{workspace_id}/export-schema:
post:
operationId: exportWorkspaceSchema
tags:
- Workspace
summary: Export the workspace schema.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/export:
post:
operationId: exportWorkspace
tags:
- Workspace
summary: Export the workspace schema and data as an archive.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/files:
get:
operationId: listFiles
tags:
- Files
summary: List files in the workspace file library.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- name: page
in: query
schema:
type: integer
- name: per_page
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of files.
content:
application/json:
schema:
$ref: '#/components/schemas/FileList'
/workspace/{workspace_id}/files/upload:
post:
operationId: uploadFile
tags:
- Files
summary: Upload a file to the workspace file library.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
content:
type: string
format: binary
responses:
'200':
description: The uploaded file resource.
content:
application/json:
schema:
$ref: '#/components/schemas/File'
/workspace/{workspace_id}/files/{file_id}:
delete:
operationId: deleteFile
tags:
- Files
summary: Delete a file.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- name: file_id
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/files/delete-batch:
post:
operationId: deleteFilesBatch
tags:
- Files
summary: Delete multiple files.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
file_ids:
type: array
items:
type: integer
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/table:
get:
operationId: listTables
tags:
- Tables
summary: List database tables in the workspace.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
responses:
'200':
description: An array of tables.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Table'
post:
operationId: createTable
tags:
- Tables
summary: Create a database table.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TableCreate'
responses:
'200':
description: The created table.
content:
application/json:
schema:
$ref: '#/components/schemas/Table'
'400':
$ref: '#/components/responses/BadRequest'
/workspace/{workspace_id}/table/{table_id}:
get:
operationId: getTable
tags:
- Tables
summary: Retrieve table details.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
responses:
'200':
description: Table details.
content:
application/json:
schema:
$ref: '#/components/schemas/Table'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateTable
tags:
- Tables
summary: Update table properties.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TableCreate'
responses:
'200':
description: The updated table.
content:
application/json:
schema:
$ref: '#/components/schemas/Table'
delete:
operationId: deleteTable
tags:
- Tables
summary: Delete a table.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/table/{table_id}/schema:
get:
operationId: getTableSchema
tags:
- Tables
summary: Retrieve the full schema of a table.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
responses:
'200':
description: The table schema (array of columns).
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Column'
put:
operationId: replaceTableSchema
tags:
- Tables
summary: Replace the entire schema of a table.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
schema:
type: array
items:
$ref: '#/components/schemas/Column'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/table/{table_id}/schema/{column_id}:
get:
operationId: getColumn
tags:
- Tables
summary: Retrieve a single column.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
- $ref: '#/components/parameters/ColumnId'
responses:
'200':
description: The column.
content:
application/json:
schema:
$ref: '#/components/schemas/Column'
patch:
operationId: renameColumn
tags:
- Tables
summary: Rename or update a column.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
- $ref: '#/components/parameters/ColumnId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Column'
responses:
'200':
$ref: '#/components/responses/Success'
delete:
operationId: deleteColumn
tags:
- Tables
summary: Delete a column.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
- $ref: '#/components/parameters/ColumnId'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/table/{table_id}/index:
get:
operationId: listIndexes
tags:
- Tables
summary: List the indexes of a table.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
responses:
'200':
description: An array of indexes.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Index'
put:
operationId: replaceIndexes
tags:
- Tables
summary: Replace the indexes of a table.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Index'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/table/{table_id}/content:
get:
operationId: listRecords
tags:
- Content
summary: Browse table records (paginated).
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
- name: page
in: query
schema:
type: integer
- name: per_page
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of records.
content:
application/json:
schema:
$ref: '#/components/schemas/RecordList'
post:
operationId: createRecord
tags:
- Content
summary: Create a table record.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Record'
responses:
'200':
description: The created record.
content:
application/json:
schema:
$ref: '#/components/schemas/Record'
/workspace/{workspace_id}/table/{table_id}/content/bulk:
post:
operationId: createRecordsBulk
tags:
- Content
summary: Create multiple records in one call.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Record'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/table/{table_id}/content/{record_id}:
get:
operationId: getRecord
tags:
- Content
summary: Retrieve a single record.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
- $ref: '#/components/parameters/RecordId'
responses:
'200':
description: The record.
content:
application/json:
schema:
$ref: '#/components/schemas/Record'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateRecord
tags:
- Content
summary: Update a single record.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
- $ref: '#/components/parameters/RecordId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Record'
responses:
'200':
description: The updated record.
content:
application/json:
schema:
$ref: '#/components/schemas/Record'
delete:
operationId: deleteRecord
tags:
- Content
summary: Delete a single record.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
- $ref: '#/components/parameters/RecordId'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/table/{table_id}/content/search:
post:
operationId: searchRecords
tags:
- Content
summary: Search records with filtering, sorting, and pagination.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/TableId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SearchRequest'
responses:
'200':
description: Matching records.
content:
application/json:
schema:
$ref: '#/components/schemas/RecordList'
/workspace/{workspace_id}/apigroup:
get:
operationId: listApiGroups
tags:
- API Groups
summary: List API groups in the workspace.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
responses:
'200':
description: An array of API groups.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ApiGroup'
post:
operationId: createApiGroup
tags:
- API Groups
summary: Create an API group.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApiGroup'
responses:
'200':
description: The created API group.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiGroup'
/workspace/{workspace_id}/apigroup/{apigroup_id}:
get:
operationId: getApiGroup
tags:
- API Groups
summary: Retrieve an API group.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/ApiGroupId'
responses:
'200':
description: The API group.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiGroup'
delete:
operationId: deleteApiGroup
tags:
- API Groups
summary: Delete an API group.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/ApiGroupId'
responses:
'200':
$ref: '#/components/responses/Success'
/workspace/{workspace_id}/apigroup/{apigroup_id}/openapi:
get:
operationId: getApiGroupOpenApi
tags:
- API Groups
summary: Retrieve the auto-generated OpenAPI document for an API group.
description: >-
Returns the OpenAPI/Swagger specification that Xano generates for the
user-built endpoints in this API group.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/ApiGroupId'
responses:
'200':
description: The generated OpenAPI document.
content:
application/json:
schema:
type: object
additionalProperties: true
/workspace/{workspace_id}/apigroup/{apigroup_id}/api:
get:
operationId: listApiEndpoints
tags:
- API Groups
summary: List endpoints in an API group.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/ApiGroupId'
responses:
'200':
description: An array of endpoints.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ApiEndpoint'
post:
operationId: createApiEndpoint
tags:
- API Groups
summary: Create an endpoint in an API group.
parameters:
- $ref: '#/components/parameters/WorkspaceId'
- $ref: '#/components/parameters/ApiGroupId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApiEndpoint'
responses:
'200':
description: The created endpoint.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiEndpoint'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
Scoped Metadata API access token generated from your Xano instance
settings (Instances > Metadata API > Manage Access Tokens). Sent as
`Authorization: Bearer <token>`.
parameters:
WorkspaceId:
name: workspace_id
in: path
required: true
schema:
type: integer
BranchId:
name: branch_id
in: path
required: true
schema:
type: string
TableId:
name: table_id
in: path
required: true
schema:
type: integer
ColumnId:
name: column_id
in: path
required: true
schema:
type: string
RecordId:
name: record_id
in: path
required: true
schema:
type: integer
ApiGroupId:
name: apigroup_id
in: path
required: true
schema:
type: integer
responses:
Success:
description: The operation succeeded.
content:
application/json:
schema:
type: object
additionalProperties: true
BadRequest:
description: Input error.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Missing or invalid access token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
User:
type: object
properties:
id:
type: integer
name:
type: string
email:
type: string
Workspace:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
Branch:
type: object
properties:
id:
type: string
label:
type: string
live:
type: boolean
Table:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
auth:
type: boolean
created_at:
type: string
TableCreate:
type: object
required:
- name
properties:
name:
type: string
description:
type: string
auth:
type: boolean
Column:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
description: Xano column type (text, int, decimal, bool, timestamp, email, json, etc.).
nullable:
type: boolean
required:
type: boolean
default:
nullable: true
Index:
type: object
properties:
type:
type: string
description: Index type (btree, gin, unique, primary, search, etc.).
fields:
type: array
items:
type: object
properties:
name:
type: string
op:
type: string
Record:
type: object
additionalProperties: true
description: A table record; properties correspond to the table's columns.
RecordList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Record'
itemsReceived:
type: integer
itemsTotal:
type: integer
pageTotal:
type: integer
curPage:
type: integer
nextPage:
type: integer
nullable: true
prevPage:
type: integer
nullable: true
SearchRequest:
type: object
properties:
page:
type: integer
per_page:
type: integer
sort:
type: object
additionalProperties:
type: string
search:
type: array
items:
type: object
FileList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/File'
itemsTotal:
type: integer
File:
type: object
properties:
id:
type: integer
name:
type: string
path:
type: string
type:
type: string
size:
type: integer
mime:
type: string
ApiGroup:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
canonical:
type: string
description: "The /api: path token under which this group's endpoints are served."
swagger:
type: boolean
ApiEndpoint:
type: object
properties:
id:
type: integer
name:
type: string
verb:
type: string
description: HTTP method (GET, POST, PUT, PATCH, DELETE).
path:
type: string
Error:
type: object
properties:
code:
type: string
message:
type: string
payload:
nullable: true