---
title: "Start a Citedy warm-lead report"
method: POST
path: "/api/agent/citedy-warm-lead"
tags: ["Warm Leads"]
---

# Start a Citedy warm-lead report

`POST /api/agent/citedy-warm-lead`

Creates one tenant-scoped warm-lead run for one company domain. Accepted new runs charge exactly 40 Citedy credits. Poll GET /api/agent/citedy-warm-lead/{runId} for status and result.

## Request body

- CreateWarmLeadRunRequest
  - `domain` string, required — One company domain. Bare domains and http(s) URLs are accepted, but paths/social profile URLs are rejected.
  - `icp` 'seo-geo-agency' | 'content-led-saas' | 'vertical-saas' — Ideal customer profile. Defaults to content-led-saas when omitted.
  - `buyerRoles` string[]
  - `maxContacts` integer — Maximum buyer candidates. Defaults to 3 when omitted.
  - `drafts` integer — Maximum outreach drafts. Defaults to 3 when omitted.
  - `freshnessDays` integer — Evidence lookback window in days. Defaults to 90 when omitted.
  - `idempotencyKey` string

## Response `200`

Existing idempotent warm-lead run returned without a new credit charge

- CreateWarmLeadRunResponse
  - `run` WarmLeadRun, required
    - `id` string, uuid, required
    - `status` 'queued' | 'signals_running' | 'contacts_running' | 'drafting_running' | 'completed' | 'blocked' | 'failed', required
    - `domain` string, required
    - `normalized_domain` string, required
    - `credits_charged` integer, required
    - `blocked_reason` string, nullable
    - `error_message` string, nullable
    - `result` WarmLeadResult — Canonical JSON warm-lead result. CSV and XLSX exports are flattened projections of this object.
      - `runId` string, uuid, required
      - `status` 'completed' | 'blocked' | 'failed', required
      - `account` object, required
      - `signals` object[], required
      - `contacts` object[], required
      - `scoring` object, required
      - `drafts` object[], required
      - `policy` object, required
      - `counters` object, required
      - `exportRows` object[]
      - `exportUrls` object
    - `provider_counters` object
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `completed_at` string, date-time, nullable
  - `credits_charged` integer, required
  - `idempotent` boolean

## Other responses

- `202` — Warm-lead run accepted
- `400` — Bad request
- `401` — Unauthorized
- `402` — Insufficient credits
- `409` — Conflict
- `429` — Rate limit exceeded
- `500` — Internal server error

## Changes

- **2026-06-08** `ac142d51dc87` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/citedy/apis/citedy-agent-api/changes/api/agent/citedy-warm-lead/post.md)

---

[API](https://skmtc.dev/citedy/apis/citedy-agent-api.md) · [All operations](https://skmtc.dev/citedy/apis/citedy-agent-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/citedy/citedy-agent-api/revisions/b5785d3fe446/schema)
