---
title: "Reopen a deal"
method: POST
path: "/api/v1/rest/crm/deals/{id}/reopen"
tags: ["CRM"]
---

# Reopen a deal

`POST /api/v1/rest/crm/deals/{id}/reopen`

## Request

- Base URL: `https://api.custodo.ai`
- URL: `https://api.custodo.ai/api/v1/rest/crm/deals/{id}/reopen`
- Auth: HTTP bearer

Reopens a closed trattativa into a named non-terminal stage of its own pipeline. Nothing is undone: a new stage-history row is appended, so the deal’s second run through the funnel is measured separately from its first, and the lost reason is cleared. It refuses a deal that is already open and refuses a won or lost stage. An opportunity that has no forecast date must be given one HERE, as `expected_close_date` — a closed deal’s figures are locked, so crm_update_deal cannot set it beforehand — and this tool says so rather than failing on a constraint. Reopening is also the way to correct a closed deal’s amount, probability or date: reopen it, then call crm_update_deal.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant-Id` string, uuid

## Request body

- object
  - `stage_id` string, uuid, required: The non-terminal stage to reopen it into. Explicit because there is no «where it was» — the history knows, the deal does not. From crm_get_deal, which lists the stages of this deal’s own pipeline.
  - `expected_close_date` string: The forecast date it reopens with, YYYY-MM-DD. Required when the deal has none (crm_get_deal shows it), because an open opportunity must have one; otherwise omit it to keep the date the deal holds, or give a new one — a later date is counted as a slip.

## Response `200`

Done. `data` is the tool’s own answer.

- RestResult
  - `ok` true, required
  - `data` unknown, required

## Other responses

- `400`: The arguments did not validate: `error.message` names the field, what it expects and what arrived.
- `401`: No API key, or one that is malformed, unknown, revoked or expired.
- `403`: The call never ran: the module is off for this organisation, the credential lacks the permission or the module, the tier does not cover it, or the tool is destructive and the key was not minted for that.
- `404`: Nothing with that id in this organisation.
- `409`: The record is in a state that does not allow it — under legal hold, already sent, already closed. `error.code` says which.
- `422`: The tool ran and refused, in a sentence of its own (`TOOL_REFUSED`): the message says what to change. Retrying the same call will not help.
- `429`: The API key has spent its minute, or its day. Every request a key makes counts. See `Retry-After`.

---

[API](https://skmtc.dev/custodo/apis/custodo-integrazioni.md) · [All operations](https://skmtc.dev/custodo/apis/custodo-integrazioni/llms.txt) · [OpenAPI document](https://skmtc.dev/custodo/apis/custodo-integrazioni/revisions/16d336d3ec2a?raw)
