NagyZoltanPeter 23059b7c0b
feat: add messaging REST API spec
Document the high-level messaging client REST surface following the
existing per-endpoint-file structure:

- POST/DELETE /messaging/v1/subscriptions (subscribe by content topic)
- POST /messaging/v1/messages (send a MessageEnvelope -> requestId)
- GET /messaging/v1/events/send[/{requestId}] (poll send events)
- GET /messaging/v1/events/received (poll received messages)

Adds the messaging schemas to schemas/apitypes.yaml (MessagingJsonEnvelope,
MessagingSendResponse, SendEventRecord, SendStatus, ReceivedMessageRecord,
list wrappers) and wires the paths + a `messaging` tag into openapi.yaml.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 17:22:09 +02:00

410 lines
7.0 KiB
YAML

WakuPeerStats:
type: object
properties:
grouping:
type: object
properties:
name:
title: string
value:
type: array
items:
type: object
properties:
title:
type: string
value:
type: integer
format: int32
examples:
peer_statistics:
$ref: "./adminapi_peers_stats_example.json"
WakuPeer:
type: object
required:
- multiaddr
- protocols
- shards
- agent
- connected
- origin
properties:
multiaddr:
type: string
protocols:
type: array
items:
type: string
shards:
type: array
items:
type: integer
format: int32
connected:
type: string
enum:
- "NotConnected"
- "CannotConnect"
- "CanConnect"
- "Connected"
agent:
type: string
origin:
type: string
score:
type: number
format: double
PeersOfShard:
type: object
properties:
shard:
type: integer
format: int32
peers:
type: array
items:
$ref: "#/WakuPeer"
WakuInfo:
type: object
properties:
listenAddresses:
type: array
items:
type: string
enrUri:
type: string
required:
- listenAddresses
PubsubTopic:
type: string
ContentTopic:
type: string
FilterGetMessagesResponse:
type: array
items:
$ref: "#/WakuMessage"
FilterSubscribeRequest:
type: object
properties:
requestId:
type: string
contentFilters:
type: array
items:
$ref: "#/ContentTopic"
pubsubTopic:
$ref: "#/PubsubTopic"
required:
- requestId
- contentFilters
- pubsubTopic
FilterUnsubscribeRequest:
type: object
properties:
requestId:
type: string
contentFilters:
type: array
items:
$ref: "#/ContentTopic"
pubsubTopic:
$ref: "#/PubsubTopic"
required:
- requestId
- contentFilters
FilterUnsubscribeAllRequest:
type: object
properties:
requestId:
type: string
required:
- requestId
FilterSubscriptionResponse:
type: object
properties:
requestId:
type: string
statusDesc:
type: string
required:
- requestId
WakuMessage:
type: object
properties:
payload:
type: string
format: byte
contentTopic:
$ref: "#/ContentTopic"
version:
type: integer
format: int32
timestamp:
type: integer
format: int64
ephemeral:
type: boolean
proof:
type: string
meta:
type: string
format: byte
required:
- payload
- contentTopic
- timestamp
WakuMessageKeyValue:
type: object
properties:
message_hash:
type: string
message:
$ref: "#/components/schemas/WakuMessage"
required:
- message_hash
- message
StoreQueryResponse:
type: object
properties:
requestId:
type: string
statusCode:
type: integer
format: uint32
statusDesc:
type: string
messages:
type: array
items:
$ref: "#/components/schemas/WakuMessageKeyValue"
paginationCursor:
type: string
required:
- requestId
- statusCode
- statusDesc
- messages
PushRequest:
type: object
properties:
pubsubTopic:
$ref: "#/PubsubTopic"
message:
$ref: "#/WakuMessage"
required:
- message
PushResponse:
type: object
properties:
statusDesc:
type: string
relayPeerCount:
type: integer
format: uint32
## TODO: Check if it can be tunneled into the one WakuMessage structure
## mainly because of Relay post message request can break in client code
RelayWakuMessage:
type: object
properties:
payload:
type: string
format: byte
contentTopic:
$ref: "#/ContentTopic"
version:
type: number
timestamp:
type: number
ephemeral:
type: boolean
meta:
type: string
format: byte
required:
- payload
RelayGetMessagesResponse:
type: array
items:
$ref: "#/RelayWakuMessage"
RelayPostMessagesRequest:
$ref: "#/RelayWakuMessage"
StoreResponse:
type: object
properties:
messages:
type: array
items:
$ref: "#/WakuMessage"
cursor:
$ref: "#/HistoryCursor"
error_message:
type: string
required:
- messages
HistoryCursor:
type: object
properties:
pubsubTopic:
type: string
senderTime:
type: string
storeTime:
type: string
digest:
type: string
required:
- pubsubTopic
- senderTime
- storeTime
- digest
FilterSubscription:
type: object
required:
- peerId
- filterCriteria
properties:
peerId:
type: string
filterCriteria:
type: array
items:
type: object
required:
- pubsubTopic
- contentTopic
properties:
pubsubTopic:
type: string
contentTopic:
type: string
HealthStatus:
type: string
enum:
- "Initializing"
- "Synchronizing"
- "Ready"
- "Not Ready"
- "Not Mounted"
- "Shutting Down"
HealthReport:
type: object
properties:
nodeHealth:
$ref: "#/HealthStatus"
description: Overall health status of the node
protocolsHealth:
type: array
items:
type: object
additionalProperties:
$ref: "#/HealthStatus"
## Messaging API types
MessagingJsonEnvelope:
type: object
description: JSON wire form of the messaging MessageEnvelope (the send input).
properties:
payload:
type: string
format: byte
contentTopic:
$ref: "#/ContentTopic"
ephemeral:
type: boolean
meta:
type: string
format: byte
required:
- payload
- contentTopic
MessagingSendResponse:
type: object
properties:
requestId:
type: string
description: Correlates the send with its MessageSent / MessageError events.
required:
- requestId
SendEventRecord:
type: object
properties:
kind:
type: string
enum:
- "sent"
- "propagated"
- "error"
messageHash:
type: string
error:
type: string
description: Populated only when kind is "error".
timestamp:
type: integer
format: int64
description: Nanoseconds, stamped when the event was cached.
required:
- kind
- messageHash
- timestamp
SendStatus:
type: object
description: All send events observed so far for a single request id.
properties:
requestId:
type: string
events:
type: array
items:
$ref: "#/SendEventRecord"
required:
- requestId
- events
SendStatusList:
type: array
items:
$ref: "#/SendStatus"
ReceivedMessageRecord:
type: object
properties:
messageHash:
type: string
message:
$ref: "#/RelayWakuMessage"
required:
- messageHash
- message
ReceivedMessagesResponse:
type: array
items:
$ref: "#/ReceivedMessageRecord"