# Mark a cash flow failed

Records that the attempt to move the money failed. Body: `reason`, required — the ledger refuses a failed flow that does not say why — and `code`, the processor's own code, optional. Legal only from the unsettled states, and a failed flow can still take a receipt later if the money turns up (`post_cash-flows_id_record-payment`). Money that simply never arrived, with no failed attempt behind it, is `post_cash-flows_id_mark-missed`.

Access class: `workspace`.

## Endpoint

`POST /v1/cash-flows/{id}/mark-failed`

## Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| id | path | string | Yes |

## Request body

Content type: `application/json`.

```json
{
  "body": {
    "code": "string",
    "reason": "string"
  },
  "params": {
    ":id": "string"
  },
  "query": {}
}
```

## Responses

### 201

the action's answer

Content type: `application/json`.

```json
{
  "data": {
    "actualAmountMinor": 1,
    "batchId": "",
    "counterpartyId": 1,
    "createdAt": "string",
    "currency": "string",
    "dealRowId": "",
    "detail": {},
    "direction": "string",
    "dueDate": "string",
    "expectedAmountMinor": 1,
    "externalTransactionId": "",
    "facilityId": 1,
    "failureCode": "string",
    "failureReason": "string",
    "flowType": "string",
    "id": 1,
    "maxRetries": 1,
    "method": "string",
    "notes": "string",
    "processedDate": "string",
    "retryCount": 1,
    "scheduleId": 1,
    "sequenceNumber": 1,
    "settledDate": "string",
    "status": "string",
    "totalPayments": 1,
    "updatedAt": "string"
  }
}
```

### default

a refusal: `{"error": "<what a person needs to read>"}`. 401 no credential, 402 the plan does not include this, 403 the seat does not, 404 the thing does not exist or is not yours to see.

Content type: `application/json`.

```json
{
  "error": "string"
}
```
