DropProposal
Fields read from a pasted page, for a person to edit and then start a drop from. `brief` carries only the fields that cleared their threshold; `confidence` carries a number for every field that was judged, including the ones that did not clear.
Properties
| Name | Type | Description |
|---|---|---|
| proposal | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/aicontentdrop-com/json-schema/aicontentdrop-com-drop-proposal-schema.json",
"title": "DropProposal",
"description": "Fields read from a pasted page, for a person to edit and then start a drop from. `brief` carries only the fields that cleared their threshold; `confidence` carries a number for every field that was judged, including the ones that did not clear.",
"x-generated": "2026-11-01",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/aicontentdrop-com-openapi.json#/components/schemas/DropProposal",
"type": "object",
"required": [
"proposal"
],
"properties": {
"proposal": {
"type": "object",
"required": [
"source",
"url",
"brief",
"confidence"
],
"properties": {
"source": {
"type": "string",
"enum": [
"url"
]
},
"url": {
"type": "string",
"format": "uri"
},
"brief": {
"$ref": "#/$defs/DropBrief"
},
"confidence": {
"type": "object",
"description": "Field name to a number between 0 and 1.",
"additionalProperties": {
"type": "number"
}
},
"brand": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value_props": {
"type": "array",
"items": {
"type": "string"
}
},
"cta": {
"type": "string"
},
"tone": {
"type": "string"
}
}
},
"screenshot_url": {
"type": "string",
"format": "uri",
"description": "The captured page on this application's own storage."
},
"note": {
"type": "string",
"description": "One sentence when a field was dropped rather than proposed."
}
}
}
},
"$defs": {
"DropBrief": {
"type": "object",
"description": "What is being made, for what, how long, on which recipe. Every field is optional: a brief is filled in as it is settled. `reference_class` and `reference_facts` are settings, not questions: send the `facts` POST /v1/engine/analyze answered to skip the drop's own reading step, which otherwise copies that reading, or waits for it while a long clip is still being read; send a class to choose it yourself.",
"properties": {
"type": {
"type": "string",
"enum": [
"image",
"video"
]
},
"goal": {
"type": "string",
"enum": [
"viral",
"sales",
"social"
]
},
"duration_s": {
"type": "integer",
"enum": [
5,
10,
15,
20,
30,
60
],
"description": "Running time in seconds. A still image has none."
},
"lane": {
"type": "string",
"enum": [
"cinematic",
"ugc",
"marketing",
"drama",
"recreate"
],
"description": "Which recipe to follow. GET /v1/engine/lanes says which ones are open for this account; a closed one is refused with its reason."
},
"reference": {
"type": "object",
"description": "Where the material comes from. `upload` carries its url (for a reference read by POST /v1/engine/analyze, the `reference_url` it answered) and `template` its template id; a reference missing either is not one.",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string",
"enum": [
"none",
"upload",
"template"
]
},
"url": {
"type": "string",
"format": "uri"
},
"template_id": {
"type": "string"
}
}
},
"model": {
"type": "object",
"description": "A pinned model. Absent means the recipe's own default, revealed before anything is charged."
},
"reference_class": {
"$ref": "#/$defs/ReferenceClass"
},
"reference_facts": {
"$ref": "#/$defs/ReferenceFacts"
}
}
},
"ReferenceClass": {
"type": "string",
"description": "What kind of material a reference is, as the reading judged it or as the caller set it: `cel_anime` (cel anime), `western_animation` (Western animation), `3d_animation` (3D animation), `live_action` (live action), `ugc` (a creator video), `product` (a product shot), `unknown` (not sure yet). It steers how a drop directs and reviews the work.",
"enum": [
"cel_anime",
"western_animation",
"3d_animation",
"live_action",
"ugc",
"product",
"unknown"
]
},
"ReferenceFacts": {
"type": "object",
"description": "What was seen in a reference, in words only: no frame, thumbnail or link to the media ever appears here. An answer always carries every list, empty when nothing of that kind was seen.",
"required": [
"summary",
"look",
"frameCount"
],
"properties": {
"summary": {
"type": "string",
"maxLength": 600,
"description": "The reference in a few sentences."
},
"shots": {
"type": "array",
"maxItems": 60,
"default": [],
"description": "One entry per shot, in order.",
"items": {
"$ref": "#/$defs/ReferenceShot"
}
},
"cast": {
"type": "array",
"maxItems": 12,
"default": [],
"description": "The people and characters in it.",
"items": {
"type": "object",
"required": [
"key",
"role",
"look"
],
"properties": {
"key": {
"type": "string",
"maxLength": 40,
"description": "A short handle for this person or character, the same in every shot."
},
"role": {
"type": "string",
"maxLength": 120
},
"look": {
"type": "string",
"maxLength": 400,
"description": "How they look, in words."
}
}
}
},
"look": {
"type": "object",
"required": [
"register"
],
"description": "The visual style.",
"properties": {
"register": {
"type": "string",
"maxLength": 300,
"description": "The style in a phrase."
},
"palette": {
"type": "array",
"maxItems": 12,
"default": [],
"items": {
"type": "string",
"maxLength": 40
}
},
"notes": {
"type": "string",
"maxLength": 400
}
}
},
"lines": {
"type": "array",
"maxItems": 40,
"default": [],
"description": "Dialogue or on-screen words heard or read, in order.",
"items": {
"type": "string",
"maxLength": 200
}
},
"durationSeconds": {
"type": "number",
"minimum": 0
},
"frameCount": {
"type": "integer",
"minimum": 0,
"description": "How many frames were read to write this."
}
}
},
"ReferenceShot": {
"type": "object",
"description": "One shot of a reference, in plain words.",
"required": [
"index",
"size",
"camera",
"action"
],
"properties": {
"index": {
"type": "integer",
"minimum": 0
},
"size": {
"type": "string",
"maxLength": 40,
"description": "The shot size: close-up, medium, wide and so on."
},
"camera": {
"type": "string",
"maxLength": 120,
"description": "What the camera does: static, slow push-in, handheld follow and so on."
},
"action": {
"type": "string",
"maxLength": 400,
"description": "What happens in the shot."
},
"beatTags": {
"type": "array",
"maxItems": 4,
"default": [],
"description": "The kinds of beat the shot carries.",
"items": {
"type": "string",
"enum": [
"action",
"camera",
"vfx",
"dialogue",
"product",
"emotion",
"transition",
"performance"
]
}
},
"durationSeconds": {
"type": "number",
"minimum": 0
}
}
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/aicontentdrop-com-drop-proposal"
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.