---
title: "Start or resume an acquisition funnel session"
method: POST
path: "/v1/acquisition/sessions"
tags: ["Acquisition Sessions"]
---

# Start or resume an acquisition funnel session

`POST /v1/acquisition/sessions`

Creates a new acquisition session for the given funnel. If an in-progress session for the same lead and funnel already exists, returns it instead of creating a duplicate (idempotent).

## Request body

- StartAcquisitionSessionDto
  - `funnelId` string, required — Stable funnel slug (e.g. "quiz-3-v2-adaptive")
  - `firebaseUid` string — Firebase Auth UID (anonymous or registered). When present, we attach this session to the existing lead with the same UID.
  - `locale` string — Optional locale override. Defaults to "en".
  - `attribution` AcquisitionAttributionDto
    - `utmSource` string, nullable
    - `utmMedium` string, nullable
    - `utmCampaign` string, nullable
    - `utmContent` string, nullable
    - `utmTerm` string, nullable
    - `fbclid` string, nullable
    - `gclid` string, nullable
    - `ttclid` string, nullable
    - `referrer` string, nullable
    - `adMetadata` object — Additional ad/campaign metadata captured from the landing URL — all values are strings
  - `experiments` object — Map of experimentId → assignment captured at funnel entry
  - `deviceType` 'mobile' | 'tablet' | 'desktop'
  - `userAgent` string
  - `country` string
  - `ipAddress` string
  - `amplitudeDeviceId` string
  - `facebookPixelId` string
  - `tiktokPixelId` string

## Response `200`

- StartAcquisitionSessionResponseDto
  - `session` AcquisitionSessionDto, required
    - `id` string, required
    - `leadId` string, required
    - `funnelId` string, required
    - `attemptNumber` number, required
    - `status` 'in_progress' | 'completed' | 'purchased' | 'abandoned', required
    - `answers` object, required
    - `attribution` AcquisitionAttributionDto, required
      - `utmSource` string, nullable
      - `utmMedium` string, nullable
      - `utmCampaign` string, nullable
      - `utmContent` string, nullable
      - `utmTerm` string, nullable
      - `fbclid` string, nullable
      - `gclid` string, nullable
      - `ttclid` string, nullable
      - `referrer` string, nullable
      - `adMetadata` object — Additional ad/campaign metadata captured from the landing URL — all values are strings
    - `experiments` object, required
    - `locale` string, required
    - `deviceType` 'mobile' | 'tablet' | 'desktop', nullable
    - `userAgent` string, nullable
    - `country` string, nullable
    - `ipAddress` string, nullable
    - `amplitudeDeviceId` string, nullable
    - `facebookPixelId` string, nullable
    - `tiktokPixelId` string, nullable
    - `startedAt` string, date-time, required
    - `lastTouchAt` string, date-time, required
    - `completedAt` string, date-time, nullable
    - `purchasedAt` string, date-time, nullable
    - `abandonedAt` string, date-time, nullable
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
  - `created` boolean, required — True when a brand-new session was created; false when an existing in-progress session was returned.
  - `leadIsCustomer` boolean, required — True if the lead is a known paying customer. The funnel should redirect to the app instead of continuing.

---

[API](https://skmtc.dev/miaai/apis/backend-template-api.md) · [All operations](https://skmtc.dev/miaai/apis/backend-template-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/miaai/backend-template-api/revisions/2a8d88a5124f/schema)
