Skip to content
FiveCord Docs

Search indexes

These routes rebuild search indexes from current data and report progress. Rebuilds appear in Jobs as refreshSearchIndex.

Both routes require the ACL guild:lookup.

index_name is one of the following values. A value outside the set fails path validation.

ValueScopeDescription
guildsInstance-wideEvery guild, backing Admin guild search
usersInstance-wideEvery account, backing Admin user search
reportsInstance-wideEvery report, backing Admin report search
audit_logsInstance-wideEvery Admin audit entry, backing Admin audit search
discovery1Instance-wideDiscovery metadata written onto the guild documents of approved listings
channel_messages2One guildMessages of every channel in one guild, requiring guild_id
guild_members3One guildMembers of one guild, requiring guild_id
favorite_memes4One userFavourited memes of one user, requiring user_id

1 Refreshes the description, category, primary language and tags of approved discovery listings without removing guilds from search

2 Clears the guild’s message index and queues indexChannelMessages jobs for its channels. Completion of the parent job does not mean those jobs have finished

3 Clears the guild’s member index first and updates members_indexed_at on completion

4 Rebuilding this index is not supported. The request is accepted, but the job fails without reporting progress

Every instance-wide name other than discovery deletes its documents before the first batch is written, so search over that index is incomplete for the whole run.

A discovery rebuild instead updates the existing guild documents in place, so those documents stay searchable for the whole run.

A receipt for one queued rebuild.

FieldTypeDescription
successbooleanAlways true
job_id1stringThe ID of the queued rebuild, used to read its progress

1 The value is a snowflake rendered as a string. It addresses the progress record that Get search index refresh reads. It differs from the job_id of the Jobs ledger entry for the same rebuild, and appears there only inside that entry’s payload

{
"success": true,
"job_id": "1501314428688998182"
}

Progress for one queued rebuild. The object shape is selected by status.

FieldTypeDescription
statusstringAlways not_found
FieldTypeDescription
statusstringOne of in_progress, completed, or failed
index_typestringThe search index name being rebuilt
total?1numberThe number of documents expected, present while the rebuild reports progress and once it completes
indexed?2numberThe number of documents written so far
started_at?3ISO8601 timestampThe time the rebuild last reported progress
completed_at?ISO8601 timestampThe time the rebuild finished, present only when status is completed
failed_at?ISO8601 timestampThe time the rebuild failed, present only when status is failed
error?stringThe failure text, present only when status is failed

1 total is the same value as indexed while the rebuild runs and becomes the real total on completion. The discovery rebuild reports the approved listing count from its first batch onwards

2 Each document the rebuild writes counts as one. A channel_messages rebuild counts the channels it queued

3 Rewritten on every progress report, so its value moves forward while the rebuild runs

A failed result includes status, index_type, error and failed_at, but neither total nor indexed.

{
"status": "in_progress",
"index_type": "guilds",
"total": 3000,
"indexed": 3000,
"started_at": "2026-08-31T09:12:44.118Z"
}
POST/v1/admin/search/indexes/{index_name}/refreshesAudit reason

Queues a rebuild of the named index. Requires guild:lookup. Returns a search index refresh object on success.

FieldTypeDescription
index_namestringThe search index name to rebuild

Every field is optional. FiveCord reads an absent or empty body as an empty object, so an instance-wide rebuild can send no body at all. A body that is not parseable JSON returns 400 INVALID_FORM_BODY with the validation code INVALID_FORMAT at the body path.

FieldTypeDescription
guild_id?1snowflakeThe ID of the guild whose documents in the index are rebuilt
user_id?2snowflakeThe ID of the user whose documents in the index are rebuilt

1 Required by channel_messages and guild_members. Every other index name ignores it

2 Required by favorite_memes. Every other index name ignores it

FiveCord records both values on the audit entry whenever they are supplied, including on an index name that ignores them.

StatusBodyCondition
200search index refresh objectThe rebuild was queued
400error responseINVALID_FORM_BODY because the scope ID the index name requires is missing, or the body is not parseable JSON
403error responseMISSING_PERMISSIONS without admin:authenticate, or MISSING_ACL without guild:lookup
500error responseThe job could not be queued

A missing scope ID names guild_id or user_id in errors. FiveCord queues no job and records no audit entry for that failure.

A guild-scoped rebuild for an unknown guild produces an empty index.

A failed rebuild is not retried automatically.

FiveCord records one Admin audit entry with the action queue_refresh_index, the target type search_index, and the target ID 0. Its metadata has index_type, job_id, and whichever of guild_id and user_id the request supplied. FiveCord emits no Gateway Dispatch.

200 requests per minute for each authenticated user, on the admin:lookup bucket.

GET/v1/admin/search/index-refreshes/{job_id}

Returns the search index refresh progress object for one queued rebuild. Requires guild:lookup.

FieldTypeDescription
job_id1stringThe identifier returned by Refresh search index

1 The value is bounded at 1 to 128 characters after FiveCord removes every form feed (U+000C) and right-to-left override (U+202E) character and trims whitespace from both ends. It need not be a snowflake

StatusBodyCondition
2001search index refresh progress objectA progress record was returned, including the not-found shape
403error responseMISSING_PERMISSIONS without admin:authenticate, or MISSING_ACL without guild:lookup

1 An unknown identifier answers 200 with status set to not_found, which is also the answer for an expired record and for a rebuild that failed before writing its first record

The operation records no Admin audit entry.

200 requests per minute for each authenticated user, on the admin:lookup bucket.