---
title: "Finish a paid booking whose supplier call never landed"
method: POST
path: "/v1/payments/bookings/{bookingPublicId}/complete"
tags: ["payments"]
---

# Finish a paid booking whose supplier call never landed

`POST /v1/payments/bookings/{bookingPublicId}/complete`

## Request

- Base URL: `https://api.getmyhotels.com`
- URL: `https://api.getmyhotels.com/v1/payments/bookings/{bookingPublicId}/complete`
- Auth: none declared

Runs `payment.completePendingBooking`. Call it from the booking screen when a hotel booking reads `pending_payment`: on the payment-first flow the row is only written after the card is charged, so that status is not a customer who failed to pay — it is a customer whose money we took and whose supplier call died in flight. Charge-free by construction: it refuses unless a completed payment transaction already exists for the booking, and it never calls Stripe. Never send one of these bookings to `POST /v1/payments/hotel-checkout-intent` instead — that charges the card a second time for one stay. Public by design, matching the rest of the guest-capable checkout (critical decision #4): the CUID is the access key for guest rows, and a booking owned by an account must match the caller. Idempotent — a booking already confirmed answers 200 with `alreadyDone: true`, and the underlying supplier book is idempotent on the supplier reservation id, so a double tap cannot double-book. A supplier that still refuses is NOT an error here: the response is 200 with `status: "pending_manual"`, ops are paged, and the charge stands — show the customer that their booking is being settled by hand rather than a failure. 400 means the booking is unpaid or in a status nobody is waiting on us to finish.

## Path parameters

- `bookingPublicId` string, required

## Response `200`

Success

- unknown

## Other responses

- `400`: Request validation failed or the router rejected the input
- `404`: Resource not found
- `426`: Reported X-GMH-App-Version is below the supported minimum — the app must update
- `500`: Unexpected server error (opaque; details stay in logs)

---

[API](https://skmtc.dev/getmyhotels/apis/getmyhotels-rest-api.md) · [All operations](https://skmtc.dev/getmyhotels/apis/getmyhotels-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getmyhotels/apis/getmyhotels-rest-api/revisions/cba24a9c13f0?raw)
