{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "reservation-servicePlatformProfile", "description": "reservation-servicePlatformProfile schema from Lightspeed Restaurant K Series API", "$id": "https://raw.githubusercontent.com/api-evangelist/lightspeed-pos/refs/heads/main/json-schema/restaurant-k-series-reservation-service-platform-profile-schema.json", "type": "object", "properties": { "baseUrl": { "description": "The base URL of the external platform (optional).", "example": "https://my.platform/api/lsk", "format": "uri", "type": "string" }, "depositSupported": { "description": "Whether or not the platform supports deposits.", "example": true, "type": "boolean" }, "displayName": { "description": "The official platform name that will be displayed.", "example": "My Platform", "type": "string" }, "errorsWebhookUrl": { "description": "The URL where notifications for any issues will be sent.
Required for [`error` notificationTypes](https://api-docs.lsk.lightspeed.app/prod/operation/operation-reservation-servicesetbyplatformcode#operation-reservation-servicesetbyplatformcode-body-application-json-notificationtypes).
See [Get Sample Error notification](https://api-docs.lsk.lightspeed.app/operation/operation-reservationErrorNotification).\n", "example": "https://my.platform/api/lsk/webhook/errors", "type": "string", "format": "uri" }, "integrationWebhookUrl": { "description": "The URL where notifications for activation or deactivation of the customer's integration will be sent.
Required for [`integration` notificationTypes](https://api-docs.lsk.lightspeed.app/prod/operation/operation-reservation-servicesetbyplatformcode#operation-reservation-servicesetbyplatformcode-body-application-json-notificationtypes).
See [Integration notification](https://api-docs.lsk.lightspeed.app/operation/operation-reservationintegrationnotification).\n", "example": "https://my.platform/api/lsk/webhook/integrations", "type": "string", "format": "uri" }, "notificationTypes": { "description": "The events that trigger a notification.", "example": [ "ORDER_CLOSED" ], "items": { "type": "string", "enum": [ "ORDER_OPENED", "ORDER_UPDATED", "ORDER_CLOSED", "ONBOARDING_STARTED", "INTEGRATION_ACTIVATED", "INTEGRATION_DEACTIVATED", "POS_RESERVATION_UPDATED", "ERROR" ] }, "type": "array", "uniqueItems": true }, "onboardingWebhookUrl": { "description": "The URL where notifications for the customer's integration onboarding will be sent.
Required for [`onboarding` notificationTypes](https://api-docs.lsk.lightspeed.app/prod/operation/operation-reservation-servicesetbyplatformcode#operation-reservation-servicesetbyplatformcode-body-application-json-notificationtypes).
See [Onboarding notification](https://api-docs.lsk.lightspeed.app/prod/operation/operation-reservationonboardingnotification).\n", "example": "https://my.platform/api/lsk/webhook/onboarding", "type": "string", "format": "uri" }, "orderWebhookUrl": { "description": "The URL where order notifications will be sent.
Required for [`order` notificationTypes](https://api-docs.lsk.lightspeed.app/prod/operation/operation-reservation-servicesetbyplatformcode#operation-reservation-servicesetbyplatformcode-body-application-json-notificationtypes).
See [Order Notification](https://api-docs.lsk.lightspeed.app/prod/operation/operation-reservationordernotification).\n", "example": "https://my.platform/api/lsk/webhook/orders", "type": "string", "format": "uri" }, "posReservationUpdateWebhookUrl": { "description": "The URL where notifications about reservation changes on POS will be sent.", "type": "string", "format": "uri", "example": "https://my.platform/api/lsk/webhook/reservation" }, "ownNotificationsOnly": { "description": "When `true`, notifications will only be sent for orders linked to the reservation platform.", "example": true, "type": "boolean" }, "webhookAuthDetails": { "description": "The authentication credentials to be sent with the webhook notifications.", "properties": { "apiKeys": { "description": "The API keys that will be sent with the webhook notifications. See [API Keys](https://swagger.io/docs/specification/authentication/api-keys/).", "properties": { "headers": { "additionalProperties": { "description": "Key-value pairs of arbitrary static headers to send with the webhook request.", "type": "string" }, "example": { "X-API-ID": "Example-x-api-id", "X-API-SECRET": "Example-x-api-secret" }, "type": "object" }, "parameters": { "additionalProperties": { "description": "Key-value pairs of arbitrary static query parameters to send with the webhook request.", "type": "string" }, "example": {}, "type": "object" } }, "type": "object" }, "basic": { "description": "The basic authentication credentials that will be sent with the webhook notifications. See [Basic Authentication](https://swagger.io/docs/specification/authentication/basic-authentication/).", "properties": { "password": { "description": "The basic auth password.", "example": "Example-Password", "format": "password", "type": "string" }, "username": { "description": "The basic auth username.", "example": "LightspeedKSeries", "type": "string" } }, "required": [ "username", "password" ], "type": "object" }, "bearer": { "description": "The bearer token that will be sent with the webhook notifications. See [Bearer Authentication](https://swagger.io/docs/specification/authentication/bearer-authentication/).", "properties": { "token": { "description": "The bearer token.", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "format": "password", "type": "string" }, "ttl": { "description": "Token expiration time in UTC.", "example": "2035-01-01T00:00:00", "format": "date-time", "type": "string", "x-field-extra-annotation": "@com.fasterxml.jackson.annotation.JsonFormat(pattern = \"yyyy-MM-dd'T'HH:mm:ss\", shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING, timezone = \"UTC\")" } }, "required": [ "token" ], "type": "object" }, "oauth2": { "description": "The OAuth2 credentials that will be sent with the webhook notifications. See [OAuth 2.0](https://oauth.net/2/).", "properties": { "authorizationGrantType": { "default": "CLIENT_CREDENTIALS", "description": "The authorization grant type. See [OAuth2 Grant Types](https://oauth.net/2/grant-types/).", "enum": [ "CLIENT_CREDENTIALS" ], "example": "CLIENT_CREDENTIALS", "type": "string" }, "clientAuthorizationMethod": { "default": "CLIENT_SECRET_BASIC", "description": "The client authorization method. See [OAuth2 Client Authentication](https://oauth.net/2/client-authentication/).", "enum": [ "CLIENT_SECRET_BASIC", "CLIENT_SECRET_JWT", "CLIENT_SECRET_POST" ], "example": "CLIENT_SECRET_BASIC", "type": "string" }, "clientId": { "description": "The OAuth2 client ID.", "example": "LightspeedKSeries", "type": "string" }, "clientName": { "description": "The OAuth2 client name.", "example": "LightspeedKSeries", "type": "string" }, "clientSecret": { "description": "The OAuth2 client secret.", "example": "Example-Client-Secret", "format": "password", "type": "string" }, "providerJwkSetUri": { "description": "The external platform URL for getting public keys to verify given access tokens on the K-Series side.", "example": "https://my.platform/public-keys", "format": "uri", "type": "string" }, "providerTokenUri": { "description": "The external platform URL for getting access tokens by private credentials.", "example": "https://my.platform/emitter/token", "format": "uri", "type": "string" }, "scopes": { "description": "The scopes being granted to the API client.", "example": [ "webhooks-api" ], "items": { "type": "string" }, "type": "array", "uniqueItems": true } }, "required": [ "clientId", "clientSecret", "providerTokenUri" ], "type": "object" } }, "type": "object" }, "webhookAuthType": { "description": "The type of authentication used by the webhook.", "enum": [ "BASIC_AUTH", "BEARER_TOKEN", "API_KEYS", "OAUTH2", "NONE" ], "example": "OAUTH2", "type": "string" }, "allowCourseNumberUpdates": { "type": "boolean", "example": true, "default": false, "description": "If true, table statuses can be customized using a number format." }, "inServiceTableStatuses": { "items": { "properties": { "statusLabel": { "type": "string", "example": "Appetizer", "description": "The unique text which will be displayed in the back-office for users." }, "statusValue": { "type": "string", "example": "appetizer", "description": "The unique code which will be used for outbound communication within table status mapping." }, "sequence": { "format": "int32", "type": "integer", "example": 1, "description": "This number is used to resolve collisions between statuses in order of highest priority." } }, "type": "object", "required": [ "statusLabel", "statusValue", "sequence" ] }, "type": "array", "description": "List of customizable table statuses that will be used to notify platforms about reservation progress with outbound API." }, "allowedPosStatuses": { "type": "array", "items": { "description": "External reservation statuses for platforms.", "enum": [ "ON_HOLD", "SCHEDULED", "PARTIALLY_ARRIVED", "ARRIVED", "PARTIALLY_SEATED", "SEATED", "DEPARTED", "CANCELLED", "NO_SHOW", "ERROR" ], "example": "SCHEDULED", "type": "string" } } }, "required": [ "displayName", "webhookAuthType", "webhookAuthDetails" ] }