Reply Craft is a SkillSafe app, so it speaks the platform's app API rather than one of its own. Three things are worth knowing before you write any code, because each of them has cost a working integration:
The slug is bound to the token
Endpoints are /v1/app-api/guest, /me, /estimate,
/run and /run-stream on https://api.skillsafe.ai. There is no
/apps/reply-craft/ path segment — you name the slug once, when you mint the token, and
every later call is scoped by it. A slug in the path returns 404 not_found.
The body is the input object
/run and /run-stream take the input object directly. Not
{"input": {...}}. The fields are the five documented below.
Estimate is free, run is not
/estimate creates no job and charges nothing; it returns the worst-case hold, the minimum,
and the model binding. Use it to price and to preflight. Send an Idempotency-Key on every
/run so a retried POST replays instead of billing twice.
| Call | What it does | Cost |
|---|
| Field | Type | Meaning |
|---|
Long pastes are clipped from the middle, keeping both ends, with a
[... middle of the message omitted - N characters cut ...] marker in place of the cut. A support
thread states its ask in the last paragraph as often as the first, so a head-only truncation deletes the part
the reply has to answer. The model is told what the marker means and routes anything the cut might have
answered into Verify before sending.
Need a token? Mint one here. Guest tokens are
minted by the first call above and are enough for /estimate; drafting a reply on this app needs a
signed-in account, because guest runs are disabled.
A run returns plain text in a tagged, sectioned shape. The app's parser discards any reply that breaks it, so treat this as the schema: