Skip to main content
This walkthrough traces a single post through the complete Open Notes lifecycle. Each step maps to a concrete /api/public/v1 call that your integration makes — in exactly this order.

The five-step sequence

 Platform event


 ┌─────────────────────────────────┐
 │ Step 1 — Identify the user      │  GET /user-profiles/lookup
 │ Map platform user → profile ID  │
 └────────────────┬────────────────┘
                  │ user_profile_id

 ┌─────────────────────────────────┐
 │ Step 2 — Identify the community │  GET /community-servers/lookup
 │ Resolve community-server UUID   │
 └────────────────┬────────────────┘
                  │ community_server_id

 ┌─────────────────────────────────┐
 │ Step 3 — Submit the request     │  POST /requests
 │ Create a classification request │
 └────────────────┬────────────────┘
                  │ request_id  (async scoring begins)

 ┌─────────────────────────────────┐
 │ Step 4 — Handle the action      │  webhook push OR poll /moderation-actions
 │ Receive and apply consensus     │
 └────────────────┬────────────────┘


 ┌─────────────────────────────────┐
 │ Step 5 — Retries and ordering   │  retry, idempotency, ordering
 │ Make delivery reliable          │
 └─────────────────────────────────┘

What each step produces

StepAPI callOutput passed forward
1 — Identify the userGET /user-profiles/lookupuser_profile_id
2 — Identify the communityGET /community-servers/lookupcommunity_server_id
3 — Submit the requestPOST /requestsrequest_id
4 — Handle the actionwebhook or GET /moderation-actionsapplied platform action
5 — Webhooks and retriesreliable delivery

Before you start

Every call in this walkthrough requires:
  • An Authorization: Bearer <api_key> header (see Authentication for how to obtain a key)
  • A full set of X-Adapter-* headers that identify your integration, community, and the acting user (see Headers and auth)
Consult the Integration Guide overview for the full list of integration responsibilities before shipping to production.

Reference implementation

The Discourse plugin is the canonical integration. Every code excerpt in this walkthrough points at the corresponding method in that file.