Create a new campaign. Campaigns measure the impact of a change — promotion, layout shift, staff schedule — by comparing a test period against a control period across one or more locations.

Date format: campaign endpoints (testPeriod, controlPeriod) require full ISO 8601 with timezone, e.g. 2024-04-14T10:00:00.000Z. Date-only strings are rejected.

Body parameters

Field Type Required Description
name string yes Display name
metric object yes { key, display } plus optional type, unitType. key is the metric identifier (e.g. entries); display is the UI label
campaignUplift number yes Expected uplift as a proportion (e.g. 0.1 = 10%), not a percent
taxonomies string[] yes Array of taxonomy path strings (may be [])
lineTaxonomies string[] yes Array of taxonomy path strings (may be [])
testLocations string[] yes Array of location IDs to include in the test group
testPeriod object yes See Period shape below
controlPeriod object no Same shape as testPeriod. When present, controlPeriod.active: boolean is required
selectedBreakdowns object[] yes Array of { key, values } objects — see selectedBreakdowns below
description string no Max 1000 characters
controlLocations string[] no Array of location IDs for the control group

Period shape (testPeriod / controlPeriod)

Field Type Required Description
selectedPreset string yes Opaque label (e.g. "custom", "last-30-days"). Validated only as a string — not against a closed list
selectedDates { start, end } yes ISO 8601 timestamps with timezone
customPeriodDates { start, end } no Optional alongside selectedDates
active boolean yes (control only) Required on controlPeriod

Taxonomies and line taxonomies

taxonomies is an array of zone-path strings (e.g. Service:Checkout, Products:Clothing) the campaign should track on area-based metrics. lineTaxonomies does the same for line-based metrics (entries, passers-by, capture rate, etc.). Both arrays may be empty ([]) for location-wide metrics that don’t filter by zone.

These values map onto the zones and lines you’ve configured for each recording. To enumerate what’s available for your locations, query: Area definitions and Line definitions. The full list of metric routes is in the Metrics API overview.

selectedBreakdowns

An array of { key, values } objects — not a flat string array.

key Valid values
"ages" "0-15", "16-24", "25-34", "35-44", "45-54", "55-64", "65-100"
"genders" "male", "female"
"roles" "customer", "staff", "customer-customer", "customer-staff", "staff-staff"
"" "all visitors" — the “all visitors combined” form

Example request

POST https://api.auravisionlabs.com/v1/campaign
Authorization: Bearer <your_token>
Content-Type: application/json
{
  "name": "Summer Promotion",
  "metric": { "key": "entries", "display": "Entries" },
  "campaignUplift": 0.1,
  "taxonomies": [],
  "lineTaxonomies": [],
  "testLocations": ["64a1b2c3d4e5f6a7b8c9d0e3"],
  "testPeriod": {
    "selectedPreset": "custom",
    "selectedDates": {
      "start": "2024-06-01T00:00:00.000Z",
      "end":   "2024-06-30T23:59:59.999Z"
    }
  },
  "controlPeriod": {
    "selectedPreset": "custom",
    "selectedDates": {
      "start": "2024-05-01T00:00:00.000Z",
      "end":   "2024-05-31T23:59:59.999Z"
    },
    "active": true
  },
  "selectedBreakdowns": [
    { "key": "genders", "values": ["male", "female"] }
  ]
}

Example response

Returns 201 Created with the full campaign object:

{
  "id": "64a1b2c3d4e5f6a7b8c9d0e7",
  "organisationId": "64a1b2c3d4e5f6a7b8c9d0e2",
  "name": "Summer Promotion",
  "metric": { "key": "entries", "display": "Entries" },
  "campaignUplift": 0.1,
  "taxonomies": [],
  "lineTaxonomies": [],
  "testLocations": ["64a1b2c3d4e5f6a7b8c9d0e3"],
  "controlLocations": [],
  "testPeriod": {
    "selectedPreset": "custom",
    "selectedDates": { "start": "2024-06-01T00:00:00.000Z", "end": "2024-06-30T23:59:59.999Z" }
  },
  "controlPeriod": {
    "selectedPreset": "custom",
    "selectedDates": { "start": "2024-05-01T00:00:00.000Z", "end": "2024-05-31T23:59:59.999Z" },
    "active": true
  },
  "selectedBreakdowns": [{ "key": "genders", "values": ["male", "female"] }],
  "testLocationsExcluded": false,
  "controlLocationsExcluded": false,
  "created": "2024-04-15T10:30:00.000Z",
  "updatedAt": "2024-04-15T10:30:00.000Z"
}