---
title: "Update Customer Subscriptions"
method: POST
path: "/stores/{storeId}/customer-subscriptions"
tags: ["Customer Subscriptions"]
---

# Update Customer Subscriptions

`POST /stores/{storeId}/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.

## Path parameters

- `storeId` string, required

## Request body

- object
  - `email` CustomerSubscriptionEmailSchema — Email subscription updates
    - `email` string, email, required — Email address
    - `subscriptions` object, required
      - `marketing` object — Email marketing subscription. Email is always auto-confirmed on subscribe.
        - `subscriptionStatus` 'subscribed' | 'unsubscribed', required — Subscription status.
        - `triggerAutomations` boolean — Whether to trigger automations for this subscription change. Defaults to false.
        - `updatedAt` string, date-time — ISO 8601 timestamp. If not provided, defaults to now.
  - `sms` CustomerSubscriptionSmsSchema — SMS subscription updates
    - `phoneNumber` string, required — Phone number in E.164 format (e.g., +12345678900)
    - `subscriptions` object, required
      - `marketing` SubscriptionStatusMarketingSchema — Marketing subscription status
        - `subscriptionStatus` 'subscribed' | 'confirmed' | 'unsubscribed', required — Subscription status. Use `confirmed` if the customer has already completed double opt-in elsewhere and you are recording that fact.
        - `triggerAutomations` boolean — Whether to trigger automations for this subscription change. Defaults to false.
        - `updatedAt` string, date-time — ISO 8601 timestamp. If not provided, defaults to now.
      - `transactional` SubscriptionStatusTransactionalSchema — Transactional subscription status (order tracking)
        - `subscriptionStatus` 'subscribed' | 'unsubscribed', required — Subscription status. Only subscribed and unsubscribed are supported for transactional.
        - `updatedAt` string, date-time — ISO 8601 timestamp. If not provided, defaults to now.

## Response `200`

Success

- CustomerSubscriptionUpdateResponseSchema — Customer subscription update response
  - `message` string, required — Human-readable success message
  - `success` boolean, required — Whether the operation was successful
  - `updatedSubscriptions` object, required — Details of which subscriptions were updated
    - `email` object
      - `marketing` boolean — Whether email marketing was updated
    - `sms` object
      - `marketing` boolean — Whether SMS marketing was updated
      - `transactional` boolean — Whether SMS transactional was updated

## Other responses

- `400` — Bad Request
- `500` — Internal Server Error
- `default` — Error

---

[API](https://skmtc.dev/redoapp/apis/redo-api.md) · [All operations](https://skmtc.dev/redoapp/apis/redo-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/redoapp/redo-api/revisions/119714540a45/schema)
