GetMyHotels Support API
The support API from GetMyHotels — 4 operation(s) for support.
The support API from GetMyHotels — 4 operation(s) for support.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/getmyhotels-com:getmyhotels-com-support-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: GetMyHotels REST Support API
version: 1.0.0
description: REST surface for the native GetMyHotels apps. Every route is a thin transport over the shared tRPC routers — inputs are validated with the same Zod schemas the web client uses, and responses are returned verbatim. Authentication uses Better Auth bearer session tokens issued by the /api/auth/* endpoints (not part of this spec). Native clients send X-GMH-App-Version and X-GMH-Platform on every request; versions below the configured floor receive a typed 426 UpgradeRequiredError.
servers:
- url: https://api.getmyhotels.com
description: Production API
tags:
- name: Support
paths:
/v1/support/tickets:
post:
tags:
- Support
summary: Create a support ticket
description: Runs `support.createTicket` for the signed-in user. `priority` is optional and defaults to `medium`; customer clients should omit it. `message` becomes the first reply on the thread.
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
subject:
type: string
minLength: 1
maxLength: 500
message:
type: string
minLength: 1
maxLength: 5000
bookingType:
type: string
enum:
- hotel
- flight
bookingPublicId:
type: string
minLength: 1
maxLength: 36
priority:
type: string
enum:
- low
- medium
- high
- urgent
default: medium
contactEmail:
type: string
maxLength: 255
format: email
contactPhone:
anyOf:
- type: string
maxLength: 80
- type: string
minLength: 0
maxLength: 0
channel:
type: string
enum:
- web
- mobile
- email
- phone
- chat
- social
category:
type: string
enum:
- booking
- payment
- refund
- account
- technical
- complaint
- suggestion
- other
required:
- subject
responses:
'200':
description: Success
content:
application/json:
schema:
description: Verbatim JSON output of the `support.createTicket` tRPC procedure. Response shapes are intentionally not modeled in this spec; the native client types them by hand.
'400':
description: Request validation failed or the router rejected the input
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: Missing or invalid bearer session token
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'426':
description: Reported X-GMH-App-Version is below the supported minimum — the app must update
content:
application/json:
schema:
$ref: '#/components/schemas/UpgradeRequiredError'
'500':
description: Unexpected server error (opaque; details stay in logs)
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
operationId: postV1SupportTickets
x-operation-id-source: derived
get:
tags:
- Support
summary: List my support tickets
description: Runs `support.listTickets` for the signed-in user.
security:
- bearerAuth: []
parameters:
- schema:
type: integer
minimum: 1
default: 1
example: 1
required: false
name: page
in: query
- schema:
type: integer
minimum: 1
maximum: 100
default: 20
example: 20
required: false
name: limit
in: query
- schema:
type: string
enum:
- open
- in_progress
- resolved
- closed
required: false
name: status
in: query
- schema:
type: string
enum:
- all
- low
- medium
- high
- urgent
default: all
required: false
name: priority
in: query
- schema:
type: string
maxLength: 255
required: false
name: search
in: query
- schema:
type: string
description: Comma-separated ticket statuses. A client tab is a SET (Open = open,in_progress; Resolved = resolved,closed), which the single-valued `status` cannot express.
example: open,in_progress
required: false
description: Comma-separated ticket statuses. A client tab is a SET (Open = open,in_progress; Resolved = resolved,closed), which the single-valued `status` cannot express.
name: statuses
in: query
responses:
'200':
description: Success
content:
application/json:
schema:
description: Verbatim JSON output of the `support.listTickets` tRPC procedure. Response shapes are intentionally not modeled in this spec; the native client types them by hand.
'400':
description: Request validation failed or the router rejected the input
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: Missing or invalid bearer session token
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'426':
description: Reported X-GMH-App-Version is below the supported minimum — the app must update
content:
application/json:
schema:
$ref: '#/components/schemas/UpgradeRequiredError'
'500':
description: Unexpected server error (opaque; details stay in logs)
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
operationId: getV1SupportTickets
x-operation-id-source: derived
/v1/support/guest-tickets:
post:
tags:
- Support
summary: Contact support without an account
description: 'Runs `support.guestCreateTicket` (public). For a signed-out guest — typically one who booked without an account (critical decision #4). Stores the ticket against `email` and returns only `{ publicId }`: the link to read and reply to the thread is emailed to that address, so opening it proves the guest owns the inbox. The response is the same whether or not an account uses that email. Signed-in callers get 400 and must use `POST /v1/support/tickets`. Rate limited to 5 tickets per 10 minutes per IP and 3 per email address per hour (429). Native callers send no Turnstile token. `locale` picks the email language and falls back to English.'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
maxLength: 255
format: email
subject:
type: string
minLength: 1
maxLength: 500
message:
type: string
minLength: 1
maxLength: 5000
category:
type: string
enum:
- booking
- payment
- refund
- account
- technical
- complaint
- suggestion
- other
locale:
type: string
maxLength: 10
required:
- email
- subject
- message
responses:
'200':
description: Success
content:
application/json:
schema:
description: Verbatim JSON output of the `support.guestCreateTicket` tRPC procedure. Response shapes are intentionally not modeled in this spec; the native client types them by hand.
'400':
description: Request validation failed or the router rejected the input
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'426':
description: Reported X-GMH-App-Version is below the supported minimum — the app must update
content:
application/json:
schema:
$ref: '#/components/schemas/UpgradeRequiredError'
'429':
description: Rate limit reached for this caller. Show the message and let the customer retry later.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'500':
description: Unexpected server error (opaque; details stay in logs)
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
operationId: postV1SupportGuestTickets
x-operation-id-source: derived
/v1/support/tickets/{publicId}:
get:
tags:
- Support
summary: Support ticket detail
description: Runs `support.getTicket`; owner-only.
security:
- bearerAuth: []
parameters:
- schema:
type: string
minLength: 1
maxLength: 36
required: true
name: publicId
in: path
responses:
'200':
description: Success
content:
application/json:
schema:
description: Verbatim JSON output of the `support.getTicket` tRPC procedure. Response shapes are intentionally not modeled in this spec; the native client types them by hand.
'400':
description: Request validation failed or the router rejected the input
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: Missing or invalid bearer session token
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'426':
description: Reported X-GMH-App-Version is below the supported minimum — the app must update
content:
application/json:
schema:
$ref: '#/components/schemas/UpgradeRequiredError'
'500':
description: Unexpected server error (opaque; details stay in logs)
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
operationId: getV1SupportTicketsByPublicId
x-operation-id-source: derived
/v1/support/tickets/{publicId}/comments:
post:
tags:
- Support
summary: Reply to a support ticket
description: Runs `support.addComment`; owner-only.
security:
- bearerAuth: []
parameters:
- schema:
type: string
minLength: 1
maxLength: 36
required: true
name: publicId
in: path
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
minLength: 1
maxLength: 5000
required:
- content
responses:
'200':
description: Success
content:
application/json:
schema:
description: Verbatim JSON output of the `support.addComment` tRPC procedure. Response shapes are intentionally not modeled in this spec; the native client types them by hand.
'400':
description: Request validation failed or the router rejected the input
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: Missing or invalid bearer session token
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'426':
description: Reported X-GMH-App-Version is below the supported minimum — the app must update
content:
application/json:
schema:
$ref: '#/components/schemas/UpgradeRequiredError'
'500':
description: Unexpected server error (opaque; details stay in logs)
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
operationId: postV1SupportTicketsByPublicIdComments
x-operation-id-source: derived
components:
schemas:
UpgradeRequiredError:
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- UPGRADE_REQUIRED
message:
type: string
minVersion:
type: string
example: 1.2.0
platform:
type:
- string
- 'null'
required:
- code
- message
- minVersion
- platform
required:
- error
ApiError:
type: object
properties:
error:
type: object
properties:
code:
type: string
example: NOT_FOUND
message:
type: string
example: Booking not found
domainCode:
type: string
example: NON_REFUNDABLE_CONSENT_REQUIRED
issues:
type: array
items:
type: object
properties:
path:
type: string
message:
type: string
required:
- path
- message
required:
- code
- message
required:
- error
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Better Auth session token. Obtain it from the native /api/auth/* endpoints (Better Auth bearer plugin — out of scope for this spec, see #922).'
x-provenance:
method: harvested
publisher: GetMyHotels
source: https://api.getmyhotels.com/v1/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)