---
title: "Update an integration"
description: "Update the shop's integrations: sync signups to Klaviyo, Omnisend, Mailchimp or Shopify customers (with the customer tag), the Omnisend and Mailchimp API keys and Mailchimp audience, the Meta Pixel, Shopify Flow triggers"
url: https://docs.stoqapp.com/v2-reference/account-integrations/update-an-integration/
api: "API v2 reference"
method: PATCH
path: "/account/integrations"
---

# Update an integration

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

Update the shop's integrations: sync signups to Klaviyo, Omnisend, Mailchimp or Shopify customers (with the customer tag), the Omnisend and Mailchimp API keys and Mailchimp audience, the Meta Pixel, Shopify Flow triggers and the SplitOrder app switch. API keys are write only; reads return connected flags.

**Note:** Deep partial: absent fields are unchanged. omnisend.api_key and mailchimp.api_key are never returned by any read; &quot;&quot; or null removes the saved key. A Mailchimp key is checked by fetching the account's audiences and is not saved when Mailchimp refuses it; mailchimp.list_id must be one of those audiences. Klaviyo connects with OAuth from the Integrations page; disconnect with [`POST /account/integrations/:provider/disconnect`](https://docs.stoqapp.com/v2-reference/account-integrations/disconnect-an-integration/). flow_triggers.triggers replaces the stored list. Over MCP or the in-app assistant an API key is refused with code use_key_link and key_url: the merchant enters it in STOQ.

## 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

- `klaviyo` (string): e.g. `string`
- `omnisend` (string): e.g. `string`
- `mailchimp` (string): e.g. `string`
- `shopify` (string): e.g. `string`
- `sync_customers_tag` (string): e.g. `string`
- `meta_pixel` (string): e.g. `string`
- `flow_triggers` (string): e.g. `string`
- `split_order_app` (string): e.g. `string`
- `postscript` (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/integrations" \
  -H "X-Auth-Token: $STOQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "klaviyo": "string",
    "omnisend": "string",
    "mailchimp": "string",
    "shopify": "string",
    "sync_customers_tag": "string",
    "meta_pixel": "string",
    "flow_triggers": "string",
    "split_order_app": "string",
    "postscript": "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
    }
  ]
}
```

