# Add user to the EVSE waitlist

Captures a user who hit an `incompatible` result on the EVSE compatibility check, so we can notify them once their hardware becomes supported. Pre-account, anonymous endpoint — no OAuth token required.
The request body must identify the device in exactly one of two modes:
- **Picker mode** — supply `evse_model_id` (uid of an `EVSEModel`). `evse_make_name` and `evse_model_name` must be omitted / null.
- **Manual entry** — supply both `evse_make_name` and `evse_model_name` as free-text strings. `evse_model_id` must be omitted / null.

Any other combination — including all three null — returns `400`.
Country is derived server-side: from `program.country` when `program_id` is supplied; otherwise from the `Accept-Language` header (defaulting to `US`).
Error responses follow RFC 9457 Problem Details. Problem types emitted by this endpoint:
- `validation-failed-evse-waitlist` — request body fails validation (missing required field, mode constraint violation, unknown `evse_model_id` / `program_id`).

Endpoint: POST /evse_waitlist
Version: 2.0
Security: oauth2

## Query parameters:

  - `client_id` (string)
    OAuth `Application.client_id`. Mirrors the pre-account onboarding and compatibility-check endpoints: when supplied and the application has sandbox mode enabled, the endpoint returns a canned `201` without persisting anything.

## Header parameters:

  - `EvEnergy-Version` (number)
    Specify the version of this endpoint to use.

  - `Accept-Language` (string)
    Indicates the natural language and locale that the client prefers.

## Request fields (application/json):

  - `email` (string, required)
    Email address to notify when the user's hardware becomes supported.
    Example: user@example.com

  - `program_id` (string | null)
    Optional `ProgramConfig` uid. Captured where known (web signup, whitelabel microsite) so later notification logic can scope by program.
    Example: prog01HRS4TSK26BPBV7127DH7E0HA

  - `evse_model_id` (string | null)
    Uid of an `EVSEModel`. Used when the user picked from the EVSE picker. Mutually exclusive with `evse_make_name` / `evse_model_name`.
    Example: emod01HRS4TSK26BPBV7127DH7E0HA

  - `evse_make_name` (string)
    Free-text make name from manual entry. Must be supplied together with `evse_model_name`. Mutually exclusive with `evse_model_id`.
    Example: Wallbox

  - `evse_model_name` (string)
    Free-text model name from manual entry. Must be supplied together with `evse_make_name`. Mutually exclusive with `evse_model_id`.
    Example: Pulsar Pro

## Response 201 fields (application/json):

  - `id` (string, required)
    Uid of the created waitlist entry.
    Example: ewlt01HRS4TSK26BPBV7127DH7E0HA

## Response 400 fields (application/problem+json):

  - `type` (string)
    Example: https://api.ev.energy/v2/problems/example-problem/

  - `status` (number)
    Example: 400

  - `title` (string, required)
    Example: Short description

  - `detail` (string, required)
    Example: Long, more specific description.

  - `instance` (string)
    Example: https://api.ev.energy/v2/users/user01HN2P75GBNFRJPCZJXEFVXH5E

  - `notification` (object)
    Something that the user should be informed about.

  - `notification.id` (string, required)
    Unique identifier for the Notification
    Example: notf67O36PLTFDB57M0E5L33JZLGM0

  - `notification.url` (string, required)
    Example: https://api.ev.energy/notifications/notf67O36PLTFDB57M0E5L33JZLGM0

  - `notification.message_id` (string, required)
    Internal identifier for this notification type. E.g. 'ERR0023'

  - `notification.category` (string, required)
    Category of this notification type
    Enum: "ACTIONABLE", "SERVICE", "RETRY", "MARKETING", "INTERNAL"

  - `notification.event_time` (string, required)
    The timestamp of the event described by this notification

  - `notification.short_text_title` (string, required)
    Short title for the notification

  - `notification.short_text_body` (string, required)
    Short description of the event being notified

  - `notification.detail_page_title` (string, required)
    Title of a help page giving more information about this notification

  - `notification.detail_page_body` (string, required)
    Text of a help page giving more information about this notification

  - `notification.external_link` (string | null, required)
    URL of a web page giving further information about this notification

  - `notification.external_button_label` (string, required)
    Text to be displayed on a button leading to the external_link location

  - `notification.read_at` (string)
    When the user examined the contents of this notification

  - `notification.resolved_at` (string)
    When the problem associated with this notification was resolved

## Response 405 fields (application/problem+json):

  - `status` (number)
    Example: 405

  - `title` (string, required)
    Example: Method Not Allowed

  - `detail` (string, required)
    Example: Could not satisfy this HTTP method.

## Response 406 fields (application/problem+json):

  - `status` (number)
    Example: 406

  - `title` (string, required)
    Example: Not Acceptable

  - `detail` (string, required)
    Example: Could not satisfy the request Accept header.

## Response 429 fields (application/problem+json):

  - `type` (string)
    Example: https://api.ev.energy/v2/problems/example-problem/

  - `status` (number)
    Example: 400

  - `title` (string, required)
    Example: Short description

  - `detail` (string, required)
    Example: Long, more specific description.

  - `instance` (string)
    Example: https://api.ev.energy/v2/users/user01HN2P75GBNFRJPCZJXEFVXH5E

  - `notification` (object)
    Something that the user should be informed about.

  - `notification.id` (string, required)
    Unique identifier for the Notification
    Example: notf67O36PLTFDB57M0E5L33JZLGM0

  - `notification.url` (string, required)
    Example: https://api.ev.energy/notifications/notf67O36PLTFDB57M0E5L33JZLGM0

  - `notification.message_id` (string, required)
    Internal identifier for this notification type. E.g. 'ERR0023'

  - `notification.category` (string, required)
    Category of this notification type
    Enum: "ACTIONABLE", "SERVICE", "RETRY", "MARKETING", "INTERNAL"

  - `notification.event_time` (string, required)
    The timestamp of the event described by this notification

  - `notification.short_text_title` (string, required)
    Short title for the notification

  - `notification.short_text_body` (string, required)
    Short description of the event being notified

  - `notification.detail_page_title` (string, required)
    Title of a help page giving more information about this notification

  - `notification.detail_page_body` (string, required)
    Text of a help page giving more information about this notification

  - `notification.external_link` (string | null, required)
    URL of a web page giving further information about this notification

  - `notification.external_button_label` (string, required)
    Text to be displayed on a button leading to the external_link location

  - `notification.read_at` (string)
    When the user examined the contents of this notification

  - `notification.resolved_at` (string)
    When the problem associated with this notification was resolved

