page.corvus.publishOps

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).

Repository @corvus.page did:plc:3qc4cbzcriye72qqqodeda26 namespace authority
Details · procedure
Kindprocedure
Authoritycorvus.page
Indexed

Procedure

procedure · POST

Input

application/json

ops

requiredarray

Ops to publish. Each is a `page.corvus.backchannelFrame#op` carrying an optional `blockId` and the op itself.

itemsref

Errors

Malformed

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.

Similar lexicons

semantic match

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • Subscribe to CRDT op streams from a corvus server over a single WebSocket connection. **Connection-scoped, multi-block**: one connection authenticates one DID and may carry subscriptions to many block sets. Subscribes and unsubscribes happen mid-connection via `page.corvus.backchannelFrame#subscribe` / `#unsubscribe` — the upgrade itself takes no parameters and starts with no active subscriptions. **Subscriptions name an explicit block set.** A subscribe frame carries the `blockIds` the client

  • Wire format for messages a client sends server-bound over the same WebSocket opened by `page.corvus.subscribeOps`. Atproto's `subscription` lexicon type is server-push only — every server→client frame is defined under `page.corvus.subscribeOps`. The client→server side of the duplex socket is described here as a separate frame union. Clients dispatch on each message's `$type` discriminator (e.g. `page.corvus.backchannelFrame#op`). **Multi-block.** A single WebSocket connection authenticates one