{
"id": "page.corvus.publishOps",
"defs": {
"main": {
"type": "procedure",
"input": {
"schema": {
"type": "object",
"required": [
"ops"
],
"properties": {
"ops": {
"type": "array",
"items": {
"ref": "page.corvus.backchannelFrame#op",
"type": "ref"
},
"description": "Ops to publish. Each is a `page.corvus.backchannelFrame#op` carrying an optional `blockId` and the op itself."
}
}
},
"encoding": "application/json"
},
"errors": [
{
"name": "Malformed",
"description": "Validation failed for one of the submitted ops (missing `blockId`, mismatched author, malformed `op.id`, etc.). The message identifies the offending op by its index in the `ops` array."
}
]
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "HTTP alternative to streaming `page.corvus.backchannelFrame#op` frames over a `page.corvus.subscribeOps` WebSocket. Each entry is a `page.corvus.backchannelFrame#op` and is validated, ingested, and broadcast by the same code the backchannel uses, so the wire shape and semantics are identical. No response body — the server-assigned cursor is observed via `page.corvus.subscribeOps#op` echo, same as the backchannel. Ops are processed in order; the procedure stops at the first validation failure (ops that succeeded before the failure remain ingested — same as sending frames one-by-one over the WS)."
}