{
  "$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"
}