Raw schema
{
"type": "object",
"properties": {
"intent": {
"type": "string",
"minLength": 3,
"maxLength": 1000,
"description": "Free-text intent (e.g. \"Oura Ring 4 silver under $350\"). The interpretation pipeline owns the structuring."
},
"max_price_cents": {
"description": "Hard price ceiling for delivery, in cents (a numeric string like \"150000\" is accepted).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"min_discount_pct": {
"description": "Minimum discount percentage for delivery.",
"type": "number",
"minimum": 0,
"maximum": 100
},
"webhook_callback_url": {
"description": "https:// endpoint to receive push deliveries (activates post-interpretation).",
"type": "string",
"maxLength": 500
},
"user_email": {
"description": "Email address for deal alerts (a double-opt-in confirmation is sent first).",
"type": "string",
"maxLength": 200
},
"agent_id": {
"description": "Self-identifier for telemetry (e.g. \"claude-desktop:tom\"). Helps us prioritize agent demand.",
"type": "string",
"maxLength": 200
},
"specs": {
"description": "Structured spec/attribute constraints. Keys are generated from docs/spec-keys.json: numeric <spec_key>_min/_max (size_inches_min), enum/list <spec_key>_in (camera_type_in, bundle_includes_in), and boolean direct keys (bundle). Example: { \"size_inches_min\": 65, \"camera_type_in\": [\"dslr\"], \"bundle\": true }. Unknown keys are rejected; deals missing the constrained spec are excluded (must-have semantics). If you skip this, explicit numeric thresholds in the intent text (\"at least 65 inches\", \"16GB RAM or more\") are extracted automatically at interpretation — your explicit specs always override extraction; soft phrasing (\"around 65 inches\") is never auto-constrained.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
},
"model_number": {
"description": "Manufacturer model number (MPN) for the exact variant — e.g. \"K-65XR70\" for the Sony BRAVIA 7 65\". A concrete MPN auto-promotes in ~60s; family-level intents without one require operator review (hours).",
"type": "string",
"maxLength": 100
}
},
"required": [
"intent"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}