Skip to content
Support

Retry permanently-failed enrichments for a tenant

client.tenants.enrichments.retry(stringtenantID, EnrichmentRetryParams { enrichments } body?, RequestOptionsoptions?): EnrichmentRetryResponse { results, tenant_id }
POST/v1/tenants/{tenant_id}/enrichments/retry

Clears the terminal failure markers for a tenant so the reconciler will attempt those records again.

The automatic sweep deliberately never revives a terminal record: a terminal failure is a property of the record's own text — a content-policy block, a refusal, an input past the model's limit — so re-running it costs a provider call and fails identically. This endpoint is the override for when that premise has changed: the text was edited, or the provider changed its policy.

Because of that, it is rate limited per (tenant, enrichment). Clearing is a request to spend a provider call on every record already known to fail, so an unbounded clear would be a cost-amplification loop. A refused call returns cooling_down with the remaining wait rather than silently doing nothing.

Every requested enrichment gets its own outcome — a tenant can have one cleared, one cooling down and one switched off in the same call. Responds 202: clearing is synchronous, but the retrying is not.

ParametersExpand Collapse
tenantID: string
body: EnrichmentRetryParams { enrichments }
enrichments?: Array<"translation" | "sentiment" | "emotions">

Which enrichments to clear. Omit or leave empty for all of them, which is the usual call. An unknown name is rejected rather than ignored, so a typo cannot come back as a successful no-op.

Accepts one of the following:
"translation"
"sentiment"
"emotions"
ReturnsExpand Collapse
EnrichmentRetryResponse { results, tenant_id }
results: Array<Result>
cleared: number

How many records had a terminal marker removed. Zero with outcome cleared is a real answer: nothing was permanently failed.

formatint64
enrichment: "translation" | "sentiment" | "emotions"
Accepts one of the following:
"translation"
"sentiment"
"emotions"
outcome: "cleared" | "cooling_down" | "disabled"

cleared — the markers were removed and the records will be picked up by the next reconcile sweep. cooling_down — this enrichment was cleared too recently; see retry_after_seconds. disabled — the enrichment is not running for this tenant, so clearing would queue work the worker skips; see disabled_reason.

Accepts one of the following:
"cleared"
"cooling_down"
"disabled"
disabled_reason?: "not_configured" | "switched_off" | "no_target_language"

Present only for disabled. Same values the enrichment-status endpoint uses, so a consumer needs one vocabulary rather than two.

Accepts one of the following:
"not_configured"
"switched_off"
"no_target_language"
retry_after_seconds?: number

Present only for cooling_down. How long until this enrichment may be cleared again.

formatint64
tenant_id: string

Retry permanently-failed enrichments for a tenant

import FormbricksHub from '@formbricks/hub';

const client = new FormbricksHub({
  apiKey: process.env['HUB_API_KEY'], // This is the default and can be omitted
});

const response = await client.tenants.enrichments.retry('tenant_id');

console.log(response.tenant_id);
{
  "results": [
    {
      "cleared": 0,
      "enrichment": "translation",
      "outcome": "cleared",
      "disabled_reason": "not_configured",
      "retry_after_seconds": 0
    }
  ],
  "tenant_id": "tenant_id"
}
Returns Examples
{
  "results": [
    {
      "cleared": 0,
      "enrichment": "translation",
      "outcome": "cleared",
      "disabled_reason": "not_configured",
      "retry_after_seconds": 0
    }
  ],
  "tenant_id": "tenant_id"
}