# onboarding_already_signed

> The agreement is already signed

- Status: 409 Conflict
- Returned by: /api/public
- Operations: [refreshOnboardingLink](https://developers.rivr.io/reference/api-public/refreshOnboardingLink.md)
- Retry (`retryWhen`): `never`
- Did anything happen? (`outcome`): `none` (It did not happen)
- Onboarding links in /api/public
- Page in the portal: https://developers.rivr.io/errors/onboarding_already_signed
- Try it: `GET https://developers.rivr.io/errors/simulate/onboarding_already_signed` answers with the code's exact wire form; `?succeedAfter=N&attempt=K` gives a 200 once `attempt` passes `N`

## What it means

The agreement has already been signed, so there is no link to refresh. The body used to be a text in Swedish.

## What your system does

Follow the clinic with `GET /api/public/onboarding-links/{id}` until it can take payments.

## Is it worth retrying?

No, not without changing the call.

`retryWhen`: `never`. Don't send it again. The answer is final for this request: read the current state, the order for example, and act on that.

## 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 409 Conflict
Content-Type: application/json

{
  "propertyName": null,
  "message": "The agreement has already been signed, so there is no link to refresh.",
  "errorCode": "onboarding_already_signed",
  "code": "onboarding_already_signed",
  "type": "https://developers.rivr.io/errors/onboarding_already_signed"
}
```

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