{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://uqp.dev/spec/ucp/2026-11-05/quote_lock.json",
"name": "dev.uqp.quoting.quote_lock",
"version": "2026-11-05",
"extends": "dev.ucp.shopping.checkout",
"title": "UQP quote lock for UCP checkout and order",
"description": "Reference extension. quote_hash is lowercase hexadecimal SHA-256 of the complete Quote JSON after RFC 8785 JCS canonicalization, encoded as UTF-8. This binds the quote without executing payments.",
"$defs": {
"quote_lock": {
"type": "object",
"properties": {
"quote_id": {
"type": "string",
"minLength": 1
},
"quote_hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"intake_summary": {
"type": "string"
},
"scope_exclusions": {
"type": "array",
"items": {
"type": "string"
}
},
"quote_expires_at": {
"type": "string",
"format": "date-time"
}
},
"required": [
"quote_id",
"quote_hash",
"intake_summary",
"scope_exclusions",
"quote_expires_at"
],
"additionalProperties": false
},
"dev.ucp.shopping.checkout": {
"allOf": [
{
"$ref": "https://ucp.dev/2026-08-25/schemas/shopping/checkout.json"
},
{
"type": "object",
"properties": {
"quote_lock": {
"$ref": "#/$defs/quote_lock"
}
},
"allOf": [
{
"if": {
"properties": {
"status": {
"const": "requires_escalation"
}
},
"required": [
"status"
]
},
"then": {
"required": [
"continue_url"
],
"properties": {
"continue_url": {
"type": "string",
"format": "uri"
}
}
}
}
]
}
]
},
"dev.ucp.shopping.order": {
"allOf": [
{
"$ref": "https://ucp.dev/2026-08-25/schemas/shopping/order.json"
},
{
"type": "object",
"properties": {
"quote_lock": {
"$ref": "#/$defs/quote_lock"
}
}
}
]
}
}
}