Releaseo

API

Help Center API

Connect published Releaseo help content to your apps: create a project key, read and search articles, handle languages and pagination, and manage caching securely.

Bring your published knowledge into a custom support experience, an app backend or a knowledge-sync workflow. Maintain articles in Releaseo and read them through a project-scoped API instead of copying content by hand.

Choose the right integration

Use the Help Center API when you need to fetch published folders and articles from your server. Use the Releaseo widget when you want ready-made customer-facing help inside your product, or the hosted public site when you want a complete help portal.

The API is read-only. It cannot create or edit articles, read editorial drafts, access customer identities or manage API keys. It is separate from the widget SDK: an SDK publish key is not a Help Center API credential.

1. Prepare your content

Select the correct project in the dashboard. In Help center, create a folder and an article, review its content and publish it. Articles must be published and unarchived, and their folder and all parent folders must be visible. Hidden folders and drafts do not appear in API results.

For translated content, enable the relevant language and publish its translation. Keep translations aligned with the current source article. The API returns eligible published translations and falls back to the source language when necessary.

2. Open API & integrations

From Help center, open API & integrations. Check the selected project and connection details before creating a credential. The page provides the base URL, API documentation and the fixed help_center:read permission.

An account with Help Center read access can view key metadata. Creating, renaming, rotating or revoking keys also requires permission to update the project. If a management control is unavailable, ask your workspace owner to review your project permissions.

There is no separate switch to enable each issued key. A valid key authenticates requests for its selected project until it expires, is revoked or completes its rotation grace period. If the service reports that the API is temporarily unavailable, contact Releaseo support; creating more keys will not resolve service availability.

3. Create and store a key

Choose Create API key, give the integration a recognizable name and choose an expiry if needed. Copy the secret when it is displayed: it is shown only once. Store it in your server’s secret manager or environment settings as RELEASEO_API_KEY.

Create separate keys for separate integrations so you can revoke one without interrupting the others. Keep keys out of browser bundles, mobile app packages, public repositories, screenshots and logs. Your browser should call your own backend, which adds the Releaseo credential on the server.

If you lose the secret, it cannot be recovered from the key list. Revoke the unused credential and issue a replacement. Never share a real key in a support ticket.

4. Make your first request

The hosted resource base URL is https://api.releaseo.io/api/v1/help-center. Every request uses HTTPS and a Bearer credential. The key selects its project automatically; you do not pass a project ID in these resource URLs.

Set RELEASEO_API_KEY in your environment using your secret-management tooling, then run:

curl --fail-with-body 'https://api.releaseo.io/api/v1/help-center' \
  -H "Authorization: Bearer $RELEASEO_API_KEY"

This returns project information, the source and enabled languages, and the credential scope. Next, retrieve an article list:

curl --fail-with-body 'https://api.releaseo.io/api/v1/help-center/articles?limit=25' \
  -H "Authorization: Bearer $RELEASEO_API_KEY"

Use the interactive API documentation for the complete response schemas, or download the OpenAPI document for your tooling.

Read folders and articles

Request Use it to
GET /api/v1/help-center Discover the project, languages and scope.
GET /api/v1/help-center/folders Read active folders with visible ancestors.
GET /api/v1/help-center/articles List or search published article summaries.
GET /api/v1/help-center/articles/:articleId Fetch an article’s sanitized HTML and plain text.

Use an article ID returned by the list when requesting a detail. A publicUrl can be null when there is no enabled, published public site; your integration can still use the returned content.

Search, folders and languages

curl --fail-with-body --get 'https://api.releaseo.io/api/v1/help-center/articles' \
  -H "Authorization: Bearer $RELEASEO_API_KEY" \
  --data-urlencode 'q=installation' \
  --data-urlencode 'locale=fr-CA' \
  --data-urlencode 'limit=25'

q performs a case-insensitive literal substring search, with a maximum of 256 characters. Add folderId to restrict results to one folder. limit accepts 1–100 and defaults to 25.

locale accepts a supported-format language tag, not a fixed list of languages. Resolution tries an enabled exact locale, then an enabled base locale, then the source language. Check each article’s locale for the actual language and meta.requestedLocale for the requested one. Folder labels stay in the source language.

Pagination and synchronization

Follow pagination.nextCursor while pagination.hasMore is true. Keep the same query, folder and locale during traversal. Treat the cursor as opaque: do not edit it or reuse it for a different project or filter.

A scan is not a frozen snapshot. If you mirror articles, reconcile removed IDs only after a complete successful scan, and repeat the scan after concurrent content changes. Deleting or unpublishing an article in Releaseo does not automatically erase copies stored by your integration. API reads do not count as article views.

Server-side JavaScript example

const apiKey = process.env.RELEASEO_API_KEY;
if (!apiKey) throw new Error('Configure RELEASEO_API_KEY on the server');

const url = new URL('https://api.releaseo.io/api/v1/help-center/articles');
url.searchParams.set('limit', '25');
const response = await fetch(url, {
  headers: { Authorization: `Bearer ${apiKey}` },
  signal: AbortSignal.timeout(15000),
});
if (!response.ok) {
  throw new Error(`Releaseo Help Center API returned ${response.status}`);
}
const page = await response.json();
// Process the documented data and pagination fields in your server workflow.

This minimal example fails visibly on errors. For a scheduled sync, add bounded retries for temporary failures, honor Retry-After on 429, and keep the credential and response bodies out of error logs.

Manage and rotate credentials

Use the dashboard key list to rename, rotate or revoke a credential. Renaming changes its label, not its secret or project scope. Rotation issues a replacement secret; update the integration’s stored value and verify its requests.

For a planned rotation, a 24-hour grace period lets you update the integration before the old credential stops working. Choose immediate replacement for an exposed credential. Rotation preserves the original expiry; it does not extend the key’s lifetime. Revocation stops a credential immediately.

Each project supports at most 50 unexpired, unrevoked credentials, including retiring keys. Revoke unused keys or choose immediate rotation when you are at that limit. If an issuance request loses its response, inspect the metadata and revoke the unused key before creating another; do not automatically retry key-creation requests.

Caching and freshness

Successful reads can reuse cached published content for up to 300 seconds. Article, folder, language and published-translation changes invalidate the relevant cached generation automatically. Authentication and current project access are checked even on cache hits.

In API & integrations → API response cache, review availability and the last manual clear. Use Clear API cache when investigating freshness, and confirm the action. It invalidates this project’s API response cache; it does not delete articles, keys or copies saved by integrations. Clearing requires both Help Center read and project-update permissions.

The X-Releaseo-Cache response header reports HIT, MISS, COALESCED or BYPASS. Larger responses may bypass the cache. If the response-cache service is unavailable, reads can fall back to current database content; authentication or rate-limit infrastructure failures can still return 503.

Responses support ETags. Revalidate using If-None-Match and handle 304 without trying to parse an empty body. Keep cached representations isolated by credential/project; the API uses Vary: Authorization and private, no-cache.

Limits and troubleshooting

Each key allows 100 requests per minute and 1,000 per hour. Shared project limits are 500 per minute and 5,000 per hour across its keys. Creating extra keys does not bypass the project limits.

Result What to check
401 Check the Bearer header, expiry, revocation and completed rotation grace period. Use a Help Center API key, not an SDK key.
403 in the dashboard Ask your owner to review project permissions and project availability.
404 for an article Check its ID, project, publication/archive state and folder visibility.
429 Wait for Retry-After, add jitter, and reduce polling frequency.
503 Retry reads with bounded exponential backoff; if persistent, contact support with the request ID and time.
Empty or unexpected language results Check publication, folder visibility, enabled languages, current published translations and your filters.

Share the request ID, route and timestamp when reporting a problem. Never include your Authorization header or secret. OAuth, write access, deletion webhooks and packaged third-party connectors are not part of this read-only API.

Was this page helpful?