Developers

REST integrations

Integration API reference

All public integration operations, generated from the versioned narrow contract. Expand an operation for scopes and inputs, or open it preselected in the API tester.

OAuth

1 operation
POST/integrations/oauth/tokenIssue an M2M access token (OAuth2 client_credentials)

Exchanges a `client_id` and `client_secret` for a short-lived JWT bearer token. Use the token in the `Authorization: Bearer <token>` header on Integration API endpoints.

Authorization
Public token endpoint
Inputs
No path or query parameters
Example JSON body
{
  "client_id": "umovi_voicebot_abc123",
  "client_secret": "generated-secret-visible-only-once",
  "grant_type": "client_credentials",
  "scope": "slots:read reservations:create"
}
Open in API tester

Catalog

4 operations
GET/integrations/v1/providers/{providerId}/catalogGet booking catalog for voicebot and external booking clients
Authorization
catalog:read
Inputs
providerId path · required
Open in API tester
GET/integrations/v1/providers/{providerId}/catalog/employees/searchSearch active employees by name, optionally for a service
Authorization
catalog:read
Inputs
providerId path · requiredq query · requiredemployeeId queryserviceId querylimit query
Open in API tester
POST/integrations/v1/providers/{providerId}/catalog/resolveResolve spoken service and employee names into booking candidates
Authorization
catalog:read
Inputs
providerId path · required
Example JSON body
{
  "serviceName": "",
  "employeeName": "",
  "limit": 10
}
Open in API tester
GET/integrations/v1/providers/{providerId}/catalog/services/searchSearch active services by name, optionally for an employee
Authorization
catalog:read
Inputs
providerId path · requiredq query · requiredemployeeId queryserviceId querylimit query
Open in API tester

Clients

5 operations
POST/integrations/v1/providers/{providerId}/clientsCreate provider client

Creates a provider-scoped client record for external CRM and booking flows. The integration token must contain the `clients:create` scope.

Authorization
clients:create
Inputs
providerId path · required
Example JSON body
{
  "firstName": "",
  "lastName": "",
  "email": "",
  "phone": "",
  "emailNotificationsEnabled": true,
  "smsNotificationsEnabled": true,
  "marketingEnabled": false,
  "marketingConsentEvidence": {
    "method": "IN_PERSON",
    "statementVersion": "",
    "note": ""
  },
  "isReturningClientManual": false,
  "consentGiven": false,
  "sendInvite": false
}
Open in API tester
POST/integrations/v1/providers/{providerId}/clients/identifyIdentify a provider client by an exact caller phone number

Returns a minimal, provider-scoped result for voicebot caller recognition. Caller ID is a recognition signal, not authentication, and this endpoint never returns client contact or profile data.

Authorization
clients:identify
Inputs
providerId path · required
Example JSON body
{
  "phone": "+48123456789"
}
Open in API tester
PATCH/integrations/v1/providers/{providerId}/clients/{id}Update provider client

Updates a provider-scoped client record for external CRM and booking flows. The integration token must contain the `clients:update` scope.

Authorization
clients:update
Inputs
providerId path · requiredid path · required
Example JSON body
{
  "firstName": "",
  "lastName": "",
  "email": "",
  "phone": "",
  "emailNotificationsEnabled": false,
  "smsNotificationsEnabled": false,
  "marketingEnabled": false,
  "marketingConsentEvidence": {
    "method": "IN_PERSON",
    "statementVersion": "",
    "note": ""
  },
  "isReturningClientManual": false,
  "consentGiven": false,
  "sendInvite": false
}
Open in API tester
DELETE/integrations/v1/providers/{providerId}/clients/{id}Delete provider client

Soft-deletes a provider-scoped client record. The integration token must contain the `clients:delete` scope.

Authorization
clients:delete
Inputs
providerId path · requiredid path · required
Open in API tester

Reservations

7 operations
GET/integrations/v1/providers/{providerId}/reservationsList reservations for the authenticated provider
Authorization
reservations:read
Inputs
startsAfter querystartsBefore queryemployeeId queryserviceId querypage querypageSize queryproviderId path · required
Open in API tester
POST/integrations/v1/providers/{providerId}/reservationsCreate a reservation
Authorization
reservations:create
Inputs
providerId path · requiredIdempotency-Key header
Example JSON body
{
  "serviceId": "00000000-0000-4000-8000-000000000000",
  "employeeId": "00000000-0000-4000-8000-000000000000",
  "employeeSelectionMode": "SPECIFIC",
  "startAt": "2026-05-17T10:00:00+02:00",
  "startsAt": "2026-05-17T10:00:00+02:00",
  "providerClientId": "00000000-0000-4000-8000-000000000000",
  "internalNote": "",
  "source": "",
  "externalReservationId": ""
}
Open in API tester
GET/integrations/v1/providers/{providerId}/reservations/{reservationId}Get a single reservation
Authorization
reservations:read
Inputs
reservationId path · requiredproviderId path · required
Open in API tester
PATCH/integrations/v1/providers/{providerId}/reservations/{reservationId}Modify a reservation time or duration
Authorization
reservations:update
Inputs
reservationId path · requiredproviderId path · required
Example JSON body
{
  "startAt": "2026-05-17T11:00:00+02:00",
  "startsAt": "2026-05-17T11:00:00+02:00",
  "serviceDurationMinutes": 0,
  "ignoreBuffer": false
}
Open in API tester
POST/integrations/v1/providers/{providerId}/reservations/{reservationId}/cancelCancel a reservation
Authorization
reservations:cancel
Inputs
reservationId path · requiredproviderId path · required
Example JSON body
{
  "reason": "Cancelled by external system"
}
Open in API tester
GET/integrations/v1/providers/{providerId}/reservations/{reservationId}/eventsList reservation lifecycle events
Authorization
reservations:history:read
Inputs
reservationId path · requiredproviderId path · required
Open in API tester
PATCH/integrations/v1/providers/{providerId}/reservations/{reservationId}/rescheduleReschedule a reservation using client-side provider policy rules
Authorization
reservations:reschedule
Inputs
reservationId path · requiredproviderId path · required
Example JSON body
{
  "startAt": "2026-05-17T11:00:00+02:00",
  "startsAt": "2026-05-17T11:00:00+02:00",
  "serviceDurationMinutes": 0,
  "ignoreBuffer": false
}
Open in API tester

Slots

2 operations
GET/integrations/v1/providers/{providerId}/slotsList available slots for a service in a date range

Returns slots grouped by date for the given service. The integration token must contain the `slots:read` scope and match the provider in the path.

Authorization
slots:read
Inputs
providerId path · requiredserviceId query · requireddateFrom query · requireddateTo query · requiredemployeeId querytimezone querytimeFrom querytimeTo query
Open in API tester
GET/integrations/v1/providers/{providerId}/slots/first-availableFind the first available slot for a service

Returns the first available slot within the requested horizon. The integration token must contain the `slots:read` scope and match the provider in the path.

Authorization
slots:read
Inputs
providerId path · requiredserviceId query · requiredemployeeId queryinDays querytimezone querydateFrom querydateTo querydirection queryslotPreference querytimeFrom querytimeTo query
Open in API tester

Webhooks

7 operations
GET/integrations/v1/providers/{providerId}/webhooksList webhooks owned by the authenticated integration client
Authorization
webhooks:read
Inputs
providerId path · required
Open in API tester
POST/integrations/v1/providers/{providerId}/webhooksCreate a webhook owned by the authenticated integration client

The webhook is automatically linked to the OAuth client. The signing secret is returned exactly once.

Authorization
webhooks:write
Inputs
providerId path · required
Example JSON body
{
  "url": "https://example.com/umovi/webhooks",
  "events": [
    "booking.created"
  ],
  "isActive": true
}
Open in API tester
PATCH/integrations/v1/providers/{providerId}/webhooks/{id}Update a webhook owned by the authenticated integration client
Authorization
webhooks:write
Inputs
providerId path · requiredid path · required
Example JSON body
{
  "url": "",
  "events": [
    "booking.created"
  ],
  "isActive": false
}
Open in API tester
DELETE/integrations/v1/providers/{providerId}/webhooks/{id}Delete a webhook owned by the authenticated integration client
Authorization
webhooks:write
Inputs
providerId path · requiredid path · required
Open in API tester
GET/integrations/v1/providers/{providerId}/webhooks/{id}/deliveriesList recent delivery attempts for a webhook
Authorization
webhooks:read
Inputs
providerId path · requiredid path · requiredlimit query
Open in API tester
POST/integrations/v1/providers/{providerId}/webhooks/{id}/rotate-secretRotate a webhook signing secret

Returns the replacement secret exactly once. Requires the separate `webhooks:secret:rotate` scope.

Authorization
webhooks:secret:rotate
Inputs
providerId path · requiredid path · required
Open in API tester
POST/integrations/v1/providers/{providerId}/webhooks/{id}/testEnqueue a test webhook delivery
Authorization
webhooks:test
Inputs
providerId path · requiredid path · required
Open in API tester