POST /api/v1/skills/route takes a user’s message and answers with the skills to show the model for it, plus a routing_id that ties the run to that answer. It needs an API key and is on every plan.
Every framework’s agent_config() makes these calls for you, so you need this page only to call the API directly. Setup is on Frameworks. What the model receives is on How skills reach the model.
Route a message
An optional
X-Decimal-Route-Budget: <seconds> header, up to 30, says how long you’ll wait for the answer.
The answer
GET /api/v1/skills/menu returns the full_menu shape with no message to rank by.
When something fell back, the answer adds
degraded: true and a reason:
Errors
Errors has the body shape.Load a skill’s text
name, version, version_id, skill_id, description, body, truncated, total_chars, content_hash and content_hash_matches_body.
content_hash names the version: it’s the SHA-256 of the full text. Copy it onto the trace rather than computing your own. This route doesn’t count loads: the limits on a run are the SDK’s.
Raw trace ingest: the manifest handshake
A load reports back through the trace. Without the SDK, that takes three calls:- Register a manifest, once per agent version:
POST /api/v1/manifestswithmanifest_hash(required),agent_name,version_labelandcomponents. Keep themanifest_idit returns. - Route the message and put
prompt_fragmentin your system prompt. Keep therouting_id. - Send the trace with
POST /api/v1/traces:
From Python with no framework,
decimalai.ingest_raw(payload) posts the same dict.