API ReferenceSSF
Poll & Acknowledge Events
For poll-mode SSF streams -- pull pending events, then acknowledge.
RPCs
| Method | Path |
|---|---|
| PollEvents | POST /v1/ssf/streams/{id}/events:poll |
| AcknowledgeEvents | POST /v1/ssf/streams/{id}/events:ack |
Base URL: https://<Domain id="api"/>
Authentication: Bearer token scoped to the stream's audience (the audience that receives the events must auth itself on the poll).
Poll
const res = await fetch(
`https://api-id.avnology.net/v1/ssf/streams/${streamId}/events:poll`,
{
method: "POST",
headers: {
Authorization: `Bearer ${receiverToken}`,
"Content-Type":
body := strings.NewReader(`{"max_events":100,"return_immediately":false}`)
req, _ := http.NewRequest("POST",
"https://api-id.avnology.net/v1/ssf/streams/"+streamID+"/events:poll"import httpx
httpx.post(
f"https://api-id.avnology.net/v1/ssf/streams/{stream_id}/events:poll",
json={"max_events": 100, "return_immediately": False},
curl -X POST "https://api-id.avnology.net/v1/ssf/streams/ssf_01H7X/events:poll" \
-H "Authorization: Bearer $RECEIVER_TOKEN" \
-H "Content-Type: application/json"
const res = await fetch(
`https://api-id.avnology.net/v1/ssf/streams/${streamId}/events:poll`,
{
method: "POST",
headers: {
Authorization: `Bearer ${receiverToken}`,
"Content-Type":
body := strings.NewReader(`{"max_events":100,"return_immediately":false}`)
req, _ := http.NewRequest("POST",
"https://api-id.avnology.net/v1/ssf/streams/"+streamID+"/events:poll"import httpx
httpx.post(
f"https://api-id.avnology.net/v1/ssf/streams/{stream_id}/events:poll",
json={"max_events": 100, "return_immediately": False},
curl -X POST "https://api-id.avnology.net/v1/ssf/streams/ssf_01H7X/events:poll" \
-H "Authorization: Bearer $RECEIVER_TOKEN" \
-H "Content-Type: application/json"
const res = await fetch(
`https://api-id.avnology.net/v1/ssf/streams/${streamId}/events:poll`,
{
method: "POST",
headers: {
Authorization: `Bearer ${receiverToken}`,
"Content-Type":
body := strings.NewReader(`{"max_events":100,"return_immediately":false}`)
req, _ := http.NewRequest("POST",
"https://api-id.avnology.net/v1/ssf/streams/"+streamID+"/events:poll"import httpx
httpx.post(
f"https://api-id.avnology.net/v1/ssf/streams/{stream_id}/events:poll",
json={"max_events": 100, "return_immediately": False},
curl -X POST "https://api-id.avnology.net/v1/ssf/streams/ssf_01H7X/events:poll" \
-H "Authorization: Bearer $RECEIVER_TOKEN" \
-H "Content-Type: application/json"
const res = await fetch(
`https://api-id.avnology.net/v1/ssf/streams/${streamId}/events:poll`,
{
method: "POST",
headers: {
Authorization: `Bearer ${receiverToken}`,
"Content-Type":
body := strings.NewReader(`{"max_events":100,"return_immediately":false}`)
req, _ := http.NewRequest("POST",
"https://api-id.avnology.net/v1/ssf/streams/"+streamID+"/events:poll"import httpx
httpx.post(
f"https://api-id.avnology.net/v1/ssf/streams/{stream_id}/events:poll",
json={"max_events": 100, "return_immediately": False},
Response
{
"sets": {
"jti-1": "eyJhbGciOi...jwt-of-set-1...",
"jti-2": "eyJhbGciOi...jwt-of-set-2..."
}
}Each entry is a signed Security Event Token (RFC 8417). Verify the signature against <Domain id="api"/>/.well-known/jwks.json.
Acknowledge
POST /v1/ssf/streams/{id}/events:ack
{ "acks": ["jti-1", "jti-2"] }Unacked events are re-delivered on the next poll, with an exponential backoff up to 24h.