---
title: "Validate an instruction skill (live editor validation)"
method: POST
path: "/v1/authored-skills/instructions/validate"
tags: ["authored-skills"]
---

# Validate an instruction skill (live editor validation)

`POST /v1/authored-skills/instructions/validate`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/authored-skills/instructions/validate`
- Auth: HTTP bearer

Validate the simple instruction-skill form (name + description + plain-markdown instructions) WITHOUT saving. Returns friendly, non-technical errors for the editor to show inline. Always 200.

## Headers

- `X-Tenant-Id` string, nullable

## Request body

- InstructionSkillBody: The SIMPLE instruction-skill form: a name, a short description, and plain-markdown instructions. The default "Build a skill" experience for a non-engineer. No semver, no YAML, no schedules; the server derives the slug + manages the version. ``recommended_integrations`` are app slugs (from the integrations catalog) a teammate enabling the skill is nudged to connect if missing.
  - `title` string, required: The skill's name, e.g. 'Refund policy'.
  - `description` string, nullable: A one-line summary of what the skill helps with.
  - `instructions` string, required: Plain-markdown guidance: when someone asks about X, do Y; use our tone; check Z first.
  - `recommended_integrations` string[]: App slugs from the integrations catalog to recommend connecting for this skill.
  - `skill_id` string, uuid, nullable: When editing an existing instruction skill, its id. An edit targets this skill and keeps its identity even if the name changed. Omit when creating a new skill.

## Response `200`

Successful Response

- ValidationResponse: The result of validating a manifest: friendly errors for the live editor.
  - `valid` boolean, required
  - `slug` string, nullable
  - `title` string, nullable
  - `description` string, nullable
  - `delivery_mode` string, nullable
  - `errors` string[]

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)
- `409`: Conflict
- `422`: Validation error

---

[API](https://skmtc.dev/patricia/apis/patricia-api.md) · [All operations](https://skmtc.dev/patricia/apis/patricia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/patricia/apis/patricia-api/revisions/0dfb44495ea1?raw)
