<!-- Markdown copy of https://docs.creatorain.com/partner-api/reference/operations/acknowledgepartnerreservation/ -->
# The merchant saw this booking

POST

/reservations/{reservation\_id}/acknowledge

Select code sampleFetchcURL

```js
const url = 'https://data.creatorain.com/partner/v1/reservations/7f1c2b64-6f6a-4a7d-9a0e-1c2b647f1c2b/acknowledge';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"kind":"forwarded_to_manager"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```sh
curl --request POST \
  --url https://data.creatorain.com/partner/v1/reservations/7f1c2b64-6f6a-4a7d-9a0e-1c2b647f1c2b/acknowledge \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{ "kind": "forwarded_to_manager" }'
```

-   Production (live stores; a live key is issued per partner)
-   Sandbox, for integration testing (test keys, test stores)

Called when the merchant presses confirm in YOUR UI. Tell us which action it was: `forwarded_to_manager` (they passed it to whoever is on the floor) or `acknowledged_self` (they dealt with it themselves).

This is the one thing in the whole chain we cannot see. We know the notice went out, we know the creator confirmed, and we find out afterwards whether anybody arrived. Whether a person at the restaurant actually read it is yours to tell us, and it is the link that turns out to have been broken when a visit goes wrong.

IDEMPOTENT PER `(reservation_id, kind)`. A retry answers `200` with the instant we ALREADY HOLD, never a new one: that instant is when the merchant pressed the button, and a lost response must not be able to move it. The two kinds are independent, so a booking that was forwarded AND acknowledged carries both, each with its own time.

PARTNER KEY ONLY. A per-store dashboard token cannot write here, which is the reason it stays a browser-safe credential: send the acknowledgement from your own backend.

## Authorizations

-   **[partnerApiKey](/partner-api/reference/#partnerapikey)**

## Parameters

### Path Parameters

**reservation\_id**

required

string format: uuid

OUR id for the booking, as it reached you in a `reservation.*` webhook or in a reservations list. A uuid: anything else is refused with `400 validation_error` naming `reservation_id`, which tells you to look at your code rather than at your data.

#### Example

```
7f1c2b64-6f6a-4a7d-9a0e-1c2b647f1c2b
```

## Request Bodyrequired

Media typeapplication/json

What the merchant did. Two values and no third: this is the whole product question, and a value we accepted but had no meaning for would leave both sides believing something had been recorded.

object

**kind**

required

`forwarded_to_manager`: they passed the booking to whoever is on the floor. `acknowledged_self`: they dealt with it themselves.

string

Allowed values: forwarded\_to\_manager acknowledged\_self

### Examples

Exampleforwarded

Passed to the manager on duty

```json
{
  "kind": "forwarded_to_manager"
}
```

## Responses

### 200

Recorded. The same body on the first call and on every repeat.

Media typeapplication/json

What we now hold. On a repeat this is the FIRST acknowledgement’s time, not the retry’s. No personal data: an acknowledgement says a booking was seen, not who is coming.

object

**reservation\_id**

required

string format: uuid

**kind**

required

string

Allowed values: forwarded\_to\_manager acknowledged\_self

**acknowledged\_at**

required

RFC 3339 with the STORE’S offset, because “the manager saw this at 4 pm” only means anything at the restaurant.

string

nullable

**timezone**

required

string

nullable

#### Example

```json
{
  "kind": "forwarded_to_manager",
  "acknowledged_at": "2026-09-11T16:04:12-07:00",
  "timezone": "America/Los_Angeles"
}
```

### 400

`validation_error`. `field` names the offending parameter.

Media typeapplication/json

object

**error**

required

object

**code**

required

The stable value to branch on.

string

Allowed values: unauthorized forbidden\_ip rate\_limited validation\_error location\_already\_exists location\_not\_found location\_terminated reservation\_not\_found conflict internal\_error

**message**

required

A human sentence. Copy, not contract; it may be reworded.

string

**field**

The request field at fault, dotted for a nested one (`plan.term_months`).

string

#### Example

```json
{
  "error": {
    "code": "unauthorized"
  }
}
```

### 401

`unauthorized`. A missing, malformed, unknown or revoked key; or an invalid, expired or wrong-store dashboard token. One answer for every case on purpose: the holder of a bad credential learns nothing from the difference.

Media typeapplication/json

object

**error**

required

object

**code**

required

The stable value to branch on.

string

Allowed values: unauthorized forbidden\_ip rate\_limited validation\_error location\_already\_exists location\_not\_found location\_terminated reservation\_not\_found conflict internal\_error

**message**

required

A human sentence. Copy, not contract; it may be reworded.

string

**field**

The request field at fault, dotted for a nested one (`plan.term_months`).

string

#### Example

```json
{
  "error": {
    "code": "unauthorized"
  }
}
```

### 404

`reservation_not_found`. No store enrolled under this key holds that booking. One answer whether the booking belongs to another partner, to another account, or to nobody: a caller who could tell those apart could count our bookings by walking ids.

Media typeapplication/json

object

**error**

required

object

**code**

required

The stable value to branch on.

string

Allowed values: unauthorized forbidden\_ip rate\_limited validation\_error location\_already\_exists location\_not\_found location\_terminated reservation\_not\_found conflict internal\_error

**message**

required

A human sentence. Copy, not contract; it may be reworded.

string

**field**

The request field at fault, dotted for a nested one (`plan.term_months`).

string

#### Example

```json
{
  "error": {
    "code": "unauthorized"
  }
}
```

### 429

`rate_limited`. Over this key’s requests-per-minute ceiling.

Media typeapplication/json

object

**error**

required

object

**code**

required

The stable value to branch on.

string

Allowed values: unauthorized forbidden\_ip rate\_limited validation\_error location\_already\_exists location\_not\_found location\_terminated reservation\_not\_found conflict internal\_error

**message**

required

A human sentence. Copy, not contract; it may be reworded.

string

**field**

The request field at fault, dotted for a nested one (`plan.term_months`).

string

#### Example

```json
{
  "error": {
    "code": "unauthorized"
  }
}
```
