---
title: "Record or correct a booking's sales episode outcome"
method: POST
path: "/api/bookings/{id}/outcome"
tags: ["Bookings"]
---

# Record or correct a booking's sales episode outcome

`POST /api/bookings/{id}/outcome`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/bookings/{id}/outcome`
- Auth: one of:
  - API key in cookie `luca.session_token`
  - API key in header `x-api-key`
  - HTTP bearer

Records what the call was worth: won, lost with a reason, or still open. Send an `Idempotency-Key` so a retried submit can't write twice. To correct an outcome, send the `expectedVersion` you read. A stale version returns 409 with the current one, so you can re-read and try again.

**API key scopes:** `bookings:write`. You also need an `Idempotency-Key` header.

## Path parameters

- `id` string, uuid, required

## Headers

- `idempotency-key` string, required
- `Luca-API-Version` '1'

## Request body

- union
  - object
    - `expectedVersion` integer
    - `note` string, nullable
    - `reportedAt` string, date-time, nullable
    - `status` 'open', required
    - `nextFollowUpAt` string, date-time, nullable, required
    - `followUpTimezone` string, required
  - object
    - `expectedVersion` integer
    - `note` string, nullable
    - `reportedAt` string, date-time, nullable
    - `status` 'won', required
    - `amountMinor` integer, nullable
    - `currency` string, nullable
    - `closedAt` string, date-time, nullable
  - object
    - `expectedVersion` integer
    - `note` string, nullable
    - `reportedAt` string, date-time, nullable
    - `status` 'lost', required
    - `lossReasonDefinitionId` string, uuid, required
    - `closedAt` string, date-time, nullable

## Response `200`

ok

- SalesEpisodeResponse
  - `episode` object, required
    - `id` string, uuid, required
    - `leadId` string, uuid, required
    - `status` 'open' | 'won' | 'lost', required
    - `outcomeReportedAt` string, date-time, nullable, required
    - `amountMinor` integer, nullable, required
    - `currency` string, nullable, required
    - `lossReasonDefinitionId` string, uuid, nullable, required
    - `lossReasonCode` string, nullable, required
    - `lossReasonLabel` string, nullable, required
    - `note` string, nullable, required
    - `nextFollowUpAt` string, date-time, nullable, required
    - `followUpTimezone` string, nullable, required
    - `closedAt` string, date-time, nullable, required
    - `version` integer, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `400`: bad request
- `401`: unauthorized
- `404`: not found
- `409`: conflict
- `429`: rate limited
- `500`: internal error

---

[API](https://skmtc.dev/setluca/apis/luca-api.md) · [All operations](https://skmtc.dev/setluca/apis/luca-api/llms.txt) · [OpenAPI document](https://skmtc.dev/setluca/apis/luca-api/revisions/90a200e4100b?raw)
