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

# Update Customer Subscriptions

> Update customer subscription status for SMS and email marketing and transactional messages. If the customer with that phone number or email does not exist, it will be created. Requires the [`customers_write`](/docs/api-reference/scopes) scope.



## OpenAPI

````yaml /api-schema/openapi.yaml post /stores/{storeId}/customer-subscriptions
openapi: 3.1.0
info:
  contact:
    email: engineering-admin@getredo.com
    name: Redo Engineering
  description: |
    ## Endpoints

    Endpoints are authenticated using the Bearer authorization scheme, using the
    REDO_API_SECRET.

    ```txt
    GET /v2.2/resource HTTP/1.1
    Authorization: Bearer 77bb7598b7a972475cc7c7e171ec33af
    Host: api.getredo.com
    ```

    ## Webhooks

    Webhooks are authenticated using the Bearer authorization scheme, using
    a secret supplied by the subscriber.

    ```txt
    POST /events HTTP/1.1
    Authorization: Bearer subscriberauth123
    Host: subscriber.example.com
    ```

    Webhook events are delivered in order for each individual subject (e.g.
    return).

    If the response is not a 2xx status code, the event will be retried multiple
    times before discarding it.
  title: Redo API
  version: 2.2.1
servers:
  - url: https://api.getredo.com/v2.2
security: []
tags:
  - name: Checkout Buttons
  - name: Coverage Info
  - name: Coverage Products
  - name: Custom Events
  - name: Customer Portal
  - name: Customer Subscriptions
  - name: Customers
  - name: Inbound Shipments
  - name: Inventory Items
  - name: Inventory Levels
  - name: Invoices
  - name: Merchant Admin
  - name: Orders
  - name: Products
  - name: Returns
  - name: Storefront
  - name: Webhooks
paths:
  /stores/{storeId}/customer-subscriptions:
    summary: Customer subscriptions
    description: >-
      Update customer subscription preferences for marketing and transactional
      messages.
    post:
      tags:
        - Customer Subscriptions
      summary: Update Customer Subscriptions
      description: >-
        Update customer subscription status for SMS and email marketing and
        transactional messages. If the customer with that phone number or email
        does not exist, it will be created. Requires the
        [`customers_write`](/docs/api-reference/scopes) scope.
      operationId: Customer subscriptions update
      parameters:
        - $ref: '#/components/parameters/store-id.param'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                email:
                  $ref: '#/components/schemas/customer-subscription-email.schema'
                sms:
                  $ref: '#/components/schemas/customer-subscription-sms.schema'
              type: object
            examples:
              full_example:
                summary: All channels and subscription types
                value:
                  sms:
                    phoneNumber: '+15550000000'
                    subscriptions:
                      marketing:
                        subscriptionStatus: subscribed
                        triggerAutomations: true
                        updatedAt: '2026-01-15T10:30:00Z'
                      transactional:
                        subscriptionStatus: subscribed
                        updatedAt: '2026-01-15T10:30:00Z'
                  email:
                    email: jane.doe@example.com
                    subscriptions:
                      marketing:
                        subscriptionStatus: subscribed
                        triggerAutomations: true
                        updatedAt: '2026-01-15T10:30:00Z'
              sms_only:
                summary: SMS marketing and transactional
                value:
                  sms:
                    phoneNumber: '+15550000000'
                    subscriptions:
                      marketing:
                        subscriptionStatus: subscribed
                      transactional:
                        subscriptionStatus: subscribed
              email_only:
                summary: Email marketing only
                value:
                  email:
                    email: jane.doe@example.com
                    subscriptions:
                      marketing:
                        subscriptionStatus: unsubscribed
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/customer-subscription-update-response.schema
              examples:
                full_example:
                  summary: All channels updated
                  value:
                    success: true
                    message: Customer subscriptions updated successfully
                    updatedSubscriptions:
                      sms:
                        marketing: true
                        transactional: true
                      email:
                        marketing: true
                sms_only:
                  summary: SMS only updated
                  value:
                    success: true
                    message: Customer subscriptions updated successfully
                    updatedSubscriptions:
                      sms:
                        marketing: true
          description: Success
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/error.schema'
          description: Bad Request
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/error.schema'
          description: Internal Server Error
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/error.schema'
          description: Error
      security:
        - Bearer: []
components:
  parameters:
    store-id.param:
      description: Store ID
      in: path
      name: storeId
      required: true
      schema:
        example: 64e5a8a1af49a89df37e4ee7
        type: string
  schemas:
    customer-subscription-email.schema:
      description: Email subscription updates
      properties:
        email:
          description: Email address
          format: email
          type: string
        subscriptions:
          properties:
            marketing:
              description: >-
                Email marketing subscription. Email is always auto-confirmed on
                subscribe.
              properties:
                subscriptionStatus:
                  description: Subscription status.
                  enum:
                    - subscribed
                    - unsubscribed
                  type: string
                triggerAutomations:
                  default: false
                  description: >-
                    Whether to trigger automations for this subscription change.
                    Defaults to false.
                  type: boolean
                updatedAt:
                  description: ISO 8601 timestamp. If not provided, defaults to now.
                  format: date-time
                  type: string
              required:
                - subscriptionStatus
              type: object
          type: object
      required:
        - email
        - subscriptions
      type: object
    customer-subscription-sms.schema:
      description: SMS subscription updates
      properties:
        phoneNumber:
          description: Phone number in E.164 format (e.g., +12345678900)
          type: string
        subscriptions:
          properties:
            marketing:
              $ref: '#/components/schemas/subscription-status-marketing.schema'
            transactional:
              $ref: '#/components/schemas/subscription-status-transactional.schema'
          type: object
      required:
        - phoneNumber
        - subscriptions
      type: object
    customer-subscription-update-response.schema:
      description: Customer subscription update response
      properties:
        message:
          description: Human-readable success message
          type: string
        success:
          description: Whether the operation was successful
          type: boolean
        updatedSubscriptions:
          description: Details of which subscriptions were updated
          properties:
            email:
              properties:
                marketing:
                  description: Whether email marketing was updated
                  type: boolean
              type: object
            sms:
              properties:
                marketing:
                  description: Whether SMS marketing was updated
                  type: boolean
                transactional:
                  description: Whether SMS transactional was updated
                  type: boolean
              type: object
          type: object
      required:
        - success
        - message
        - updatedSubscriptions
      type: object
    error.schema:
      description: >-
        Problem details. See [RFC 7807 Section
        3](https://datatracker.ietf.org/doc/html/rfc7807#section-3).
      properties:
        detail:
          description: Human-readable description of the problem.
          title: Detail
          type: string
        instance:
          description: A URI reference that identifies this problem.
          format: uri-reference
          type: string
        title:
          description: Human-readable summary of the problem type.
          title: Title
          type: string
        type:
          default: about:blank
          description: A URI reference that identifies the problem type.
          format: uri-reference
          type: string
      title: Problem details
      type: object
    subscription-status-marketing.schema:
      description: Marketing subscription status
      properties:
        subscriptionStatus:
          description: >-
            Subscription status. Use `confirmed` if the customer has already
            completed double opt-in elsewhere and you are recording that fact.
          enum:
            - subscribed
            - confirmed
            - unsubscribed
          type: string
        triggerAutomations:
          default: false
          description: >-
            Whether to trigger automations for this subscription change.
            Defaults to false.
          type: boolean
        updatedAt:
          description: ISO 8601 timestamp. If not provided, defaults to now.
          format: date-time
          type: string
      required:
        - subscriptionStatus
      title: Subscription Status Marketing
      type: object
    subscription-status-transactional.schema:
      description: Transactional subscription status (order tracking)
      properties:
        subscriptionStatus:
          description: >-
            Subscription status. Only subscribed and unsubscribed are supported
            for transactional.
          enum:
            - subscribed
            - unsubscribed
          type: string
        updatedAt:
          description: ISO 8601 timestamp. If not provided, defaults to now.
          format: date-time
          type: string
      required:
        - subscriptionStatus
      title: Subscription Status Transactional
      type: object
  securitySchemes:
    Bearer:
      scheme: bearer
      type: http

````