Compare branch schemas.

https://{your-workspace-slug}.{region}.xata.sh/db/db_branch_name/schema/compare/branch_name

Compare the schema of any 2 branches.

Expected Parameters
NameDescriptionInRequiredSchema
db_branch_nameThe DBBranchName matches the pattern `{db_name}:{branch_name}`. pathstring
branch_nameThe Database Namepathstring

Compare Branch Schemas.

POST  https://{your-workspace-slug}.{region}.xata.sh/db/db_branch_name/schema/compare/branch_name
Request Body Type Definition
type CompareBranchSchemas = Record<string, any>;

/**
 * Xata Table Record Metadata
 */
type Record = RecordMeta & {
    [key: string]: any;
};

/**
 * Xata Table Record Metadata
 */
type RecordMeta = {
    id: RecordID;
    xata: {
        /*
         * The record's version. Can be used for optimistic concurrency control.
         */
        version: number;
        /*
         * The record's table name. APIs that return records from multiple tables will set this field accordingly.
         */
        table?: string;
        /*
         * Highlights of the record. This is used by the search APIs to indicate which fields and parts of the fields have matched the search.
         */
        highlight?: {
            [key: string]: string[] | {
                [key: string]: any;
            };
        };
        /*
         * The record's relevancy score. This is returned by the search APIs.
         */
        score?: number;
        /*
         * Encoding/Decoding errors
         */
        warnings?: string[];
    };
};

/**
 * @pattern [a-zA-Z0-9_-~:]+
 */
type RecordID = string;
Possible Responses
Status CodeDescriptionExample Response/Type Definition
200Schema comparison response.
type CompareBranchSchemas = {
    source: Schema;
    target: Schema;
    edits: SchemaEditScript;
};

type Schema = {
    tables: Table[];
    tablesOrder?: string[];
};

type SchemaEditScript = {
    sourceMigrationID?: string;
    targetMigrationID?: string;
    operations: MigrationOp[];
};

type Table = {
    id?: string;
    name: TableName;
    columns: Column[];
    revLinks?: RevLink[];
};

/**
 * Branch schema migration operations.
 */
type MigrationOp = MigrationTableOp | MigrationColumnOp;

/**
 * @pattern [a-zA-Z0-9_\-~]+
 */
type TableName = string;

type Column = {
    name: string;
    type: "bool" | "int" | "float" | "string" | "text" | "email" | "multiple" | "link" | "object" | "datetime";
    link?: ColumnLink;
    notNull?: boolean;
    defaultValue?: string;
    unique?: boolean;
    columns?: Column[];
};

type RevLink = {
    linkID: string;
    table: string;
};

type MigrationTableOp = {
    addTable: TableOpAdd;
} | {
    removeTable: TableOpRemove;
} | {
    renameTable: TableOpRename;
};

type MigrationColumnOp = {
    addColumn: ColumnOpAdd;
} | {
    removeColumn: ColumnOpRemove;
} | {
    renameColumn: ColumnOpRename;
};

type ColumnLink = {
    table: string;
};

type TableOpAdd = {
    table: string;
};

type TableOpRemove = {
    table: string;
};

type TableOpRename = {
    oldName: string;
    newName: string;
};

type ColumnOpAdd = {
    table: string;
    column: Column;
};

type ColumnOpRemove = {
    table: string;
    column: string;
};

type ColumnOpRename = {
    table: string;
    oldName: string;
    newName: string;
};
400Bad Request
type CompareBranchSchemas = {
    id?: string;
    message: string;
};
401Authentication Error
{
  "message": "invalid API key"
}
404Example response
type CompareBranchSchemas = {
    id?: string;
    message: string;
};
5XXUnexpected Error