SaveWorkflowInput
Publish-skill payload aligned with the Claude Code skills convention. Required top-level fields mirror a Claude Code ``SKILL.md`` frontmatter: ``name`` (kebab-case handle) and ``description`` (one-sentence summary). ``outcome`` and ``tags`` are top-level discovery facets surfaced by ``list_skills``; everything else lives in the ``body`` and is opaque to the registry. Skills are always private to the caller. Public sharing is the ``templates`` surface (``publish_template_version`` / ``fork_template``); there is no ``visibility`` knob on a skill row. Unknown fields are silently dropped (``extra="ignore"``). Fields such as ``manifest``, ``visibility``, and ``kpi`` do not cause validation errors and are simply ignored. The server accepts both ``slug`` and ``name`` as input for the skill handle. Responses return both ``name`` and ``slug`` fields with identical values.
Properties
| Name | Type | Description |
|---|---|---|
| name | string | Skill name in kebab-case (lowercase letters, digits, and hyphens). Doubles as the slug and is unique within your namespace. |
| skill_id | object | Target a specific skill to edit. Omit it to save in your own namespace: the call updates your own skill of this name, or creates a new one. Supply it to update a specific skill you own or have edit ac |
| description | string | One-sentence summary of what the skill does and when to use it. This is the text that decides when the skill fires. |
| body | string | The skill runbook as markdown: the full set of instructions an agent follows on the user's behalf. |
| tags | array | Discovery tags surfaced when listing and searching skills. When omitted on an update, the existing tags are preserved; send an empty list to clear them. |
| outcome | object | The business outcome this skill is meant to drive, surfaced as a discovery facet. When omitted on an update, the existing outcome is preserved; send null to clear it. |
| verifiers | object | Semantic verifier references this skill invokes on agent output. Each entry names a deployed verifier by id or id@version. When omitted on an update, the existing list is preserved unchanged. |
| image_generators | object | Image generator references for this skill. Each entry binds a local name (used in generation steps) to a generator reference. The reference is either a platform-managed quality tier (``system: |
| files | object | Sibling files bundled with the skill. Include a 'demo/README.md' writeup with images referenced by relative path inside 'demo/' to render a visual demo on the public template page once the skill is pu |
| expected_version_token | object | Concurrency token from the latest known version, required when editing an existing skill so a stale overwrite is rejected. Omit when creating a new skill. |
| source | object | Attributes the saved version to how it was produced ('manual', 'teach', 'optimization', 'description_optimization', or 'audit'); omit to leave it unset. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/goodeye-dev/json-schema/goodeye-dev-save-workflow-input-schema.json",
"title": "SaveWorkflowInput",
"description": "Publish-skill payload aligned with the Claude Code skills convention.\n\nRequired top-level fields mirror a Claude Code ``SKILL.md`` frontmatter:\n``name`` (kebab-case handle) and ``description`` (one-sentence summary).\n``outcome`` and ``tags`` are top-level discovery facets surfaced by\n``list_skills``; everything else lives in the ``body`` and is opaque\nto the registry.\n\nSkills are always private to the caller. Public sharing is the\n``templates`` surface (``publish_template_version`` / ``fork_template``);\nthere is no ``visibility`` knob on a skill row.\n\nUnknown fields are silently dropped (``extra=\"ignore\"``). Fields such as\n``manifest``, ``visibility``, and ``kpi`` do not cause validation errors\nand are simply ignored.\n\nThe server accepts both ``slug`` and ``name`` as input for the skill\nhandle. Responses return both ``name`` and ``slug`` fields with identical\nvalues.",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/goodeye-dev-openapi.json#/components/schemas/SaveWorkflowInput",
"properties": {
"name": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"pattern": "^[a-z0-9][a-z0-9-]*$",
"title": "Name",
"description": "Skill name in kebab-case (lowercase letters, digits, and hyphens). Doubles as the slug and is unique within your namespace."
},
"skill_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Skill Id",
"description": "Target a specific skill to edit. Omit it to save in your own namespace: the call updates your own skill of this name, or creates a new one. Supply it to update a specific skill you own or have edit access to; ``name`` must match that skill's name."
},
"description": {
"type": "string",
"maxLength": 1024,
"minLength": 1,
"title": "Description",
"description": "One-sentence summary of what the skill does and when to use it. This is the text that decides when the skill fires."
},
"body": {
"type": "string",
"minLength": 1,
"title": "Body",
"description": "The skill runbook as markdown: the full set of instructions an agent follows on the user's behalf."
},
"tags": {
"items": {
"type": "string"
},
"type": "array",
"title": "Tags",
"description": "Discovery tags surfaced when listing and searching skills. When omitted on an update, the existing tags are preserved; send an empty list to clear them."
},
"outcome": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Outcome",
"description": "The business outcome this skill is meant to drive, surfaced as a discovery facet. When omitted on an update, the existing outcome is preserved; send null to clear it."
},
"verifiers": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Verifiers",
"description": "Semantic verifier references this skill invokes on agent output. Each entry names a deployed verifier by id or id@version. When omitted on an update, the existing list is preserved unchanged."
},
"image_generators": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Image Generators",
"description": "Image generator references for this skill. Each entry binds a local name (used in generation steps) to a generator reference. The reference is either a platform-managed quality tier (``system:<tier>``) or a specific deployed generator (``uuid`` or ``uuid@version``). When omitted on an update, the existing list is preserved unchanged."
},
"files": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/FileEntry"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Files",
"description": "Sibling files bundled with the skill. Include a 'demo/README.md' writeup with images referenced by relative path inside 'demo/' to render a visual demo on the public template page once the skill is published as a template. A supplied list is a full snapshot: any path you do not include is deleted. Omitting the field entirely preserves the existing tree unchanged; to change specific files without resending the rest, use `update_skill_files` instead."
},
"expected_version_token": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Expected Version Token",
"description": "Concurrency token from the latest known version, required when editing an existing skill so a stale overwrite is rejected. Omit when creating a new skill."
},
"source": {
"anyOf": [
{
"type": "string",
"enum": [
"manual",
"teach",
"optimization",
"description_optimization",
"audit"
]
},
{
"type": "null"
}
],
"title": "Source",
"description": "Attributes the saved version to how it was produced ('manual', 'teach', 'optimization', 'description_optimization', or 'audit'); omit to leave it unset."
}
},
"type": "object",
"required": [
"name",
"description",
"body",
"expected_version_token"
],
"$defs": {
"FileEntry": {
"properties": {
"path": {
"type": "string",
"maxLength": 1024,
"title": "Path",
"description": "Normalized relative POSIX path for this file within the bundle (e.g. 'references/rubric.md'). Must not be empty, absolute, contain '..' or '.' segments, empty segments (a trailing slash or 'foo//bar'), backslashes, or ASCII control characters."
},
"executable": {
"type": "boolean",
"title": "Executable",
"description": "Whether the file should be marked executable when extracted.",
"default": false
},
"purpose": {
"anyOf": [
{
"type": "string",
"maxLength": 1024
},
{
"type": "null"
}
],
"title": "Purpose",
"description": "Short label describing the file's role in the skill (optional)."
},
"content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Content",
"description": "Inline file content as a UTF-8 text string, stored verbatim. Use 'content_base64' for binary files. Mutually exclusive with 'content_base64' and 'sha256'."
},
"content_base64": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Content Base64",
"description": "Inline binary file content as base64-encoded bytes, decoded on receipt. Mutually exclusive with 'content' and 'sha256'."
},
"sha256": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sha256",
"description": "Hex SHA-256 digest referencing a blob already known to the registry. Mutually exclusive with 'content' and 'content_base64'."
}
},
"type": "object",
"required": [
"path"
],
"title": "FileEntry",
"description": "A single file in a skill bundle.\n\nExactly one of ``content``, ``content_base64``, or ``sha256`` must be\nprovided. Provide ``content`` to inline a UTF-8 text file (it is stored\nverbatim as the given text; it is never reinterpreted as base64). Provide\n``content_base64`` to inline a binary file (base64-encoded bytes, decoded\non receipt). Provide ``sha256`` to reference a blob the registry can\nalready read."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/goodeye-dev-save-workflow-input"
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.