Skip to main content
Once a simulation finishes, Boses produces two layers of output: per-persona results (what each individual said and felt) and an aggregate result (what it means across the group). This page explains how to poll for completion and how to read both layers.

Polling simulation status

Simulations run as background tasks. After creating one, poll GET /simulations/{id} until the status field reaches "complete".
curl https://api.temujintechnologies.com/api/v1/projects/<PROJECT_ID>/simulations/<SIM_ID> \
  -H "Authorization: Bearer <access_token>"

Status progression

StatusMeaning
pendingSimulation is queued and waiting to start.
runningPersonas are actively generating responses.
generating_reportAll persona responses are done; the aggregate report is being compiled.
completeResults are ready to fetch.
failedThe simulation encountered an unrecoverable error.
abortedYou cancelled the simulation via the abort endpoint.
The progress field updates in real time during running:
{
  "id": "sim_01hw4n7zxe2fqv3brc5e",
  "status": "running",
  "progress": {
    "completed": 3,
    "total": 5
  }
}
Individual persona failures are non-fatal. If one persona fails but the others succeed, the simulation continues and the aggregate is computed from the successful responses. Only if every persona fails does the simulation status become "failed".

Fetching results

Once status is "complete", retrieve the full results:
curl https://api.temujintechnologies.com/api/v1/projects/<PROJECT_ID>/simulations/<SIM_ID>/results \
  -H "Authorization: Bearer <access_token>"

Result structure: concept test

The following shows the full response structure for a concept_test simulation.
{
  "simulation_id": "sim_01hw4n7zxe2fqv3brc5e",
  "simulation_type": "concept_test",
  "persona_results": [
    {
      "persona_id": "per_01hw2j8zxe1fmv4bqc3a",
      "persona_name": "Maria Santos",
      "result_type": "concept_test_individual",
      "reaction": "I actually like the idea of the chili-lime flavour — it feels fresh and different from the usual BBQ options. The eco-friendly packaging is a nice touch, but I'd want to see if it's actually sturdier than the old one. At PHP 45 I'd still buy it, but only if it's the same size as before.",
      "sentiment": "Positive",
      "key_themes": [
        "flavour novelty",
        "packaging scepticism",
        "price sensitivity",
        "size expectations"
      ],
      "notable_quote": "It feels fresh and different — but I need the portion size to match the price."
    },
    {
      "persona_id": "per_01hw2j8zxe1fmv4bqc3b",
      "persona_name": "Carlo Reyes",
      "result_type": "concept_test_individual",
      "reaction": "Honestly, chili-lime is overdone. Every brand is doing a variant like this. The eco-packaging sounds like marketing to me — I've seen brands say that and the bag still ends up in the trash. PHP 45 is fine but I'm not switching from my usual brand for this.",
      "sentiment": "Negative",
      "key_themes": [
        "flavour fatigue",
        "greenwashing scepticism",
        "brand loyalty",
        "competitive alternatives"
      ],
      "notable_quote": "Every brand is doing a variant like this — what makes yours different?"
    }
  ],
  "aggregate_result": {
    "result_type": "concept_test_aggregate",
    "sentiment_distribution": {
      "Positive": 3,
      "Neutral": 1,
      "Negative": 1
    },
    "top_themes": [
      "price-to-size value",
      "flavour novelty vs. fatigue",
      "eco-packaging credibility",
      "brand switching resistance"
    ],
    "strategic_recommendations": "The concept has a positive lean (3/5), driven by flavour novelty and eco credentials among younger segments. However, credibility of the eco claim is a recurring concern — substantiate it with specific material or certification details in packaging and comms. The price point is broadly acceptable, but size consistency relative to the previous SKU is a threshold condition for repurchase. Messaging should lead with the flavour story, not the sustainability angle, to avoid greenwashing associations."
  }
}

Understanding per-persona results

Each persona result contains four fields:
FieldDescription
reactionA first-person response written in the persona’s voice. This is the raw qualitative output.
sentimentOverall sentiment of the response: "Positive", "Neutral", or "Negative".
key_themesA list of themes the persona raised in their response. Used to compute the aggregate top_themes.
notable_quoteA short, presentation-ready quote extracted from the reaction.

Understanding the aggregate result

The aggregate result synthesises responses across the whole group:
FieldDescription
sentiment_distributionCount of Positive, Neutral, and Negative responses across all personas.
top_themesThe most common themes across all per-persona key_themes lists.
strategic_recommendationsAn LLM-generated narrative that interprets the findings and suggests action.

Result structures for other simulation types

Different simulation types produce different result shapes. The fields above apply to concept_test. Other types have their own structures:
Simulation typePer-persona result typeAggregate result typeNotable differences
concept_testconcept_test_individualconcept_test_aggregateReaction, sentiment, themes, quote
surveysurvey_individualsurvey_aggregatePer-question distributions for likert/multiple-choice; open-ended theme extraction
focus_groupfocus_group_individualfocus_group_aggregateTwo rounds of responses; moderator summary; consensus and disagreement themes
idi_aiidi_individualidi_aggregateFull transcript per persona; structured analysis of attitudes and motivations
conjointconjoint_individualconjoint_aggregatePart-worth utilities per attribute level; attribute importance rankings; market share simulation
Run a concept test first to get a directional read quickly. Use focus groups or in-depth interviews to probe the specific themes that surface in the concept test aggregate.