Developers

Umovi integration platform

OAuth client credentials

Token issuance, provider isolation, scopes and secret handling.

REST integrations use OAuth2 client_credentials. They represent an external system acting for one provider, not an end user.

Token request

POST /integrations/oauth/token
Content-Type: application/json
{
  "client_id": "umovi_voicebot_abc123",
  "client_secret": "secret-visible-once",
  "grant_type": "client_credentials",
  "scope": "catalog:read slots:read reservations:create"
}

scope is optional. When supplied, it requests a subset of the scopes assigned to the client; it cannot elevate the client beyond its configured permissions.

Token lifecycle

The response contains access_token, token_type: "Bearer", expires_in: 1800 and the granted space-separated scope. There is no refresh token in this flow; request a new access token with client credentials before expiry. If scope is omitted, the token receives the client’s currently allowed scopes. Unknown or unassigned scopes return 400 with error: "invalid_scope".

Resource access also requires an active integration client, an active provider and a plan with Integration API access. Removing a client scope takes effect for existing tokens too; adding a scope requires a newly issued token.

Scopes

ScopeAllows
catalog:readRead and search catalog data, employees and service/employee resolution.
services:internal:useInclude provider-internal services when combined with the relevant catalog, slot or reservation scope.
clients:identifyRecognize an exact caller phone number without returning contact or profile data.
clients:readSearch provider client records.
clients:createCreate provider client records.
clients:updateUpdate provider client records.
clients:deleteDelete provider client records.
slots:readSearch slots and first availability.
reservations:readList and read reservations.
reservations:history:readRead reservation lifecycle events.
reservations:createCreate reservations.
reservations:updateUpdate reservation details.
reservations:rescheduleReschedule according to client-side provider policy.
reservations:cancelCancel reservations.
webhooks:readList integration-owned webhooks and delivery attempts.
webhooks:writeCreate, update and delete integration-owned webhooks.
webhooks:secret:rotateRotate webhook signing secrets.
webhooks:testEnqueue test webhook deliveries.

Secret handling

  • Keep client_secret in a server-side secret manager, never in browser or mobile application code.
  • Do not log token requests, secrets or access tokens.
  • Request only the scopes needed by the integration.
  • Rotate or revoke a client after suspected exposure.
  • Treat provider mismatch and insufficient scope as authorization failures, not retryable transport errors.

The documentation tester keeps credentials and access tokens only in page memory. It clears the client secret after a successful token request. Reloading the page requires authentication again; changing the API origin clears credentials and request/response state. Tokens are not stored in sessionStorage or localStorage.

Providers with a hidden public profile

An active provider may hide their public profile and stop new bookings through Umovi client apps and the public MCP server. This does not disable an authorised REST integration: catalog, availability and reservation operations continue to use the integration's existing scopes. Internal-only services still require services:internal:use in addition to the operation scope.

Suspended, disabled or archived providers remain subject to the existing access restrictions. Hiding a public profile does not reactivate a provider account.