---
title: "Create Companies Table"
method: POST
path: "/v3/companies/tables"
tags: ["Companies Tables"]
---

# Create Companies Table

`POST /v3/companies/tables`

Create a new, empty companies table, optionally seeded with an initial list of company IDs.

> **Billing:** Free.

## Request body

- TableCreateRequest
  - `name` string, required
  - `visibility` 'private' | 'shared'
  - `owner` TableOwner, required — Identifies the user acting on the table, and resolves to a user on your account. Required on every table-route call when authenticating with an API key (there is no signed-in user) — omitting it returns `400`. Optional for OAuth/token callers, since the caller is already identified by the token; still accepted if you want to act on behalf of another owner.
    - `email` string, email — Must resolve to an existing user on the account tied to your API key.
  - `ids` string[] — Optional initial entity IDs to seed the table with.

## Response `201`

Table created

- TableResponse
  - `data` TableStatusData — TableDto — static metadata for a table.
    - `tableId` string
    - `name` string
    - `entityType` 'contacts' | 'companies'
    - `visibility` 'private' | 'shared'
    - `status` 'active' | 'archived' | 'deleted' — Lifecycle state. `active` and `archived` are filterable via the List Tables `status` field; `deleted` is not a filterable status.
    - `owner` OwnerInfo — Resolved owner of the table. `id` is always present; `email` and `name` are resolved best-effort within the API key's account and may be omitted if resolution fails (in which case the object contains only `id`). Replaces the removed top-level `ownerId` field - this is a breaking change from the prior response shape.
      - `id` integer
      - `email` string, email
      - `name` string
    - `createdBy` CreatedBy — Where and by whom the table was created.
      - `surface` 'api' | 'mcp' | 'workspace'
      - `createdByUserId` integer
    - `workspaceUrl` string
    - `entityCount` integer
    - `isProcessing` boolean — Whether any column run is currently in progress on this table.
    - `columns` ColumnSummary[]
      - `columnId` string
      - `name` string
      - `type` 'lusha' | 'crm' | 'signal' | 'ai' | 'score'
      - `key` string, nullable
      - `isDefault` boolean — Default Lusha columns cannot be removed.
      - `addedAt` string, date-time
      - `updatedAt` string, date-time
      - `rowsNotRun` integer
      - `rowsProcessing` integer
      - `rowsSuccess` integer
      - `rowsNoData` integer
      - `rowsFailed` integer
  - `billing` V3Billing — Credit usage summary for a V3 API request
    - `creditsCharged` integer — Total credits charged for this request
    - `resultsReturned` integer — Number of successful results returned

## Other responses

- `400` — Bad request - invalid input data
- `401` — Unauthorized - invalid or missing API key
- `403` — Forbidden - account inactive, V3 access not enabled, or plan does not include this feature
- `409` — Conflict - a table with this name already exists

---

[API](https://skmtc.net/lusha/apis/lusha-api-documentation.md) · [All operations](https://skmtc.net/lusha/apis/lusha-api-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lusha/lusha-api-documentation/versions/4c51e40e3e67/schema)
