---
title: "Decline the proposal with an optional reason"
method: POST
path: "/client-onboarding/public/proposals/{token}/decline"
tags: ["CRM Proposals"]
---

# Decline the proposal with an optional reason

`POST /client-onboarding/public/proposals/{token}/decline`

## Request

- Base URL: `https://ledgerhq.pro/api/v1`
- URL: `https://ledgerhq.pro/api/v1/client-onboarding/public/proposals/{token}/decline`
- Auth: none required

Client-facing proposal step. No login: the opaque link token in the path is the credential, checked for existence, revocation and expiry. Rate-limited. Signing, payment setup or a past service date never charges; the firm starts billing separately. Not exposed through MCP; agents must not act as the client.

## Path parameters

- `token` string, required

## Request body

- object
  - `confirmed` true, required: Confirm declining this offer
  - `reason` string: Optional note for the firm

## Response `200`

Success

- object

## Other responses

- `400`: Invalid input
- `404`: Link not found
- `409`: The proposal changed or is no longer open
- `410`: The link expired or was replaced
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api.md) · [All operations](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api/revisions/9a8269f0a586?raw)
