Create a Sume Format over the API: auto_init and the first package sha
POST /v1/formats with auto_init (default true) commits a minimal SKILL.md and returns package_sha, contents_url and vanity_invoke_url. Keep all three.

POST /v1/formats creates a Sume Format record, and with auto_init (default true) it also commits a minimal valid SKILL.md, so you can read and write the package right away. The reply carries package_sha, contents_url and vanity_invoke_url. Keep package_sha for the first If-Match and contents_url for the files. The create body does not accept package files, because the Contents API is the place for those. Source: Editing a Format package, read 2026-10-06.
What do I get back?
Three values drive the next steps.
| Field | Use |
|---|---|
package_sha | The If-Match value for your first package-wide write |
contents_url | Read and commit files |
vanity_invoke_url | The run URL, /v1/formats/{handle}/{slug}/runs |
What can go wrong?
A slug that is already taken returns 409 skill_slug_taken, and a reserved one returns 409 skill_slug_reserved. If the Git backend is down you get 503 format_git_unavailable. Pick another slug or retry later.
Sources
Related posts
More in Formats
- enum and const in a Sume output schema: a status that cannot drift
Use enum and const in a Sume output_schema to pin a status field to values your publisher expects, since oneOf and allOf are rejected. Examples that pass.
- A failed Format run webhook still has the receipt: salvage artifacts
When a Sume Format run fails, the webhook has status ERROR but payload is still the full receipt, with artifacts and output_error. Read them before you retry.
- Format io is null on older Formats: pick by your own input kind
On Sume's Format list, the io block is null for Formats saved before the field existed. Do not route on it alone; read input_kind and output_kind when present.
- Sume Format output_schema: strict false does not loosen the rules
Setting strict to false in a Sume Format output_schema does not relax the OpenAI-strict subset. Fix the schema instead. Responses-style text.format is refused.
Written by Sume