AnyGas Messaging API

Wallet-to-wallet messaging (v2 sealed + unlinkable; v1 plaintext)

Operations 15

GET /api/messages/v2/info Messaging v2 status + parameters (suite, buckets, release grid, kContribution) #
GET /api/messages/v2/mailbox/{addressOrName} Recipient mailbox: stealth meta-address + hybrid ML-KEM public key #
POST /api/messages/v2/mailbox Publish or rotate your mailbox (EIP-191 signed, monotonic by ts) #
POST /api/messages/v2/send Deliver a sealed message (server stores only ephemeralPubKey, viewTag, ct). #
GET /api/messages/v2/feed Public feed (identical for every reader); scan with your viewing key #
POST /api/messages/send [RETIRED 2026-08-20] v1 send — returns 410; use /api/messages/v2/send #
GET /api/messages/inbox/{address} v1 inbox (plaintext) — prefer v2 #
GET /api/messages/resolve/{addressOrName} Resolve a Robyn name or address #
GET /api/messages/v2/directory All v2 mailboxes, identical for every reader (oblivious lookup) #
POST /api/messages/v2/plus/cover Spend a pass: one funded cover row within 24 h #
POST /api/messages/v2/plus/anchor Spend a pass: anchor a feed row id in the next signed Merkle batch #
GET /api/messages/v2/anchor/{id} Anchoring proof for a row id #
GET /api/messages/v2/anchors Recent anchor batches #
GET /api/messages/v2/erasure Signed proof-of-erasure statement (last purge + cumulative) #
POST /api/receipt/deliver Deliver a relayer-signed receipt to a counterparty's sealed v2 mailbox #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/anygas-xyz:anygas-xyz-messaging-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

anygas-xyz-messaging-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Anygas Xyz Messaging API
  version: 3.28.2
  contact:
    name: Robyn AnyGas
    url: https://anygas.xyz
  license:
    name: Service terms
    url: https://anygas.xyz/svc/api/terms
  x-lastUpdated: '2026-07-29'
  description: 'Operations tagged messaging across 2 of this provider''s published API definitions: anygas-openapi.json, anygas-xyz-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.anygas.xyz/svc
  description: Production gateway (also https://anygas.xyz/svc)
tags:
- name: Messaging
  description: Wallet-to-wallet messaging (v2 sealed + unlinkable; v1 plaintext)
paths:
  /api/messages/v2/info:
    get:
      summary: Messaging v2 status + parameters (suite, buckets, release grid, kContribution)
      tags:
      - Messaging
      responses:
        '200':
          description: Info
      operationId: getApiMessagesV2Info
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/mailbox/{addressOrName}:
    get:
      summary: 'Recipient mailbox: stealth meta-address + hybrid ML-KEM public key'
      tags:
      - Messaging
      parameters:
      - name: addressOrName
        in: path
        required: true
        schema:
          type: string
        description: 0x address or Robyn name (label.robyn.id / .robynchain.eth / .rhood.eth)
      responses:
        '200':
          description: Mailbox
        '404':
          description: No v2 mailbox; fall back to v1
      operationId: getApiMessagesV2MailboxByAddressOrName
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/mailbox:
    post:
      summary: Publish or rotate your mailbox (EIP-191 signed, monotonic by ts)
      tags:
      - Messaging
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - address
              - metaAddress
              - kemPub
              - ts
              - sig
              properties:
                address:
                  type: string
                metaAddress:
                  type: string
                  example: st:eth:0x02…
                kemPub:
                  type: string
                  description: base64 hybrid ML-KEM-768+X25519 public key (1216 bytes)
                ts:
                  type: integer
                  description: unix seconds, ±10 min
                sig:
                  type: string
                  description: 'personal_sign of "robyn-messaging v2\naction: mailbox\naddress: …\nmeta: …\nkem: <sha256 of kemPub bytes>\nts: …"'
                pass:
                  type: object
                  description: optional Plus pass {preparedMsg, sig} (base64) — rate-limit exempt, unlinkable
                  properties:
                    preparedMsg:
                      type: string
                    sig:
                      type: string
      responses:
        '200':
          description: '{ok, address, since} or {ok, unchanged:true}'
        '403':
          description: signature does not match address
      operationId: postApiMessagesV2Mailbox
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/send:
    post:
      summary: Deliver a sealed message (server stores only ephemeralPubKey, viewTag, ct).
      tags:
      - Messaging
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - ephemeralPubKey
              - viewTag
              - ct
              properties:
                ephemeralPubKey:
                  type: string
                  description: 33-byte compressed secp256k1 point, one-time
                viewTag:
                  type: string
                  example: '0x3a'
                ct:
                  type: string
                  description: base64; suite 0x51; must be one of the fixed ciphertext sizes (see /info)
                pass:
                  type: object
                  description: optional Plus pass {preparedMsg, sig} (base64) — rate-limit exempt, unlinkable
                  properties:
                    preparedMsg:
                      type: string
                    sig:
                      type: string
      responses:
        '200':
          description: '{ok, id, releaseAt} or {ok, id, duplicate:true}'
        '400':
          description: not a bucket-sized v2 seal
      operationId: postApiMessagesV2Send
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/feed:
    get:
      summary: Public feed (identical for every reader); scan with your viewing key
      tags:
      - Messaging
      parameters:
      - name: since
        in: query
        schema:
          type: integer
        description: releaseAt cursor (ms)
      - name: limit
        in: query
        schema:
          type: integer
          maximum: 200
      responses:
        '200':
          description: '{total, count, nextSince, truncated, messages:[{id, ephemeralPubKey, viewTag, ct, releaseAt}]}'
      operationId: getApiMessagesV2Feed
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/send:
    post:
      summary: '[RETIRED 2026-08-20] v1 send — returns 410; use /api/messages/v2/send'
      tags:
      - Messaging
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - from
              - to
              - message
              - sig
              properties:
                from:
                  type: string
                to:
                  type: string
                  description: address or Robyn name
                message:
                  type: string
                sig:
                  type: string
                  description: personal_sign of "robyn-msg:<toLower>:<message>"
      responses:
        '410':
          description: GONE — messaging v1 writes are retired; use sealed v2 (POST /api/messages/v2/send)
      deprecated: true
      operationId: postApiMessagesSend
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/inbox/{address}:
    get:
      summary: v1 inbox (plaintext) — prefer v2
      tags:
      - Messaging
      parameters:
      - name: address
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: messages
      operationId: getApiMessagesInboxByAddress
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/resolve/{addressOrName}:
    get:
      summary: Resolve a Robyn name or address
      tags:
      - Messaging
      parameters:
      - name: addressOrName
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: '{resolved: address|null}'
      operationId: getApiMessagesResolveByAddressOrName
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/directory:
    get:
      summary: All v2 mailboxes, identical for every reader (oblivious lookup)
      tags:
      - Messaging
      responses:
        '200':
          description: '{count, mailboxes:[{address, metaAddress, kemPub, since}]}'
      operationId: getApiMessagesV2Directory
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/plus/cover:
    post:
      summary: 'Spend a pass: one funded cover row within 24 h'
      tags:
      - Messaging
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - pass
              properties:
                pass:
                  type: object
                  description: optional Plus pass {preparedMsg, sig} (base64) — rate-limit exempt, unlinkable
                  properties:
                    preparedMsg:
                      type: string
                    sig:
                      type: string
      responses:
        '200':
          description: scheduled
        '402':
          description: pass required
      operationId: postApiMessagesV2PlusCover
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/plus/anchor:
    post:
      summary: 'Spend a pass: anchor a feed row id in the next signed Merkle batch'
      tags:
      - Messaging
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - pass
              - id
              properties:
                pass:
                  type: object
                  description: optional Plus pass {preparedMsg, sig} (base64) — rate-limit exempt, unlinkable
                  properties:
                    preparedMsg:
                      type: string
                    sig:
                      type: string
                id:
                  type: string
      responses:
        '200':
          description: queued
        '402':
          description: pass required
      operationId: postApiMessagesV2PlusAnchor
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/anchor/{id}:
    get:
      summary: Anchoring proof for a row id
      tags:
      - Messaging
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: '{leaf, path, root, signer, signature, message, onchain}'
        '404':
          description: not anchored
      operationId: getApiMessagesV2AnchorById
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/anchors:
    get:
      summary: Recent anchor batches
      tags:
      - Messaging
      responses:
        '200':
          description: batches
      operationId: getApiMessagesV2Anchors
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/messages/v2/erasure:
    get:
      summary: Signed proof-of-erasure statement (last purge + cumulative)
      tags:
      - Messaging
      responses:
        '200':
          description: statement
      operationId: getApiMessagesV2Erasure
      x-operation-id-source: derived
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
  /api/receipt/deliver:
    post:
      tags:
      - Messaging
      summary: Deliver a relayer-signed receipt to a counterparty's sealed v2 mailbox
      operationId: receiptDeliver
      description: Seals the receipt (ML-KEM-768+X25519, one-time handle) to the recipient's messaging-v2 mailbox and stores it on the same wire shape as any message, so the counterparty gets verifiable proof without contacting Robyn. Only receipts signed by this relayer are accepted. Content-hash idempotent (replay is a no-op); reachable over OHTTP.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                to:
                  type: string
                  description: address or Robyn name with a v2 mailbox
                receipt:
                  type: object
                pass:
                  type: object
                  description: optional Plus pass
              required:
              - to
              - receipt
            example:
              to: sphynx.robynchain.eth
              receipt:
                version: anygas-receipt/1
      responses:
        '200':
          description: '{delivered, id, releaseAt, receiptDigest}'
          content:
            application/json:
              schema:
                type: object
        '400':
          description: receipt does not verify / missing field
        '403':
          description: not signed by this relayer
        '404':
          description: recipient has no v2 mailbox
    servers:
    - url: https://api.anygas.xyz/svc
      description: Production gateway (also https://anygas.xyz/svc)
x-refined-from:
- anygas-openapi.json
- anygas-xyz-openapi.json