---
title: "Set how AI visibility scans run: which engines to ask and how often. Every paid scan asks the included 50 questions, so the question count is fixed: only 50 is accepted. Scope 'config'; administrator access. EVERY FIELD IS OPTIONAL and a partial body merges over what is stored, so setting the cadence does not reset the engine set. Send an EMPTY body to READ the current config, the included config and the quote ladder without changing anything. The quote's `delta_credits_per_scan` is the only number you are charged: it prices what this config asks for ABOVE the included config of 50 questions on four engines, which nothing can exceed, so it is zero. `credits_per_scan_at_floor` is published beside it as a reference and is never billed, because the included config is the unmetered heartbeat. Narrowing (fewer engines, a slower cadence) costs nothing and refunds nothing. Cadence can only slow or pause, never run faster than weekly. Setting the config spends nothing; the scan it governs is metered separately at its own chokepoint."
method: POST
path: "/api/v1/scans/ai_visibility/config"
---

# Set how AI visibility scans run: which engines to ask and how often. Every paid scan asks the included 50 questions, so the question count is fixed: only 50 is accepted. Scope 'config'; administrator access. EVERY FIELD IS OPTIONAL and a partial body merges over what is stored, so setting the cadence does not reset the engine set. Send an EMPTY body to READ the current config, the included config and the quote ladder without changing anything. The quote's \`delta_credits_per_scan\` is the only number you are charged: it prices what this config asks for ABOVE the included config of 50 questions on four engines, which nothing can exceed, so it is zero. \`credits_per_scan_at_floor\` is published beside it as a reference and is never billed, because the included config is the unmetered heartbeat. Narrowing (fewer engines, a slower cadence) costs nothing and refunds nothing. Cadence can only slow or pause, never run faster than weekly. Setting the config spends nothing; the scan it governs is metered separately at its own chokepoint.

`POST /api/v1/scans/ai_visibility/config`

## Request

- Base URL: `https://afterlaunch.io`
- URL: `https://afterlaunch.io/api/v1/scans/ai_visibility/config`
- Auth: HTTP bearer

## Request body

- object
  - `engines` string[]
  - `prompt_count` integer
  - `cadence` 'default' | 'biweekly' | 'monthly' | 'paused'

## Response `200`

The current config, the included config, the quote (per scan and per month, both the reference figure and the charged delta), the quote ladder, and whether this call changed anything.

- object
  - `data` object, required
  - `meta` object, required
    - `enrollment_id` string, uuid, required
    - `generated_at` string, date-time, required

## Other responses

- `400`: An unknown engine, a question count outside 1..50, an unknown cadence, a config that cannot be priced, or a setting that could not be saved. Nothing changed.
- `401`: Missing, invalid or revoked API key.
- `403`: The key does not carry the scope this endpoint requires.
- `429`: Per-key rate limit exceeded. Honour Retry-After.

---

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