Export surfaces

Six ways to consume the hub.

GraphQL is the primary surface, but not the only one. Integrators can pull snapshots, subscribe to feeds, receive webhooks, mirror from IPFS, or consume the raw operation log. All surfaces share the same schema and the same CC0 object format.

Nightly JSON snapshots

HTTPS · unauthenticated · checksummed Live

The full indexed dataset, served as one JSON file. Fetch without authentication, archive anywhere, replay into your own system.

Endpoint
GET /api/snapshots/latest.json
Live response
Fetching…

RSS + Atom feeds

Ordered by closeDate Live

One entry per grant pool, ordered by close date. Subscribe from any aggregator.

Endpoint
GET /api/feeds/rfps.rss
Live response
Fetching…

JSON-LD projections

DAOIP-5 · schema.org/MonetaryGrant Live

Every pool is emitted as parallel JSON-LD documents — DAOstar DAOIP-5 GrantPool and schema.org/MonetaryGrant. Projections absorb upstream schema drift.

Endpoint
GET /api/rfps/<id>/daoip-5.jsonld
GET /api/rfps/<id>/schema-org.jsonld
Live response
Fetching…

Webhooks

Push · retry · dead-letterRoadmap

Register a URL; receive a signed POST on every addRfp / approve / update / retract / claim-community-entry operation. Exponential-backoff retry with dead-letter queue after five failures.

Endpoint
POST /webhooks/register { url, events[] }
GET /webhooks/<id>/deliveries
Shape (illustrative)
// Register once per subscription
POST /webhooks/register
Content-Type: application/json

{
  "url": "https://your-service.example/hub",
  "events": ["addRfp", "approve", "update"]
}

// You receive signed POSTs like:
POST https://your-service.example/hub
X-Hub-Signature: sha256=abc123…

{
  "id": "evt_01HXYZ…",
  "event": "addRfp",
  "documentId": "f9041488-8531-4e30-aabc-eeb60f36a2de",
  "sequence": 41278,
  "timestamp": "2026-04-22T17:42:11.003Z",
  "data": { … full rfp-hub/grant-pool document … }
}

IPFS + Swarm mirrors

Content-addressed · decentralizedRoadmap

A read-model projection publishes signed operation payloads to Swarm via bee-reactor-adaptor and IPFS via a co-pinning service. Third parties can archive and replicate without touching our API.

Endpoint
GET /mirrors/ipfs.json
GET /mirrors/swarm.json
Shape (illustrative)
{
  "@context": "https://www.daostar.org/context/DAOIP-5.jsonld",
  "@type": "OperationMirror",
  "snapshotAt": "2026-04-22T02:00:00Z",
  "ipfsCid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
  "swarmRef":
    "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "operations": 41278,
  "signer": "did:key:zDnaeRdw7dGcbfKVuycmcMWPpuPuQuNNAVNSsNt3p5eudowvB"
}

Operation log replay

Power usersRoadmap

Subscribe to the raw, append-only operation log for deterministic replay into your own reactor. Every operation is signed; ordering is preserved.

Endpoint
ws /operations/stream
GET /operations?sinceSeq=<n>
Shape (illustrative)
// Pull-based (REST, since sequence N)
GET /operations?sinceSeq=41275
[
  { "seq": 41275, "documentId": "fae7…", "type": "ADD_POOL_SIZE_ENTRY",  … },
  { "seq": 41276, "documentId": "fae7…", "type": "SET_DESCRIPTION",      … },
  { "seq": 41277, "documentId": "3df1…", "type": "APPROVE_GRANT_POOL",   … },
  …
]

// Push-based (WebSocket, live stream)
ws /operations/stream
> {"resume": 41278}
< {"seq": 41278, "documentId": "…", "type": "…", "signer": "did:ethr:…"}