---
title: "Update the sending"
description: "Update who sends the shop's customer notifications: email and SMS provider, sender name, the merchant's own sending address, store domain in SMS links, Klaviyo marketing consent and the Postscript API key (write only). T"
url: https://docs.stoqapp.com/v2-reference/account-sending/update-the-sending/
api: "API v2 reference"
method: PATCH
path: "/account/sending"
---

# Update the sending

`PATCH https://app.stoqapp.com/api/v2/external/account/sending`

Update who sends the shop's customer notifications: email and SMS provider, sender name, the merchant's own sending address, store domain in SMS links, Klaviyo marketing consent and the Postscript API key (write only). The email font, text sizes and logo size are [`PATCH /account/templates/email_style`](https://docs.stoqapp.com/v2-reference/account-templates/update-email-style/).

**Note:** Deep partial: absent fields are unchanged. Applies to back-in-stock and preorder notifications. use_custom_email_address true needs email_reply_to_address on a domain that is not a free mail provider, and DKIM set up for it ([`POST /account/sending/verify_domain`](https://docs.stoqapp.com/v2-reference/account-sending/verify-domain/)) before mail goes out from it. postscript_api_key is never returned by any read; it is checked with Postscript before anything is saved, and nothing is saved when Postscript refuses it; &quot;&quot; removes it.

## Headers

- `Idempotency-Key` (string): A fresh unique key for every write (a new UUID, say); reuse it only to retry that write. Keys are remembered for 1 hour: the same key and the same request within that hour returns the first result, with `Idempotent-Replayed: true`, without running again; the same key with a different method, path or body is refused (422 `idempotency_key_reused`); a retry while the first is still running gets 409 `idempotency_key_in_progress`. Keys are per store. Server errors and rate limits are not kept, so their retry runs.

## Request body

- `email_provider` (string): e.g. `string`
- `sms_provider` (string): e.g. `string`
- `email_from_name` (string): e.g. `Summer Sneaker Drop`
- `use_custom_email_address` (string): e.g. `string`
- `email_reply_to_address` (string): e.g. `string`
- `sms_custom_domain_enabled` (boolean): e.g. `true`
- `klaviyo_skip_auto_subscribe` (string): e.g. `string`
- `postscript_api_key` (string): e.g. `string`

Rate limit: this call costs 2 points ([rate limits](https://docs.stoqapp.com/docs/rate-limits/)).

## Example request

```sh
curl -X PATCH "https://app.stoqapp.com/api/v2/external/account/sending" \
  -H "X-Auth-Token: $STOQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email_provider": "string",
    "sms_provider": "string",
    "email_from_name": "Summer Sneaker Drop",
    "use_custom_email_address": "string",
    "email_reply_to_address": "string",
    "sms_custom_domain_enabled": true,
    "klaviyo_skip_auto_subscribe": "string",
    "postscript_api_key": "string"
  }'
```

## 200

Success: the updated resource.

## 202

Accepted: async/bulk work was queued. Poll the returned job.

```json
{
  "job_id": "job_a1b2c3",
  "status_url": "/api/v2/external/jobs/job_a1b2c3"
}
```

## 401

Missing or invalid `X-Auth-Token`.

```json
{
  "errors": [
    "Invalid API key"
  ],
  "code": "auth_invalid",
  "details": [
    {
      "code": "auth_invalid",
      "message": "Invalid API key",
      "path": null,
      "value": null,
      "expected": null
    }
  ]
}
```

## 409

An earlier request with the same Idempotency-Key is still running. Wait, then resend the same request with the same key.

```json
{
  "errors": [
    "A request with this Idempotency-Key is still running"
  ],
  "code": "idempotency_key_in_progress",
  "details": [
    {
      "code": "idempotency_key_in_progress",
      "message": "A request with this Idempotency-Key is still running",
      "path": null,
      "value": null,
      "expected": null
    }
  ]
}
```

## 422

The request failed validation.

```json
{
  "errors": [
    "name is required"
  ],
  "code": "validation_failed",
  "details": [
    {
      "code": "validation_failed",
      "message": "name is required",
      "path": null,
      "value": null,
      "expected": null
    }
  ]
}
```

## 429

Rate limited: cost-weighted per token (read 1, write 2; 360 points / 60s). Check `Retry-After`.

```json
{
  "errors": [
    "Rate limit exceeded"
  ],
  "code": "rate_limited",
  "details": [
    {
      "code": "rate_limited",
      "message": "Rate limit exceeded",
      "path": null,
      "value": null,
      "expected": null
    }
  ]
}
```

