# Get Table

## Get Table

`POST /api/v1/dl/get_table`

Returns details for a single Tableflow table, looked up by UUID or by name.

### Request

| Field                | Type    | Required   | Description                                                           |
|----------------------|---------|------------|-----------------------------------------------------------------------|
| `virtual_cluster_id` | string  | Yes        | The ID of the Tableflow virtual cluster.                              |
| `table_uuid`         | string  | Optional\* | The UUID of the table to retrieve.                                    |
| `table_name`         | string  | Optional\* | The name of the table to retrieve.                                    |
| `include_status`     | boolean | No         | If true, includes Tableflow health, sync status, and lag information. |

:::caution
**Exactly one** of `table_uuid` or `table_name` must be specified. Providing both or neither will return an error.
:::

#### CURL Example (by UUID)

```bash
curl https://api.warpstream.com/api/v1/dl/get_table \
  -H 'warpstream-api-key: XXXXXXXXXX' \
  -H 'Content-Type: application/json' \
  -d '{
    "virtual_cluster_id": "vci_XXXXXXXX_XXXX_XXXX_XXXX_XXXXXXXXXXXX", 
    "table_uuid": "550e8400-e29b-41d4-a716-446655440000"
  }'
```

#### CURL Example With Status

```bash
curl https://api.warpstream.com/api/v1/dl/get_table \
  -H 'warpstream-api-key: XXXXXXXXXX' \
  -H 'Content-Type: application/json' \
  -d '{
    "virtual_cluster_id": "vci_XXXXXXXX_XXXX_XXXX_XXXX_XXXXXXXXXXXX",
    "table_uuid": "550e8400-e29b-41d4-a716-446655440000",
    "include_status": true
  }'
```

### Response

```json
{
  "table": {
    "table_name": "my_cluster.my_topic.a1b2c3d4",
    "table_uuid": "550e8400-e29b-41d4-a716-446655440000",
    "table_location": "s3://my_bucket/warpstream/_tableflow/my_cluster.my_topic.a1b2c3d4-550e8400-e29b-41d4-a716-446655440000",
    "source_stream_name": "my_topic",
    "source_cluster_name": "my_cluster",
    "stats_estimated_byte_count": 1048576,
    "stats_estimated_row_count": 10000,
    "created_at_unix_nanos": 1700000000000000000
  }
}
```

| Field                              | Type    | Description                                                                            |
|------------------------------------|---------|----------------------------------------------------------------------------------------|
| `table.table_name`                 | string  | The full name of the table.                                                            |
| `table.table_uuid`                 | string  | The unique identifier of the table.                                                    |
| `table.table_location`             | string  | The location (blob storage URL) where the Iceberg table's data and metadata is stored. |
| `table.source_stream_name`         | string  | The source Kafka topic name.                                                           |
| `table.source_cluster_name`        | string  | The name of the source cluster.                                                        |
| `table.stats_estimated_byte_count` | integer | Estimated total size of the table in bytes.                                            |
| `table.stats_estimated_row_count`  | integer | Estimated total number of rows in the table.                                           |
| `table.created_at_unix_nanos`      | integer | Table creation timestamp in nanoseconds since Unix epoch.                              |

### Response With Status

When `include_status` is `true`, the response includes a `status` object.

```json
{
  "table": {
    "table_name": "my_cluster.my_topic.a1b2c3d4",
    "table_uuid": "550e8400-e29b-41d4-a716-446655440000",
    "table_location": "s3://my_bucket/warpstream/_tableflow/my_cluster.my_topic.a1b2c3d4-550e8400-e29b-41d4-a716-446655440000",
    "source_stream_name": "my_topic",
    "source_cluster_name": "my_cluster",
    "stats_estimated_byte_count": 1048576,
    "stats_estimated_row_count": 10000,
    "created_at_unix_nanos": 1700000000000000000
  },
  "status": {
    "health": {
      "status": "healthy",
      "message": "Table is active, synced, and lag signals are current.",
      "reasons": [
        "table_active",
        "pipeline_config_synced"
      ]
    },
    "iceberg_metadata_matches_deployed_config": true,
    "iceberg_metadata_pipeline_version": 12,
    "deployed_pipeline_version": 12,
    "table_status": "active",
    "ingestion_lag_known": true,
    "ingestion_lag_milliseconds": 60000,
    "query_lag_known": true,
    "query_lag_milliseconds": 90000,
    "total_offset_lag_count": 42,
    "partitions": [
      {
        "partition_id": 0,
        "offset_lag_count": 42,
        "time_lag_known": true,
        "time_lag_milliseconds": 60000
      }
    ]
  }
}
```

<table data-header-hidden><thead><tr><th width="328.15234375"></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Field</strong></td><td><strong>Type</strong></td><td><strong>Description</strong></td></tr><tr><td><code>status.health.status</code></td><td>string</td><td>Overall table health. Possible values include <code>healthy</code>, <code>initializing</code>, <code>paused</code>, and <code>inactive</code>.</td></tr><tr><td><code>status.health.message</code></td><td>string</td><td>Human-readable explanation of the current health state.</td></tr><tr><td><code>status.health.reasons</code></td><td>array of strings</td><td>Machine-readable reason codes for the health state.</td></tr><tr><td><code>status.iceberg_metadata_matches_deployed_config</code></td><td>boolean</td><td>Whether the table's Iceberg metadata reflects the currently deployed Tableflow configuration.</td></tr><tr><td><code>status.iceberg_metadata_pipeline_version</code></td><td>integer</td><td>Pipeline configuration version recorded in the table's Iceberg metadata, or <code>-1</code> if unknown.</td></tr><tr><td><code>status.deployed_pipeline_version</code></td><td>integer</td><td>Currently deployed Tableflow pipeline configuration version, or <code>-1</code> if unknown.</td></tr><tr><td><code>status.table_status</code></td><td>string</td><td>Table config status. Possible values are <code>active</code>, <code>paused</code>, <code>inactive</code>, and <code>unknown</code>.</td></tr><tr><td><code>status.ingestion_lag_known</code></td><td>boolean</td><td>Whether ingestion lag is available.</td></tr><tr><td><code>status.ingestion_lag_milliseconds</code></td><td>number or null</td><td>Maximum ingestion lag across table partitions, in milliseconds. Null when unknown.</td></tr><tr><td><code>status.query_lag_known</code></td><td>boolean</td><td>Whether query lag is available.</td></tr><tr><td><code>status.query_lag_milliseconds</code></td><td>number or null</td><td>Estimated time between source records being available and query engines being able to see them, in milliseconds. Null when unknown.</td></tr><tr><td><code>status.total_offset_lag_count</code></td><td>integer</td><td>Total number of source records pending ingestion across all partitions.</td></tr><tr><td><code>status.partitions</code></td><td>array</td><td>Per-partition lag details.</td></tr><tr><td><code>status.partitions[].partition_id</code></td><td>integer</td><td>Source topic partition ID.</td></tr><tr><td><code>status.partitions[].offset_lag_count</code></td><td>integer</td><td>Number of source records pending ingestion for this partition.</td></tr><tr><td><code>status.partitions[].time_lag_known</code></td><td>boolean</td><td>Whether time lag is available for this partition.</td></tr><tr><td><code>status.partitions[].time_lag_milliseconds</code></td><td>number or null</td><td>Time lag for this partition in milliseconds. Null when unknown.</td></tr></tbody></table>