# platform_token_required

> The token isn't a platform token

- Status: 401 Unauthorized
- Returned by: /api/public
- Operations: [listMerchants](https://developers.rivr.io/reference/api-public/listMerchants.md), [getOnboardingProgress](https://developers.rivr.io/reference/api-public/getOnboardingProgress.md), [createOnboardingLink](https://developers.rivr.io/reference/api-public/createOnboardingLink.md), [getOnboardingLinks](https://developers.rivr.io/reference/api-public/getOnboardingLinks.md), [getOnboardingLink](https://developers.rivr.io/reference/api-public/getOnboardingLink.md), [refreshOnboardingLink](https://developers.rivr.io/reference/api-public/refreshOnboardingLink.md)
- Retry (`retryWhen`): `after_fix`
- Did anything happen? (`outcome`): `none` (It did not happen)
- Access and organisation
- Page in the portal: https://developers.rivr.io/errors/platform_token_required
- Try it: `GET https://developers.rivr.io/errors/simulate/platform_token_required` answers with the code's exact wire form; `?succeedAfter=N&attempt=K` gives a 200 once `attempt` passes `N`

## What it means

The operation is about a platform, and the platform is read from the token. The token carries no platform, for example a clinic's token. It applies to the onboarding links, the onboarding checklist and the list of clinics. The body used to be the text `PlatformId claim was not found`.

## What your system does

Get a platform token with the platform's client credentials (`grant_type: client_credentials`) and make the call again with it.

## Is it worth retrying?

No, not without changing the call.

`retryWhen`: `after_fix`. Change the request first, as the code's page says: a value, the token, a header or a new key. Then send it.

## Did anything happen?

`outcome`: `none`. **It did not happen.** This call did not do what you asked for and changed nothing else that you can see or that concerns money. Where the code has an `outcomeNote`, it takes precedence.

## Example: /api/public

```http
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
  "propertyName": null,
  "message": "The token is not issued for a platform. Use a platform token.",
  "errorCode": "platform_token_required",
  "code": "platform_token_required",
  "type": "https://developers.rivr.io/errors/platform_token_required"
}
```

The `title`, `detail`, `message` and `error_description` texts are exactly as the API writes them today.
