Preview Page
A page of chunks from an already computed preview, straight from the cache (no
recomputation) — pagination by preview_id, obtained from POST/GET /orders/chunks/preview.
Spec fixes · 2
Pagination does not live in
data.metaFour
per_pagedescriptions promise pagination metadata indata.meta. No public API response contains that key: a page arrives flat —data.items[]plusdata.current_page,data.last_page,data.per_page,data.total. Code readingdata.meta.totalgetsundefined.Chunk preview is available with an API key
The machine-readable
llm.md§12 claims chunk preview is a web-cabinet endpoint that returns401for API keys. That is wrong: all three preview operations are part of the public surface and require theorders.readscope — as described by both the OpenAPI document and §7.1 of the very samellm.md. If an AI assistant cites §12, it is mistaken.
- 200
status=ready— a page of chunks + pagination meta. A page out of range returns an emptychunks[]withhas_more=false. - 202
status=processing— the calculation is still running. - 404 — the preview was not found, expired (TTL ~30 min) or the calculation
failed — resubmit via
POST /orders/chunks/preview.
Required key permission: orders.read.
On this page(4)
Parameters
The inputs live inside the request line: fill in a value and you get a ready URL. Below are the type, whether it is required and the allowed values of every parameter.
- stringin pathrequired
Preview id — a sha256 hash (64 lowercase characters, NO dashes), not a UUID.
Take it from the
preview_idfield of aPOST/GET /orders/chunks/previewresponse. Someone else'spreview_idreturns404— the cache is isolated per key owner.The value goes straight into the request line above.
- integerin queryoptional≥ 1
Page number, starting at
1. - integerin queryoptional1..500
How many records to return per page. Pagination metadata sits next to
items:current_page,last_page,per_page,total.
Possible responses
200Success. The payload is in data.
Success. The payload is in data.
{
"success": true,
"message": "string",
"data": {
"status": "string",
"preview_id": "string",
"summary": "string",
"chunks": [
"string"
],
"page": "string"
}
}Success flag. Branch on the HTTP status code instead: any 2xx response carries true here, while an error comes back in a different shape that need not contain this field at all.
A human-readable note in the account language. Fine to show to a user; do not parse it — the wording changes without notice and is not an error code.
datarequiredThe response payload.
object
The response payload.
Always ready for a 200 response — the calculation is done.
A content-based preview id (sha256 of text+template+mode+algorithm version). Use it for incremental re-preview (previous_preview_id) and for pagination (GET .../{previewId}).
Totals for the whole text — not just the current page of chunks.
Only the CURRENT page (see data.page), not the full list — use pagination (GET .../{previewId}?page=) for the rest.
Pagination meta for the CURRENT page of data.chunks.
202Accepted for processing. The result arrives asynchronously.
Accepted for processing. The result arrives asynchronously.
{
"success": true,
"message": "string",
"data": {
"status": "string",
"preview_id": "string",
"summary": "string",
"chunks": [
"string"
],
"page": "string"
}
}Success flag. Branch on the HTTP status code instead: any 2xx response carries true here, while an error comes back in a different shape that need not contain this field at all.
A human-readable note in the account language. Fine to show to a user; do not parse it — the wording changes without notice and is not an error code.
datarequiredThe response payload.
object
The response payload.
Always processing for a 202 response — the calculation is running in the background.
The preview id. Use it to subscribe to the private-chunks.preview.{userId} WS channel (the .ready event), or to poll GET /orders/chunks/preview/{previewId} manually.
Totals for the whole text — not just the current page of chunks.
Only the CURRENT page (see data.page), not the full list — use pagination (GET .../{previewId}?page=) for the rest.
Pagination meta for the CURRENT page of data.chunks.
401The key is missing, unknown, disabled or expired.
The key is missing, unknown, disabled or expired.
{
"success": false,
"message": "API key is missing. Provide it in the X-API-KEY header.",
"data": null
}Always false in error responses.
Error text in the key's language (set through the X-Locale header).
Always null when the request is rejected before processing.
403The key lacks the required permission, or the object belongs to another user.
The key lacks the required permission, or the object belongs to another user.
{
"success": false,
"message": "This API key does not have permission to perform this action."
}Always false in error responses.
Error text in the key's language (set through the X-Locale header).
404Not found, or not reachable with this key.
Not found, or not reachable with this key.
{
"success": false,
"message": "Resource not found."
}Always false in error responses.
The reason for the rejection in words, in the account language. Meant for display; do not branch on it, the wording changes.
A per-field breakdown — present only on validation errors (422): the key names a request field, the value lists the complaints about it. Other codes send null, since there is nothing to break down and the whole reason is in message.
422Validation error. Offending fields are listed in errors.
Validation error. Offending fields are listed in errors.
{
"message": "string",
"errors": {}
}Errors overview.
errorsrequiredA detailed description of each field that failed validation.
object
A detailed description of each field that failed validation.
429Limit exceeded: either the key's request rate or its token quota. Retry no earlier than Retry-After.
Limit exceeded: either the key's request rate or its token quota. Retry no earlier than Retry-After.
{
"success": false,
"message": "Too many attempts. Please wait a moment and try again.",
"reason": "rate_limit_exceeded",
"error_code": "rate_limit_exceeded",
"retry_after": 30
}Always false in error responses.
Error text in the key's language (set through the X-Locale header).
Machine-readable failure reason — branch on this, not on the message text.
The same machine-readable code as in reason — a second name for the field. The values always match; branch on either.
How many seconds to wait before retrying (the same value is in the Retry-After header).
Events this produces
Progress arrives over WebSocket: polling the order in a loop is not required. Subscribing needs the same scope as reading orders.
Nearby
The same in words
Neighbouring operations
Feed this page to an AI
spec 0.0.1