---
title: "Add a row"
method: POST
path: "/api/v1/tables/{id}/rows"
tags: ["tables"]
---

# Add a row

`POST /api/v1/tables/{id}/rows`

## Request

- Base URL: `https://app.blueticked.com`
- URL: `https://app.blueticked.com/api/v1/tables/{id}/rows`
- Auth: HTTP bearer

Add a row for one of your contacts (a prescription, an order, a booking), or to a reference table.

A records table's row belongs to a contact of your workspace, so `contact_id` is required; a row never creates one (`not_found` otherwise; create the contact first with POST /api/v1/contacts).

A reference table's row belongs to no one: send `data` (and `notes`) only. A `contact_id` or a `status` is refused with `validation_failed`.

`status` defaults to the table's first status. `data` is checked against the columns: a value that does not fit, or a key that is not a column, is refused with `validation_failed` and `details.fields` naming each one.

A table holds at most 50,000 rows; past that the call is refused with `conflict`.

Send an Idempotency-Key header to make a retry safe. The new row fires `table_row.created` and the automations listening for it.

## Path parameters

- `id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `contact_id` string, uuid
  - `status` string
  - `data` object
    - `medicine` string, required
    - `quantity` number, required
    - `collect_on` string, required
  - `notes` string

## Response `201`

Success

- object
  - `row` object, required
    - `id` string, uuid, required
    - `table_id` string, uuid, required
    - `business_id` string, nullable, required
    - `contact_id` string, nullable, required
    - `conversation_id` string, nullable, required
    - `lead_id` string, nullable, required
    - `status` string, nullable, required
    - `data` object, required
    - `answers` object, required
    - `source` string, required
    - `notes` string, nullable, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `request_id` string, required

## Other responses

- `400`: Validation failed
- `401`: Unauthorized: missing or invalid API key
- `402`: Insufficient wallet balance
- `403`: Forbidden: scope, plan limit, or suspension
- `404`: Not found
- `409`: Conflict (idempotency-key reuse or resource in use)
- `413`: Request body above the endpoint's size limit
- `422`: Understood but refused: the request is well-formed, the action is not permitted for this resource
- `429`: Rate limited
- `500`: Internal error
- `502`: An upstream provider refused or failed the request
- `503`: Channel or send queue unavailable

---

[API](https://skmtc.dev/blueticked/apis/blueticked-api.md) · [All operations](https://skmtc.dev/blueticked/apis/blueticked-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blueticked/apis/blueticked-api/revisions/07132284f4ff?raw)
