read_release
Start using a whole release: overview, licence text, the publisher's instructions for agents, and the file tree; optionally every file's contents, page by page. For large releases the CLI or the ZIP is faster.
Ask for it in plain words#
Inputs#
| Name | Type | Required | What it does |
|---|---|---|---|
identifier | string | yes | The product's identifier, for example sotto. |
release | string | no | Optional pin: the version you saw in an earlier result. |
include_contents | boolean | no | Also return every file's contents, a page at a time. Default false: the first result is the overview, the licence, the publisher's instructions and the file tree. |
cursor | string | no | From the previous result's nextCursor. |
Example#
For a large release, the CLI (orvio pull) or the ZIP download is faster than reading every file through the tool.
The example ran over Orvio's synthetic test catalog (a product called Fixture Studio), so its names and values differ from the products you will see. The shape is exactly what the server returns.
Request
{ "identifier": "fixture-studio" }
Result (shortened)
{ "release": { "product": "fixture-studio", "version": "1.1.0", "releaseId": "f1000000-0000-4000-8000-000000000002", "publishedAt": "2026-10-05T00:00:00Z" }, "product": { "identifier": "fixture-studio", "name": "Fixture Studio", "description": "Synthetic portfolio website for tests.", "type": "website", "url": "https://orvio.test/products/fixture-studio" }, "licence": { "id": "LicenseRef-Orvio-Fixture-Synthetic", "path": "licenses/LICENSE.md", "thirdPartyNotices": null }, "instructions": { "path": "agent/instructions.md" }, "tree": { "files": 23, "bytes": 534475, "firstPage": [ { "path": "agent/assets.json", "sourcePath": null, "bytes": 956, "sha256": "8d6c666f1af7…", "executable": false, "area": "package" }, { "path": "agent/components.json", "sourcePath": null, "bytes": 2612, "sha256": "61833447f6a1…", "executable": false, "area": "package" }, { "path": "agent/instructions.md", "sourcePath": null, "bytes": 3062, "sha256": "f87e2ab3fba5…", "executable": false, "area": "package" }, … ], "nextCursor": null } }
Left out of the example: source, designSystem, licenceText, thirdPartyNoticesText, instructionsText.
What comes back#
| Field | What it holds |
|---|---|
release | Product, version, release id and publication date. |
tree | The file tree: counts, and the files with path, size and SHA-256. Paged. |
files | File contents, one page at a time, when include_contents is true. |
warnings | Heads-ups that do not stop the call, such as a membership payment problem. Usually empty. |
Every result also carries what the request needs to be checked: the release (product, version, published date), the licence and notes, when they apply.
Paging#
When nextCursor is not null, call again with cursor set to it. A cursor belongs to your account, to that call's inputs and to that release, and it expires after 60 minutes. After a new release it answers release_replaced. See Limits and pagination.
Errors#
| Code | Means | What to do |
|---|---|---|
product_unavailable | No listed product has that identifier. | Search the catalog with search_products. |
release_withdrawn | The whole product was taken down for now. | Search the catalog for something similar with search_products. |
release_replaced | A newer release was published since the version you named or the cursor you used. | Call the tool again without a release to use 0.1.3. |
invalid_input | The arguments do not match the tool's schema, or the cursor is not valid. | Fix the input and call the tool again. |
HTTP 401, 403 or 429 | Before the tool runs: the sign-in is not valid, the membership does not allow access, or there were too many requests. | See Errors and fixes. |
Every tool can also answer service_unavailable and integrity_error: try again in a few minutes.