# Write database rows

`POST /v1/databases/{databaseId}/rows/write`

Creates, updates and deletes rows in one step. A row without id is created; with id it is updated (title renames it); delete: true moves it to the trash. values are keyed by property id, frontmatter key or name; relation values are row ids; select values are option names (new names become options); uniqueId values are numbers (pass 12 or "LYD-12"; new rows get the next number). unset clears properties.

Scope: `docs:write`. Undoable.

## Request

```bash
curl -X POST "https://api.lydie.co/v1/databases/01JCQ3V5MZ8G4ZK2X7T9R6N1PB/rows/write" \
  -H "Authorization: Bearer $LYDIE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "rows": [
      {}
    ]
  }'
```

## Path parameters

- `databaseId` (ULID, required)

## Body

- `rows` (object[], required): (1–1000 items)
  - `id` (ULID, optional): An existing row to update or delete.
  - `title` (string, optional): (1–255 chars)
  - `values` (object, optional): Default: `{}`.
  - `unset` (string[], optional): Default: `[]`.
  - `delete` (boolean, optional): Default: `false`.

## Response

- `created` (ULID[], required)
- `updated` (ULID[], required)
- `deleted` (ULID[], required)

```json
{
  "created": [
    "01JCQ3V5MZ8G4ZK2X7T9R6N1PB"
  ],
  "updated": [
    "01JCQ3V5MZ8G4ZK2X7T9R6N1PB"
  ],
  "deleted": [
    "01JCQ3V5MZ8G4ZK2X7T9R6N1PB"
  ]
}
```

Errors use the envelope described at https://developers.lydie.co/errors.md.
