---
title: "Parse a coach's free-text sales-process description into a candidate custom framework for preview"
method: POST
path: "/api/coaches/niche-profile/extract-framework"
tags: ["Coach profile"]
---

# Parse a coach's free-text sales-process description into a candidate custom framework for preview

`POST /api/coaches/niche-profile/extract-framework`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/coaches/niche-profile/extract-framework`
- Auth: API key in cookie `luca.session_token`

Turns a coach's description of how they sell into candidate framework stages you can preview. Nothing is saved. The coach confirms in the UI, which then calls the sell-framework endpoint. If fewer than two usable stages come back you get `ok: false` with a message, and the coach keeps their current framework.

**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

- ExtractFrameworkRequest
  - `description` string, required

## Response `200`

ok

- ExtractFrameworkResponse
  - `ok` boolean, required
  - `stages` object[], required
    - `name` string, required
    - `goal` string, required
    - `signals` string[]
    - `drafterRules` string[]
    - `nextStageTrigger` string, required
    - `disallow` string[]
  - `message` string

## Other responses

- `400`: bad request
- `401`: unauthorized
- `402`: payment required
- `429`: rate limited
- `500`: internal error
- `502`: upstream failure

---

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