> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.minikai.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.minikai.com/_mcp/server.

# Changelog

Each release also ships as a versioned `minikai` SDK for Python and TypeScript, so the version numbers below match the
SDK you install. We keep things backwards-compatible wherever we can, so pinning to a version is safe.

## October 4, 2026

## See which record attachments could not be read

records, attachments, schema

**v1.25.0** Record attachments now include `unreadableReason` when Minikai could not read the file's text: `refused`
when the reading model declined it, and `failed` for any other reason. Nothing in such a file is searchable, and the
field is left out once the file is read.

## September 23, 2026

## Errors are typed in the generated SDKs

sdks, schema

**v1.24.0** Every operation now documents its `401`, `403` and `500` responses as `ProblemDetails`, so an upgraded SDK
raises them as typed errors you can catch by status. `GET` and `POST /api/v1/Records/export` also declare their
`text/csv` response.

## September 21, 2026

## Record an NHI number on a Mini

minis, schema

**v1.23.0** `IdentityKind` gains `nhi`, the New Zealand National Health Index number, so a provider in New Zealand can
identify a client by the number their care system already uses. Send it anywhere an identity is written, and it comes
back on any Mini carrying one.

## September 15, 2026

## Create label groups

labels

**v1.22.0** `POST /api/v1/LabelGroups` creates a label group for Minis or Records.

## September 9, 2026

## Record versions expose `state`

records, schema

**v1.21.0** Each snapshot returned by `GET /api/v1/Records/{id}/versions` now carries `state` (`active`, `draft`,
`archived`, `deleted`), the same token the record itself exposes, so a caller no longer has to derive it from
`searchable` and `archived`. Both existing flags are unchanged.

## September 3, 2026

## Requests now carry documented limits

breaking, release

**v1.20.0** List, batch and upload requests are now bounded, and a request above a limit returns `400` with the limit
named in the response rather than being served. List endpoints accept at most 200 rows per request (`limitBefore`,
`limitAfter`, `pageSize`), a batch accepts at most 2000 items, and the batch attachment endpoints now enforce the same
100 MB per-file and 500 MB total limits the single-record attachment endpoints have always applied. A multipart upload
at the documented total size now succeeds where it previously failed against an undocumented framework limit of 128 MB.

This is a breaking change for any caller that was asking for more than a limit allows. If you page through a list,
request at most 200 rows and follow the cursor; if you send batches, chunk at 2000 items or fewer. A failed item in a
batch response now carries a stable reason instead of an internal error message, so match on the item's index rather
than the text.

## August 24, 2026

## Numeric fields declare their type

schema, release

**v1.19.2** Counts, page sizes and totals now declare a type in the spec (the number, or the same value as a string)
instead of carrying only a validation pattern, so a generated client describes them rather than falling back to an
untyped value. The fields that can come back null, `status` on `400` responses and `totalCount` on paginated lists, are
described as nullable for the first time. Behaviour is unchanged and upgrading is safe, though a strict type checker may
now ask you to narrow one of these fields before doing arithmetic on it.

## August 23, 2026

## The API key instructions name the right screen

fix, release

**v1.19.1** Creating an API key is described correctly here and in the Getting started and Authentication guides: open
**Settings → Security** in the Minikai app and create the key under **API Keys**. The old instructions named a
**Workspace Admin → Security & access** screen that the app does not have. Behaviour is unchanged, so upgrading is safe.

## August 22, 2026

## Pick your data region

sdks, release

**v1.19.0** Point a client at the region your workspace lives in, either Australia on
`https://api.minikai.com/minikai-public` or the United Kingdom on `https://api.minikai.co.uk/minikai-public`. Both SDKs
take the region as an `environment` argument, the API Reference lets you pick one before sending a request, and
Australia stays the default.

## August 13, 2026

## The Python and TypeScript SDKs build again

sdks, fix, release

**v1.17.1** Fixes the nullable model fields, `LabelDto.rename` and `UpsertRecordDto.authorization` among them, that made
both generated SDKs invalid code, so `minikai` publishes again for Python and TypeScript. Behaviour is unchanged, so
upgrading is safe.

## August 12, 2026

## Download a Mini's profile picture or a skill's asset

minis, skills, attachments, release

**v1.18.0** Download the image behind a Mini's `profilePictureUrl`, or the file behind a skill asset's `url`. Both
fields always held a path, and now `GET /Minis/{id}/profile-picture/{pictureId}` and `GET /Skills/{id}/assets/{assetId}`
are in the API and the SDKs so you can call it. These and the record attachment download now hand you the file itself in
the SDKs, rather than a response with no type on it.

## August 11, 2026

## Deleting a label in use is refused instead of stranding it

labels, fix, release

**v1.17.0** `DELETE /Labels/{id}` now returns a `409` while any record or Mini still carries the label, telling you how
many do. Records and Minis reference a label by name, so deleting one in use used to leave that name on them while
destroying the access grants attached to it. Clear the label off them first. A call that succeeds still returns `204`
and the label disappears at once, but its grants are torn down in the background, so creating a label with the same name
straight after can be refused until that finishes.

## Identify a Mini by NHS number

minis, schema

**v1.16.0** Handles `nhs` as an identity `kind` so the NHS number a UK care provider knows a client by is stored and
searchable alongside the Australian schemes. It reads back on the Mini like any other identity.

## August 10, 2026

## Record filters reject a blank miniId with a 400

records, fix

**v1.15.0** Call `GET /Records/filters/created-by`, `/updated-by` or `/states` with a blank `miniId` and you get a `400`
naming the field, where a blank value previously came back as a `500`. All four `/Records/filters/*` operations now
document that `400`, so it is typed in the SDKs.

## August 6, 2026

## Profile pictures are served from the API, and accept four image types

minis, schema, release

**v1.13.0** `POST /Minis/{id}/profile-picture` returns the application path the picture is served from rather than an
internal storage location, and `MiniDto.profilePictureUrl` and `SkillAssetDto.url` carry the same style of path. Uploads
now accept `image/jpeg`, `image/png`, `image/gif` and `image/webp` only; SVG and TIFF are rejected with a `400`, because
no browser paints either in an avatar.

## August 5, 2026

## Renaming a label moves its records and Minis

labels, release

**v1.14.0** Change a label's `name` with `PUT /api/v1/Labels/{id}` and every record and Mini carrying it moves to the
new name, so nothing is left holding a name the label no longer answers to. The move runs in the background, so the
response carries a new `rename` field naming the `previousName` still being swept; it disappears once the move is done,
and `GET /api/v1/Labels` reports the same field while you wait. Its presence is the whole signal, so poll until it goes.

A label's `resourceType` can no longer be changed and returns `400`; create a label of the intended type instead.
Editing or deleting a label whose rename has not finished returns `409`. A sweep that hits a transient failure retries
itself.

## The processing record state is gone

records, schema

**v1.12.0** `RecordState` no longer has `processing`; a record is now `active`, `draft`, `archived`, or `deleted`, and
new records come back `active` straight away. If you branch on or filter by `state`, drop the `processing` case (it is
removed from `RecordDto.state`, the `GET /Records` `states` filter, and `GET /Records/filters/states`). Records created
under the old state come back as `active`, so nothing is left unreadable.

## July 28, 2026

## Export Records across multiple Minis

records, export, release

**v1.11.0** New `POST /api/v1/Records/export` returns one CSV covering the Records of one or more Minis in a single
request. Send the Mini ids in the body (`miniIds`), with the same optional `labels`, `states`, `startDate`, `endDate`,
and `sortDescending` filters as before. Each row leads with `Mini Name`, `Mini ID`, and `Record ID` so you can tell
whose record is whose and feed the ids back into the API, and any Mini id outside your organisation or access is left
out.

The single-Mini `GET /api/v1/Records/export` is now **deprecated** and will be removed in the next major version. To
migrate, call the new POST with a one-element `miniIds` list for the same result.

## Attachments no longer return uri

attachments, schema

**v1.10.0** Download an attachment with `GET /api/v1/Records/{recordId}/attachments/{attachmentId}`. The `uri` field on
each attachment is removed: it held a storage-relative filename you could not fetch. It was a required field, so
regenerate your SDK before upgrading.

## July 27, 2026

## See who authored a skill

schema

**v1.9.0** Read who created a skill from `createdBy` on the skill listing and detail responses, and who last changed it
from `updatedBy` on the detail response. Both carry a user id, and are null for skills written before authorship was
tracked.

## July 20, 2026

## Nullable schema representation updated

schema, release

**v1.8.1** Nullable properties that reference another schema now express null via an explicit `enum: [null]` branch in
their `oneOf` list, instead of a top-level `nullable: true` flag, from an OpenAPI generator upgrade. Behaviour is
unchanged and this is a safe upgrade.

## July 13, 2026

## Skill assets report their size

skills, attachments, schema

**v1.8.0** Each skill asset now carries a `size` field (in bytes), so you can display or budget storage without
downloading the file first.

## Explicit type on nullable enum fields

schema, release

**v1.6.1** Nullable enum fields now declare `"type": "string"` next to their `oneOf` reference in the spec, from an
OpenAPI generator upgrade. Behaviour is unchanged and this is a safe upgrade.

## July 9, 2026

## Restore an archived workspace skill

skills

**v1.7.0** Return an archived skill to active with `POST /Skills/{id}/restore`. The skill becomes available to the
workspace again and regains standard retention. Only archived skills can be restored.

_Showing the 20 most recent of 28 entries. Append `/llms.txt` to the changelog URL for the complete index._