upload_files
#validation_error:upload_files
What the agent reads: begin_upload needs at least one file, and every file needs a valid name, content type and size.
What to do: Pass files: [{ name, content_type, bytes }] for each file; details.issues names every problem, and no session was created.
The JSON block also carries issues.
upload_kind
#validation_error:upload_kind
What the agent reads: This server doesn't accept skill files yet; they arrive with release 2.
What to do: Stage images with kind "image"; publish skills from the dashboard until then.
The JSON block also carries kind, accepted_kinds.
upload_session
#validation_error:upload_session
What the agent reads: That upload_session doesn't exist for this account, or it has been cleaned up.
What to do: Call begin_upload, upload each file with its curl line, then pass { upload_session, name }.
The JSON block also carries upload_session.
staged_name
#validation_error:staged_name
What the agent reads: That name isn't one of this upload session's files.
What to do: Use exactly a name you passed to begin_upload for this session.
The JSON block also carries upload_session, name.
staged_missing
can succeed on retry#validation_error:staged_missing
What the agent reads: That file hasn't been uploaded yet.
What to do: Run its curl line from begin_upload (each URL is valid for 2 hours), then call again.
The JSON block also carries upload_session, name.
staged_kind
#validation_error:staged_kind
What the agent reads: That upload session holds skill files, not images.
What to do: Stage images with begin_upload { kind: "image" } and pass that session instead.
The JSON block also carries upload_session.
staged_too_large
#validation_error:staged_too_large
What the agent reads: That staged file is larger than this upload accepts.
What to do: Start a new begin_upload session and upload a file under details.limit_bytes.
The JSON block also carries limit_bytes.
images
#validation_error:images
What the agent reads: Some images can't be saved.
What to do: Each entry in details.image_errors names the image by its index in images and says what to fix; correct those and call again.
The JSON block also carries image_errors.
too_many_images
#validation_error:too_many_images
What the agent reads: Too many images for this item.
What to do: Send at most details.max images; get_publishing_rules lists the cap per entity.
The JSON block also carries max.
image_type_mismatch
#validation_error:image_type_mismatch
What the agent reads: The image's bytes don't match its content_type.
What to do: Set content_type to the image's real type (PNG, JPEG, WebP or GIF), or convert the file.
image_unknown_type
#validation_error:image_unknown_type
What the agent reads: That file isn't a PNG, JPEG, WebP or GIF image.
What to do: Convert it to PNG, JPEG, WebP or GIF and send it again.
image_decode
#validation_error:image_decode
What the agent reads: That image couldn't be decoded.
What to do: Re-export it as a standard PNG or JPEG and send it again.
image_too_large
#validation_error:image_too_large
What the agent reads: That image is too large to store, even after re-encoding.
What to do: Send a smaller image; a GIF is stored as it is and must be under 2 MB.
image_path
#validation_error:image_path
What the agent reads: That path isn't one of this item's images.
What to do: To keep an image, pass a path from images in the latest read or write response; to add one, stage it or send it inline.
inline_data_uri
#validation_error:inline_data_uri
What the agent reads: data_base64 must be the bare base64, without a data: prefix.
What to do: Send only the part after the comma: iVBORw0KGgo… rather than data:image/png;base64,iVBORw0KGgo….
inline_base64
#validation_error:inline_base64
What the agent reads: data_base64 isn't valid base64.
What to do: Send standard base64 of the image bytes (A to Z, a to z, 0 to 9, + and /, with = padding).
inline_too_large
#validation_error:inline_too_large
What the agent reads: An inline image can be at most 256 KB decoded (about 350,000 characters of base64).
What to do: Stage anything larger, and anything from disk, with begin_upload and pass { upload_session, name }.
The JSON block also carries limit_bytes.
inline_budget
#validation_error:inline_budget
What the agent reads: One call can carry at most 3 MB of inline data across images and files.
What to do: Stage the larger images with begin_upload and pass { upload_session, name } instead.
The JSON block also carries limit_bytes.
images_token_required
#validation_error:images_token_required
What the agent reads: This item already has images, so changing them needs its images_token.
What to do: Send the update again with details.images_token (the set it covers is details.images), or read the item first.
The JSON block also carries images, images_token.
images_token_malformed
#validation_error:images_token_malformed
What the agent reads: images_token isn't a token this server issued.
What to do: Pass the images_token from the latest read or write response unchanged.
images_after_create
#validation_error:images_after_create
What the agent reads: The draft was created, but its images weren't saved.
What to do: Retry the images alone with the update tool on details.created_id; details.image_errors says what to fix. Never create the item again.
The JSON block also carries created_id, image_errors.
prompt_category
#validation_error:prompt_category
What the agent reads: That category doesn't exist.
What to do: Pass a slug from list_categories, or leave category out.
The JSON block also carries category.
prompt_variables
#validation_error:prompt_variables
What the agent reads: The body's {{variables}} can't all be recorded: too many, or one name is too long.
What to do: Keep to the limits get_publishing_rules lists for variables, or pass variables explicitly with the body.
prompt_variables_without_body
#validation_error:prompt_variables_without_body
What the agent reads: variables change only together with the body: one version holds both.
What to do: Send body with variables, or send body alone and the variables are read from its {{names}}.
prompt_update_empty
#validation_error:prompt_update_empty
What the agent reads: update_prompt was called with nothing to change.
What to do: Send at least one field to change; every field you leave out keeps its value.
skill_package
#validation_error:skill_package
What the agent reads: The skill package isn't valid.
What to do: Fix every entry in details.issues (each names a path and a reason) and send the package again; get_publishing_rules lists the live limits.
The JSON block also carries issues.
skill_inline_file
#validation_error:skill_inline_file
What the agent reads: An inline skill file needs exactly one of content or content_base64.
What to do: Send text as content and a binary file, such as an image, as bare base64 in content_base64.
The JSON block also carries path.
skill_inline_budget
#validation_error:skill_inline_budget
What the agent reads: An inline skill package can carry at most 3 MB of decoded content in one call, images included.
What to do: Stage the files with begin_upload { kind: "skill_file" }, run the curl lines, and pass { kind: "staged", upload_session } instead.
The JSON block also carries limit_bytes.
skill_inline_time
#validation_error:skill_inline_time
What the agent reads: This inline package has too many files to stage within one call.
What to do: Stage the files with begin_upload { kind: "skill_file" }, run the curl lines, and pass { kind: "staged", upload_session } instead.
The JSON block also carries max_files.
skill_github_source
#validation_error:skill_github_source
What the agent reads: The GitHub source isn't valid.
What to do: Pass url as https://github.com/owner/repo, ref as a branch, tag or commit, and subdir as a folder path inside the repository.
The JSON block also carries fieldErrors.
skill_session_kind
#validation_error:skill_session_kind
What the agent reads: That upload session holds images, not skill files.
What to do: Stage skill files with begin_upload { kind: "skill_file" } and pass that session as the source.
The JSON block also carries upload_session.
skill_staged_missing
can succeed on retry#validation_error:skill_staged_missing
What the agent reads: Some files of that upload session were never uploaded.
What to do: Run the curl line of each file in details.missing (each URL works for 2 hours), then call again with the same session.
The JSON block also carries upload_session, missing.
skill_staged_changed
#validation_error:skill_staged_changed
What the agent reads: Files in that upload session changed after the dry run.
What to do: Run the dry run again to see the files as they are now, or upload what you meant, then call again.
The JSON block also carries upload_session, changed.
skill_no_version
#validation_error:skill_no_version
What the agent reads: The skill has no files registered yet, so it can't be submitted.
What to do: Register a package first with update_skill and a source, then call publish_skill.
skill_install_target
#validation_error:skill_install_target
What the agent reads: Name the skill to install with exactly one of skill_id or ref.
What to do: Pass skill_id (from search results or a public page) or ref as handle/slug, not both.
skill_cursor
#validation_error:skill_cursor
What the agent reads: That cursor isn't one this server issued.
What to do: Pass the next_cursor from the previous list_my_skills response unchanged, or omit cursor to start from the newest.
blog_status_published
#validation_error:blog_status_published
What the agent reads: An app can't publish a blog post: status takes draft or unlisted here.
What to do: Save it as draft, or as unlisted to share it by link, then publish it with one click from My Blogs in the dashboard (/dashboard/blog/mine).
The JSON block also carries fieldErrors.
prompt_not_linkable
#validation_error:prompt_not_linkable
What the agent reads: You can only link one of your own prompts.
What to do: list_my_prompts lists them: pass one of their ids as prompt_id, omit the field, or send null to unlink.
The JSON block also carries fieldErrors.
skill_not_linkable
#validation_error:skill_not_linkable
What the agent reads: You can only link a skill you own.
What to do: list_my_skills lists them: pass one of their ids as skill_id, omit the field, or send null to unlink.
The JSON block also carries fieldErrors.
challenge_not_linkable
#validation_error:challenge_not_linkable
What the agent reads: You can only link a challenge you posted or submitted a solution to, and only while it is still live.
What to do: Pass the id of such a challenge as request_id, omit the field, or send null to unlink.
The JSON block also carries fieldErrors.
staged_over_declared
#validation_error:staged_over_declared
What the agent reads: That staged file is larger than the size begin_upload declared for it.
What to do: Call begin_upload again with each file's exact size on disk in bytes, run the new curl lines, and pass the new upload_session.
The JSON block also carries upload_session, name, declared_bytes, bytes.