Skip to main content
POST
/
v1
/
tables
Create Table
curl --request POST \
  --url https://api.extruct.ai/v1/tables \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "Untitled Table",
  "description": "<string>",
  "tags": [
    "<string>"
  ],
  "kind": "company",
  "column_configs": [
    {
      "name": "<string>",
      "key": "<string>",
      "kind": "input"
    }
  ]
}
'
{
  "id": "<string>",
  "created_at": "2023-11-07T05:31:56Z",
  "name": "<string>",
  "kind": "generic",
  "columns": [
    {
      "id": "<string>",
      "created_at": "2023-11-07T05:31:56Z",
      "config": {
        "name": "<string>",
        "key": "<string>",
        "kind": "input"
      }
    }
  ],
  "owner": {
    "id": "<string>",
    "email": "<string>"
  },
  "description": "<string>",
  "tags": [
    "<string>"
  ],
  "child_relationships": [
    {
      "table_id": "<string>",
      "relationship_type": "company_people"
    }
  ],
  "parent_relationships": [
    {
      "table_id": "<string>",
      "relationship_type": "company_people"
    }
  ]
}

Overview

This endpoint creates a table for reusable enrichment or scoring workflows. You can populate it with companies discovered in Extruct or with your own list. kind determines what the table is for:
  • Use company when rows represent companies you want to enrich, score, or review.
  • Use people when rows represent contacts or individual people.
  • Use generic only when rows do not fit either company or people workflows.
Create the table first when you want a stable workspace for rows, columns, and runs, even if you are not ready to populate it yet.

Example request

export EXTRUCT_API_TOKEN="YOUR_API_TOKEN"

curl -X POST "https://api.extruct.ai/v1/tables" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${EXTRUCT_API_TOKEN}" \
  -d '{
    "name": "Company Research",
    "kind": "company",
    "column_configs": [
      {"kind": "input", "name": "Company", "key": "input"}
    ]
  }'

Key parameters

  • name (optional): defaults to Untitled Table.
  • kind (optional): generic, company, or people.
  • column_configs (optional): initial column definitions.

Success signal

A successful response includes a table id. Reuse this value as {table_id} in all table endpoints.

Common errors

401 Unauthorized

Check that your header is Authorization: Bearer ${EXTRUCT_API_TOKEN}.

422 Unprocessable Entity

Most often caused by invalid column_configs shape.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
name
string
default:Untitled Table
description
string | null
tags
string[] | null
kind
enum<string>
default:company
Available options:
generic,
company,
people
column_configs
(InputColumnConfig · object | AgentColumnConfig · object | CriterionGradeColumnConfig · object | PeopleFinderColumnConfig · object | DiscoveryScoresColumnConfig · object | CompanyNameColumnConfig · object | CompanyWebsiteColumnConfig · object | CompanyProfileColumnConfig · object | EmailFinderColumnConfig · object | PhoneFinderColumnConfig · object | ReverseEmailLookupColumnConfig · object)[] | null

Column configurations.

Response

Successful Response

id
string
required

Table ID.

created_at
string<date-time>
required

Table creation time.

name
string
required

Table name.

kind
enum<string>
required

Table type.

Available options:
generic,
company,
people
columns
ColumnOutputSchema · object[]
required

Table columns configurations.

owner
OwnerInfo · object
required
description
string | null

Table description.

tags
string[] | null

Table tags.

child_relationships
TableRelationshipOutput · object[]

Child table relationships.

parent_relationships
TableRelationshipOutput · object[]

Parent table relationships.