### Get GraphQL Schema Source: https://docs.skedulo.com/developer-guides/deskless-productivity-cloud/use-graphql/get-started-with-graphql Retrieve the full GraphQL Schema Definition Language specification for your Skedulo tenant. This schema outlines the available queries and mutations. ```APIDOC ## GET /graphql/schema ### Description Retrieves the GraphQL schema definition for the Skedulo tenant. ### Method GET ### Endpoint /graphql/schema ### Parameters #### Header Parameters - **Authorization** (string) - Required - Bearer token for authentication (e.g., `Bearer $API_TOKEN`) ### Request Example ```bash curl -X GET https://api.skedulo.com/graphql/schema -H "Authorization: Bearer $API_TOKEN" ``` ### Response #### Success Response (200) - **schema** (string) - The GraphQL schema in Schema Definition Language format. #### Response Example ```json { "data": "type Query { ... } type Mutation { ... }" } ``` ``` -------------------------------- ### GraphQL Queries for Skedulo Jobs and Products Source: https://docs.skedulo.com/docs/customization/skedulo-sdk/library/library-getting-started Defines GraphQL queries for fetching job details with associated products and for retrieving product information. These queries are used for data retrieval within Skedulo libraries. ```graphql query fetchJobsWithJobProducts($filter: EQLQueryFilterJobs!) { jobs(filter: $filter) { edges { node { UID Name JobProducts { UID Qty Name JobId ProductId } } } } } query fetchProducts($orderBy: EQLOrderByClauseProducts, $filter: EQLQueryFilterProducts, $offset: NonNegativeInt) { page: products(orderBy: $orderBy, filter: $filter, offset: $offset) { totalCount edges { node { UID Name Description ProductCode } } } } ``` -------------------------------- ### GraphQL - Create Job Source: https://docs.skedulo.com/developer-guides/getting-started/quickstart Creates a new job using the `insertJob` GraphQL mutation. Mandatory fields include `Duration` and `RegionId`. `Start` and `End` are required for scheduled jobs and must be in ISO8601 format. ```APIDOC ## GraphQL - Create Job ### Description Creates a new job using the `insertJob` GraphQL mutation. Mandatory fields include `Duration` and `RegionId`. `Start` and `End` are required for scheduled jobs and must be in ISO8601 format. ### Method POST ### Endpoint /graphql ### Parameters #### Query Parameters None #### Request Body ##### mutation createJob - **input** (Object) - Required - Input object for creating a job. - **Duration** (Int) - Required - The number of minutes allocated to complete the job. - **RegionId** (String) - Required - The UID of the region in which the job will be assigned. - **Start** (String) - Optional - The start date and time in ISO8601 format. - **End** (String) - Optional - The end date and time in ISO8601 format. - **Description** (String) - Optional - A description for the job. ### Request Example ```json mutation createJob{ schema { insertJobs(input: { Duration: 60 RegionId: "000396a9-ac46-4412-b015-b212af205f46" Start: "2021-09-10T06:00:00.000Z" End: "2021-09-10T07:00:00.000Z" Description: "This is a new job created using GraphQL" }) } } ``` ### Response #### Success Response (200) - **data.schema.insertJobs** (String) - The UID of the newly created job. #### Response Example ```json { "data": { "schema": { "insertJobs": "00149459-5115-4c86-8272-eb687d67c293" } } } ``` ``` -------------------------------- ### Create a Skedulo Job using GraphQL Source: https://docs.skedulo.com/developer-guides/getting-started/quickstart Creates a new job in Skedulo using the `insertJobs` GraphQL mutation. Requires `Duration` and `RegionId`. Optional fields like `Start`, `End` (in ISO8601 format), and `Description` can be included. The response provides the `UID` of the created job. ```graphql mutation createJob{ schema { insertJobs(input: { Duration: 60 RegionId: "000396a9-ac46-4412-b015-b212af205f46" Start: "2021-09-10T06:00:00.000Z" End: "2021-09-10T07:00:00.000Z" Description: "This is a new job created using GraphQL" }) } } ``` ```json { "data": { "schema": { "insertJobs": "00149459-5115-4c86-8272-eb687d67c293" } } } ``` -------------------------------- ### Retrieve GraphQL Schema using cURL Source: https://docs.skedulo.com/developer-guides/deskless-productivity-cloud/use-graphql/get-started-with-graphql This snippet demonstrates how to fetch the complete GraphQL schema definition for your Skedulo tenant using a cURL command. It requires an API access token for authentication and targets the `/graphql/schema` endpoint. The response includes all standard and custom objects, fields, and supports the `GeoLocation` scalar type. ```shell curl -X GET https://api.skedulo.com/graphql/schema -H "Authorization: Bearer $API_TOKEN" ``` -------------------------------- ### Get Timezone for a Location (HTTP GET Request) Source: https://docs.skedulo.com/developer-guides/use-and-manage-location-information/address-geocoding-and-autocompletion/get-timezone-information This example demonstrates how to make an HTTP GET request to the /geoservices/timezone endpoint to retrieve timezone details for a specific location and timestamp. It requires the base URL, location coordinates (latitude, longitude), and a Unix timestamp. ```http https:///geoservices/timezone?location=-37.839485%2c144.925550×tamp=1680076800 ``` -------------------------------- ### Skedulo CLI Webhook List Output Example (Bash) Source: https://docs.skedulo.com/developer-guides/integration-and-automation/webhooks-and-triggered-actions/webhooks/create-a-webhook An example of the output from the `sked artifacts webhook list` command, showing a table with webhook details like name, type, and URL. ```bash ✔ Fetching Webhook list... name type url ────────────────── ─────── ─────────────────────── my-webhook graphql https://my-api/callback ``` -------------------------------- ### Start Skedulo Web Extension Development Server Source: https://docs.skedulo.com/developer-guides/customize-and-extend/skedulo-web-extensions/web-extensions-with-cli Initiates the local development server for a web extension. This command serves the extension and allows for live recompilation and testing. It requires the path to your extension's source code. ```bash sked web-extension dev location-of-extension-code ``` -------------------------------- ### Authentication - Example Request Source: https://docs.skedulo.com/skedulo-api This example demonstrates how to authenticate with the Skedulo API using a Bearer token. The access token is obtained from the Skedulo web app and included in the Authorization header. ```APIDOC ## GET /auth/whoami ### Description Retrieves information about the authenticated user or token. ### Method GET ### Endpoint https://api.skedulo.com/auth/whoami ### Parameters #### Headers - **Authorization** (string) - Required - Bearer token obtained from Skedulo web app (e.g., `Bearer YOUR_API_TOKEN`) - **content-type** (string) - Required - `application/json` ### Request Example ```bash curl -X GET https://api.skedulo.com/auth/whoami \ -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik9ESkNORFE0TkRJMVJUTkJNekE1TlRFNVJqVTFORGxDUXpjME9EZEJOVEF3T1RjNE1rVkZSUSJ9.eyJodHRwczovL2FwaS5za2VkdWxvLmNvbS92ZW5kb...-dpYZm_8YuaUYTnMrS4Fs3fQTDxM0oEkt9CWWJxPQTOv3l3pjp3sgDeuRvzYcaFZuoVTVLPYNidL9Pc5gPMrsXpTxOJL3nMF-2GmJJ5YHAXgG2cQc9MmL74u7IsGbQ-qg" -H "content-type: application/json" ``` ### Response #### Success Response (200) - **data** (object) - Contains user or token information. - **user** (object) - User details. - **id** (string) - User ID. - **name** (string) - User name. - **email** (string) - User email. - **permissions** (array) - List of user permissions. #### Response Example ```json { "data": { "user": { "id": "user-123", "name": "John Doe", "email": "john.doe@example.com" }, "permissions": [ "read:jobs", "write:jobs" ] } } ``` ``` -------------------------------- ### Execute GraphQL Queries and Mutations Source: https://docs.skedulo.com/developer-guides/deskless-productivity-cloud/use-graphql/get-started-with-graphql Perform GraphQL queries and mutations against the Skedulo API. This endpoint accepts JSON-encoded requests and returns data and errors in JSON format. ```APIDOC ## POST /graphql/graphql ### Description Executes GraphQL queries and mutations against the Skedulo API. ### Method POST ### Endpoint /graphql/graphql ### Parameters #### Header Parameters - **Authorization** (string) - Required - Bearer token for authentication (e.g., `Bearer $API_TOKEN`) - **Content-Type** (string) - Required - Must be `application/json` #### Request Body - **query** (string) - Required - The GraphQL query string. - **variables** (object) - Optional - Variables to be used in the query. ### Request Example ```json { "query": "query GetUsers { users { id name } }", "variables": {} } ``` ### Response #### Success Response (200) - **data** (object) - The result of the GraphQL query or mutation. - **errors** (array) - An array of errors, if any occurred during execution. #### Response Example ```json { "data": { "users": [ { "id": "user-123", "name": "John Doe" } ] } } ``` ``` -------------------------------- ### Update Job Data with GraphQL Mutation Source: https://docs.skedulo.com/developer-guides/getting-started/quickstart Updates an existing job object in the schema using the `updateJobs` GraphQL mutation. This example adds an address to a job. Requires the job UID and the fields to update. ```graphql mutation updateJobs { schema { updateJobs(input: { UID: "00149459-5115-4c86-8272-eb687d67c293", Address: "47 Warner St, Fortitude Valley QLD 4006, Australia", }) } } ``` -------------------------------- ### GraphQL - Create Resource Source: https://docs.skedulo.com/developer-guides/getting-started/quickstart Creates a new resource using the `insertResources` GraphQL mutation. Mandatory fields include `Name` and `RegionId`. Optional fields include `ResourceType`, `NotificationType`, `MobilePhone`, and `CountryCode`. ```APIDOC ## GraphQL - Create Resource ### Description Creates a new resource using the `insertResources` GraphQL mutation. Mandatory fields include `Name` and `RegionId`. Optional fields include `ResourceType`, `NotificationType`, `MobilePhone`, and `CountryCode`. ### Method POST ### Endpoint /graphql ### Parameters #### Query Parameters None #### Request Body ##### mutation createResources - **input** (Object) - Required - Input object for creating a resource. - **Name** (String) - Required - The name of the resource. - **PrimaryRegionId** (String) - Required - The UID of the region where the resource will be working. - **ResourceType** (String) - Optional - The type of resource (e.g., "Person"). - **NotificationType** (String) - Optional - The preferred notification type (e.g., "sms", "push"). - **MobilePhone** (String) - Optional - The mobile phone number of the resource. - **CountryCode** (String) - Optional - The country code for the mobile phone number. ### Request Example ```json mutation createResources { schema { insertResources(input: { Name: "Robert Resource" PrimaryRegionId: "000396a9-ac46-4412-b015-b212af205f46", ResourceType: "Person", NotificationType: "sms", MobilePhone: "0400123456", CountryCode: "AU" }) } } ``` ### Response #### Success Response (200) - **data.schema.insertResources** (String) - The UID of the newly created resource. #### Response Example ```json { "data": { "schema": { "insertResources": "0005310d-4383-40f0-a1f2-684c5e93cdbf" } } } ``` ``` -------------------------------- ### Webhook Trigger Examples Source: https://docs.skedulo.com/developer-guides/integration-and-automation/webhooks-and-triggered-actions/webhooks/create-a-webhook Examples of webhook responses when creating and updating a job. ```APIDOC ## POST /webhooks/job/create ### Description This endpoint is triggered when a new job is created. It logs the job details to a listening service. ### Method POST ### Endpoint `/webhooks/job/create` ### Request Body (Implicitly sent by Skedulo system) ### Request Example (GraphQL query to create a job) ### Response #### Success Response (200) Returns the details of the created job as received by the webhook. #### Response Example ```json { "headers": { "user-agent": "Skedulo-Webhook", "skedulo-webhook-id": "9849cceb-c426-488b-89dc-6ff02b33802d", "skedulo-request-id": "317cc297-c9cb-41e5-a741-366b3724cb8e", "content-length": "182", "content-type": "application/json; charset=UTF-8", "accept-encoding": "gzip, deflate", "host": "b14b2804.ngrok.io", "accept": "*/*", "x-forwarded-proto": "https", "x-forwarded-for": "34.215.60.60" }, "body": [ { "data": { "schemaJobs": { "data": { "UID": "00145d1e-974a-4f97-9cd7-7cd280f824a8", "Duration": 60 }, "previous": { "Duration": 60 }, "operation": "INSERT", "timestamp": "2019-07-02T03:29:35.969Z" } } } ] } ``` ## POST /webhooks/job/update ### Description This endpoint is triggered when a job is updated. It logs the updated job details to a listening service. ### Method POST ### Endpoint `/webhooks/job/update` ### Request Body (Implicitly sent by Skedulo system) ### Request Example (GraphQL query to update a job) ### Response #### Success Response (200) Returns the details of the updated job as received by the webhook. #### Response Example ```json { "headers": { "user-agent": "Skedulo-Webhook", "skedulo-webhook-id": "9849cceb-c426-488b-89dc-6ff02b33802d", "skedulo-request-id": "fdf22ac0-b6d5-4453-9bfa-9735c7e2cdde", "content-length": "182", "content-type": "application/json; charset=UTF-8", "accept-encoding": "gzip, deflate", "host": "b14b2804.ngrok.io", "accept": "*/*", "x-forwarded-proto": "https", "x-forwarded-for": "34.215.60.60" }, "body": [ { "data": { "schemaJobs": { "data": { "UID": "00145d1e-974a-4f97-9cd7-7cd280f824a8", "Duration": 30 }, "previous": { "Duration": 60 }, "operation": "UPDATE", "timestamp": "2019-07-02T03:31:27.970Z" } } } ] } ``` ``` -------------------------------- ### Create Product Mutation Source: https://docs.skedulo.com/developer-guides/deskless-productivity-cloud/interacting-with-apis/graphiql-connected-page This section describes the GraphQL mutation to create a new product and the required input variables. ```APIDOC ## POST /graphql ### Description Use this GraphQL mutation to create a new product in the system. The mutation requires an input object containing the details of the product to be created. ### Method POST ### Endpoint /graphql ### Parameters #### Query Parameters None #### Request Body ##### Mutation: `createProduct` - **input** (NewProducts!) - Required - The input object containing the product details. - **Name** (String!) - Required - The name of the product. - **Description** (String) - Optional - A description for the product. - **ProductCode** (String!) - Required - The unique code for the product. - **IsActive** (Boolean) - Optional - Whether the product is active. ### Request Example ```graphql mutation createProduct($input: NewProducts!) { schema { insertProducts(input: $input) } } ``` ### Query Variables Example ```json { "input": { "Name": "New Product", "Description": "This is a new product", "ProductCode": "P-1", "IsActive": true } } ``` ### Response #### Success Response (200) - **data** (Object) - Contains the result of the mutation. - **schema** (Object) - The schema object. - **insertProducts** (String) - The UID of the newly created product. #### Response Example ```json { "data": { "schema": { "insertProducts": "001d7f7e-e1be-464f-9184-990525ad2096" } } } ``` ``` -------------------------------- ### GraphQL Introspection: Get Type Information (Jobs) Source: https://docs.skedulo.com/developer-guides/deskless-productivity-cloud/use-graphql/graphql-queries This introspection query retrieves detailed information about a specific GraphQL type, 'Jobs' in this example. It returns the type's name and kind, aiding in schema exploration. ```graphql { "data": { "__type": { "name": "Jobs", "kind": "OBJECT" } } } ``` -------------------------------- ### Create Webhooks Directory and Install ngrok - Bash Source: https://docs.skedulo.com/developer-guides/integration-and-automation/webhooks-and-triggered-actions/webhooks/create-a-webhook Creates a new webhooks folder and navigates into it for local webhook development and testing. This directory will contain ngrok and the HTTP server configuration for receiving webhook payloads. ```bash mkdir webhooks && cd webhooks ``` -------------------------------- ### POST /optimization/schedule - Using Resources Object Source: https://docs.skedulo.com/developer-guides/manage-and-schedule-work/optimization-of-schedules/optimize-vs-suggest/optimized-scheduling-using-the-api This example demonstrates how to use the `resources` object in the request body for the `/optimization/schedule` endpoint. The `resources` object allows you to specify individual resource IDs and their custom working hours (start and end timestamps), overriding their default availability. ```APIDOC ## POST /optimization/schedule ### Description Schedules jobs for resources, allowing for custom working hours overrides using the `resources` object. ### Method POST ### Endpoint /optimization/schedule ### Parameters #### Request Body - **jobIds** (array of strings) - Required - An array of job IDs to be scheduled. - **resources** (object) - Required - An object where keys are resource IDs and values are arrays of working hour objects. Each working hour object should have `start` and `end` timestamps. - **resourceId** (string) - The ID of the resource. - **workingHours** (array of objects) - An array of objects, each defining a working period with `start` and `end` timestamps. - **start** (string) - The start timestamp of the working period (ISO 8601 format). - **end** (string) - The end timestamp of the working period (ISO 8601 format). - **scheduleStart** (integer) - Required - The start timestamp for the scheduling period (Unix epoch milliseconds). - **scheduleEnd** (integer) - Required - The end timestamp for the scheduling period (Unix epoch milliseconds). - **timeZone** (string) - Required - The time zone for the scheduling period (e.g., "Australia/Brisbane"). - **schedulingOptions** (object) - Optional - Options to configure the scheduling behavior. - **respectSchedule** (boolean) - Whether to respect existing resource schedules. - **ignoreTravelTimes** (boolean) - Whether to ignore travel times between jobs. - **ignoreTravelTimeFirstJob** (boolean) - Whether to ignore travel time for the first job. - **ignoreTravelTimeLastJob** (boolean) - Whether to ignore travel time for the last job. - **jobTimeAsTimeConstraint** (boolean) - Whether to treat job duration as a time constraint. - **preferJobTimeOverTimeConstraint** (boolean) - Whether to prioritize job time over other time constraints. - **balanceWorkload** (boolean) - Whether to balance workload among resources. - **minimizeResources** (boolean) - Whether to minimize the number of resources used. - **snapUnit** (integer) - Unit in minutes for snapping schedule times. - **padding** (integer) - Padding in minutes to add to job durations. ### Request Example ```json { "jobIds": [ "001406d4-51fd-4da7-8960-1e71429e1974", "0014c5a0-05eb-4d16-8381-f63d17bda9d6", "00142eaa-a8f3-4e90-942b-3233fff67936" ], "resources": { "0005dfa7-c49e-481c-a25c-6daef8e3d918": [], "0005094d-dae5-4cbb-ad7d-db78d3735e21": [{ "start": "2019-04-17T04:00:30.000Z", "end": "2019-04-17T0:20:30.000Z" }] }, "scheduleStart": 1555475530486, "scheduleEnd": 1555509599999, "timeZone": "Australia/Brisbane", "schedulingOptions": { "respectSchedule": false, "ignoreTravelTimes": true, "ignoreTravelTimeFirstJob": false, "ignoreTravelTimeLastJob": false, "jobTimeAsTimeConstraint": true, "preferJobTimeOverTimeConstraint": true, "balanceWorkload": false, "minimizeResources": false, "snapUnit": 0, "padding": 0 } } ``` ### Response #### Success Response (200) - **schedule** (array of objects) - An array of scheduled job assignments. - **jobId** (string) - The ID of the job. - **resourceId** (string) - The ID of the resource assigned to the job. - **start** (string) - The start time of the job assignment (ISO 8601 format). - **end** (string) - The end time of the job assignment (ISO 8601 format). - **travelTime** (integer) - The calculated travel time in minutes to this job. #### Response Example ```json { "schedule": [ { "jobId": "001406d4-51fd-4da7-8960-1e71429e1974", "resourceId": "0005dfa7-c49e-481c-a25c-6daef8e3d918", "start": "2019-04-17T08:00:00.000Z", "end": "2019-04-17T09:00:00.000Z", "travelTime": 0 } ] } ``` ``` -------------------------------- ### Query All Skedulo Jobs using GraphQL Source: https://docs.skedulo.com/developer-guides/getting-started/quickstart Retrieves a list of all jobs in the Skedulo org using a GraphQL query. This query fetches the `Name` and `Description` for each job, presented in an edge-node structure. ```graphql query allJobs { jobs { edges { node{ Name Description } } } } ``` -------------------------------- ### Initialize Empty Skedulo Package Configuration with sked.pkg.json Source: https://docs.skedulo.com/developer-guides/create-and-manage-deployments/create-and-deploy-packages/overview-of-package-components JSON configuration file for a new Skedulo package with no components. Specifies package version, name, summary, and an empty components object. This file is the main package configuration that lists all components to be built and deployed as a single bundle. ```json { "version":"1", "name":"NewPackage", "summary":"New Package", "components":{} } ``` -------------------------------- ### Retrieve Batch Optimization Runs Source: https://docs.skedulo.com/developer-guides/manage-and-schedule-work/optimization-of-schedules/create-a-scheduled-optimization This JSON represents the response from the GET /optimization/run endpoint, detailing multiple optimization runs associated with a schedule ID. It includes information like save status, user details, start times, and summaries. ```json { "paging": { "limit": 10, "total": 2 }, "result": [ { "autoSaved": false, "savedByUserId": "user-1", "savedByDate": "2022-02-15T19:03:00Z", "saveState": "saved", "start": "2022-08-18T19:00:00Z", "status": "complete", "scheduleId": "a15c285f-2c69-4a3c-9b9b-c9a8c5252db6", "createdByUserId": "user-1", "label": "label-1", "optimizationType": "pvrp", "completedAt": "2022-02-15T19:02:00Z", "summary": { "totalPlannedJobs": 3, "totalScheduledJobs": 3 }, "evaluateOnly": false, "id": "20ecb249-8331-491f-9049-565a2252df76" }, { "autoSaved": false, "saveState": "error", "errors": [ { "message": "error-1" } ], "start": "2022-08-18T19:00:00Z", "status": "failed", "scheduleId": "a15c285f-2c69-4a3c-9b9b-c9a8c5252db6", "createdByUserId": "user-1", "label": "label-1", "optimizationType": "pvrp", "completedAt": "2022-02-15T19:02:00Z", "summary": { "totalPlannedJobs": 3, "totalScheduledJobs": 3 }, "evaluateOnly": false, "id": "20ecb249-8331-491f-9049-565a2252df76" } ] } ``` -------------------------------- ### Skedulo Library Exports for GraphQL and Types Source: https://docs.skedulo.com/docs/customization/skedulo-sdk/library/library-getting-started Exports DocumentNodes for GraphQL execution, converted types representing query data, and raw generated types from the Skedulo server schema. This centralizes imports for library usage. ```typescript // Converted types representing data available in queries export { JobProduct, Product, JobProductsManagedData, JobProductCacheData, JobProductsUnmanagedData } from './custom-types' // Documents for execution export { fetchJobsWithJobProducts, fetchProducts } from './queries/queries.graphql' // Raw generated types for other use (raw schema types from server) export { JobProducts, NewJobProducts, UpdateJobProducts, FetchJobsWithJobProducts, FetchProducts } from './__graphql/graphql' ``` -------------------------------- ### UI Definition for Static Product Selector Source: https://docs.skedulo.com/developer-guides/customize-and-extend-mobile/skedulo-plus-extensions/mex-ui-components/page-components/flat-page-components/selector-editor Example `ui_def.json` configuration for a select editor displaying a static list of products. This setup allows users to tap the field to select a product. ```json { "components": [ { "type": "selectEditor", "label": "Select Product", "hint": "SelectProductHint", "options": [ { "value": "1", "label": "Product A" }, { "value": "2", "label": "Product B" }, { "value": "3", "label": "Product C" } ] } ] } ``` -------------------------------- ### Retrieve Webhooks via CLI Source: https://docs.skedulo.com/developer-guides/integration-and-automation/webhooks-and-triggered-actions/webhooks/create-a-webhook Instructions for listing and getting individual webhooks using the Skedulo CLI. ```APIDOC ## Skedulo CLI Webhook Commands ### List Webhooks #### Description Fetches a list of all configured webhooks. #### Command ```bash sked artifacts webhook list ``` #### Response Example ``` ✔ Fetching Webhook list... name type url ────────────────── ─────── ─────────────────────── my-webhook graphql https://my-api/callback ``` ### Get Specific Webhook #### Description Retrieves details for a specific webhook by its name. #### Command ```bash sked artifacts webhook get --name ``` #### Example Command ```bash sked artifacts webhook get --name my-webhook ``` #### Response (Returns detailed information about the specified webhook, similar to the API response structure for a single webhook.) ``` -------------------------------- ### GraphQL Subscription Error Response Source: https://docs.skedulo.com/developer-guides/deskless-productivity-cloud/use-graphql/graphql-subscriptions An example of an error response from the GraphQL subscription server. This 'error' message type is returned when there is an issue with a 'start' message, such as a syntax error in the query or an invalid field name. The 'payload' contains details about the errors encountered. ```json { "type": "error", "id": "2", "payload": { "data": null, "errors": [ { "message": "Cannot query field 'UIDs' on type 'SchemaSubscriptionJobs'. Did you mean 'UID'? (line 6, column 7):\n UIDs\n ^", "locations": [ { "line": 6, "column": 7 } ] } ] } } ``` -------------------------------- ### GraphQL Query to Fetch Regions Source: https://docs.skedulo.com/developer-guides/deskless-productivity-cloud/use-graphql/graphiql An example GraphQL query to retrieve region information, including unique identifiers (UID) and names. This query can be executed within the GraphiQL interface to test data retrieval from the Skedulo backend. ```graphql query fetchRegions { regions { edges { node { UID Name } } } } ```