Results
Prismlet sends each text to a language model, which answers the prism's questions. A result is one set of fields answered by one prism version. Every answered text becomes a result, whether it came from the API, from Try in the app or from a file run, and each one has a UUID id.
What a result holds
Section titled “What a result holds”| Stored | Returned by the API |
|---|---|
| The fields you sent | In CSV, TSV and JSON Lines rows, under the latest version's field columns. A field the latest version dropped is not returned. Not in json or raw. |
| Every probability | As answers with format=raw, and through the Lens with format=json. |
| The version that answered | As version. |
Your reference (ref) |
As ref, in every format. |
status and error |
In the envelope and in every row. |
| How long the model took | As took_ms. |
| When it was saved | As created_at, ISO 8601 in UTC with milliseconds, such as 2026-09-23T09:14:02.187Z. |
Prismlet keeps the answers in full and applies the Lens each time you read a result. That is why Lens edits relabel old results.
OK and Failed
Section titled “OK and Failed”A result is ok when every question came back with an answer. It is failed when the model gave no usable answer, because it timed out, was unreachable, returned an error or left a question unanswered.
A failed result is saved like any other. Its answers is null and its error says what went wrong:
{ "id": "0192f5c3-2b4e-7d10-8a61-5e0f9c7d2a13", "ref": "TCK-8812", "prism": "support-routing", "version": 3, "status": "failed", "error": "The model took too long to answer, so we stopped after 15 seconds.", "took_ms": 15012, "created_at": "2026-09-23T09:15:40.502Z", "answers": null}error says in plain words why the result failed, such as The model took too long to answer, so we stopped after 15 seconds. Show or log it, but don't parse it, because the wording can change.
The call that made a failed result answers 502. Reading it later with GET /v1/results/{result_id} answers 200, because the read itself worked. Check status in the body.
Retries
Section titled “Retries”Retrying a failed result sends its stored fields to the model again, against the same prism version, and saves the answer as a new result with a new id. The old result keeps its failed status. The app links the two, but the API response carries no link, so keep the new id yourself.
Errors and retries covers the rules and a repeat-safe way to call.
Reference (ref)
Section titled “Reference (ref)”ref is your own id for the text, such as a ticket number. You send it with the call, and it comes back in the envelope and in every row, so you can match a result to your record without storing our id. It does not have to be unique, and it is trimmed and at most 200 characters. The app's file runs use it for the row number when you don't map a column to it.
Reading a result
Section titled “Reading a result”GET /v1/results/{result_id} returns any result in your account, whichever key, person or file run made it. It never asks the model. Results of an archived prism stay readable.
curl https://api.prismlet.com/v1/results/0192f5c1-7c1a-7b3e-9f55-3c1d2e4a5b6c \ -H "Authorization: Bearer $PRISMLET_API_KEY"It takes the same format as the other endpoints. Keep the id of every result you need to read again, because no endpoint lists results.