Request
Request body fields
| Field | Required | Description |
|---|---|---|
data.type | yes | Must be the string "requests" |
data.attributes.request_id | yes | Your stable, idempotency key for this content item. Use a platform-scoped identifier such as "discourse-post-98765". Submitting the same request_id twice is idempotent. |
data.attributes.requested_by | yes | The Open Notes profile ID (UUID) of the user who triggered this review. |
data.attributes.community_server_id | yes | The community-server UUID from Step 2. |
data.attributes.original_message_content | recommended | Full text of the post. Omit only when content must not be stored. |
data.attributes.platform_message_id | recommended | Platform’s native message ID. Used for deduplication and deep links. |
data.attributes.platform_channel_id | recommended | Channel or topic ID on your platform. |
data.attributes.platform_author_id | recommended | The author’s platform-native user ID (distinct from requested_by, which is the reporter). |
data.attributes.platform_timestamp | recommended | ISO 8601 timestamp of when the post was created on the platform. |
data.attributes.metadata | optional | Freeform JSON object for any extra context your integration needs to round-trip back when the action arrives. |
data.attributes.similarity_score | optional | If your integration pre-computes a similarity score against known content, include it here (0.0–1.0). |
data.attributes.dataset_name | optional | Source dataset name if the request originates from a dataset-matching pipeline. |
data.attributes.dataset_item_id | optional | Fact-check item ID from the matched dataset. |
Response
HTTP 201 — request accepted:data.id — this is the Open Notes request_id UUID. You will need it to correlate incoming moderation actions in Step 4.
Status field
The request starts atPENDING. The server will score the content asynchronously and move the status forward. Your integration does not poll on status — it waits for a moderation action to arrive (either via webhook push or poll).
Idempotency
If your integration submits the samerequest_id string twice (e.g. after a network timeout), the server returns the existing request rather than creating a duplicate. Always use a stable, platform-scoped identifier for request_id.
Reference implementation
The Discourse plugin submits requests viaOpenNotes::Client#post:
X-Adapter-* headers from the user argument:
API reference
Full request and response schema:POST /api/public/v1/requests under API Reference → Requests.
Next: Step 4 — Handle the action