---
title: "Start double opt-in for a new subscriber"
method: POST
path: "/subscribers/opt-in"
tags: ["Subscribers"]
---

# Start double opt-in for a new subscriber

`POST /subscribers/opt-in`

## Request

- Base URL: `https://api.maildroppa.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.maildroppa.com/subscribers/opt-in`
- Auth: API key in header `X-API-Key`

Creates an immutable signup attempt and queues double opt-in mail delivery.
Subscriber profile, tags, consent, automations and webhooks are deferred until confirmation.

## Request body

- SubscriberOptInRequest: Starts double opt-in without mutating subscriber profile before confirmation.
  - `email` string
  - `firstName` string
  - `fields` FieldValueInput[]
    - `fieldId` string, uuid
    - `value` union: Strict typed subscriber field value accepted by write endpoints.
      - object: Text subscriber field value.
        - `kind` 'TEXT' | 'EMAIL' | 'NUMBER' | 'DATE' | 'BOOLEAN' | 'SINGLE_OPTION' | 'MULTI_OPTION', required: Typed value category used when reading or writing subscriber field values.
        - `text` string, required: Text value.
      - object: Email subscriber field value.
        - `kind` 'TEXT' | 'EMAIL' | 'NUMBER' | 'DATE' | 'BOOLEAN' | 'SINGLE_OPTION' | 'MULTI_OPTION', required: Typed value category used when reading or writing subscriber field values.
        - `text` string, required: Email value.
      - object: Number subscriber field value.
        - `kind` 'TEXT' | 'EMAIL' | 'NUMBER' | 'DATE' | 'BOOLEAN' | 'SINGLE_OPTION' | 'MULTI_OPTION', required: Typed value category used when reading or writing subscriber field values.
        - `number` number, required: Number value.
      - object: Date subscriber field value.
        - `kind` 'TEXT' | 'EMAIL' | 'NUMBER' | 'DATE' | 'BOOLEAN' | 'SINGLE_OPTION' | 'MULTI_OPTION', required: Typed value category used when reading or writing subscriber field values.
        - `date` string, date, required
      - object: Boolean subscriber field value.
        - `kind` 'TEXT' | 'EMAIL' | 'NUMBER' | 'DATE' | 'BOOLEAN' | 'SINGLE_OPTION' | 'MULTI_OPTION', required: Typed value category used when reading or writing subscriber field values.
        - `booleanValue` boolean, required: Boolean value.
      - object: Single-option subscriber field value.
        - `kind` 'TEXT' | 'EMAIL' | 'NUMBER' | 'DATE' | 'BOOLEAN' | 'SINGLE_OPTION' | 'MULTI_OPTION', required: Typed value category used when reading or writing subscriber field values.
        - `optionId` string, uuid, required
      - object: Multi-option subscriber field value.
        - `kind` 'TEXT' | 'EMAIL' | 'NUMBER' | 'DATE' | 'BOOLEAN' | 'SINGLE_OPTION' | 'MULTI_OPTION', required: Typed value category used when reading or writing subscriber field values.
        - `optionIds` string[], required: Selected option IDs.
  - `tags` string[]
  - `gdprAgreement` string
  - `consentSource` string
  - `topicIds` string[]: Active topic ids the confirmed subscriber joins. Missing means the tenant default topic.

## Response `202`

Opt-in attempt recorded.

- SubscriberOptInResponse: Double opt-in attempt result.
  - `signupAttemptId` string, uuid
  - `subscriberId` string, uuid
  - `doubleOptInMailDecision` 'QUEUED' | 'CONFIRMATION_MAIL_ALREADY_SENT' | 'SUPPRESSED_ALREADY_SUBSCRIBED' | 'SUPPRESSED_COOLDOWN' | 'SUPPRESSED_SUBSCRIBER_LIMIT' | 'SUPPRESSED_CUSTOMER_LIMIT' | 'SUPPRESSED_SUBSCRIBER_POLICY'
  - `confirmationExpiresAtUtc` string, date-time

## Other responses

- `400`: Invalid subscriber data.
- `401`: Not Authorized
- `403`: Not Allowed
- `428`: Accept the customer agreements in the app before using API keys.

---

[API](https://skmtc.dev/maildroppa/apis/maildroppa-api-beta.md) · [All operations](https://skmtc.dev/maildroppa/apis/maildroppa-api-beta/llms.txt) · [OpenAPI document](https://skmtc.dev/maildroppa/apis/maildroppa-api-beta/revisions/a9f5a3fd1fb0?raw)
