September 2026
2026-09-27
Size estimates, activation preview, and the visualization catalog in the CLI CLI
CLI v0.1.6 adds a command for each of the four API reads that had none.
intuizi audiences estimate createsizes an audience from the same flags or--filebody asaudiences createwithout creating it, andintuizi audiences estimate show <id>reads the result, both with--wait.intuizi activations previewcounts the devices a frequency range would deliver and prints the histogram and thefilter_hash, andintuizi reference common datastream-visualizationslists the data stream visualizations an audience can draw.audiences createandaudiences estimate createtake--frequencyto run the dataset type’s frequency analysis, andactivations createtakes--freq-min,--freq-max, and--filter-hash, so a previewed range can be delivered without a--filebody. See Estimate create and Preview.Estimate Audience Size is listed as idempotent API
Idempotency now lists Estimate Audience Size, which already read the
Idempotency-Keyheader, so eight endpoints honor it. A retry with the same key and body replays the estimate rather than scanning the data again.A build that stops at
107Additional Info now sends the failed webhook APIAn audience or activation that Intuizi stops at
107Additional Info, because it cannot be built as defined, now sendsaudience.failedoractivation.failedto every webhook endpoint subscribed to it, once, with the same payload as a4xxfailure. Readdata.status.idto tell them apart. The payload carries only the status id and name, and Audience Manager shows the reason for a107. Until now a build that stopped at107sent no event, and only a read showed it. See Webhook event payloads.A cancelled Lookalike Model now ends at
400Error API ConsoleA run cancelled with Cancel Lookalike used to read
108Modeling for good once it stopped, so a poll or a--waiton it could only time out. It still stops at its next checkpoint, and then ends at400Error, which is final and sends anaudience.failedwebhook. Audience Manager shows it asCancelled on request.A cancel that arrives once the result is already being published is still ignored, and the run completes at104. A run that had already stopped on a cancel before this date keeps reading108.A failed cohort import now reports
5Not Available APIA failed import used to end at an error code outside the cohort status scale, which Get Cohort named
Unknown, and it sent no webhook. It now ends at5Not Available and sendscohort.failed, so a cohort goes1to4on success and ends at5on failure. A cohort that failed before this date keeps the code it failed with, still namedUnknown.A scheduled Origin audience moves with each cycle API
Every cycle of a schedule restamps the audience’s datasets to that cycle’s data window, but an Origin dataset kept the weeks it was built with, so a scheduled Origin audience rebuilt the same data every cycle. An Origin dataset now gets each cycle’s window too, widened to the whole Monday-to-Sunday weeks it touches, the same widening Create Audience applies. This applies from the next cycle of every schedule, including schedules created before this date. A cross purchase block still keeps the dates it was built with.
A schedule’s end date cannot come before its start API Console
Create Schedule accepted a
recurrence.ending.end_dateearlier than the date ofrecurrence.startand counted the gap forward: a daily schedule starting2030-01-15 09:00:00with an end date of2030-01-10was stored with 6 runs instead of being refused. It is now rejected with422, namingrecurrence.ending.end_date. The start’s own date is still accepted and gives one run. The Scheduler in Audience Manager applies the same rule, and the CLI already refused such an--end-datebefore sending it.A monthly Custom Date schedule counts calendar months API Console
A monthly schedule runs one calendar month apart, but Create Schedule turned its
Custom Dateending into a run count using 30-day periods, so near the end date the count was off by one run or more. Monthly from2026-10-15 06:00:00to2027-10-15stored 13 runs, the last on2027-10-15 06:00, after the end date.recurrence.cycles.availablenow counts the calendar-month runs up to 00:00 onend_date: 12 in that example, the last on2027-09-15. Schedules created in Audience Manager count the same way, anddaily,weekly, andbi-weeklycounts are unchanged. The count is set when a schedule is created, so a monthlyCustom Dateschedule created before this date keeps its stored count.A POI submission with
removearchives exactly the POIs it does not list APIremovewas applied 250 locations at a time. On a longer submission, POIs listed after the first 250 were archived and then added again with new ids, and locations the submission had just added were archived. A submission in which no location matched archived nothing. The three submission creates, andintuizi poi submissions create --remove, now applyremoveonce, after every location has been matched: every POI the brand had that no location matches is archived, the matched POIs keep their ids, and the locations the submission adds are kept. Aremovesubmission whose locations carry values for itskeybut match no POI now archives every POI the brand had (one that holds no location at all, or in which no location has a value for itskey, archives nothing), so list every location the brand should keep. If an approval is interrupted part way, its locations are still imported butremoveis not applied, and sending the submission again applies it. This applies to every submission approved from this date.The
location-idkey matches onlocation_idAPIA location’s
location_idwas dropped when a submission was read, so withkeyset tolocation-idthe location was added a second time, andupdateorremovecould act on an unrelated POI of the brand. A location now matches the brand’s POI whose id is itslocation_id. One with nolocation_id, or with one that is not the id of one of the brand’s POIs, is added as a new POI. Aremovesubmission in which no location has alocation_idnames no POI to keep, so it archives nothing. Alocation_idmust be theidof one of your POIs, and a file may write it as a whole number with or without.0(101or101.0). Alocation-idsubmission created before this date was read without itslocation_idvalues, so if it is stillWaiting, delete it and send it again. See the matching note.A null
keyon a POI submission meansgps-coordinatesAPIA
keysent as null (or as an empty form field) was stored as null, and the approval then matched every location to the brand’s first POI: nothing was added,updaterewrote that one POI, andremovearchived all the others. The three submission creates now store it asgps-coordinates, the default whenkeyis left out, and a submission stored with a nullkeyis matched ongps-coordinatestoo.The MCP
create_poi_submissiontool is marked destructive MCPWith
remove, approving the submission archives every POI of the brand that no listed location matches, so the tool now declaresdestructiveHint: true, and MCP clients that honor the hint ask for confirmation before calling it. Itsupdate,remove, andkeyfields are now described. See the tools reference.
2026-09-26
A Custom Date schedule runs every cycle up to its end date API
A schedule created with the
Custom Dateending stopped after its first cycle: its cycle count was stored as a negative number, so it becameFulfilledas soon as the first run finished. Create Schedule now stores the intended count inrecurrence.cycles.available: one cycle forrecurrence.startplus one for every full frequency period (1, 7, 14, or 30 days) in the whole days between the start and 00:00 onend_date. A weekly schedule from2026-10-15 06:00:00to2027-01-01now runs 12 cycles instead of 1. The count is set when a schedule is created, so aCustom Dateschedule created before this date keeps its stored count. To run one to its end date, recreate it with arecurrence.startin the future.NeverandRecurrencesendings are unchanged.Documentation for the Intuizi CLI CLI
A new CLI section covers the Intuizi CLI v0.1.4, which runs API v2 from a terminal, a script, or a CI job. Every command that calls the API is built on the documented endpoints and returns their responses under the same rate limits. Names are looked up in the catalogs, and flags are checked before anything is created. The section covers installing and logging in, a quickstart that reads the catalogs then builds and delivers an audience, and a command reference listing every command and flag, with the endpoint behind each one that calls the API.
Upgrading to CLI v0.1.4 CLI
However v0.1.3 or earlier was installed, v0.1.4 changes the following.
activations createtakes--datastream, without which an activation built from flags delivers nothing.--debugprints every HTTP request and response on stderr.audiences createaccepts--type origin, and a WebDomain--categoryname now sends the category’s numeric id, which Create Audience takes, rather than its IAB code, which it refused.--waitkeeps waiting while an audience draws its data stream visualizations (109) and ends as a failure on107Additional Info, where earlier versions failed on109and waited on107until the timeout. A wait that fails, times out, or gives up prints the last record read on stdout, so branch on the exit code. The nextauth loginmoves a token stored in the config file to the OS credential store, where there is one.auth statusnames the account for a token minted by v0.1.4, and reports it asunknownfor one stored by an earlier version untilauth login --emailmints a new one. On a429the CLI says on stderr each time it waits and retries, returns a429that asks for more than 60 seconds at once rather than retrying into a second refusal, and names theRetry-Afterin the error. Acohorts create --upload-referencerefused by the build budget is not retried, since the refusal already used the reference. With--json,--waitprints the server’s envelope on every outcome, a timeout and a give-up included, and a give-up names theshow <id> --waitthat resumes it.INTUIZI_NO_KEYRING=0orfalsenow leaves the credential store on. The npm launcher passes a SIGTERM sent to it on to the binary. New usage errors, caught before anything is sent: a schedule--end-datebefore its--startdate, a schedule--nameover 255 characters, and a schedule--timezoneoutside a region (US/Eastern,GMT, or anEtc/name). So are anaudiences create --typethe flags cannot build, which--helpnames, a--contrast-audience-idthat is the seed,reference web iab-subcategories --category-idsmixing ids and codes, and--project-idwithcohorts create --audience-id. A WebDomain--categorygiven an exact IAB code or name, such asIAB1, resolves instead of listing every code that contains it.poi submissions create --listnotes on stderr each body value a flag replaces, and its--update=falseand--remove=falsenow turn off atruein the body.schedules activatenotes a schedule that has made every run its ending allows. See Conventions and Login.
2026-09-25
Build budget on worker-bound creates API Console
Every create that starts a worker job (audiences, estimates, Lookalike Models, cohorts, and activations) counts against one rolling budget per organization, 60 an hour and 300 a day by default, counted across the console, the API, and MCP. Scheduled replays do not count. Over the budget, the create is refused with
429and aRetry-Afterheader, and nothing is created. Get Usage returns a newbuild_budgetobject with the limits, the live counts, andretry_after_seconds. See Limits & Quotas.Create Activation enforces the data-scan limit API
Create Activation now runs the same monthly data-scan check as Create Audience. A company that has reached its enforced limit is refused with
422, and no activation is created or queued. Companies without an enforced limit are unaffected.
2026-09-24
Every frequency analysis on Create Audience API MCP
The
analysesobject now takes each frequency toggle the Audience Manager offers:frequency(POI) with itsfrequency_day_partsub-option,apps_frequency(Apps) andweb_frequency(WebDomain). Each needs its dataset type indatasets(422naming the key otherwise) and the same feature on your account (403); day-part needsfrequencyand is not available next to anAppsdataset. See Frequency analyses. The MCPcreate_audienceandestimate_audience_sizetools follow.Create Audience can run the Frequency analysis API MCP
Create Audience takes an optional
analysesobject;{"frequency": true}runs the Visitation Frequency analysis as the audience builds, exactly as the toggle in the Audience Manager does, so an audience created through the API can be previewed and filtered by visit frequency with Preview Activation. Until now the API had no way to enable it, and every API-built audience was refused by the preview. It requires aPOIdataset (422otherwise) and the Frequency feature on your account (403otherwise - ask your Account Manager); an unknown key underanalysesis a422naming it. See Frequency analysis. The MCPcreate_audienceandestimate_audience_sizetools follow.
2026-09-23
Intuizi plugin for Claude Code and Cowork MCP
The MCP server can now be installed with
/plugin marketplace add intuizi/intuizi-claude-pluginfollowed by/plugin install intuizi@intuizi, instead of adding the server URL by hand. The plugin carries the server declaration and a skill covering the order the tools are meant to be called in; authentication is the same one-click browser approval. It is open source at github.com/intuizi/intuizi-claude-plugin. See Getting started.Create Audience enforces the data-scan limit API MCP
Create Audience now runs the same monthly data-scan check the console does before it creates anything: a company that has reached its enforced limit receives a
422naming the limit and the reset date, and no audience is created or queued. Companies without an enforced limit are unaffected. The MCPcreate_audiencetool follows.Size estimates count as usage API MCP
An Estimate Audience Size run scans the same data the create it stands in for would scan, so it now counts toward your company’s monthly data-scan limit and is refused with the same
422as a create once that limit is reached. Usage reports it under a new sixth operation type,estimate(labelSize Estimate), appended afteractivation; the other five keep their positions. Estimates run since 2026-08-24 are being recorded retroactively, in the month each completed. The MCPestimate_audience_sizeandget_usagetools follow.
2026-09-22
Shorter datastream errors API MCP
The
errorof a failed datastream on Get Activation, List Activations and the activation webhooks no longer includes storage locations or URLs, and an error passed through from the query engine or cloud storage is cut to its first sentence, which states the reason. Processing detail that followed it is no longer returned. The MCPget_activationandlist_activationstools return the same text.
2026-09-21
Origin dataset on the API API MCP
Create Audience and Estimate Audience Size accept
type: "Origin"- people by their resolved home location, where a device originates. Its only filters are geographic:location.countriesis required, andlocation.states,location.cities,location.dmasandlocation.zipcodesare optional.signal_providersis required as for the other dated types - fetch them from Get Signal Providers withdataType=Origin. Origin data is weekly with no day in it, so any dates are accepted and the window is widened to the whole Monday-to-Sunday weeks it touches. Coverage is limited to a few countries: fetch them from Get Countries withdatasetType=Origin, and a country outside that set is rejected with422. Get Dataset Types lists the type when it is enabled for your account, and the MCPcreate_audienceandestimate_audience_sizetools accept it.
2026-09-17
Reads name what an audience or cohort was built from API
Get Audience returns
source_audience, the seed a Lookalike Model was built from, and eachCohortsentry indatasetcarriescohort, the cohort it reads. Get Cohort returnssource(file,audienceorpixel) andsource_audience, the audience a cohort was built from. Each reference is{ "id", "name" }, ornullwhen there is none or the resource was deleted or belongs to another company. The list reads, the cohort create response and theaudience.*/cohort.*webhooks carry the same fields.Changing your password revokes every token on the account API
Login tokens from
POST /api/v2/auth/loginare now revoked too, alongside API tokens, MCP tokens and OAuth connections, so log in again after a password change.The wildcard scope is rejected API MCP
GET /oauth/authorizeanswersscope=*with400 invalid_scope, and a refresh atPOST /oauth/tokenwhosescopeis not a space-delimited string (for example a JSON array) or asks for*gets400 invalid_scopeinstead of a token with a different scope. A refresh that omitsscopekeeps the granted scope, as before.A client can always revoke its own refresh token API MCP
POST /oauth/revokenow revokes a refresh token even when its access token no longer exists.
2026-09-16
Rejected refresh tokens return
invalid_grantAPI MCPPOST /oauth/tokennow answers a refresh token that was rotated out, revoked, expired, or issued to another client with400anderror: invalid_grant, as RFC 6749 specifies. It previously returned401withinvalid_request, which OAuth clients do not treat as a reason to re-authorize, so a connection that lost its refresh token kept failing instead of asking you to reconnect. See Token lifetimes.
2026-09-15
The 90-day audience retention rule is now scoped to MAID and IP deliveries API
It exists because MAID and IP mapping keys are retained for 90 days, so it no longer blocks an audience outright: audience reads report it under a new
eligibility.notices[]array (code: audience_expired,blocks_identifiers: ["MAID", "IP"]) withallowedtrue, and Create Activation accepts EID / SCID / HEM pricing models on such an audience while rejecting a MAID or IP pricing model with422.eligibility.reasons[]keeps only the rules that block every delivery (device floor, Affinity device coverage). Previously any standard audience whose data window ended more than 90 days ago could not be activated at all, whatever the identifier.
2026-09-14
Chart opt-in on audience create is honoured API
The optional
datastreamsarray sent to create was validated but not applied: the audience built without its charts and the Data Streams tab stayed empty. Opted-in streams now produce their pending rows and are generated as the audience builds.Activation datastreams are checked against the audience API
An enabled entry in
datastreams[]that applies to none of the audience’s dataset types is now rejected with a422naming the stream, instead of being accepted and failing in the export. Get Datastreams items carry a newdataset_typesfield to filter on first; a lookalike audience counts ascohorts.
2026-09-13
Data stream visualizations on audience create API
An audience can now generate its charts as it builds. Send the optional
datastreamsarray on create - the same{id, visualizing_status}shape the activation surface already uses. The rendered charts are viewed in the Intuizi console, on the audience’s Data Streams tab. No endpoint returns a visualization payload or a PDF export.New reference catalog: Get Datastream Visualizations API
Get Datastream Visualizations lists the streams you may use, optionally scoped with
dataset_typeto the set create will accept. Distinct from Get Datastreams, which is an endpoint partner’s delivery outputs.
2026-09-09
Cohorts from a Lookalike Model audience take a score range API MCP
Create Cohort from a Lookalike Model audience (
POST /api/v2/analyses/cohorts/createwithsourceaudience) acceptsscore_limitwithmin_scoreandmax_score, which keeps the devices inside the model’s score bands, best scores first, capped bydevice_limit. A Lookalike Model audience can now back several cohorts. MCPcreate_cohortadvertises the same fields.
2026-09-02
Preview Cohort File works for folder sources API
A
file_urithat names a folder (no.csv,.gzor.parquetsuffix, the same rule create applies) previews the header of its first data file, skipping Spark’s_SUCCESSand similar markers. Previously such a preview failed with a 422 and the identifier column had to be typed without seeing the columns. See Preview Cohort File.Deleting a lookalike audience that is still modelling stops the modelling job API Console
POST /api/v2/analyses/audiences/delete-by-id(and the console’s delete) raise the same cooperative cancellation flag thatcancel-lookalikesets, and the worker’s progress callback honours it even after the audience row is gone. Previously the job ran to completion for an audience nobody could see. Response shapes are unchanged.