---
title: "Set Email"
method: POST
path: "/me/email"
tags: ["me"]
---

# Set Email

`POST /me/email`

Set primary email for phone-only or incomplete users.

Used during account completion and other email collection points. The email is:
1. Set as primary (unverified) - for communications TO user
2. Verification email sent - so they can use it for forwarding

Returns 409 if email already exists on another account.

The email is mandatory for account completion but verification remains optional.
get_user_by_email() checks both primary and verified emails, so an unverified
primary email set here still prevents another account from claiming it.

## Request body

- SetEmailRequest — Request to set the authenticated user's primary email.
  - `email` string, email, required
  - `tracking` RegistrationTrackingData — Tracking data sent FROM THE FRONTEND during registration.
    - `meta` MetaTrackingData — Meta-specific tracking data sent from the frontend.
      - `fbp` string, nullable
      - `fbc` string, nullable
      - `event_id` string, nullable
    - `attribution` AttributionData — Canonical first-touch / last-touch attribution payload.
      - `first_touch` AttributionTouch — A single captured attribution touch.
        - `attribution_version` integer
        - `captured_at` string, date-time, nullable
        - `landing_path` string, nullable
        - `referrer_path` string, nullable
        - `utm_source` string, nullable
        - `utm_medium` string, nullable
        - `utm_campaign` string, nullable
        - `utm_content` string, nullable
        - `utm_term` string, nullable
        - `fbclid` string, nullable
        - `twclid` string, nullable
        - `gclid` string, nullable
        - `gbraid` string, nullable
        - `wbraid` string, nullable
        - `partnership_code` string, nullable
        - `transaction_id` string, nullable
        - `creative_id` string, nullable
      - `last_touch` AttributionTouch — A single captured attribution touch.
        - `attribution_version` integer
        - `captured_at` string, date-time, nullable
        - `landing_path` string, nullable
        - `referrer_path` string, nullable
        - `utm_source` string, nullable
        - `utm_medium` string, nullable
        - `utm_campaign` string, nullable
        - `utm_content` string, nullable
        - `utm_term` string, nullable
        - `fbclid` string, nullable
        - `twclid` string, nullable
        - `gclid` string, nullable
        - `gbraid` string, nullable
        - `wbraid` string, nullable
        - `partnership_code` string, nullable
        - `transaction_id` string, nullable
        - `creative_id` string, nullable
    - `event_source_url` string, nullable

## Response `200`

Successful Response

- SetEmailResponse — Response after setting email.
  - `email` string, required
  - `verification_sent` boolean, required
  - `account_state` 'pending_email' | 'complete', required
  - `next_step` 'email' | 'app', required
  - `account_completed` boolean, required
  - `registration_event_id` string, nullable
  - `message` string, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/helloaxel/apis/client-api-gateway.md) · [All operations](https://skmtc.dev/helloaxel/apis/client-api-gateway/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/helloaxel/client-api-gateway/revisions/d3c4c29fede7/schema)
