chat.yakka.postMessage

yakka.chat

Documentation

Write a message to the author's own repo, under their OAuth grant (Law 4: write admission belongs to the author's PDS, never to the appview). The appview is the caller's agent here, not an authority — a refusal from the PDS is reported as one rather than absorbed. Resolves once the record is ingested and sequenced, by which time the client has already shown a provisional copy and will reconcile on (uri, cid) (ADR 0011).

main procedure

Write a message to the author's own repo, under their OAuth grant (Law 4: write admission belongs to the author's PDS, never to the appview). The appview is the caller's agent here, not an authority — a refusal from the PDS is reported as one rather than absorbed. Resolves once the record is ingested and sequenced, by which time the client has already shown a provisional copy and will reconcile on (uri, cid) (ADR 0011).

Input

Encodingapplication/json
Schema#input

Output

Encodingapplication/json

Errors

ChannelNotFound
ChannelForbidden The mint declined for this viewer (ADR 0007).
WriteRefused The author's own PDS refused the write. Theirs to explain, not ours to override.
WriteUnconfirmed The record was written and the appview has not yet seen it come back through the sync path. The write SUCCEEDED. Do not retry it — a retry writes a second record, and the two are different messages with different URIs, not one message sent twice. The message will arrive over the socket or on the next timeline read; a client should leave its provisional copy in place rather than marking it failed. This is separate from WriteRefused because the two call for opposite responses, and a client that conflated them would double-post every time ingest ran slow.
Try It

Requests are sent directly from your browser. Some servers may block requests due to CORS.

Base URL for XRPC calls (e.g., https://bsky.social)
Enter valid JSON for the request body
View raw schema
{
  "type": "procedure",
  "input": {
    "schema": {
      "ref": "#input",
      "type": "ref"
    },
    "encoding": "application/json"
  },
  "errors": [
    {
      "name": "ChannelNotFound"
    },
    {
      "name": "ChannelForbidden",
      "description": "The mint declined for this viewer (ADR 0007)."
    },
    {
      "name": "WriteRefused",
      "description": "The author's own PDS refused the write. Theirs to explain, not ours to override."
    },
    {
      "name": "WriteUnconfirmed",
      "description": "The record was written and the appview has not yet seen it come back through the sync path.\n\nThe write SUCCEEDED. Do not retry it — a retry writes a second record, and the two are different messages with different URIs, not one message sent twice. The message will arrive over the socket or on the next timeline read; a client should leave its provisional copy in place rather than marking it failed.\n\nThis is separate from WriteRefused because the two call for opposite responses, and a client that conflated them would double-post every time ingest ran slow."
    }
  ],
  "output": {
    "schema": {
      "ref": "chat.yakka.defs#messageView",
      "type": "ref"
    },
    "encoding": "application/json"
  },
  "description": "Write a message to the author's own repo, under their OAuth grant (Law 4: write admission belongs to the author's PDS, never to the appview).\n\nThe appview is the caller's agent here, not an authority — a refusal from the PDS is reported as one rather than absorbed. Resolves once the record is ingested and sequenced, by which time the client has already shown a provisional copy and will reconcile on (uri, cid) (ADR 0011)."
}
input object

No description available.

Properties

body string Required

The message text, in the same spelling the view returns it (chat.yakka.defs#messageView). The record it becomes calls the field `text`.

maxLength: 10000 bytesmaxGraphemes: 2000 graphemes
channel string Required

No description available.

replyTo string at-uri Optional

The message being replied to. Display order of a thread still comes from the view sequence.

View raw schema
{
  "type": "object",
  "required": [
    "channel",
    "body"
  ],
  "properties": {
    "body": {
      "type": "string",
      "maxLength": 10000,
      "description": "The message text, in the same spelling the view returns it (chat.yakka.defs#messageView). The record it becomes calls the field `text`.",
      "maxGraphemes": 2000
    },
    "channel": {
      "type": "string"
    },
    "replyTo": {
      "type": "string",
      "format": "at-uri",
      "description": "The message being replied to. Display order of a thread still comes from the view sequence."
    }
  }
}

Lexicon Garden

@