Recalibrate an Audience's grounding and members
Refreshes the stored grounding of a saved Audience and re-allocates its members to the resulting distributions. Owner, or confirmed staff with an active owner-issued support grant for composition amendments only (no growth, new sources, Go deeper or shared-Mind waiver). Support grants are managed under /audiences/{audienceId}/support. deepen (Go deeper) runs in the background and returns 202 at once with data.research (jobId, phase: researching) and data.progressUrl: it researches what the Audience still lacks (every standard dimension its coverage reports missing or assumed, plus deepen.topics) with the whole evidence pool and the coverage check, adds it to the saved grounding (every chart the Audience has stays; a chart gives way only to stronger evidence for the same question, or for the dimension it stands for), and recalibrates the members through the same step as any recalibration, between Study runs and validations, never under one (members keep answering with their previous version until their retrain lands). Follow it on GET /audiences/{audienceId}/progress: research.phase is researching until researched, research.stage moves researching → waiting_for_runs → recalibrating → done, and research.outcome reports the charts and sources added, the dimensions improved, the members recalibrated and, per requested topic, whether a chart was added (with its evidence tier), already_covered or not_found. Asked while the Audience's background research runs, it is queued behind that research and starts when it finishes; an active or waiting edit never blocks it (its job waits for the edit before it changes members) (data.research.queuedBehindRunningResearch: true); topics asked again before it starts join it. sources and instruction sent with it join the Audience's source bundle first. Two modes otherwise: research mode (default) re-runs deep research from the persisted brief, every earlier adjustment and the optional instruction, sources and requestedDistribution, or from query as a full override; selection mode (distributions present) skips research and only replaces the active distribution set, keeping the stored sources and review universe. In research mode the instruction is classified first: an adjustment ("make men 40%", "now they are all vegan", "only 50 to 60 years old") re-allocates the existing roster and rebuilds or evolves the members whose new segment contradicts who they are, while an additive instruction ("and now add 10 African consumers") keeps the existing members untouched and creates new ones within the plan's member cap. Facts the instruction states for the added people ("add a CEO") are held by every one of them: when each is already a segment of the Audience's charts the members are added on those charts without new research, otherwise research runs first. Those facts are held through every consistency repair of the new member (its other facts are redrawn around them, and a dealt value that contradicts one is dropped), and every chart stating the same fact (a translated copy) is pinned to the same value. The completed result lists them in addedMinds (id, name, role, description, the requested segments and the segments each held), with requestedMembers (how many were asked for) and growthNotes (what could not be done as asked, e.g. fewer members or a request that could not be read), so a run that adds fewer or no members says so. A stated total for the same people ("make it 10", "reduce it to 10 people", "verkleinere auf 10 Personen", read again independently and resized only when both readings state the same number; "remove 5 members" counts from the current size) resizes without research or retraining: a smaller total keeps the members whose facts best keep the Audience's target shares, always keeping members the requester listed or names to keep ("keep Anna Schmidt") and, before others, members an earlier edit added on request and members matching what the instruction says to keep ("keep the CEO"), always removing members it names to remove ("drop Anna"), and removes the others from this Audience only, their Minds staying in the library, and the allocation audit is measured on who stays; a larger total adds members exactly like "N more"; asking for a copy or version ("a 10-person version") leaves this Audience unchanged and creates a copy holding the selected members (a larger copy then grows through its own recalibration operation). An instruction that also asks for something else ("make it 10 and add an income chart") runs the resize first and the rest as the next part of the same operation (on a copy, in the copy's own operation). A model reads the parts of the instruction (the size, a copy, each other edit, members named to keep or remove, what to keep) and every part is anchored on words the instruction contains; no word list, capitalisation or word overlap decides it, in any language. Names are matched to the roster by a model: a name several members carry ("Daniel" with two Daniels) keeps or removes none of them and resize.notes says so; a name no member carries is noted too. Wording that only preserves ("do not change their facts", "keep the removed Minds in my library") is never a next part: nothing is researched or retrained for it. A next part that adds members without a stated count after a resize ("make it 10 and add more Swiss") reshapes the members kept instead of adding any. An additive instruction that also asks for something else ("20 more, and make women 60%") adds the members on the words asking for them and runs the rest as the next part, once; such instructions are never refused. When the instruction (or a part, a tie-break or the named members) cannot be read in full, the operation changes nothing and is retried automatically (its error code AUDIENCE_EDIT_UNREAD shows while it is queued again); a reading is never guessed or applied in part. A model also reads which share changes name a chart the Audience has (by its number in the Audience's chart list) and which charts are new, with the shares stated for them: a new chart's own shares ("add a pets chart at 60/40") never count as changing the existing targets, so "refresh the sources but keep the shares, and add a pets chart at 60/40" keeps them, while a share change on an existing chart ("make women 55%") is applied. The completed result reports resize (mode in_place or copy, the resized audienceId, previousSize, size, kept, removed, the average gap to the target shares before and after as fit, and notes). Without deepen, acceptance returns 202 immediately with data.operation; research and roster changes run on the processor. Poll its statusUrl or GET /audiences/{audienceId} (calibration.operation) for the retained result or terminal error. Send a stable requestKey or Idempotency-Key on retries: the same key and input replay the same operation, even after completion; changed input with that key returns 409. Member training continues after the roster change. Poll GET /audiences/{audienceId}/progress for per-member training and GET /audiences/{audienceId} for calibration.active. Only one recalibration runs per Audience at a time: an edit accepted while another is active or waiting is queued behind it and runs after it, in order (operation.waiting.for: earlier_edit); at most 10 may wait, and one still waiting after 24 hours fails with AUDIENCE_EDIT_QUEUE_TIMEOUT. Because recalibration rewrites the members' profiles and knowledge globally, members that also belong to other Audiences are copied into this Audience right before the members change (the same person, knowledge, training, team sharing and per-Mind access, with a new Mind id; protective copies do not count against the plan's Mind quota) so the other Audiences stay unchanged; the result lists each original and its copy in copiedSharedMinds. Send allowSharedMinds: true to rewrite them in place everywhere instead. Members owned by someone else (a Marketplace Mind, another user's or a teammate's) are always copied the same way before an edit rewrites them, whatever allowSharedMinds says, so another owner's Mind is never changed and the edit is never refused for it; these copies do not count against the Mind quota either. While a Study run is answering with these members the operation waits (status queued, operation.waiting names study_run and the studyIds) and applies the edit when the run has finished, since rewriting them mid-run changes who answers it; after 24 hours of waiting it fails with STUDY_RUN_USES_MINDS. Additive runs never wait. A stated addition larger than 50 members (within the plan's member cap; a stated count over the cap is refused with the plan limit) is added in parts of at most 50, one after another in the same operation, and the result totals them. When a model reading the edit (its intent, a count or a size, or the members' consistency) is unavailable, or research fails for an edit that changes who belongs (a new population, eligibility rule or bound, which the saved charts cannot stand in for), the operation stays queued with operation.waiting.for: reader, leaves the Audience as it was, and tries again on a growing interval (up to 24 hours) instead of failing; any other edit whose research fails is applied to the saved charts.
Request
- Base URL: https://api.getminds.ai
- URL: https://api.getminds.ai/api/v1/audiences/{audienceId}/recalibrate
- Auth: HTTP bearer
Path parameters
Audience ID (UUID).
Headers
Stable retry key; must match requestKey when both are supplied.
Request body
Response
Replay of a terminal operation. data.operation retains its completed result or failed error; no work is repeated.
Changes
No recorded changes to this operation across all 1 revision of this API.