Contract Intelligence

Add a column to a vault

Add a column to a vault's table.

Adding a column scans nothing. Documents already in the vault keep an empty cell for the new column until a re-scan fills it, which you start from the vault in the app. Add the columns you want before you upload, and every document that arrives afterwards is read against all of them.

The new column starts hidden in every saved view of this vault. A saved view is a sharing boundary, so a column created after the view was saved never joins it on its own; a member of the view reveals it there when they want it.

field_key is frozen at creation. Omit it and GC AI builds one from the label. Renaming the column later leaves the key alone, so the values already extracted stay attached to it.

A vault holds at most 500 columns. Column 501 returns 403 with the message the app shows, and you have to delete a column before adding another.

Requires the editor or owner role in the vault and the organization-level permission to manage vaults.

Requires a user-scoped API key (u:gcai_...). A vault is shared with named people, so an organization-scoped key has no identity to resolve vault access with.

post/vaults/{id}/columns

Request

Path parameters

idstring uuid required

The vault ID

Request body

labelstring required

The column heading shown in the vault table.

field_keystring

The key extracted values are stored under. Omit it and GC AI builds one from the label (Renewal notice becomes renewalNotice). Set it when you need the key to match something you already store, because the key is frozen once the column exists: renaming the column later never changes it. Any printable key up to 100 characters works, including one with an underscore or a hyphen; percent-encode it when you address a cell on this column.

instructionsstring

Required for an ai column: this text is the prompt extraction reads each document with, so say what to look for and what to return. Optional for a manual column, where it is only a note to whoever fills the column in.

field_type'text' | 'date' | 'date_range' | 'enum' | 'multi_enum' | 'boolean' | 'number' | 'currency' | 'percentage' | 'duration' | 'email' | 'url' | 'list' | 'rich_text'

The shape of the values in this column. enum and multi_enum need field_meta; every other type needs field_meta: null.

extraction_mode'ai' | 'manual'

How the column gets filled. ai (the default) has extraction read it out of each document. manual keeps it out of every scan so the values stay exactly what a person types.

sort_orderinteger

Placement weight, 0 by default. The table orders columns by sort_order first and creation time second, so columns added without one keep the order you added them in.

Example request

{
  "label": "Renewal notice",
  "field_key": "renewalNotice",
  "instructions": "Extract the number of days notice required to avoid automatic renewal. Return the number of days only.",
  "field_meta": {
    "options": [
      "Renewal",
      "New business",
      "Amendment"
    ]
  }
}

Response

The created column

idstring uuid nullable required

Unique column identifier, or null for a built-in column. A built-in column has no row of its own in this vault, so it has no ID and cannot be changed or deleted.

field_keystring required

The stable key extracted values are stored under. It is set once, when the column is created, and never changes, so renaming the column keeps every value already extracted for it.

labelstring required

The column heading shown in the vault table

instructionsstring required

For an ai column, the prompt extraction reads each document with. For a manual, import, or connector column, a note to whoever reads the column.

field_type'text' | 'date' | 'date_range' | 'enum' | 'multi_enum' | 'boolean' | 'number' | 'currency' | 'percentage' | 'duration' | 'email' | 'url' | 'list' | 'rich_text' | 'party_list' | 'related_agreement_list' required

The shape of the values in this column. Built-in columns can report party_list and related_agreement_list, which you cannot set yourself.

extraction_mode'ai' | 'manual' | 'import' | 'connector' required

How the column gets filled. ai: extraction reads it out of each document. manual: a person types it and no scan ever touches it. import: values come from a connected spreadsheet, which owns the column. connector: values come from a connected document source, which owns the column. You can create ai and manual columns. An import column is created by connecting a spreadsheet in the app. A connector column is created when a source such as Ironclad fills it.

kind'built_in' | 'system' | 'custom' required

What this column is. built_in: merged into every vault by GC AI, with no ID and no way to change it. system: owned by this vault but managed by GC AI (Document Name, Document Status, Document Title), so it has an ID but rejects every change and every delete. custom: yours, and the only kind PATCH and DELETE accept.

editableboolean required

True when this column can be changed with PATCH /vaults/{id}/columns/{columnId}. Built-in and system columns report false: GC AI owns their name, type, options, and prompt. One exception, on both surfaces: sort_order is list position rather than identity, so it can be set on any column that has an ID.

sort_ordernumber nullable required

Placement weight for this column, or null for a built-in one. The table orders columns by sort_order first and creation time second.

created_atstring nullable required

ISO 8601 creation timestamp, or null for a built-in column

updated_atstring nullable required

ISO 8601 last-update timestamp, or null for a built-in column

Example response

{
  "field_key": "renewalNotice",
  "label": "Renewal notice"
}

Changes

No recorded changes to this operation across all 1 revision of this API.