Skip to content

Activations

Activate (export) a completed audience to an endpoint connection, then list, read and delete activations - and preview the frequency filter an activation would apply before you create it. Activation is asynchronous: the create call returns immediately with a new id, and you poll the get endpoint until its datastreams report their output.

All activation endpoints are authenticated and JSON-only. Send Authorization: Bearer <token> and Accept: application/json on every call (plus Content-Type: application/json on the POST create). Reads use the read rate bucket (120 requests/min per caller); create and delete use the write bucket (30 requests/min per caller).

Create Activation

POST /api/v2/analyses/activations/create

Creates an activation that exports a custom audience owned by your company to a company-scoped endpoint connection. The audience must be 104 Completed and hold at least 500 unique devices - the audience read’s is_activation_allowed field tells you eligibility up front. When it is false, eligibility.reasons[0].message tells you why (device floor, Affinity device coverage, retention) and the activation endpoint returns 422 with the same message. The export is queued asynchronously; poll GET /api/v2/analyses/activations/{id} for its status and datastream output.

Auth: bearer token + Accept: application/json + Content-Type: application/json. Rate limit: write bucket (30 requests/min). Optional: Idempotency-Key header (see below).

Body

FieldTypeRequiredDescription
audience_idintegerYesThe audience to export. Must be owned by your company.
endpoint_connection_idintegerYesThe destination endpoint connection. Must be owned by your company. Resolves the partner, pricing and datastreams server-side.
pricing_model_idintegerYesThe pricing model id for the activation.
descriptionstringNoA label for the activation (max 255 chars).
project_idintegerNoA project id owned by your company to file the activation under.
credentialsobjectNoCaller-supplied destination credentials (see the credentials note). Write-only and sensitive.
audience_inputsarrayPer partner definitionsPartner account-detail values, index-matched to the connection’s partner.inputs definitions from Get Endpoint Connections. Inputs flagged required must be supplied for every enabled datastream (here or per stream).
datastreamsobject[]NoThe partner outputs to enable. Each entry is { id, status, compression, inputs, service_account, visualizing_status }.
datastreams[].inputsarrayPer partner definitionsPer-stream partner input values, index-matched to partner.inputs exactly like audience_inputs (per-stream values win).
datastreams[].service_accountobjectNoThe decoded service-account JSON key. Only accepted when the partner defines a file-type input (GCP-style destinations); otherwise rejected. Write-only and sensitive.
datastreams[].visualizing_statusbooleanNoWhether this stream also feeds visualization.
datastreams[].idintegerRequired with datastreamsThe datastream id (re-resolved server-side through your company’s permitted set). An enabled stream must apply to the audience’s dataset types - each item of Get Datastreams lists its dataset_types, and a lookalike audience counts as cohorts. A mismatch is a 422 naming the stream; it is not silently dropped, because a stream run against the wrong dataset produces a broken file rather than an empty one.
datastreams[].statusbooleanNoWhether to enable this datastream.
datastreams[].compressionstringNoCompression for this datastream.
freq_limitbooleanWith freq_min / freq_maxEnable the frequency filter. The export applies freq_min / freq_max only when this is true, so bounds sent without an explicit freq_limit are rejected - a filter is never applied implicitly. Must be true when filter_hash is sent.
freq_minintegerWith filter_hashLowest distinct visit-day count to export (inclusive). Preview the resulting count first with Preview Activation.
freq_maxintegerWith filter_hashHighest distinct visit-day count to export (inclusive).
filter_hashstringNoThe filter_hash returned by Preview Activation for the same audience_id, freq_min and freq_max. Recomputed server-side from the audience as stored now; a different range, or an audience rebuilt since the preview, is rejected - so the export applies exactly what was previewed. Echoed on the activation read.
limitintegerNoResult cap.
distance_limitbooleanNoEnable the distance limit.
distancenumberNoDistance value.
compressionstringNoTop-level compression.
pricenumberNoPrice override.
notificationbooleanNoWhether to notify on completion.
partner_id, partner_name and pricing_model are prohibited in the body. The partner, pricing and datastreams are always derived server-side from the company-scoped endpoint_connection_id. Sending any of these prohibited fields is rejected with 422.

Caller-supplied credentials

credentials is an optional, write-only and sensitive map of string keys to simple values (strings, numbers or booleans). It is never logged, never echoed, and never returned in any response.

  • When present, the caller-supplied credentials override the endpoint connection’s stored credentials for this export.
  • When absent, the server falls back to the connection’s stored, server-decrypted credentials.
  • If the connection has no stored credentials and the caller supplies none, the activation is rejected with 422 (there is nothing to authenticate the export with).
curl -X POST "https://console.intuizi.com/api/v2/analyses/activations/create" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: <UNIQUE_KEY>" \
  -d '{
    "audience_id": 88,
    "endpoint_connection_id": 12,
    "pricing_model_id": 3,
    "description": "Q1 retail export",
    "datastreams": [
      { "id": 7, "status": true }
    ]
  }'

Response

The response never includes the endpoint JSON, credentials, result links or device identifiers. created_by, partner and pricing_model are always objects (empty {} when they cannot be resolved). filters echoes the frequency filter the export applies (freq_min / freq_max only apply when freq_limit is true) and filter_hash the preview hash the activation was created with (null when none was sent).

{
  "status": "success",
  "code": 201,
  "message": "Resource created successfully.",
  "data": [
    {
      "id": 501,
      "description": "Q1 retail export",
      "status": { "id": 100, "name": "Initiating" },
      "audience": { "id": 88, "name": "Coffee Buyers NYC" },
      "created_by": { "name": "Jane Doe", "email": "jane.doe@acme.example" },
      "project": { "id": 4, "name": "Retail 2025" },
      "partner": { "name": "Acme DSP", "description": "Programmatic DSP" },
      "pricing_model": { "name": "CPM", "price": 2.5 },
      "datastreams": [],
      "filters": { "freq_limit": false, "freq_min": null, "freq_max": null },
      "filter_hash": null,
      "created_at": "2025-02-01 12:00:00",
      "updated_at": "2025-02-01 12:00:00"
    }
  ]
}

Idempotency

The optional Idempotency-Key header makes a create safe to retry. The key is caller-generated: any unique string up to 255 characters (a UUID v4 is typical), one per logical create - reuse it only when retrying that same request. The first request with a given key runs normally and the successful (2xx) response is cached per caller. A retry with the same key and the same body replays the stored response verbatim with an Idempotency-Replayed: true header, so no duplicate activation is created. A retry with the same key but a different body returns 409 Conflict. See Idempotency for the full replay semantics and the eight endpoints that honor the header.

Preview Activation

GET /api/v2/analyses/activations/preview

Read-only dry run of the frequency filter an activation would apply to a Completed audience. It returns the exact device count the Audience Manager shows as Limit Audience for the same Freq. Range: the audience’s stored frequency histogram (distinct visit days -> devices) summed over the inclusive [freq_min, freq_max] range, which is the same predicate the export applies. Alongside the count you get the histogram, its valid bounds, the audience total, the read-only recency window, the audience eligibility and a canonical filter_hash. Nothing is created, queued, exported, scheduled or billed - call it once per candidate range.

The audience must be 104 Completed and built with a frequency analysis - Visitation Frequency, Apps Frequency or Web Frequency in the Audience Manager, or the matching analyses key on Create Audience. Any other audience - a day-part frequency analysis, a lookalike or cohort, an audience built without a frequency analysis - is refused; the filter is never approximated. For a worked agent session see Preview, then Activate.

Recency is not an input: the date window is fixed by the audience definition and echoed read-only as recency. The preview accepts exactly the three parameters below; any other parameter is rejected.

Auth: bearer token + Accept: application/json. Rate limit: read bucket (120 requests/min).

Query parameters

FieldTypeRequiredDescription
audience_idintegerYesA Completed audience owned by your company, built with exactly one frequency analysis (see Frequency analyses).
freq_minintegerYesLowest distinct visit-day count to include (inclusive). Must be at least frequency_bounds.min - 1 for a “1+” range, 2 for “2+”.
freq_maxintegerYesHighest distinct visit-day count to include (inclusive). Must not exceed frequency_bounds.max; use that bound for an open-ended “N+” range.
curl "https://console.intuizi.com/api/v2/analyses/activations/preview?audience_id=88&freq_min=2&freq_max=5" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Accept: application/json"

Response

filtered_count is exact. source_count is the audience total shown on the audience itself (an approximate distinct count, about 2.3% standard error) and histogram_total is the exact sum of the histogram, so the two can differ slightly; a [1, frequency_bounds.max] range returns histogram_total. as_of is when the audience’s stored results were last updated.

To activate exactly what was previewed, send the same audience_id, freq_min and freq_max with freq_limit: true and the returned filter_hash to Create Activation; the activation read then echoes both.

{
  "status": "success",
  "code": 200,
  "message": "Resource fetched successfully.",
  "data": [
    {
      "audience": {
        "id": 88,
        "name": "Coffee Buyers NYC",
        "status": { "id": 104, "name": "Completed" },
        "is_activation_allowed": true,
        "eligibility": {
          "allowed": true,
          "reasons": [],
          "metrics": { "unique_eids": 5100, "unique_scids": null, "eid_scid_ratio": null, "is_affinity": false }
        }
      },
      "dataset_type": "POI",
      "analysis_type": "frequency",
      "recency": [
        { "dataset_type": "POI", "start_date": "06/01/2026", "end_date": "07/31/2026" }
      ],
      "source_count": 5100,
      "histogram_total": 5000,
      "filtered_count": 2000,
      "frequency_bounds": { "min": 1, "max": 5 },
      "histogram": [
        { "index": 1, "counts": 3000 },
        { "index": 2, "counts": 1200 },
        { "index": 3, "counts": 500 },
        { "index": 5, "counts": 300 }
      ],
      "applied_filters": { "freq_limit": true, "freq_min": 2, "freq_max": 5 },
      "filter_hash": "sha256:4f9d0c7e1b2a8d3f6e5c4b3a2918f7e6d5c4b3a291807f6e5d4c3b2a19180706",
      "method": "histogram_sum",
      "as_of": "2026-08-01 06:12:44",
      "limitations": [
        "filtered_count is the exact number of devices whose distinct visit-day count inside the audience date window falls within [freq_min, freq_max] (both inclusive) - the same figure the Audience Manager shows as Limit Audience for that Freq. Range, and the same predicate the export applies.",
        "source_count is the audience total shown on the audience itself (an approximate distinct count, about 2.3% standard error); histogram_total is the exact sum of the frequency histogram, so the two can differ slightly. A [1, max] range returns histogram_total."
      ]
    }
  ]
}

List Activations

GET /api/v2/analyses/activations/index

Lists the activations owned by your company, most recent first, paginated.

Auth: bearer token + Accept: application/json. Rate limit: read bucket (120 requests/min).

Query parameters

FieldTypeRequiredDescription
per_pageintegerNoItems per page. Defaults to 25, capped at 100.
pageintegerNoPage number (standard pagination).
searchstringNoOptional free-text filter on the activation description (case-insensitive contains).
curl "https://console.intuizi.com/api/v2/analyses/activations/index?per_page=25" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Accept: application/json"

Response

{
  "status": "success",
  "code": 200,
  "message": "Resources fetched successfully.",
  "data": {
    "items": [
      {
        "id": 501,
        "description": "Q1 retail export",
        "status": { "id": 104, "name": "Completed" },
        "audience": { "id": 88, "name": "Coffee Buyers NYC" },
        "created_by": { "name": "Jane Doe", "email": "jane.doe@acme.example" },
        "project": { "id": 4, "name": "Retail 2025" },
        "partner": { "name": "Acme DSP", "description": "Programmatic DSP" },
        "pricing_model": { "name": "CPM", "price": 2.5 },
        "datastreams": [
          { "name": "match_file", "status": "success", "results": { "uri": "s3://bucket/path/output.csv" } }
        ],
        "created_at": "2025-02-01 12:00:00",
        "updated_at": "2025-02-02 09:30:00"
      }
    ],
    "pagination": {
      "current_page": 1,
      "per_page": 25,
      "total": 1,
      "last_page": 1
    }
  }
}

Get Activation

GET /api/v2/analyses/activations/{id}

Retrieves a single activation by id.

The same read is also available at GET /api/v2/my-data/activations/{id} for backward compatibility; both return the identical response shape.

Auth: bearer token + Accept: application/json. Rate limit: read bucket (120 requests/min).

Path parameters

FieldTypeRequiredDescription
idintegerYesThe activation id to fetch.
curl "https://console.intuizi.com/api/v2/analyses/activations/501" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Accept: application/json"

Response

Each entry in datastreams[] carries a name, a status, an always-object results ({ "uri": "s3://..." } or { "gs://..." } when an output file is available, else {}), and an error string only when the datastream failed. The name is the stream’s internal slug, not the name Get Datastreams prints. The status is success for a delivered stream, failed when it failed, or skipped when it cannot run on the audience’s data, and the last two carry an error. Output URIs are normalized to their s3:// or gs:// form. Storage locations and URLs are removed from the error, and an error passed through from the query engine or cloud storage is cut to its first sentence, which states the reason.

{
  "status": "success",
  "code": 200,
  "message": "Resource fetched successfully.",
  "data": [
    {
      "id": 501,
      "description": "Q1 retail export",
      "status": { "id": 104, "name": "Completed" },
      "audience": { "id": 88, "name": "Coffee Buyers NYC" },
      "created_by": { "name": "Jane Doe", "email": "jane.doe@acme.example" },
      "project": { "id": 4, "name": "Retail 2025" },
      "partner": { "name": "Acme DSP", "description": "Programmatic DSP" },
      "pricing_model": { "name": "CPM", "price": 2.5 },
      "datastreams": [
        {
          "name": "match_file",
          "status": "success",
          "results": { "uri": "s3://bucket/path/output.csv" }
        }
      ],
      "filters": { "freq_limit": true, "freq_min": 2, "freq_max": 5 },
      "filter_hash": "sha256:4f9d0c7e1b2a8d3f6e5c4b3a2918f7e6d5c4b3a291807f6e5d4c3b2a19180706",
      "created_at": "2025-02-01 12:00:00",
      "updated_at": "2025-02-02 09:30:00"
    }
  ]
}

Delete Activation

POST /api/v2/analyses/activations/delete-by-id

Soft-deletes an activation.

Auth: bearer token + Accept: application/json + Content-Type: application/json. Rate limit: write bucket (30 requests/min).

Body

FieldTypeRequiredDescription
idintegerYesThe activation id to delete. Must be owned by your company.
curl -X POST "https://console.intuizi.com/api/v2/analyses/activations/delete-by-id" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "id": 501 }'

Response

{
  "status": "success",
  "code": 200,
  "message": "Resource deleted successfully.",
  "data": []
}