Skip to main content
Runs are asynchronous. When you submit one, a runID is returned immediately and collection proceeds in the background. You check for completion by polling.

1. Prepare prompts

Every prompt must belong to a prompt set, so create the set first.
Register prompts using the returned set ID. Write each prompt exactly as a real user would ask an AI. To register several at once, use POST /prompts/bulk (up to 100). The example below uses a Korean prompt asking for used SUV recommendations under 20M KRW.

2. Submit a run request

There are two ways to specify prompts, and you must use exactly one.
  • promptIDs: a list of individual prompt IDs (1 to 500)
  • promptSetID: runs every prompt in the set
AI answers vary from run to run, so ratio-based metrics such as mention rate are only meaningful with repeatCount set to 2 or higher. Use a single run when you want to inspect answer content and sources by eye.
The total number of runs (prompts × models × repeatCount) cannot exceed 10,000 per run request. Exceeding it returns the RUN_TOO_MANY_TASKS error. For billing details, see Credits.

Collecting at the location level

To collect at the city level, which is narrower than region, specify location. If you omit both region and location, collection happens in KR. If you specify only location, the country that location belongs to becomes the region. If you specify both, the location must belong to that region. Only ChatGPT and Perplexity support locations, so including any other model in models rejects the entire request.
Query the available location codes with List supported locations.

Using models that require an agreement

PERPLEXITY and CLAUDE are available only to organizations with a separate agreement. If an organization without the grant includes them in models, the entire request is rejected with 403 (MODEL_NOT_GRANTED). To check whether you have the grant, see whether the model appears in the List supported models response.

3. Poll for completion

Poll until status becomes FINISHED. Collection usually takes a few minutes, so an interval of about 30 seconds is recommended.
Below is a real collection response (the answers array is trimmed to two entries).
How to read the response:
  • While in progress, status is RUNNING and runningCount shows how many runs remain. Once they become FINISHED / 0, collection is complete.
  • A run request ends as FINISHED even if individual runs fail. The example above is a real case where 37 of 100 runs failed. It is not unusual for a particular model to stop responding temporarily.
  • Each answers entry only carries the per-run status (PENDING/SUCCESS/FAILED). You fetch the answer body with the answers API in the next step.
Failed runs (FAILED) produce no answer and consume no credits. If you need to collect again, submit a new run request with the same prompts.
AI answers are non-deterministic. The same prompt × model combination can return different content and sources on every run. To measure probabilistic metrics such as brand visibility rate, repeat the same combination with repeatCount.

Polling loop example

4. Retrieve answers

Once collection is complete, retrieve the answer bodies and sources.
For filters and the response structure, see Retrieving answers.

Error cases

The full list of codes returned at submission is in the Errors table on the Submit a run request page. For common codes and retry strategies, see Error handling. Two things that are especially easy to trip over:
  • Specify exactly one of promptIDs and promptSetID. Omitting both or sending both returns the error above.
  • If even one model and region combination is unsupported, the entire request is rejected. Check combinations in Supported models.
  • The same applies to location. If any requested model does not support that location, the whole request is rejected with LOCATION_NOT_SUPPORTED_FOR_MODEL. If you also specify region, the location must belong to that region (LOCATION_REGION_MISMATCH).

Operational tips

  • List runs with GET /runs, newest first (page size up to 10).
  • To collect the same prompts on a regular schedule, the simplest approach is to create a set once and submit it repeatedly with promptSetID.
  • Check collection characteristics such as per-model fan-out support in Supported models.