---
title: "Create a theme integration"
description: "Request a theme integration, as the page editors' Request setup button does: Quick Buy (the 'Notify me'/'Preorder' button inside the theme's quick add popup) on the home, collection or search page, or Featured products ("
url: https://docs.stoqapp.com/v2-reference/account-theme-integrations/create-a-theme-integration/
api: "API v2 reference"
method: POST
path: "/account/theme_integrations"
---

# Create a theme integration

`POST https://app.stoqapp.com/api/v2/external/account/theme_integrations`

Request a theme integration, as the page editors' Request setup button does: Quick Buy (the 'Notify me'/'Preorder' button inside the theme's quick add popup) on the home, collection or search page, or Featured products (the button on featured product sections) on the home page. Our team sets it up for the theme, usually within 12-24 hours, and tells the merchant by email or chat. Paid plans only.

**Note:** type is quick_buy or featured_product. page is home, collection or search for quick_buy and home for featured_product. Returns the new row with enabled null; read it back with [`GET /account/theme_integrations/:id`](https://docs.stoqapp.com/v2-reference/account-theme-integrations/retrieve-a-theme-integration/). A page that already has one is 409.

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

- `type` (string, required): e.g. `quick_buy` One of: `quick_buy`, `featured_product`.
- `page` (string, required): e.g. `collection` One of: `collection`, `home`, `search`.

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

## Example request

```sh
curl -X POST "https://app.stoqapp.com/api/v2/external/account/theme_integrations" \
  -H "X-Auth-Token: $STOQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "quick_buy",
    "page": "collection"
  }'
```

## 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
    }
  ]
}
```

