---
title: "Revalidate Credential Endpoint"
method: POST
path: "/v2/credentials/{credential_id}/revalidate"
tags: ["Credentials v2"]
---

# Revalidate Credential Endpoint

`POST /v2/credentials/{credential_id}/revalidate`

## Request

- Base URL: `https://api.jubjubapp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.jubjubapp.com/v2/credentials/{credential_id}/revalidate`
- Auth: HTTP bearer

Ask the platform whether the STORED credential still works, whatever
`status` says, and act on the answer. This is what the Reconnect button
calls.

THREE OUTCOMES:
  alive         the platform accepted the stored credential. Status is
                `active` again, the auth notification is cleared. No form.
  dead          the platform answered 401. Status is `needs_reauth`;
                `needs_input` says what the creator must now supply (for
                Mux only the secret — the Token ID is `account_id`).
  undetermined  the platform could not be asked (timeout, 5xx, 429, no
                probe). NOTHING changed except the evidence stamp; the
                caller may simply try again.

Why this exists: the health endpoint below refused non-active rows, the
list endpoint's `token_valid` returned False before decrypting, and the
sweep skipped flagged rows — so a `needs_reauth` written by a refresher
that never contacted the platform could never be disproved. Loading the
credential regardless of status is the whole point.

## Path parameters

- `credential_id` string, required

## Headers

- `Authorization` string
- `X-JubJub-Service-Key` string
- `X-JubJub-Agent-Key` string
- `X-JubJub-Platform-Key` string
- `Origin` string
- `Referer` string
- `X-JubJub-Trial-Token` string

## Response `200`

Successful Response

- RevalidateCredentialResponse: What the platform said when asked about the STORED credential. Three outcomes, not two. `undetermined` means the platform could not be asked (timeout, 5xx, rate limit, no probe) and NOTHING was changed; the caller may simply try again. Only `alive` and `dead` move `status`.
  - `credential_id` string, required
  - `platform` string, required
  - `account_id` string, required: Platform identifier; the Token ID for Mux.
  - `outcome` string, required: alive | dead | undetermined
  - `status` string, required: Credential status AFTER this check.
  - `detail` string, required
  - `checked_at` string, date-time, nullable, required
  - `needs_input` string[]: What a reconnect must ask the creator for when dead. Mux: token_secret. Vimeo: token. Vimeo OTT: api_key. OAuth: oauth (a consent redirect). Empty when alive or undetermined.
  - `reason` string, nullable: Why: token_invalid (the only reason that means reconnect), missing_permission (the login works; the app lacks a permission, which a reconnect cannot fix), temporary, request_error, unknown. None when alive.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/jubjubapp/apis/jubjub-api.md) - [All operations](https://skmtc.dev/jubjubapp/apis/jubjub-api/llms.txt) - [OpenAPI document](https://skmtc.dev/jubjubapp/apis/jubjub-api/revisions/353157b296f2?raw)
