[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-vapi-create-structured-output":3,"mdc-g60q5o-key":43,"related-org-vapi-create-structured-output":887,"related-repo-vapi-create-structured-output":1046},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":38,"sourceUrl":41,"mdContent":42},"create-structured-output","create Vapi structured outputs","Design, create, inspect, update, attach, detach, preview, execute, and verify reusable Vapi Structured Outputs through public API or Server SDK workflows. Use for post-call extraction, typed call artifacts, AI-versus-regex extraction, JSON Schema design, backfilling existing calls, or retrieving structured results programmatically.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"vapi","Vapi","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fvapi.png","VapiAI",[13,17,20,23],{"name":14,"slug":15,"type":16},"Data Extraction","data-extraction","tag",{"name":18,"slug":19,"type":16},"Automation","automation",{"name":21,"slug":22,"type":16},"Agents","agents",{"name":24,"slug":25,"type":16},"API Development","api-development",53,"https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fskills","2026-08-15T03:47:29.348015","MIT",7,[32,33,34,35,36,8,37],"agent-skills","claude-code","codex-skills","openclaw-skills","skills","vapi-ai",{"repoUrl":27,"stars":26,"forks":30,"topics":39,"description":40},[32,33,34,35,36,8,37],"A set of skills and MCP connector to allow agents to build Vapi AI agents, from creating tools and assistants to a phone call","https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fskills\u002Ftree\u002FHEAD\u002Fcreate-structured-output","---\nname: create-structured-output\ndescription: Design, create, inspect, update, attach, detach, preview, execute, and verify reusable Vapi Structured Outputs through public API or Server SDK workflows. Use for post-call extraction, typed call artifacts, AI-versus-regex extraction, JSON Schema design, backfilling existing calls, or retrieving structured results programmatically.\nlicense: MIT\ncompatibility: Internet access is recommended for current Vapi schema verification; VAPI_API_KEY is required for saved resources, assistant attachments, call execution, and result retrieval.\nmetadata:\n  author: vapi\n  version: \"1.0\"\n---\n\n# Vapi Structured Output Creation\n\nBuild the smallest reusable post-call extraction that represents the user's actual downstream contract. Keep definition creation, assistant attachment, execution, and result retrieval separate: success at one stage does not prove the next stage occurred.\n\n## Source and Safety Rules\n\n- Use the configured Vapi documentation MCP when available. Otherwise use current public Vapi API documentation and [API Examples](references\u002Fapi-examples.md). Revalidate request fields and SDK methods before final implementation.\n- Use a private Vapi API key only on a trusted server. Read it from `VAPI_API_KEY`; never print, request in chat, or embed it in source, client-side code, or examples.\n- Never invent resource IDs, call IDs, extraction fields, enum values, data-retention requirements, or customer data.\n- Do not enable `compliancePlan.forceStoreOnHipaaEnabled` unless the user explicitly requests it and confirms that the output cannot contain PHI or other sensitive data.\n- Treat call transcripts, messages, tool results, and extracted values as sensitive customer data. Minimize what is logged or reproduced.\n\n## Procedure\n\n1. Choose the output mode.\n   - For a schema, payload, review, or implementation example, return an artifact without calling Vapi. State that nothing was saved, attached, or executed.\n   - For a reusable saved definition, use `POST \u002Fstructured-output` only when the user asks to create or save it and credentials are available.\n   - For a one-call experiment that does not need a saved definition, pass a transient `structuredOutput` to `POST \u002Fstructured-output\u002Frun` with `previewEnabled: true`.\n   - Treat attachment, detachment, and execution against existing calls as separate requested actions. Do not infer them from creation alone.\n\n2. Define the extraction contract.\n   - Identify the downstream consumer, required fields, optional fields, allowed categories, formats, and behavior when evidence is absent or ambiguous.\n   - Ask only for missing facts that materially change the schema. State safe assumptions for the rest.\n   - Split unrelated outputs when they have different consumers, retention policies, or iteration cycles. Keep one output when the fields form one stable business record.\n\n3. Choose AI or regex.\n   - Use `type: \"ai\"` for meaning, classification, summarization, sentiment, outcome detection, normalization, or facts expressed in varied language.\n   - Use `type: \"regex\"` only for deterministic transcript matching with a stable pattern. Use RE2-compatible syntax and choose a top-level schema type that matches the documented regex result: boolean, string, number\u002Finteger, or array.\n   - Do not use regex to infer meaning. Do not use AI when a literal, stable pattern is the entire requirement.\n\n4. Design the smallest useful JSON Schema.\n   - Include only fields the caller can provide or the call evidence can support.\n   - Add concise descriptions that distinguish semantically similar fields.\n   - Use `enum` for a closed category set, `format` or `pattern` for externally validated strings, and numeric bounds when the business contract defines them.\n   - Mark a field required only when every valid call should produce it. Make conditionally available values optional instead of forcing guesses.\n   - Prefer a primitive schema for a single value and an object only for a cohesive record. Avoid deep nesting unless the downstream contract needs it.\n   - Validate the schema with a standard JSON Schema validator before sending it.\n\n5. Create, inspect, or update the definition.\n   - Keep saved names between 1 and 40 characters.\n   - On create, send `name` and `schema`; add `type`, `description`, `regex`, `model`, or `compliancePlan` only when intentional.\n   - On inspect, resolve the exact resource with list filters or a verified ID, then use `GET \u002Fstructured-output\u002F{id}`. Do not guess from a partial name.\n   - On update, read the current definition first and send only fields that should change. Use `schemaOverride=true` only when intentionally changing the schema's top-level type; otherwise do not use it to bypass schema safety.\n   - Re-fetch after mutation and compare the requested fields. A successful HTTP status without the expected returned state is not verified success.\n\n6. Attach or detach safely.\n   - Prefer the saved Structured Output's documented `assistantIds` relationship for attachment. Read its current `assistantIds`, add or remove exactly the resolved assistant ID, and preserve every unrelated ID.\n   - Patch only `assistantIds` on the Structured Output for this operation. Re-fetch the Structured Output and assistant; verify the relationship and the assistant's `artifactPlan.structuredOutputIds` when returned.\n   - If the implementation instead patches the assistant, first read the assistant and send the complete existing `artifactPlan` with only `structuredOutputIds` changed. Preserve recording, logging, transcript, scorecard, storage, and other artifact settings.\n   - Do not claim that creating a definition attached it. Do not claim that detaching deleted it or removed results already stored on past calls.\n\n7. Preview before broad execution.\n   - Use `POST \u002Fstructured-output\u002Frun` with one real call ID and `previewEnabled: true`. Supply either `structuredOutputId` or a transient `structuredOutput`, not both.\n   - Confirm the selected call contains representative evidence and that the returned value satisfies the schema and business meaning.\n   - State that preview does not update the call artifact.\n   - If extraction is wrong, simplify the schema or improve descriptions before changing models or custom extraction prompts.\n\n8. Execute or backfill only when requested.\n   - Use `previewEnabled: false` or omit it to update call artifacts. Pass no more than the currently documented maximum of 100 call IDs per request.\n   - Before a multi-call run, state the exact output, call count, and that existing values for this output may be replaced while other structured-output values remain.\n   - Use only call IDs supplied by the user or returned by a verified public API query. Report partial failures by call ID; do not imply an all-or-nothing transaction.\n\n9. Retrieve and verify results.\n   - After a normal attached call finishes, allow for post-call processing before checking the call.\n   - Retrieve each call with `GET \u002Fcall\u002F{id}` and read `call.artifact.structuredOutputs[structuredOutputId].result`.\n   - Validate the result against the intended schema and inspect representative source evidence before calling it accurate. Schema validity proves shape, not factual correctness.\n   - Report separately: definition saved, assistant linked, preview returned, call artifact updated, and result validated. Mention only stages actually verified.\n\n## Error Handling\n\n- On `400`, inspect the response for schema, regex, model, relationship, or run constraints. Correct one unambiguous documented issue and retry once; never repeat an unchanged request.\n- On `401` or `403`, stop and report authentication or permission failure.\n- On `404`, report the missing Structured Output, assistant, or call and identify the exact unresolved ID.\n- On `409`, re-read current state before deciding whether the intended relationship or update already exists.\n- On `429` or `5xx`, preserve the request context, report the service condition, and do not claim success.\n- If a result is absent, distinguish processing delay, missing attachment, disabled artifact storage, insufficient call evidence, and extraction failure before recommending a change.\n\n## API Implementation Examples\n\nRead [API Examples](references\u002Fapi-examples.md) when implementation code is needed. Use the official TypeScript or Python Server SDK only after confirming the generated method in its current official reference; use direct REST when SDK syntax is unavailable or unstable.\n\n## Output Contract\n\nReturn only the sections relevant to the request:\n\n- Mode: artifact-only, saved definition, relationship change, preview, or artifact-writing run\n- Assumptions or blocking questions\n- Final schema and Structured Output configuration\n- Created or updated resource ID and verified fields, when mutated\n- Attachment state and preserved relationships, when changed\n- Preview or execution result, affected call IDs, and whether artifacts changed\n- Retrieved result plus schema and evidence limitations\n- Remaining configuration or validation work\n\n## Public Sources\n\n- [Structured Outputs quickstart](https:\u002F\u002Fdocs.vapi.ai\u002Fassistants\u002Fstructured-outputs-quickstart\u002F)\n- [Create Structured Output API](https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-create)\n- [List Structured Outputs API](https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-find-all)\n- [Get Structured Output API](https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-find-one)\n- [Update Structured Output API](https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-update)\n- [Run Structured Output API](https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-run)\n- [Get Call API](https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fcalls\u002Fget\u002F)\n- [Official TypeScript Server SDK reference](https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fserver-sdk-typescript\u002Fblob\u002Fmain\u002Freference.md)\n- [Official Python Server SDK reference](https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fserver-sdk-python\u002Fblob\u002Fmain\u002Freference.md)\n",{"data":44,"body":48},{"name":4,"description":6,"license":29,"compatibility":45,"metadata":46},"Internet access is recommended for current Vapi schema verification; VAPI_API_KEY is required for saved resources, assistant attachments, call execution, and result retrieval.",{"author":8,"version":47},"1.0",{"type":49,"children":50},"root",[51,60,66,73,129,135,627,633,716,722,733,739,744,787,793],{"type":52,"tag":53,"props":54,"children":56},"element","h1",{"id":55},"vapi-structured-output-creation",[57],{"type":58,"value":59},"text","Vapi Structured Output Creation",{"type":52,"tag":61,"props":62,"children":63},"p",{},[64],{"type":58,"value":65},"Build the smallest reusable post-call extraction that represents the user's actual downstream contract. Keep definition creation, assistant attachment, execution, and result retrieval separate: success at one stage does not prove the next stage occurred.",{"type":52,"tag":67,"props":68,"children":70},"h2",{"id":69},"source-and-safety-rules",[71],{"type":58,"value":72},"Source and Safety Rules",{"type":52,"tag":74,"props":75,"children":76},"ul",{},[77,92,106,111,124],{"type":52,"tag":78,"props":79,"children":80},"li",{},[81,83,90],{"type":58,"value":82},"Use the configured Vapi documentation MCP when available. Otherwise use current public Vapi API documentation and ",{"type":52,"tag":84,"props":85,"children":87},"a",{"href":86},"references\u002Fapi-examples.md",[88],{"type":58,"value":89},"API Examples",{"type":58,"value":91},". Revalidate request fields and SDK methods before final implementation.",{"type":52,"tag":78,"props":93,"children":94},{},[95,97,104],{"type":58,"value":96},"Use a private Vapi API key only on a trusted server. Read it from ",{"type":52,"tag":98,"props":99,"children":101},"code",{"className":100},[],[102],{"type":58,"value":103},"VAPI_API_KEY",{"type":58,"value":105},"; never print, request in chat, or embed it in source, client-side code, or examples.",{"type":52,"tag":78,"props":107,"children":108},{},[109],{"type":58,"value":110},"Never invent resource IDs, call IDs, extraction fields, enum values, data-retention requirements, or customer data.",{"type":52,"tag":78,"props":112,"children":113},{},[114,116,122],{"type":58,"value":115},"Do not enable ",{"type":52,"tag":98,"props":117,"children":119},{"className":118},[],[120],{"type":58,"value":121},"compliancePlan.forceStoreOnHipaaEnabled",{"type":58,"value":123}," unless the user explicitly requests it and confirms that the output cannot contain PHI or other sensitive data.",{"type":52,"tag":78,"props":125,"children":126},{},[127],{"type":58,"value":128},"Treat call transcripts, messages, tool results, and extracted values as sensitive customer data. Minimize what is logged or reproduced.",{"type":52,"tag":67,"props":130,"children":132},{"id":131},"procedure",[133],{"type":58,"value":134},"Procedure",{"type":52,"tag":136,"props":137,"children":138},"ol",{},[139,199,222,260,321,424,498,554,584],{"type":52,"tag":78,"props":140,"children":141},{},[142,144],{"type":58,"value":143},"Choose the output mode.",{"type":52,"tag":74,"props":145,"children":146},{},[147,152,165,194],{"type":52,"tag":78,"props":148,"children":149},{},[150],{"type":58,"value":151},"For a schema, payload, review, or implementation example, return an artifact without calling Vapi. State that nothing was saved, attached, or executed.",{"type":52,"tag":78,"props":153,"children":154},{},[155,157,163],{"type":58,"value":156},"For a reusable saved definition, use ",{"type":52,"tag":98,"props":158,"children":160},{"className":159},[],[161],{"type":58,"value":162},"POST \u002Fstructured-output",{"type":58,"value":164}," only when the user asks to create or save it and credentials are available.",{"type":52,"tag":78,"props":166,"children":167},{},[168,170,176,178,184,186,192],{"type":58,"value":169},"For a one-call experiment that does not need a saved definition, pass a transient ",{"type":52,"tag":98,"props":171,"children":173},{"className":172},[],[174],{"type":58,"value":175},"structuredOutput",{"type":58,"value":177}," to ",{"type":52,"tag":98,"props":179,"children":181},{"className":180},[],[182],{"type":58,"value":183},"POST \u002Fstructured-output\u002Frun",{"type":58,"value":185}," with ",{"type":52,"tag":98,"props":187,"children":189},{"className":188},[],[190],{"type":58,"value":191},"previewEnabled: true",{"type":58,"value":193},".",{"type":52,"tag":78,"props":195,"children":196},{},[197],{"type":58,"value":198},"Treat attachment, detachment, and execution against existing calls as separate requested actions. Do not infer them from creation alone.",{"type":52,"tag":78,"props":200,"children":201},{},[202,204],{"type":58,"value":203},"Define the extraction contract.",{"type":52,"tag":74,"props":205,"children":206},{},[207,212,217],{"type":52,"tag":78,"props":208,"children":209},{},[210],{"type":58,"value":211},"Identify the downstream consumer, required fields, optional fields, allowed categories, formats, and behavior when evidence is absent or ambiguous.",{"type":52,"tag":78,"props":213,"children":214},{},[215],{"type":58,"value":216},"Ask only for missing facts that materially change the schema. State safe assumptions for the rest.",{"type":52,"tag":78,"props":218,"children":219},{},[220],{"type":58,"value":221},"Split unrelated outputs when they have different consumers, retention policies, or iteration cycles. Keep one output when the fields form one stable business record.",{"type":52,"tag":78,"props":223,"children":224},{},[225,227],{"type":58,"value":226},"Choose AI or regex.",{"type":52,"tag":74,"props":228,"children":229},{},[230,243,255],{"type":52,"tag":78,"props":231,"children":232},{},[233,235,241],{"type":58,"value":234},"Use ",{"type":52,"tag":98,"props":236,"children":238},{"className":237},[],[239],{"type":58,"value":240},"type: \"ai\"",{"type":58,"value":242}," for meaning, classification, summarization, sentiment, outcome detection, normalization, or facts expressed in varied language.",{"type":52,"tag":78,"props":244,"children":245},{},[246,247,253],{"type":58,"value":234},{"type":52,"tag":98,"props":248,"children":250},{"className":249},[],[251],{"type":58,"value":252},"type: \"regex\"",{"type":58,"value":254}," only for deterministic transcript matching with a stable pattern. Use RE2-compatible syntax and choose a top-level schema type that matches the documented regex result: boolean, string, number\u002Finteger, or array.",{"type":52,"tag":78,"props":256,"children":257},{},[258],{"type":58,"value":259},"Do not use regex to infer meaning. Do not use AI when a literal, stable pattern is the entire requirement.",{"type":52,"tag":78,"props":261,"children":262},{},[263,265],{"type":58,"value":264},"Design the smallest useful JSON Schema.",{"type":52,"tag":74,"props":266,"children":267},{},[268,273,278,306,311,316],{"type":52,"tag":78,"props":269,"children":270},{},[271],{"type":58,"value":272},"Include only fields the caller can provide or the call evidence can support.",{"type":52,"tag":78,"props":274,"children":275},{},[276],{"type":58,"value":277},"Add concise descriptions that distinguish semantically similar fields.",{"type":52,"tag":78,"props":279,"children":280},{},[281,282,288,290,296,298,304],{"type":58,"value":234},{"type":52,"tag":98,"props":283,"children":285},{"className":284},[],[286],{"type":58,"value":287},"enum",{"type":58,"value":289}," for a closed category set, ",{"type":52,"tag":98,"props":291,"children":293},{"className":292},[],[294],{"type":58,"value":295},"format",{"type":58,"value":297}," or ",{"type":52,"tag":98,"props":299,"children":301},{"className":300},[],[302],{"type":58,"value":303},"pattern",{"type":58,"value":305}," for externally validated strings, and numeric bounds when the business contract defines them.",{"type":52,"tag":78,"props":307,"children":308},{},[309],{"type":58,"value":310},"Mark a field required only when every valid call should produce it. Make conditionally available values optional instead of forcing guesses.",{"type":52,"tag":78,"props":312,"children":313},{},[314],{"type":58,"value":315},"Prefer a primitive schema for a single value and an object only for a cohesive record. Avoid deep nesting unless the downstream contract needs it.",{"type":52,"tag":78,"props":317,"children":318},{},[319],{"type":58,"value":320},"Validate the schema with a standard JSON Schema validator before sending it.",{"type":52,"tag":78,"props":322,"children":323},{},[324,326],{"type":58,"value":325},"Create, inspect, or update the definition.",{"type":52,"tag":74,"props":327,"children":328},{},[329,334,393,406,419],{"type":52,"tag":78,"props":330,"children":331},{},[332],{"type":58,"value":333},"Keep saved names between 1 and 40 characters.",{"type":52,"tag":78,"props":335,"children":336},{},[337,339,345,347,353,355,361,363,369,370,376,377,383,385,391],{"type":58,"value":338},"On create, send ",{"type":52,"tag":98,"props":340,"children":342},{"className":341},[],[343],{"type":58,"value":344},"name",{"type":58,"value":346}," and ",{"type":52,"tag":98,"props":348,"children":350},{"className":349},[],[351],{"type":58,"value":352},"schema",{"type":58,"value":354},"; add ",{"type":52,"tag":98,"props":356,"children":358},{"className":357},[],[359],{"type":58,"value":360},"type",{"type":58,"value":362},", ",{"type":52,"tag":98,"props":364,"children":366},{"className":365},[],[367],{"type":58,"value":368},"description",{"type":58,"value":362},{"type":52,"tag":98,"props":371,"children":373},{"className":372},[],[374],{"type":58,"value":375},"regex",{"type":58,"value":362},{"type":52,"tag":98,"props":378,"children":380},{"className":379},[],[381],{"type":58,"value":382},"model",{"type":58,"value":384},", or ",{"type":52,"tag":98,"props":386,"children":388},{"className":387},[],[389],{"type":58,"value":390},"compliancePlan",{"type":58,"value":392}," only when intentional.",{"type":52,"tag":78,"props":394,"children":395},{},[396,398,404],{"type":58,"value":397},"On inspect, resolve the exact resource with list filters or a verified ID, then use ",{"type":52,"tag":98,"props":399,"children":401},{"className":400},[],[402],{"type":58,"value":403},"GET \u002Fstructured-output\u002F{id}",{"type":58,"value":405},". Do not guess from a partial name.",{"type":52,"tag":78,"props":407,"children":408},{},[409,411,417],{"type":58,"value":410},"On update, read the current definition first and send only fields that should change. Use ",{"type":52,"tag":98,"props":412,"children":414},{"className":413},[],[415],{"type":58,"value":416},"schemaOverride=true",{"type":58,"value":418}," only when intentionally changing the schema's top-level type; otherwise do not use it to bypass schema safety.",{"type":52,"tag":78,"props":420,"children":421},{},[422],{"type":58,"value":423},"Re-fetch after mutation and compare the requested fields. A successful HTTP status without the expected returned state is not verified success.",{"type":52,"tag":78,"props":425,"children":426},{},[427,429],{"type":58,"value":428},"Attach or detach safely.",{"type":52,"tag":74,"props":430,"children":431},{},[432,452,472,493],{"type":52,"tag":78,"props":433,"children":434},{},[435,437,443,445,450],{"type":58,"value":436},"Prefer the saved Structured Output's documented ",{"type":52,"tag":98,"props":438,"children":440},{"className":439},[],[441],{"type":58,"value":442},"assistantIds",{"type":58,"value":444}," relationship for attachment. Read its current ",{"type":52,"tag":98,"props":446,"children":448},{"className":447},[],[449],{"type":58,"value":442},{"type":58,"value":451},", add or remove exactly the resolved assistant ID, and preserve every unrelated ID.",{"type":52,"tag":78,"props":453,"children":454},{},[455,457,462,464,470],{"type":58,"value":456},"Patch only ",{"type":52,"tag":98,"props":458,"children":460},{"className":459},[],[461],{"type":58,"value":442},{"type":58,"value":463}," on the Structured Output for this operation. Re-fetch the Structured Output and assistant; verify the relationship and the assistant's ",{"type":52,"tag":98,"props":465,"children":467},{"className":466},[],[468],{"type":58,"value":469},"artifactPlan.structuredOutputIds",{"type":58,"value":471}," when returned.",{"type":52,"tag":78,"props":473,"children":474},{},[475,477,483,485,491],{"type":58,"value":476},"If the implementation instead patches the assistant, first read the assistant and send the complete existing ",{"type":52,"tag":98,"props":478,"children":480},{"className":479},[],[481],{"type":58,"value":482},"artifactPlan",{"type":58,"value":484}," with only ",{"type":52,"tag":98,"props":486,"children":488},{"className":487},[],[489],{"type":58,"value":490},"structuredOutputIds",{"type":58,"value":492}," changed. Preserve recording, logging, transcript, scorecard, storage, and other artifact settings.",{"type":52,"tag":78,"props":494,"children":495},{},[496],{"type":58,"value":497},"Do not claim that creating a definition attached it. Do not claim that detaching deleted it or removed results already stored on past calls.",{"type":52,"tag":78,"props":499,"children":500},{},[501,503],{"type":58,"value":502},"Preview before broad execution.",{"type":52,"tag":74,"props":504,"children":505},{},[506,539,544,549],{"type":52,"tag":78,"props":507,"children":508},{},[509,510,515,517,522,524,530,532,537],{"type":58,"value":234},{"type":52,"tag":98,"props":511,"children":513},{"className":512},[],[514],{"type":58,"value":183},{"type":58,"value":516}," with one real call ID and ",{"type":52,"tag":98,"props":518,"children":520},{"className":519},[],[521],{"type":58,"value":191},{"type":58,"value":523},". Supply either ",{"type":52,"tag":98,"props":525,"children":527},{"className":526},[],[528],{"type":58,"value":529},"structuredOutputId",{"type":58,"value":531}," or a transient ",{"type":52,"tag":98,"props":533,"children":535},{"className":534},[],[536],{"type":58,"value":175},{"type":58,"value":538},", not both.",{"type":52,"tag":78,"props":540,"children":541},{},[542],{"type":58,"value":543},"Confirm the selected call contains representative evidence and that the returned value satisfies the schema and business meaning.",{"type":52,"tag":78,"props":545,"children":546},{},[547],{"type":58,"value":548},"State that preview does not update the call artifact.",{"type":52,"tag":78,"props":550,"children":551},{},[552],{"type":58,"value":553},"If extraction is wrong, simplify the schema or improve descriptions before changing models or custom extraction prompts.",{"type":52,"tag":78,"props":555,"children":556},{},[557,559],{"type":58,"value":558},"Execute or backfill only when requested.",{"type":52,"tag":74,"props":560,"children":561},{},[562,574,579],{"type":52,"tag":78,"props":563,"children":564},{},[565,566,572],{"type":58,"value":234},{"type":52,"tag":98,"props":567,"children":569},{"className":568},[],[570],{"type":58,"value":571},"previewEnabled: false",{"type":58,"value":573}," or omit it to update call artifacts. Pass no more than the currently documented maximum of 100 call IDs per request.",{"type":52,"tag":78,"props":575,"children":576},{},[577],{"type":58,"value":578},"Before a multi-call run, state the exact output, call count, and that existing values for this output may be replaced while other structured-output values remain.",{"type":52,"tag":78,"props":580,"children":581},{},[582],{"type":58,"value":583},"Use only call IDs supplied by the user or returned by a verified public API query. Report partial failures by call ID; do not imply an all-or-nothing transaction.",{"type":52,"tag":78,"props":585,"children":586},{},[587,589],{"type":58,"value":588},"Retrieve and verify results.",{"type":52,"tag":74,"props":590,"children":591},{},[592,597,617,622],{"type":52,"tag":78,"props":593,"children":594},{},[595],{"type":58,"value":596},"After a normal attached call finishes, allow for post-call processing before checking the call.",{"type":52,"tag":78,"props":598,"children":599},{},[600,602,608,610,616],{"type":58,"value":601},"Retrieve each call with ",{"type":52,"tag":98,"props":603,"children":605},{"className":604},[],[606],{"type":58,"value":607},"GET \u002Fcall\u002F{id}",{"type":58,"value":609}," and read ",{"type":52,"tag":98,"props":611,"children":613},{"className":612},[],[614],{"type":58,"value":615},"call.artifact.structuredOutputs[structuredOutputId].result",{"type":58,"value":193},{"type":52,"tag":78,"props":618,"children":619},{},[620],{"type":58,"value":621},"Validate the result against the intended schema and inspect representative source evidence before calling it accurate. Schema validity proves shape, not factual correctness.",{"type":52,"tag":78,"props":623,"children":624},{},[625],{"type":58,"value":626},"Report separately: definition saved, assistant linked, preview returned, call artifact updated, and result validated. Mention only stages actually verified.",{"type":52,"tag":67,"props":628,"children":630},{"id":629},"error-handling",[631],{"type":58,"value":632},"Error Handling",{"type":52,"tag":74,"props":634,"children":635},{},[636,649,668,680,692,711],{"type":52,"tag":78,"props":637,"children":638},{},[639,641,647],{"type":58,"value":640},"On ",{"type":52,"tag":98,"props":642,"children":644},{"className":643},[],[645],{"type":58,"value":646},"400",{"type":58,"value":648},", inspect the response for schema, regex, model, relationship, or run constraints. Correct one unambiguous documented issue and retry once; never repeat an unchanged request.",{"type":52,"tag":78,"props":650,"children":651},{},[652,653,659,660,666],{"type":58,"value":640},{"type":52,"tag":98,"props":654,"children":656},{"className":655},[],[657],{"type":58,"value":658},"401",{"type":58,"value":297},{"type":52,"tag":98,"props":661,"children":663},{"className":662},[],[664],{"type":58,"value":665},"403",{"type":58,"value":667},", stop and report authentication or permission failure.",{"type":52,"tag":78,"props":669,"children":670},{},[671,672,678],{"type":58,"value":640},{"type":52,"tag":98,"props":673,"children":675},{"className":674},[],[676],{"type":58,"value":677},"404",{"type":58,"value":679},", report the missing Structured Output, assistant, or call and identify the exact unresolved ID.",{"type":52,"tag":78,"props":681,"children":682},{},[683,684,690],{"type":58,"value":640},{"type":52,"tag":98,"props":685,"children":687},{"className":686},[],[688],{"type":58,"value":689},"409",{"type":58,"value":691},", re-read current state before deciding whether the intended relationship or update already exists.",{"type":52,"tag":78,"props":693,"children":694},{},[695,696,702,703,709],{"type":58,"value":640},{"type":52,"tag":98,"props":697,"children":699},{"className":698},[],[700],{"type":58,"value":701},"429",{"type":58,"value":297},{"type":52,"tag":98,"props":704,"children":706},{"className":705},[],[707],{"type":58,"value":708},"5xx",{"type":58,"value":710},", preserve the request context, report the service condition, and do not claim success.",{"type":52,"tag":78,"props":712,"children":713},{},[714],{"type":58,"value":715},"If a result is absent, distinguish processing delay, missing attachment, disabled artifact storage, insufficient call evidence, and extraction failure before recommending a change.",{"type":52,"tag":67,"props":717,"children":719},{"id":718},"api-implementation-examples",[720],{"type":58,"value":721},"API Implementation Examples",{"type":52,"tag":61,"props":723,"children":724},{},[725,727,731],{"type":58,"value":726},"Read ",{"type":52,"tag":84,"props":728,"children":729},{"href":86},[730],{"type":58,"value":89},{"type":58,"value":732}," when implementation code is needed. Use the official TypeScript or Python Server SDK only after confirming the generated method in its current official reference; use direct REST when SDK syntax is unavailable or unstable.",{"type":52,"tag":67,"props":734,"children":736},{"id":735},"output-contract",[737],{"type":58,"value":738},"Output Contract",{"type":52,"tag":61,"props":740,"children":741},{},[742],{"type":58,"value":743},"Return only the sections relevant to the request:",{"type":52,"tag":74,"props":745,"children":746},{},[747,752,757,762,767,772,777,782],{"type":52,"tag":78,"props":748,"children":749},{},[750],{"type":58,"value":751},"Mode: artifact-only, saved definition, relationship change, preview, or artifact-writing run",{"type":52,"tag":78,"props":753,"children":754},{},[755],{"type":58,"value":756},"Assumptions or blocking questions",{"type":52,"tag":78,"props":758,"children":759},{},[760],{"type":58,"value":761},"Final schema and Structured Output configuration",{"type":52,"tag":78,"props":763,"children":764},{},[765],{"type":58,"value":766},"Created or updated resource ID and verified fields, when mutated",{"type":52,"tag":78,"props":768,"children":769},{},[770],{"type":58,"value":771},"Attachment state and preserved relationships, when changed",{"type":52,"tag":78,"props":773,"children":774},{},[775],{"type":58,"value":776},"Preview or execution result, affected call IDs, and whether artifacts changed",{"type":52,"tag":78,"props":778,"children":779},{},[780],{"type":58,"value":781},"Retrieved result plus schema and evidence limitations",{"type":52,"tag":78,"props":783,"children":784},{},[785],{"type":58,"value":786},"Remaining configuration or validation work",{"type":52,"tag":67,"props":788,"children":790},{"id":789},"public-sources",[791],{"type":58,"value":792},"Public Sources",{"type":52,"tag":74,"props":794,"children":795},{},[796,807,817,827,837,847,857,867,877],{"type":52,"tag":78,"props":797,"children":798},{},[799],{"type":52,"tag":84,"props":800,"children":804},{"href":801,"rel":802},"https:\u002F\u002Fdocs.vapi.ai\u002Fassistants\u002Fstructured-outputs-quickstart\u002F",[803],"nofollow",[805],{"type":58,"value":806},"Structured Outputs quickstart",{"type":52,"tag":78,"props":808,"children":809},{},[810],{"type":52,"tag":84,"props":811,"children":814},{"href":812,"rel":813},"https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-create",[803],[815],{"type":58,"value":816},"Create Structured Output API",{"type":52,"tag":78,"props":818,"children":819},{},[820],{"type":52,"tag":84,"props":821,"children":824},{"href":822,"rel":823},"https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-find-all",[803],[825],{"type":58,"value":826},"List Structured Outputs API",{"type":52,"tag":78,"props":828,"children":829},{},[830],{"type":52,"tag":84,"props":831,"children":834},{"href":832,"rel":833},"https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-find-one",[803],[835],{"type":58,"value":836},"Get Structured Output API",{"type":52,"tag":78,"props":838,"children":839},{},[840],{"type":52,"tag":84,"props":841,"children":844},{"href":842,"rel":843},"https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-update",[803],[845],{"type":58,"value":846},"Update Structured Output API",{"type":52,"tag":78,"props":848,"children":849},{},[850],{"type":52,"tag":84,"props":851,"children":854},{"href":852,"rel":853},"https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fstructured-outputs\u002Fstructured-output-controller-run",[803],[855],{"type":58,"value":856},"Run Structured Output API",{"type":52,"tag":78,"props":858,"children":859},{},[860],{"type":52,"tag":84,"props":861,"children":864},{"href":862,"rel":863},"https:\u002F\u002Fdocs.vapi.ai\u002Fapi-reference\u002Fcalls\u002Fget\u002F",[803],[865],{"type":58,"value":866},"Get Call API",{"type":52,"tag":78,"props":868,"children":869},{},[870],{"type":52,"tag":84,"props":871,"children":874},{"href":872,"rel":873},"https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fserver-sdk-typescript\u002Fblob\u002Fmain\u002Freference.md",[803],[875],{"type":58,"value":876},"Official TypeScript Server SDK reference",{"type":52,"tag":78,"props":878,"children":879},{},[880],{"type":52,"tag":84,"props":881,"children":884},{"href":882,"rel":883},"https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fserver-sdk-python\u002Fblob\u002Fmain\u002Freference.md",[803],[885],{"type":58,"value":886},"Official Python Server SDK reference",{"items":888,"total":1045},[889,908,918,929,943,955,962,975,989,1002,1017,1032],{"slug":8,"name":8,"fn":890,"description":891,"org":892,"tags":893,"stars":905,"repoUrl":906,"updatedAt":907},"build AI voice assistants with Vapi","Build AI voice assistants and phone agents with Vapi. Use this skill when users want to create voice agents, phone bots, IVR systems, outbound calling campaigns, or any voice-based AI application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[894,895,896,899,902],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":897,"slug":898,"type":16},"Speech","speech",{"name":900,"slug":901,"type":16},"Text-to-Speech","text-to-speech",{"name":903,"slug":904,"type":16},"Voice","voice",56,"https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fmcp-server","2026-08-15T03:21:18.708423",{"slug":909,"name":909,"fn":910,"description":911,"org":912,"tags":913,"stars":26,"repoUrl":27,"updatedAt":917},"create-assistant","create Vapi voice AI assistants","Design, create, or validate saved and transient Vapi voice assistants. Use for new phone or web agents, production system prompts and first messages, saved-versus-transient architecture, model\u002Fvoice\u002Ftranscriber selection, multilingual compatibility, existing tool attachment, native call-control tools, assistant hooks, and Create Assistant API validation errors.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[914,915,916],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":903,"slug":904,"type":16},"2026-08-15T03:21:06.672037",{"slug":919,"name":919,"fn":920,"description":921,"org":922,"tags":923,"stars":26,"repoUrl":27,"updatedAt":928},"create-call","create automated phone calls with Vapi","Create outbound phone calls, web calls, and batch calls using the Vapi API. Use when making automated calls, testing voice assistants, scheduling call campaigns, or initiating conversations programmatically.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[924,925,926,927],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":897,"slug":898,"type":16},{"name":903,"slug":904,"type":16},"2026-07-20T05:57:32.68652",{"slug":930,"name":930,"fn":931,"description":932,"org":933,"tags":934,"stars":26,"repoUrl":27,"updatedAt":942},"create-phone-number","manage Vapi phone numbers","Plan, provision, import, route, update, and verify Vapi phone numbers through the public API. Use for Vapi-hosted US PSTN numbers, explicitly requested SIP addresses, Twilio\u002FVonage\u002FTelnyx or BYO carrier numbers, secure credential handling, assistant or squad routing, area-code requests, outbound limitations, and phone-provider troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[935,938,941],{"name":936,"slug":937,"type":16},"Operations","operations",{"name":939,"slug":940,"type":16},"Twilio","twilio",{"name":903,"slug":904,"type":16},"2026-08-15T03:21:07.855739",{"slug":944,"name":944,"fn":945,"description":946,"org":947,"tags":948,"stars":26,"repoUrl":27,"updatedAt":954},"create-squad","create multi-assistant voice agent squads","Design, create, update, and verify Vapi Squads and documented handoff tools through the public API. Use for choosing a single assistant versus a multi-assistant Squad, persistent or transient members, entry-member ordering, specialization boundaries, context engineering, variable extraction, model-specific handoff patterns, assistant-version pins, and safe Squad updates.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[949,950,953],{"name":21,"slug":22,"type":16},{"name":951,"slug":952,"type":16},"Multi-Agent","multi-agent",{"name":903,"slug":904,"type":16},"2026-08-15T03:21:08.661686",{"slug":4,"name":4,"fn":5,"description":6,"org":956,"tags":957,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[958,959,960,961],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"slug":963,"name":963,"fn":964,"description":965,"org":966,"tags":967,"stars":26,"repoUrl":27,"updatedAt":974},"create-tool","create custom tools for Vapi assistants","Select, define, create, inspect, update, attach, detach, and verify reusable Vapi tools through the public API. Use for native call-control tools, supported provider integrations, API Request tools, custom function tools, MCP tools, tool messages, credentials, or configuration-preserving assistant attachment changes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[968,969,970,971],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"name":972,"slug":973,"type":16},"Integrations","integrations","2026-08-15T03:21:05.673225",{"slug":976,"name":976,"fn":977,"description":978,"org":979,"tags":980,"stars":26,"repoUrl":27,"updatedAt":988},"setup-api-key","configure Vapi API authentication","Guide users through obtaining and configuring a Vapi API key. Use when the user needs to set up Vapi, when API calls fail due to missing keys, or when the user mentions needing access to Vapi's voice AI platform.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[981,982,985],{"name":24,"slug":25,"type":16},{"name":983,"slug":984,"type":16},"Auth","auth",{"name":986,"slug":987,"type":16},"Configuration","configuration","2026-07-20T05:57:25.717229",{"slug":990,"name":990,"fn":991,"description":992,"org":993,"tags":994,"stars":26,"repoUrl":27,"updatedAt":1001},"setup-webhook","configure Vapi webhooks for call events","Configure Vapi server URLs and webhooks to receive real-time call events, transcripts, tool calls, and end-of-call reports. Use when setting up webhook endpoints, building tool servers, or integrating Vapi events into your application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[995,996,997,998],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"name":999,"slug":1000,"type":16},"Webhooks","webhooks","2026-07-20T05:57:31.703006",{"slug":1003,"name":1003,"fn":1004,"description":1005,"org":1006,"tags":1007,"stars":26,"repoUrl":27,"updatedAt":1016},"simulations","design and run Vapi simulations","Design, create, run, monitor, and maintain Vapi Simulations for assistants and squads. Use for simulation personalities, scenarios, structured-output success criteria, simulations, suites, chat or voice runs, tool mocks, target variables, lifecycle webhooks, regression coverage, CI quality gates, run-result analysis, and simulation API validation errors. Do not use for fixed-turn mock-conversation Evals unless the user is deciding between Evals and Simulations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1008,1009,1010,1013],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":1011,"slug":1012,"type":16},"Simulation","simulation",{"name":1014,"slug":1015,"type":16},"Testing","testing","2026-08-15T03:47:29.005508",{"slug":1018,"name":1018,"fn":1019,"description":1020,"org":1021,"tags":1022,"stars":26,"repoUrl":27,"updatedAt":1031},"vapi-bootstrap-framework","scaffold Vapi voice agent projects","Opt-in recreation of the Bun + TypeScript framework used to build Vapi's landing-page voice agents from a ROUGH_DRAFT.md spec, including a scenario registry, language stacks, prompt composer, assistant builder, and idempotent bootstrap script. Use only when the user explicitly invokes vapi-bootstrap-framework or specifically asks to reproduce or experiment with the landing-page-agent architecture. Do not use for ordinary Vapi assistant builds; use create-assistant, create-tool, create-squad, and vapi-prompt-builder instead. Targets Bun + TypeScript + @vapi-ai\u002Fserver-sdk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1023,1024,1027,1030],{"name":21,"slug":22,"type":16},{"name":1025,"slug":1026,"type":16},"Engineering","engineering",{"name":1028,"slug":1029,"type":16},"TypeScript","typescript",{"name":903,"slug":904,"type":16},"2026-08-15T03:21:04.726284",{"slug":1033,"name":1033,"fn":1034,"description":1035,"org":1036,"tags":1037,"stars":26,"repoUrl":27,"updatedAt":1044},"vapi-prompt-builder","design and audit Vapi voice agent prompts","Create, improve, or audit Vapi voice agent and Squad system prompts for production phone and web based voice agents. Use when the user wants help designing a Vapi assistant prompt, multi-assistant Squad prompt set, refining an existing prompt, creating prompt sections, building an intake or handoff workflow, improving tool-use instructions, adding guardrails, or optimizing voice-agent behavior for brevity, turn-taking, error handling, caller data collection, escalation, handoffs, and spoken formatting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1038,1039,1042,1043],{"name":21,"slug":22,"type":16},{"name":1040,"slug":1041,"type":16},"Prompt Engineering","prompt-engineering",{"name":897,"slug":898,"type":16},{"name":903,"slug":904,"type":16},"2026-07-17T06:08:21.647767",12,{"items":1047,"total":1093},[1048,1054,1061,1067,1073,1080,1087],{"slug":909,"name":909,"fn":910,"description":911,"org":1049,"tags":1050,"stars":26,"repoUrl":27,"updatedAt":917},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1051,1052,1053],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":903,"slug":904,"type":16},{"slug":919,"name":919,"fn":920,"description":921,"org":1055,"tags":1056,"stars":26,"repoUrl":27,"updatedAt":928},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1057,1058,1059,1060],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":897,"slug":898,"type":16},{"name":903,"slug":904,"type":16},{"slug":930,"name":930,"fn":931,"description":932,"org":1062,"tags":1063,"stars":26,"repoUrl":27,"updatedAt":942},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1064,1065,1066],{"name":936,"slug":937,"type":16},{"name":939,"slug":940,"type":16},{"name":903,"slug":904,"type":16},{"slug":944,"name":944,"fn":945,"description":946,"org":1068,"tags":1069,"stars":26,"repoUrl":27,"updatedAt":954},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1070,1071,1072],{"name":21,"slug":22,"type":16},{"name":951,"slug":952,"type":16},{"name":903,"slug":904,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":1074,"tags":1075,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1076,1077,1078,1079],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"slug":963,"name":963,"fn":964,"description":965,"org":1081,"tags":1082,"stars":26,"repoUrl":27,"updatedAt":974},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1083,1084,1085,1086],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"name":972,"slug":973,"type":16},{"slug":976,"name":976,"fn":977,"description":978,"org":1088,"tags":1089,"stars":26,"repoUrl":27,"updatedAt":988},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1090,1091,1092],{"name":24,"slug":25,"type":16},{"name":983,"slug":984,"type":16},{"name":986,"slug":987,"type":16},11]