---
title: shops.close | Doing Work API
description: Close the shop for good (owner, on a hosted page, typing the shop name). Everyone loses access, agent connections and webhooks stop, every customer link st
url: https://doingwork.work/docs/reference/shops-close/
---

# shops.close

Close the shop for good (owner, on a hosted page, typing the shop name). Everyone loses access, agent connections and webhooks stop, every customer link stops working, and the payments account only settles what is in flight. Records are kept. The owner can reopen it with shops.reopen for 90 days; after that photos, notes, templates, the price book and saved cards are deleted, and money, tax, signature and job records stay. Offer shops.export before closing. Refused with the blockers from shops.closeCheck while any remain.

|  |  |
|---|---|
| Who | Hosted page only (a person does it in the browser) |
| REST | `POST /v1/shops/close` |
| MCP tool | Not an MCP tool |
| Writes | yes, send an Idempotency-Key |
| Area | [Shop](https://doingwork.work/docs/reference/#shop) |

## When to use it

Close the shop for good (owner, on a hosted page, typing the shop name). Everyone loses access, agent connections and webhooks stop, every customer link stops working, and the payments account only settles what is in flight.

## What to tell the owner

Send the person the link. They finish this step themselves on the page; you never do it for them.

## Input

| Field | Type | Required |
|---|---|---|
| `shop_id` | string (uuid) | yes |
| `confirm_name` | string | yes |

## Example

```http
POST https://doingwork.work/v1/shops/close
content-type: application/json
Idempotency-Key: 3f1c...

{
  "shop_id": "00000000-0000-4000-8000-000000000000",
  "confirm_name": "..."
}
```

## Output

| Field | Type | Always there |
|---|---|---|
| `shop_id` | string (uuid) | yes |
| `status` | string | yes |
| `memberships_ended` | integer | yes |
| `links_ended` | integer | yes |
| `warnings` | array | yes |
| `warnings[].code` | string | yes |
| `warnings[].count` | integer | yes |
| `warnings[].message` | string | yes |
| `warnings[].total_minor` | integer | no |
| `reopen_until` | string (date-time) | yes |

```json
{
  "shop_id": "00000000-0000-4000-8000-000000000000",
  "status": "...",
  "memberships_ended": 1,
  "links_ended": 1,
  "warnings": [
    {
      "code": "...",
      "count": 1,
      "message": "..."
    }
  ],
  "reopen_until": "..."
}
```

## Errors

| Code | Status | What to do |
|---|---|---|
| `invalid_input`, `invalid_token`, `rate_limited` |  | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |
