> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.mailercloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Resubscribe Contact

> Re-subscribe a contact who **unsubscribed** and has opted in again, for example on your website's account page. Send a record of the reader's consent with every call. The values are stored in the contact's activity log as your statement; Mailercloud does not verify them.

If your account has double opt-in turned on for **API and integrations**, the reader first gets a confirmation email and is re-subscribed when they click it (response `202`). Otherwise the contact is re-subscribed at once (`200`).

Bounced, spam-complaint, abuse and suppressed contacts can never be re-subscribed (`409`).

Only re-subscribe readers who gave their consent again. Limits: 60 calls per minute and 5,000 per day per account.



## OpenAPI

````yaml /openapi-v1.json post /contacts/resubscribe
openapi: 3.1.0
info:
  title: Mailercloud Marketing API
  version: 1.0.0
  description: >-
    Campaigns, contacts, lists, segments, automations, and webhooks for the
    Mailercloud Marketing Platform.
servers:
  - url: https://cloudapi.mailercloud.com/v1
security:
  - apiKey: []
tags:
  - name: Campaigns
  - name: Contacts
  - name: Lists
  - name: Tags
  - name: Segments
  - name: Custom Properties
  - name: Senders
  - name: Domains
  - name: Templates
  - name: Automations
  - name: Webhooks
  - name: Webforms
  - name: Inbox Tracker
  - name: Account
paths:
  /contacts/resubscribe:
    post:
      tags:
        - Contacts
      summary: Resubscribe Contact
      description: >-
        Re-subscribe a contact who **unsubscribed** and has opted in again, for
        example on your website's account page. Send a record of the reader's
        consent with every call. The values are stored in the contact's activity
        log as your statement; Mailercloud does not verify them.


        If your account has double opt-in turned on for **API and
        integrations**, the reader first gets a confirmation email and is
        re-subscribed when they click it (response `202`). Otherwise the contact
        is re-subscribed at once (`200`).


        Bounced, spam-complaint, abuse and suppressed contacts can never be
        re-subscribed (`409`).


        Only re-subscribe readers who gave their consent again. Limits: 60 calls
        per minute and 5,000 per day per account.
      operationId: resubscribe-contact
      parameters:
        - name: Content-Type
          in: header
          required: true
          description: Request body type
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - consent_source
                - consent_at
              properties:
                email:
                  type: string
                  description: >-
                    Email of the contact. Send `email` or `contact_id`, not
                    both.
                  maxLength: 200
                contact_id:
                  type: string
                  description: Id of the contact. Send `email` or `contact_id`, not both.
                list_id:
                  type: string
                  description: >-
                    Optional. A list of your account to add the contact to. A
                    contact with no list is placed in it; otherwise it is added
                    as an extra list only if your account allows a contact in
                    more than one list (else `422`). With double opt-in the list
                    is added when the reader confirms.
                consent_source:
                  type: string
                  description: >-
                    Where the reader opted in again, e.g. `account settings
                    page`. 1–100 letters, numbers, spaces and . , : - _ / @ +
                  maxLength: 100
                consent_at:
                  type: string
                  format: date-time
                  description: >-
                    When the reader opted in again (RFC 3339, e.g.
                    `2026-11-09T11:04:24+05:30`). Not in the future, within the
                    last 90 days, and after the contact unsubscribed.
                consent_ip:
                  type: string
                  description: >-
                    Optional. The reader's IP address when they opted in (IPv4
                    or IPv6), as recorded by you.
                consent_text:
                  type: string
                  description: >-
                    Optional. The wording the reader agreed to. Up to 500
                    letters, numbers, spaces and . , : - _ / @ +
                  maxLength: 500
            examples:
              By email:
                value:
                  email: reader@example.com
                  consent_source: account settings page
                  consent_at: '2026-11-09T11:04:24+05:30'
                  consent_ip: 203.0.113.5
                  consent_text: Turn the daily digest back on
              By contact id, adding a list:
                value:
                  contact_id: SEZwEKKaaH
                  list_id: HHEaKf
                  consent_source: website signup form
                  consent_at: '2026-11-09T11:04:24+05:30'
      responses:
        '200':
          description: Re-subscribed, or already subscribed
          content:
            application/json:
              schema:
                type: object
                properties:
                  contact_id:
                    type: string
                  status:
                    type: string
                  resubscribed_at:
                    type: string
                    format: date-time
                  consent_recorded:
                    type: boolean
                  changed:
                    type: boolean
                    description: false when the contact was already subscribed
              examples:
                Re-subscribed:
                  value:
                    contact_id: SEZwEKKaaH
                    status: subscribed
                    resubscribed_at: '2026-11-12T10:15:02Z'
                    consent_recorded: true
                Already subscribed:
                  value:
                    contact_id: SEZwEKKaaH
                    status: subscribed
                    changed: false
        '202':
          description: >-
            Confirmation email sent (double opt-in on). The contact is
            re-subscribed when the reader clicks the link. Repeating the call
            within 24 hours sends no second email.
          content:
            application/json:
              schema:
                type: object
                properties:
                  contact_id:
                    type: string
                  status:
                    type: string
                  message:
                    type: string
              examples:
                Pending confirmation:
                  value:
                    contact_id: SEZwEKKaaH
                    status: pending_confirmation
                    message: >-
                      A confirmation email has been sent. The contact will be
                      re-subscribed once confirmed.
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
                x-examples:
                  Example 1:
                    errors:
                      - field: ''
                        message: Authorization failed
              examples:
                Example-1:
                  value:
                    errors:
                      - field: ''
                        message: Authorization failed
        '403':
          description: Contact quota reached
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        code:
                          type: string
                        current_status:
                          type: string
                        message:
                          type: string
              examples:
                Quota exceeded:
                  value:
                    errors:
                      - code: quota_exceeded
                        message: Contact limit reached for your plan.
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        code:
                          type: string
                        current_status:
                          type: string
                        message:
                          type: string
              examples:
                Not found:
                  value:
                    errors:
                      - code: contact_not_found
                        message: Contact not found.
        '409':
          description: >-
            The contact cannot be re-subscribed (bounced, complaint, abuse or
            suppressed)
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        code:
                          type: string
                        current_status:
                          type: string
                        message:
                          type: string
              examples:
                Bounced:
                  value:
                    errors:
                      - code: contact_not_resubscribable
                        message: This contact cannot be re-subscribed.
                        current_status: bounced
        '422':
          description: Invalid request or consent
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        code:
                          type: string
                        current_status:
                          type: string
                        message:
                          type: string
              examples:
                Consent date:
                  value:
                    errors:
                      - field: consent_at
                        code: invalid
                        message: consent_at must be after the contact unsubscribed.
                Missing consent:
                  value:
                    errors:
                      - field: consent_source
                        code: invalid
                        message: >-
                          consent_source must be 1-100 letters, numbers or basic
                          punctuation.
                List not allowed:
                  value:
                    errors:
                      - field: list_id
                        code: invalid
                        message: >-
                          This contact is in another list, and this account does
                          not allow a contact in more than one list.
        '429':
          description: >-
            Too many re-subscribe calls (60 per minute, 5,000 per day per
            account)
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        code:
                          type: string
                        current_status:
                          type: string
                        message:
                          type: string
              examples:
                Rate limited:
                  value:
                    errors:
                      - code: rate_limited
                        message: Too many requests. Retry after a minute.
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Your Mailercloud API key (plain text, no Bearer prefix). Create keys in
        Settings → API.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.