---
title: "End an own draft at a line of one of its parts, or move some of its parts, and start a second entry"
method: POST
path: "/v1/entries/{id}/split"
tags: ["entries"]
---

# End an own draft at a line of one of its parts, or move some of its parts, and start a second entry

`POST /v1/entries/{id}/split`

## Request

- Base URL: `https://api.sixminute.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.sixminute.ai/v1/entries/{id}/split`
- Auth: HTTP bearer

The body carries exactly one of `at` and `leaving`, else a 400. `at` lies strictly inside one of the entry's parts and on the grid at that point (D-219): a stored interval's edge of the author's day, or a line of the day's unit (the firm's when the day opened, or now for a day not opened yet) where none is stored, and never inside a stored interval (the stored intervals are those of the device the entry was generated on (its `device_id`), or, for a hand-made entry and one generated on the asking device, those of the device X-Six-Minute-Device names and the earlier ids X-Six-Minute-Device-Known names; with no device of the caller's named, every device's for a hand-made entry); anything else is a 422 on `at` naming the lines that exist. The first half KEEPS THE ID and holds the parts before `at` and the cut part up to it; the second is a new `entry_` id holding the rest from `at`. `leaving` names parts of the entry, each exactly as it holds them, that become the second entry (a split at a gap, or one part detached from anywhere in the set); it is a strict, non-empty subset of the parts, else a 422 on `leaving`, and the rest keep the id. The second half has the same matter, day, zone, author, narrative, attributes, note and judged copy. Each half's `t_start` and `t_end` are its first start and last end, its recorded time is the sum of its parts, and neither keeps an `override_seconds`. The split writes the rows only: the intervals stay where they are, and each half covers the ones whose start lies in one of its parts (D-216). `first` and `second` are the narratives and attribute maps the person approved on the review before this call: both or neither, and each map REPLACES the half's attributes rather than merging into them; a half's optional `matter_id` moves that half as a PATCH does, and `null` moves it to no matter. Without them the parent's narrative and attributes are copied onto both halves, which is what a firm on the `confidential` tier gets, because it stores no judged text to propose from. A half's narrative longer than the firm's length (`narrative.max_chars`, else 240) is a 422 at `first.narrative` or `second.narrative`, and nothing is written (D-230). Both halves are stamped `edited_at`: a split is a person's edit, so the engine never replaces either of them again (Row E). It is the complement of the cut and not a correction to it; D-85's Split, which moves hours to another matter, is a different gesture and stays. A draft whose release is with the practice system, or for which the practice system holds or may hold a line from a release that did not finish, is a 409 (the latter on `connector.pending`: releasing the entry settles it).

## Path parameters

- `id` string, required

## Request body

- object
  - `at` string, date-time
  - `leaving` object[]
    - `t_start` string, date-time, required
    - `t_end` string, date-time, required
  - `first` object
    - `matter_id` string, nullable
    - `narrative` string, required
    - `attributes` object, required
  - `second` object
    - `matter_id` string, nullable
    - `narrative` string, required
    - `attributes` object, required

## Response `200`

The two halves.

- object
  - `first` object, required
    - `id` string, required
    - `day` string, required
    - `time_zone` string, required
    - `timekeeper_id` string, required
    - `t_start` string, date-time, required
    - `t_end` string, date-time, required
    - `parts` object[]
      - `t_start` string, date-time, required
      - `t_end` string, date-time, required
    - `narrative` string, required
    - `matter_id` string, nullable
    - `attributes` object
    - `internal_note` string, nullable
    - `status` 'draft' | 'released'
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `released_at` string, date-time, nullable
    - `edited_at` string, date-time, nullable
    - `override_seconds` integer, nullable
    - `device_id` string, nullable
  - `second` object, required
    - `id` string, required
    - `day` string, required
    - `time_zone` string, required
    - `timekeeper_id` string, required
    - `t_start` string, date-time, required
    - `t_end` string, date-time, required
    - `parts` object[]
      - `t_start` string, date-time, required
      - `t_end` string, date-time, required
    - `narrative` string, required
    - `matter_id` string, nullable
    - `attributes` object
    - `internal_note` string, nullable
    - `status` 'draft' | 'released'
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `released_at` string, date-time, nullable
    - `edited_at` string, date-time, nullable
    - `override_seconds` integer, nullable
    - `device_id` string, nullable

## Other responses

- `400`: The body, query or path did not validate; `errors` lists the fields.
- `401`: No bearer token, or one that does not verify or has expired.
- `403`: The token verified but may not do this: no organisation, not provisioned, wrong role, or a device problem.
- `404`: No such row for this tenant.
- `409`: The id or the email already belongs to something else.
- `422`: The request is well-formed but cannot be carried out as it stands.

---

[API](https://skmtc.dev/sixminute/apis/sixminute-api.md) - [All operations](https://skmtc.dev/sixminute/apis/sixminute-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sixminute/apis/sixminute-api/revisions/605577eadc10?raw)
