ChatGPT App Submission Json Schema returns a 404
OpenAI Developer Community
May 12, 2026
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
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://developers.openai.com/apps-sdk/schemas/chatgpt-app-submission.v1.json",
"title": "ChatGPT App Submission",
"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.",
"type": "object",
"additionalProperties": false,
"required": ["tools"],
"properties": {
"$schema": {
"type": "string",
"format": "uri",
"description": "Identifier only — the URL is not fetched by the importer."
},
"schema_version": {
"type": "integer",
"const": 1
},
"app_info": {
"type": "object",
"additionalProperties": false,
"properties": {
"display_name": {
"type": "string",
"description": "Public app name shown in ChatGPT and the Apps Directory."
},
"subtitle": {
"type": "string",
"maxLength": 30,
"description": "Short functional phrase. 30 characters max."
},
"description": {
"type": "string",
"description": "Public description."
},
"category": {
"type": "string",
"description": "Single category. Maps to dashapi `version.categories[0]`.",
"enum": [
"BUSINESS",
"COLLABORATION",
"DESIGN",
"DEVELOPER_TOOLS",
"EDUCATION",
"ENTERTAINMENT",
"FINANCE",
"FOOD",
"LIFESTYLE",
"NEWS",
"PRODUCTIVITY",
"SHOPPING",
"TRAVEL"
]
}
}
},
"tools": {
"type": "object",
"description": "Map of MCP tool name → annotation hints + justifications.",
"minProperties": 1,
"additionalProperties": { "$ref": "#/definitions/tool" }
},
"test_cases": {
"type": "array",
"description": "Positive test cases. Form requires ≥5.",
"items": { "$ref": "#/definitions/testCase" }
},
"negative_test_cases": {
"type": "array",
"description": "Negative test cases. Form requires ≥3.",
"items": { "$ref": "#/definitions/negativeTestCase" }
}
},
"definitions": {
"tool": {
"type": "object",
"additionalProperties": false,
"required": ["annotations", "justifications"],
"properties": {
"annotations": {
"type": "object",
"additionalProperties": false,
"required": ["readOnlyHint", "openWorldHint", "destructiveHint"],
"properties": {
"readOnlyHint": {
"type": "boolean",
"description": "True only when the tool strictly fetches/lists/computes without changing state."
},
"openWorldHint": {
"type": "boolean",
"description": "True if the tool can change publicly visible internet state or external third-party systems."
},
"destructiveHint": {
"type": "boolean",
"description": "True if the tool can delete, overwrite, revoke access, or perform irreversible admin actions."
}
}
},
"justifications": {
"type": "object",
"additionalProperties": false,
"required": [
"read_only_justification",
"open_world_justification",
"destructive_justification"
],
"properties": {
"read_only_justification": { "type": "string", "minLength": 1 },
"open_world_justification": { "type": "string", "minLength": 1 },
"destructive_justification": { "type": "string", "minLength": 1 }
}
}
}
},
"testCase": {
"type": "object",
"additionalProperties": false,
"required": ["description", "user_prompt"],
"properties": {
"description": {
"type": "string",
"description": "Scenario — describe the use case to test."
},
"user_prompt": {
"type": "string",
"description": "Exact prompt or interaction to begin the test."
},
"tools_triggered": {
"type": ["string", "null"],
"description": "Exact MCP tool name(s). Use arrows for sequences (e.g. \"list-teams → list-projects\")."
},
"expected_output": {
"type": ["string", "null"],
"description": "Output or experience expected from the MCP server."
}
}
},
"negativeTestCase": {
"type": "object",
"additionalProperties": false,
"required": ["description", "user_prompt"],
"properties": {
"description": {
"type": "string",
"description": "Scenario where the app should NOT trigger."
},
"user_prompt": {
"type": "string",
"description": "Example prompt where the app should not trigger."
}
}
}
}
}
Discussion in the ATmosphere