MIRA FIVE

People

List the people of a MIRA FIVE project with views, segments and person filters, and read one person's profile by ref.

A person is someone the site recognised with consent: a signed-in user, or a browser in full mode. List them as the People screen does, or read one profile by its ref. Traffic collected without consent never becomes people: on such a project the list is empty and meta.availability says why.

List people

GET /api/v1/projects/{project_id}/people

People active in the period, 50 per page.

NameTypeDefaultDescription
periodstring30d1h, 24h, 7d, 30d, 90d, 12m or custom. See Periods.
fromstringnoneFirst day of a custom period, YYYY-MM-DD. Required with period=custom.
tostringnoneLast day of a custom period, inclusive. Required with period=custom.
viewstringeveryoneeveryone; customers (bought); known (signed in); high-intent (showed intent, not bought).
sortstringlast_seenlast_seen, first_seen, value (revenue in the reporting currency) or visits. Always descending.
windowstringnoneall lists everyone in the retained history instead of the period. Slower.
newstringnone1 keeps only people first seen in the period.
segmentstringnoneA saved segment's id. Keeps only its members.
filters[i][field], filters[i][op], filters[i][value]stringnonePerson filters, all of which must hold. At most 12.
cursorstringnonemeta.nextCursor of the previous page. A cursor belongs to one sort.

compare is refused.

curl -G https://app.mirafive.io/api/v1/projects/01932c4e-8a7b-7c3d-9e2f-4b5a6c7d8e9f/people \
  -H "Authorization: Bearer $MIRAFIVE_API_KEY" \
  --data-urlencode 'view=customers' \
  --data-urlencode 'sort=value' \
  --data-urlencode 'filters[0][field]=first_channel' \
  --data-urlencode 'filters[0][op]=is' \
  --data-urlencode 'filters[0][value]=organic_search'
200 OK
{
  "data": [
    {
      "id": "0196f0a1-2b3c-7d4e-8f5a-6b7c8d9e0f1a",
      "type": "people",
      "attributes": {
        "name": "Lena Hoffmann",
        "known": true,
        "stage": "customer",
        "firstSeen": "2026-06-14T19:02:11.540+02:00",
        "lastSeen": "2026-09-26T21:47:30.118+02:00",
        "visits": 6,
        "value": [{ "currency": "EUR", "amount": 412.7 }],
        "firstTouch": {
          "channel": "organic_search",
          "source": "google.com",
          "campaign": "",
          "landing": "/products/linen-shirt"
        },
        "country": "DE",
        "device": "desktop",
        "lastPath": "/checkout/thank-you"
      },
      "links": {
        "self": "https://app.mirafive.io/api/v1/projects/01932c4e-8a7b-7c3d-9e2f-4b5a6c7d8e9f/people/0196f0a1-2b3c-7d4e-8f5a-6b7c8d9e0f1a"
      }
    },
    {
      "id": "01970b2c-3d4e-7f5a-9b6c-7d8e9f0a1b2c",
      "type": "people",
      "attributes": {
        "name": "u_58213",
        "known": true,
        "stage": "customer",
        "firstSeen": "2026-08-30T08:15:42.003+02:00",
        "lastSeen": "2026-09-24T12:31:05.871+02:00",
        "visits": 3,
        "value": [{ "currency": "EUR", "amount": 129 }, { "currency": "CHF", "amount": 89 }],
        "firstTouch": {
          "channel": "organic_search",
          "source": "bing.com",
          "campaign": "",
          "landing": "/"
        },
        "country": "CH",
        "device": "mobile",
        "lastPath": "/account/orders"
      },
      "links": {
        "self": "https://app.mirafive.io/api/v1/projects/01932c4e-8a7b-7c3d-9e2f-4b5a6c7d8e9f/people/01970b2c-3d4e-7f5a-9b6c-7d8e9f0a1b2c"
      }
    }
  ],
  "links": {
    "self": "https://app.mirafive.io/api/v1/projects/01932c4e-8a7b-7c3d-9e2f-4b5a6c7d8e9f/people?view=customers&sort=value&filters%5B0%5D%5Bfield%5D=first_channel&filters%5B0%5D%5Bop%5D=is&filters%5B0%5D%5Bvalue%5D=organic_search",
    "next": null
  },
  "meta": {
    "period": {
      "preset": "30d",
      "from": "2026-08-29T00:00:00+02:00",
      "to": "2026-09-28T00:00:00+02:00",
      "timezone": "Europe/Berlin",
      "interval": "day",
      "comparison": null,
      "clampedToRetention": false
    },
    "allTime": false,
    "view": "customers",
    "sort": "value",
    "availability": "ready",
    "perPage": 50,
    "nextCursor": null
  }
}
FieldTypeDescription
idstringThe person's ref, a UUID. Pass it to Get a person.
attributes.namestring or nullTheir name from identify, or their user id when they gave no name. null for a visitor who never signed in.
attributes.knownbooleanSigned in at least once.
attributes.stagestringcustomer (bought), known (signed in), returning (two visits or more) or visitor.
attributes.firstSeen, attributes.lastSeenstringTheir first and latest activity in the retained history.
attributes.visitsintegerVisits in the period.
attributes.valuearrayRevenue per currency, { currency, amount }, reporting currency first.
attributes.firstTouchobject or nullHow they first came: channel, source (UTM source, else the referring host), campaign and landing path. Empty strings where nothing was tagged.
attributes.countrystringTwo-letter country code.
attributes.devicestringdesktop, mobile or tablet.
attributes.lastPathstringThe last page they viewed.
links.selfstringThe person's profile in the API.
meta.allTimebooleanWhether window=all was asked for.
meta.view, meta.sortstringThe view and sort used.
meta.availabilitystringready; consentless_only (the project collects without consent, so it has nobody to list); no_sources (the project has no source yet).
meta.perPage, meta.nextCursorSee Pagination.

Person filters

People take their own filters, not the event filters of reports. Each is filters[i][field], filters[i][op] and filters[i][value]; all must hold. At most 12, and value is at most 500 characters.

FieldOperatorsValue
stageis, is_notcustomer, known, returning or visitor
purchaseset (made), not_set (not made)none
goalis (reached), is_not (not reached)a goal id, from List goals
actionis (done), is_not (not done)an action id
segmentis, is_nota segment id
funnelisa step: {window}:{step}:{reached or stopped}:{action id},{action id},…, e.g. 7:2:stopped:<id>,<id> for people who got to step 2 and no further
experimentis{experiment id}:{a or b}, optionally followed by :goal or :purchase for those who then reached the deciding goal or bought
first_channel, last_channelis, is_nota channel: paid_search, paid_social, email, ai_assistant, organic_search, organic_social, campaign, referral, direct
first_campaign, last_campaignis, is_not, contains, set, not_seta utm_campaign
first_landing, last_landingis, is_not, starts_with, containsa page path
first_ad_platform, last_ad_platformis, is_notgoogle_ads or meta_ads
countryis, is_notan upper-case two-letter code, e.g. DE
deviceis, is_notdesktop, mobile or tablet

The first touch is the visit that first brought a person. The last touch is their latest visit from outside (not direct), else their latest visit. goal, action, purchase and funnel count within the period. Trait filters (traits.<key>) belong to segments and are refused here.

Get a person

GET /api/v1/projects/{project_id}/people/{ref}

One person over their whole retained history. ref comes from the list or from an event. The ref of a browser that later signed in answers with the person who claimed it, and id carries that person's ref.

curl https://app.mirafive.io/api/v1/projects/01932c4e-8a7b-7c3d-9e2f-4b5a6c7d8e9f/people/0196f0a1-2b3c-7d4e-8f5a-6b7c8d9e0f1a \
  -H "Authorization: Bearer $MIRAFIVE_API_KEY"
200 OK
{
  "data": {
    "id": "0196f0a1-2b3c-7d4e-8f5a-6b7c8d9e0f1a",
    "type": "people",
    "attributes": {
      "name": "Lena Hoffmann",
      "email": "lena.hoffmann@example.com",
      "userId": "u_40177",
      "known": true,
      "stage": "customer",
      "firstSeen": "2026-06-14T19:02:11.540+02:00",
      "lastSeen": "2026-09-26T21:47:30.118+02:00",
      "visits": 14,
      "activeDays": 11,
      "events": 236,
      "pageviews": 181,
      "orders": 3,
      "revenue": [{ "currency": "EUR", "amount": 412.7 }],
      "firstTouch": {
        "channel": "organic_search",
        "source": "google.com",
        "campaign": "",
        "landing": "/products/linen-shirt"
      },
      "client": {
        "country": "DE",
        "region": "HH",
        "device": "desktop",
        "browser": "Firefox",
        "os": "macOS",
        "locale": "de-DE"
      },
      "traits": [
        { "key": "plan", "value": "club" },
        { "key": "newsletter", "value": "true" }
      ],
      "browsers": 2,
      "sharedBrowser": false
    },
    "links": {
      "self": "https://app.mirafive.io/api/v1/projects/01932c4e-8a7b-7c3d-9e2f-4b5a6c7d8e9f/people/0196f0a1-2b3c-7d4e-8f5a-6b7c8d9e0f1a"
    }
  }
}

It takes no query parameters except sparse fieldsets. A ref the project does not know gets 404 with Nobody with this ref within what the plan keeps, or they were erased.

FieldTypeDescription
idstringThe person's current ref.
attributes.name, attributes.email, attributes.userIdstring or nullWhat they signed in with, from identify. null when never given.
attributes.knownbooleanWhether they have a user id.
attributes.stagestringcustomer, known, returning or visitor.
attributes.firstSeen, attributes.lastSeenstringFirst and latest activity.
attributes.visits, attributes.activeDays, attributes.events, attributes.pageviews, attributes.ordersintegerCounts over the retained history.
attributes.revenuearrayRevenue per currency, { currency, amount }.
attributes.firstTouchobject or nullchannel, source, campaign, landing of the visit that first brought them.
attributes.clientobjectcountry, region (ISO subdivision code), device, browser, os and locale.
attributes.traitsarray{ key, value } of their latest identify traits.
attributes.browsersintegerHow many browsers are joined to this person.
attributes.sharedBrowserbooleanSomeone else signed in on one of their browsers.
links.selfstringThis profile's URL in the API.

On this page