---
title: "Replace the coach's objection playbook"
method: PUT
path: "/api/coaches/objection-playbook"
tags: ["Coach profile"]
---

# Replace the coach's objection playbook

`PUT /api/coaches/objection-playbook`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/coaches/objection-playbook`
- Auth: API key in cookie `luca.session_token`

Replaces the coach-written half of the playbook: overrides and social proof sources. Patterns learned from imported conversations are kept, so saving this form can't wipe an import that landed after the page loaded. You'll get a 409 if the playbook changed underneath you.

**Session-only.** This endpoint isn't on the API-key allowlist. An organization API key gets a 403 here, whatever scopes it holds.

## Headers

- `Luca-API-Version` '1'

## Request body

- ObjectionPlaybook
  - `overrides` object
    - `price` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `timing` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `trust` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `fit` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `authority` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `smokescreen` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
  - `socialProofSources` string[]
  - `importedPatterns` object[]
    - `id` string, required
    - `objectionType` 'price' | 'timing' | 'trust' | 'fit' | 'authority' | 'smokescreen', required
    - `pattern` string, required
    - `sampleResponse` string, required
    - `confidence` number, required
    - `sourceCount` integer, required
    - `adopted` boolean

## Response `200`

ok

- ObjectionPlaybook
  - `overrides` object
    - `price` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `timing` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `trust` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `fit` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `authority` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
    - `smokescreen` object
      - `mode` 'default' | 'custom'
      - `customStrategy` string
      - `lastChangedAt` string
  - `socialProofSources` string[]
  - `importedPatterns` object[]
    - `id` string, required
    - `objectionType` 'price' | 'timing' | 'trust' | 'fit' | 'authority' | 'smokescreen', required
    - `pattern` string, required
    - `sampleResponse` string, required
    - `confidence` number, required
    - `sourceCount` integer, required
    - `adopted` boolean

## Other responses

- `400`: bad request
- `401`: unauthorized
- `403`: forbidden
- `404`: not found
- `409`: conflict
- `429`: rate limited
- `500`: internal error
- `503`: service unavailable

---

[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)
