{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreibhz2cytgxvogq34z6h7iedywoe4ejqejdugyhcsadvnli3uysloa",
"uri": "at://did:plc:lk3jfj3zq4k4wxnk474axylu/app.bsky.feed.post/3mlocvu2wd4i2"
},
"path": "/t/chatgpt-app-submission-json-schema-returns-a-404/1380746#post_3",
"publishedAt": "2026-05-12T16:13:36.000Z",
"site": "https://community.openai.com",
"textContent": "For those who are interested I tried to generate it myself, seem to work, but I don’t know if there are more fields that could be filled\n\n\n {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://developers.openai.com/apps-sdk/schemas/chatgpt-app-submission.v1.json\",\n \"title\": \"ChatGPT App Submission\",\n \"description\": \"Shape of the JSON file accepted by the OpenAI Apps SDK submission form's \\\"chatgpt-app-submission.json\\\" upload box. Mirrors the output contract of the Codex `chatgpt-app-submission` skill in openai/plugins.\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"tools\"],\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"Identifier only — the URL is not fetched by the importer.\"\n },\n \"schema_version\": {\n \"type\": \"integer\",\n \"const\": 1\n },\n \"app_info\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"display_name\": {\n \"type\": \"string\",\n \"description\": \"Public app name shown in ChatGPT and the Apps Directory.\"\n },\n \"subtitle\": {\n \"type\": \"string\",\n \"maxLength\": 30,\n \"description\": \"Short functional phrase. 30 characters max.\"\n },\n \"description\": {\n \"type\": \"string\",\n \"description\": \"Public description.\"\n },\n \"category\": {\n \"type\": \"string\",\n \"description\": \"Single category. Maps to dashapi `version.categories[0]`.\",\n \"enum\": [\n \"BUSINESS\",\n \"COLLABORATION\",\n \"DESIGN\",\n \"DEVELOPER_TOOLS\",\n \"EDUCATION\",\n \"ENTERTAINMENT\",\n \"FINANCE\",\n \"FOOD\",\n \"LIFESTYLE\",\n \"NEWS\",\n \"PRODUCTIVITY\",\n \"SHOPPING\",\n \"TRAVEL\"\n ]\n }\n }\n },\n \"tools\": {\n \"type\": \"object\",\n \"description\": \"Map of MCP tool name → annotation hints + justifications.\",\n \"minProperties\": 1,\n \"additionalProperties\": { \"$ref\": \"#/definitions/tool\" }\n },\n \"test_cases\": {\n \"type\": \"array\",\n \"description\": \"Positive test cases. Form requires ≥5.\",\n \"items\": { \"$ref\": \"#/definitions/testCase\" }\n },\n \"negative_test_cases\": {\n \"type\": \"array\",\n \"description\": \"Negative test cases. Form requires ≥3.\",\n \"items\": { \"$ref\": \"#/definitions/negativeTestCase\" }\n }\n },\n \"definitions\": {\n \"tool\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"annotations\", \"justifications\"],\n \"properties\": {\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"readOnlyHint\", \"openWorldHint\", \"destructiveHint\"],\n \"properties\": {\n \"readOnlyHint\": {\n \"type\": \"boolean\",\n \"description\": \"True only when the tool strictly fetches/lists/computes without changing state.\"\n },\n \"openWorldHint\": {\n \"type\": \"boolean\",\n \"description\": \"True if the tool can change publicly visible internet state or external third-party systems.\"\n },\n \"destructiveHint\": {\n \"type\": \"boolean\",\n \"description\": \"True if the tool can delete, overwrite, revoke access, or perform irreversible admin actions.\"\n }\n }\n },\n \"justifications\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\n \"read_only_justification\",\n \"open_world_justification\",\n \"destructive_justification\"\n ],\n \"properties\": {\n \"read_only_justification\": { \"type\": \"string\", \"minLength\": 1 },\n \"open_world_justification\": { \"type\": \"string\", \"minLength\": 1 },\n \"destructive_justification\": { \"type\": \"string\", \"minLength\": 1 }\n }\n }\n }\n },\n \"testCase\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"description\", \"user_prompt\"],\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"description\": \"Scenario — describe the use case to test.\"\n },\n \"user_prompt\": {\n \"type\": \"string\",\n \"description\": \"Exact prompt or interaction to begin the test.\"\n },\n \"tools_triggered\": {\n \"type\": [\"string\", \"null\"],\n \"description\": \"Exact MCP tool name(s). Use arrows for sequences (e.g. \\\"list-teams → list-projects\\\").\"\n },\n \"expected_output\": {\n \"type\": [\"string\", \"null\"],\n \"description\": \"Output or experience expected from the MCP server.\"\n }\n }\n },\n \"negativeTestCase\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"description\", \"user_prompt\"],\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"description\": \"Scenario where the app should NOT trigger.\"\n },\n \"user_prompt\": {\n \"type\": \"string\",\n \"description\": \"Example prompt where the app should not trigger.\"\n }\n }\n }\n }\n }\n\n",
"title": "ChatGPT App Submission Json Schema returns a 404"
}