---
title: "Angle Samples"
method: POST
path: "/api/v1/onboarding/angle-samples"
tags: ["onboarding"]
---

# Angle Samples

`POST /api/v1/onboarding/angle-samples`

## Request

- Base URL: `https://api.nudgelink.co` (the document declares no server; this is the origin it was published from)
- URL: `https://api.nudgelink.co/api/v1/onboarding/angle-samples`
- Auth: HTTP bearer

Onboarding v2 (2026-07-28), wizard 2.4: real sample first messages per
campaign angle for THIS business — the figma block marked "добавим позже".

Accepts the same lenient body as /generate-icp (backfills from the stored
profile). Best-effort by contract: any provider failure returns empty
samples and the frontend hides the block — a nicety must never 502 the
wizard.

## Request body

- GenerateICPInput: Loose variant of ``OnboardingInput`` for ``/onboarding/generate-icp``. The fields are all optional so the FE can hit Regenerate without re-sending the business inputs every time — the endpoint backfills from the user's already-saved ``Client.icp_profile``. The endpoint itself enforces that *some* source (request body or stored profile) yields ≥ 10 char strings for all three fields before invoking Claude, and returns a clear 400 with the field name otherwise.
  - `company_pitch` string, nullable
  - `target_persona` string, nullable
  - `tone_prefs` string, nullable
  - `website_url` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

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