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

# Updating a Subscriber

> This endpoint updates a subscriber.

## Request URL

```http theme={null}
PUT https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}
```

<Tip>
  ### FAQs

  **If I add tags to an existing subscriber, does that add the tags to existing, or replace existing?**

  * The tags are added to any tags already applied, not replaced.

  **Can I update custom subscriber data for a subscriber?**

  * Yes, the paramaters are listed below.
</Tip>


## OpenAPI

````yaml PUT /api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}
openapi: 3.1.0
info:
  title: momoGood Messaging API v2
  description: >-
    The platform management API for momoGood Messaging (formerly the Tatango v2
    API). Manage lists, subscribers, custom fields, tags, webhooks, shortcodes,
    MOMT reports, and scheduled broadcasts from a single REST surface.
  version: 2.0.0
servers:
  - url: https://app.tatango.com
security:
  - basicAuth: []
paths:
  /api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}:
    put:
      tags:
        - Subscribers
      summary: Updating a Subscriber
      description: This endpoint updates a subscriber.
      parameters:
        - name: ID
          in: path
          description: ID of the list
          required: true
          schema:
            type: integer
        - name: SUBSCRIBER_ID
          in: path
          description: ID of the subscriber (phone number)
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSubscriberRequest'
            example:
              subscriber:
                phone_number: '2141234567'
                first_name: John
                last_name: Doe
                email: john.doe@example.com
                birthdate: '19900101'
                zip_code: '75201'
                gender: Male
                tags: vip customer, card holder, daily alerts
                custom_field_key: custom_value
      responses:
        '200':
          description: Subscriber updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateSubscriberResponse'
              example:
                status: Subscriber updated
                subscriber:
                  phone_number: '2141234567'
                  cleaned_at: null
                  subscribed_at: '2025-06-18T15:36:07Z'
                  opted_out_at: null
                  opt_in_method: api
                  keyword_name: null
                  carrier: 383
                  carrier_name: Verizon Wireless
                  global_carrier_id: '12345'
                  global_carrier_name: Verizon
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: >-
            curl
            "https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>"
            -d
            '{"subscriber":{"phone_number":"2141234567","first_name":"John","last_name":"Doe"}}'
            -X PUT \
              -H "Accept: application/json" \
              -H "Content-Type: application/json" \
              -u emailaddress@mydomain.com:my_api_key \
              -H "Host: example.org" \
              -H "Cookie: "
        - lang: Ruby
          label: Ruby
          source: >-
            require 'net/http'

            require 'uri'


            uri =
            URI.parse('https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>')

            http = Net::HTTP.new(uri.host, uri.port)

            request = Net::HTTP::Put.new(uri.request_url)

            request.basic_auth("emailaddress@mydomain.com", "my_api_key")

            request.body =
            {"subscriber":{"phone_number":"2141234567","first_name":"John","last_name":"Doe"}}.to_json

            response = http.request(request)
        - lang: JavaScript
          label: JavaScript
          source: >-
            var request = new XMLHttpRequest();

            request.open('PUT',
            'https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>',
            false);

            request.setRequestHeader('Content-Type', 'application/json');

            request.setRequestHeader('Authorization', 'Basic ' +
            btoa('emailaddress@mydomain.com:my_api_key'));

            var data = JSON.stringify({ subscriber: { phone_number:
            '2141234567', first_name: 'John', last_name: 'Doe' } });

            request.send(data);
components:
  schemas:
    UpdateSubscriberRequest:
      type: object
      properties:
        subscriber:
          type: object
          properties:
            phone_number:
              type: string
              description: The wireless phone number of the subscriber
              example: '2141234567'
            first_name:
              type: string
              description: First name - char(50)
              example: John
            last_name:
              type: string
              description: Last name - char(50)
              example: Doe
            email:
              type: string
              description: Email - char(50)
              example: john.doe@example.com
            birthdate:
              type: string
              description: Birthdate - int(6)
              example: '19900101'
            zip_code:
              type: string
              description: ZIP code - char(6)
              example: '75201'
            gender:
              type: string
              description: Gender - char('Male' or 'Female')
              enum:
                - Male
                - Female
              example: Male
            tags:
              type: string
              description: >-
                List of tags, comma separated, for example: 'vip customer, card
                holder, daily alerts'
              example: vip customer, card holder, daily alerts
            custom_field_key:
              type: string
              description: Custom data value
              example: custom_value
          required:
            - phone_number
      required:
        - subscriber
    UpdateSubscriberResponse:
      type: object
      properties:
        status:
          type: string
          example: Subscriber updated
        subscriber:
          $ref: '#/components/schemas/Subscriber'
      required:
        - status
        - subscriber
    Subscriber:
      type: object
      properties:
        phone_number:
          type: string
          description: The wireless phone number of the subscriber
          example: '2141234567'
        first_name:
          type: string
          description: First name of the subscriber
          example: John
        last_name:
          type: string
          description: Last name of the subscriber
          example: Doe
        email:
          type: string
          description: Email address of the subscriber
          example: john.doe@example.com
        birthdate:
          type: string
          description: Birthdate of the subscriber
          example: '19900101'
        zip_code:
          type: string
          description: ZIP code of the subscriber
          example: '75201'
        gender:
          type: string
          description: Gender of the subscriber
          example: Male
        cleaned_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Date/time of automatic unsubscription (if applicable)
        subscribed_at:
          type: string
          format: date-time
          description: Date subscriber first subscribed to this list
          example: '2025-06-18T15:36:07Z'
        opted_out_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Date subscriber last unsubscribed from this list
        opt_in_method:
          type: string
          description: Original opt-in method used
          example: api
        keyword_name:
          type:
            - string
            - 'null'
          description: Keyword used for opt-in (if applicable)
        carrier:
          type: integer
          description: Wireless carrier ID
          example: 383
        carrier_name:
          type: string
          description: Wireless carrier name
          example: Verizon Wireless
        global_carrier_id:
          type: string
          description: Global wireless carrier ID
          example: '12345'
        global_carrier_name:
          type: string
          description: Global wireless carrier name
          example: Verizon
        tags:
          type: array
          items:
            type: string
          description: List of tags associated with the subscriber
          example:
            - vip
            - customer
        total_messages_received:
          type: integer
          description: >-
            The total amount of mass messages this specific subscriber has
            received over their lifetime from this specific list
          example: 15
      required:
        - phone_number
        - subscribed_at
        - opt_in_method
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        The momoGood Messaging API v2 authenticates requests by validating an
        API key passed via HTTP Basic Authentication. Use your login email as
        the username and your API key as the password.

````