Skip to main content
POST
Error

Authorizations

Authorization
string
header
required

Management API authentication for /api/* endpoints. Use the Authorization header with Bearer <token>, where <token> is one of:

  • a Bifrost management API key,
  • a dashboard session token issued by POST /api/session/login,
  • base64 of <admin-username>:<admin-password> (legacy equivalent of BasicAuth).

Virtual keys (sk-bf-*) and the x-api-key header are not accepted on management APIs - the sole exception is GET /api/governance/virtual-keys/quota, which is virtual-key-only.

Authentication alone is not sufficient in Bifrost Enterprise: each operation page shows a Required Permissions table (Resource:Operation, for example Dashboard:View) above its Authorizations section, and the caller's RBAC role or management API key scopes must include what it lists, otherwise the request is rejected with 403 Forbidden.

A local admin — authenticated with the admin password, or any caller on a deployment with dashboard auth disabled — bypasses these checks and can call every management endpoint.

OSS setup lock. On Bifrost OSS, while dashboard auth is not active (no admin account, or auth disabled), every management endpoint except the public ones (/health, /api/version, /api/session/is-auth-enabled, /api/session/login, ...) requires the operator's setup token in the X-Bifrost-Setup-Token header, in place of Authorization. The token is set with setup_token in config.json or the BIFROST_SETUP_TOKEN environment variable. A missing header returns 401, a wrong token 403. The header stops working once dashboard auth is enabled. The dashboard instead trades the token once for an HttpOnly bifrost_setup_session cookie via POST /api/session/setup. See Required permissions for how permissions are derived and which endpoints are exempt.

Body

application/json
id
string

Response

Cancelled or already-terminal job

A topic clustering job. It shares the backfill's counters, which mean something different here: see each field.

status
enum<string>
required
Available options:
idle,
pending,
running,
cancelling,
completed,
failed,
cancelled
total
integer<int64>
required

Requests read from the window so far. Equal to scanned.

scanned
integer<int64>
required

Requests read from the window. Every model call is one request.

indexed
integer<int64>
required

Topics written.

skipped
integer<int64>
required

Requests that were indexed but are no longer in the log store, so they were clustered but could not be filed under a topic.

failed
integer<int64>
required

Topics whose name fell back to their most common words because the model could not be reached.

id
string
start_time
string<date-time>
end_time
string<date-time>
clustered
integer<int64>

Requests that were clustered.

assigned
integer<int64>

Requests given to the nearest topic after clustering stopped. Omitted when a run clustered everything it read.

unassigned
integer<int64>

Requests that ended in no topic.

capped
boolean

Set when a run stopped at a read limit before the end of the window. Runs read the whole window, so this is not set.

merged
integer<int64>

Clusters folded into another for being near-duplicates.

merged_by_name
integer<int64>

Clusters joined after naming because they were given the same name.

themes
integer<int64>

How many themes the active topics were grouped into once the run had written its topics. Omitted when there were too few topics to group, or the grouping could not run (see last_error).

merge_threshold
number<double>

The similarity at or above which two clusters were merged, derived from the run's own clusters. Omitted when the run had nothing to derive one from.

topics
object[]

The topics the run wrote, in the order they were written.

last_error
string
message
string
created_at
string<date-time>
started_at
string<date-time>
completed_at
string<date-time>