The requests endpoint is the bridge from a public inquiry form on your website into go~mus inquiry handling. School classes asking for a guided tour, travel groups with a preferred date, senior groups with special needs - anything that gets advised and confirmed manually in the back office typically starts here.
Unlike tickets, events and tours, requests are not a sales endpoint. A request is not a booking - it kicks off a human workflow.
Full endpoint and schema reference: Swagger.
Endpoints at a glance
| Endpoint | Action | Auth |
|---|---|---|
POST /api/v4/requests | Create a request | API user with write access to requests |
There is no GET / PUT / DELETE endpoint for requests. Requests are only created; everything else happens in the go~mus back office.
Lifecycle
Website form
│
▼
POST /api/v4/requests
│
▼
┌────────────┐
│ pending │ ─── customer created/linked, address attached
└─────┬──────┘
│
▼
┌────────────┐
│ registered │ ─── confirmation email to customer (unless skip_confirmation_email)
└─────┬──────┘
│
▼
manual in back office: confirm, adjust, convert to booking, decline
Anatomy of a request
Top-level fields:
participants(integer) - number of participants in the groupcompanions(integer) - accompanying persons (teachers, supervisors)date(YYYY-MM-DD) - requested visit date (required by model validation)notes(string) - free-text notes, special requirementspayment_mode(id or name) - payment mode (e.g. "Rechnung", "Bar")language(id or name) - preferred tour languageage_group(id or name) - age groupgrade(id or name) - school gradeproposal_category(id or name) - proposal categorycategory(id or name) - customer category / price target audience (e.g. "Schule")skip_confirmation_email(boolean, defaultfalse) - suppress the confirmation emailitems(array, required, at least one entry) - requested tourscustomer(object, optional) - customer data
Entry in the items array:
tour_id(integer, required) - product id of the requested tourtime(HH:MM) - requested start time
Customer object:
name,surname,email,phone,mobilesalutation,title- by name or id, see Lookupsstreet,zip,city,state,countrycategory,language- by name or id
Common tasks
Create a request
curl -X POST "https://demo.gomus.de/api/v4/requests" \
-H "Authorization: Bearer YOUR_API_USER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"request": {
"participants": 15,
"companions": 2,
"date": "2026-09-15",
"notes": "We need wheelchair access.",
"payment_mode": "Rechnung",
"language": "Deutsch",
"age_group": 1,
"grade": 3,
"category": "Schule",
"items": [
{ "tour_id": 42, "time": "14:00" }
],
"customer": {
"name": "Max",
"surname": "Mustermann",
"email": "max@example.com",
"salutation": "Herr",
"phone": "+49 30 12345678",
"street": "Musterstraße 123",
"zip": "10115",
"city": "Berlin",
"country": "Deutschland"
}
}
}'
Success response (200):
{
"request": {
"id": 123,
"created_at": "2026-09-01T10:30:00+02:00",
"updated_at": "2026-09-01T10:30:00+02:00"
}
}
Suppress the confirmation email
If your website already sends its own confirmation email after a form submit, the go~mus mail would duplicate it. Set skip_confirmation_email: true:
{
"request": {
"skip_confirmation_email": true,
"...": "..."
}
}
Default is false (email is sent).
Lookup fields: id or name
Several fields accept either a numeric id or the translated name as a string:
payment_mode,language,age_group,grade,proposal_category,category- Customer fields:
salutation,title,country,state,category,language
The server tries the id first, falls back to a name lookup. Useful when your website form has free text inputs or pulls dropdown values from Lookups.
Pitfalls
- API user with write access to requests required. A public token does not work, this endpoint is typically proxied server-side. Before going live, ask us to enable write access on your API user, otherwise you hit 401.
itemsmust not be empty. At least one{ tour_id, time }entry, otherwise 422.dateis required. If the visit date is missing, the server rejects the request with 422.- Lookup values are instance-specific. Language "Deutsch", category "Schule", age-group ids - all from Lookups, do not hard-code.
- No lookup after create. There is no GET endpoint for requests. To track the status of a request later, use the go~mus back office or your own state tracking on the website side.
- Customer linking happens server-side. If the
emailmatches an existing customer (or is found viaforeign_id), the request is attached to the existing record. Otherwise the server creates a new customer. Implication: form inputs on your side need to be GDPR-compliant when captured and transmitted.
Related pages
- Tours - the booking primitive behind
tour_id - Customers - customer model, foreign_id pattern
- Lookups - languages, salutations, categories as lookup tables
- Scenario: Website integration - use case 3 shows requests in context