The Blogpost publishing feature is available only in Orderly
One and only to graduated builders. See Builder
Onboarding to complete graduation. The public
APIs documented here allow applications to retrieve published content without authentication.
API domains
Append the complete path to the base URL, for example
https://dex-api.orderly.network/api/public/v1/blogposts. Content, IDs, slugs, and cursors are environment-specific.
Both documented endpoints use GET and require no API key, wallet signature, or authorization header. Responses use JSON; send Accept: application/json. Enum values are case-sensitive. Timestamps are ISO 8601 UTC strings, and absent optional content fields are returned as null. API examples use illustrative content; their slugs and broker IDs may not exist.
Content visibility
The same slug can return different published content and timestamps depending on the requested feed. Use the same
brokerId for list and detail requests. A builder-scoped request filters to that builder’s trading platform and does not automatically add posts from Orderly’s official feed.
Both feeds are publicly accessible. Only published posts are returned.
Sorting and pagination
The list sorts bystartsAt when present, otherwise publishedAt, descending, then by post ID descending. A start time takes precedence even when earlier than publication time. Future start times are included. Sorting uses the published content returned by the requested feed.
Start and end times are content metadata, not automatic publication or expiration controls. An ended campaign can remain listed until unpublished. publishedAt remains the publication timestamp.
- Request the first page without
cursor. - Pass the returned
nextCursorunchanged ascursorfor the next page. - Preserve the environment and filters. Restart from the first page when changing filters.
- Stop when
nextCursorisnull.
nextCursor, not the number of returned items, to decide whether to continue. The feed can change between requests. There is no total count, page number, search parameter, or custom sort parameter. Empty results are successful:
Rendering articles
- Render banners, post logos, author avatars, dates, and CTA links only when present.
startsAtandendsAtcan both be absent. - Use
idfor stable UI keys and deduplication. Use the full returnedslugfor article requests. - The author’s avatar can be an image data URI and can change independently of article timestamps. It is separate from
coverLogoUrl. - Detail responses add sanitized, server-rendered
html. Raw Markdown is not returned. - HTML can contain paragraphs, H2-H4 headings, emphasis, lists, blockquotes, links, tables, images, and supported YouTube/Vimeo embeds. Provide responsive styles; video wrappers use the
blogpost-video-embedclass. - Applications supply the layout, styling, date formatting, and CTA button label. The editor preview is illustrative.
Shared rate limit
Public Blogpost endpoints share a rate limit of 60 requests per client IP per rolling 60 seconds. Coordinate requests and cache results, especially when users share an outbound IP.
Rate-limit responses include
error, code: "BLOGPOST_PUBLIC_RATE_LIMITED", and retryAfter in seconds. Honor Retry-After and avoid immediate retry loops.
Caching and errors
Published edits, visibility changes, and unpublishing may take time to appear while caches expire. Detail responses allow stale content while revalidation occurs.
Service errors normally contain an
error string; validation errors contain success: false and an error.issues array. Use HTTP status and structured fields instead of matching English error text. Check the content type before parsing: an intermediary can return a non-JSON error.