openapi: 3.0.0
info:
  version: 0.9.0
  title: Glean API
  x-source-commit-sha: 6f50f0b325ae618cb38dd2fdc0b334e9d6ccf805
  description: |
    # Introduction
    In addition to the data sources that Glean has built-in support for, Glean also provides a REST API that enables customers to put arbitrary content in the search index. This is useful, for example, for doing permissions-aware search over content in internal tools that reside on-prem as well as for searching over applications that Glean does not currently support first class. In addition these APIs allow the customer to push organization data (people info, organization structure etc) into Glean.

    # Usage guidelines
    This API is evolving fast. Glean will provide advance notice of any planned backwards incompatible changes along
    with a 6-month sunset period for anything that requires developers to adopt the new versions.

    # API Clients
    Official API clients for the Glean Indexing API are available in multiple languages:

    - [Python](https://github.com/gleanwork/api-client-python)
    - [TypeScript](https://github.com/gleanwork/api-client-typescript)
    - [Go](https://github.com/gleanwork/api-client-go)
    - [Java](https://github.com/gleanwork/api-client-java)

    These API clients provide type-safe, idiomatic interfaces for working with Glean IndexingAPIs in your language of choice.
  x-logo:
    url: https://app.glean.com/images/glean-text2.svg
  x-open-api-commit-sha: 98fce8303895c9cdc333fe1210501e17f21a2800
  x-speakeasy-name: Glean API
servers:
  - url: https://{instance}-be.glean.com
    variables:
      instance:
        default: instance-name
        description: The instance name (typically the email domain without the TLD) that determines the deployment backend.
security:
  - APIToken: []
tags:
  - name: Datasources
    description: Manage datasources.
  - name: Documents
    description: Index documents from a datasource.
  - name: People
    description: Index employee people data.
  - name: Permissions
    description: Manage users, groups and membership.
  - name: Authentication
    description: Manage indexing API tokens.
paths:
  /api/index/v1/indexdocument:
    post:
      summary: Index document
      description: Adds a document to the index or updates an existing document.
      tags:
        - Documents
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IndexDocumentRequest"
        required: true
        x-exportParamName: IndexDocumentRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
        "429":
          description: Too Many Requests
      x-speakeasy-name-override: addOrUpdate
      x-speakeasy-group: indexing.documents
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean, models
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.documents.add_or_update(document=models.DocumentDefinition(
                    datasource="<value>",
                ))

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.documents.addOrUpdate({
                document: {
                  datasource: "<value>",
                },
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DocumentDefinition;
            import com.glean.api_client.glean_api_client.models.components.IndexDocumentRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1IndexdocumentResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    IndexDocumentRequest req = IndexDocumentRequest.builder()
                            .document(DocumentDefinition.builder()
                                .datasource("<value>")
                                .build())
                            .build();

                    PostApiIndexV1IndexdocumentResponse res = sdk.indexing().documents().addOrUpdate()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Documents.AddOrUpdate(ctx, components.IndexDocumentRequest{\n        Document: components.DocumentDefinition{\n            Datasource: \"<value>\",\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/indexdocuments:
    post:
      summary: Index documents
      description: Adds or updates multiple documents in the index. Please refer to the [bulk indexing](https://developers.glean.com/indexing/documents/bulk-indexing/choosing-indexdocuments-vs-bulkindexdocuments) documentation for an explanation of when to use this endpoint.
      tags:
        - Documents
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IndexDocumentsRequest"
        required: true
        x-exportParamName: IndexDocumentsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
        "429":
          description: Too Many Requests
      x-speakeasy-name-override: index
      x-speakeasy-group: indexing.documents
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.documents.index(datasource="<value>", documents=[])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.documents.index({
                datasource: "<value>",
                documents: [],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.IndexDocumentsRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1IndexdocumentsResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    IndexDocumentsRequest req = IndexDocumentsRequest.builder()
                            .datasource("<value>")
                            .documents(List.of())
                            .build();

                    PostApiIndexV1IndexdocumentsResponse res = sdk.indexing().documents().index()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Documents.Index(ctx, components.IndexDocumentsRequest{\n        Datasource: \"<value>\",\n        Documents: []components.DocumentDefinition{},\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/bulkindexdocuments:
    post:
      summary: Bulk index documents
      description: Replaces the documents in a datasource using paginated batch API calls. Please refer to the [bulk indexing](https://developers.glean.com/indexing/documents/bulk-upload-model) documentation for an explanation of how to use bulk endpoints.
      tags:
        - Documents
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BulkIndexDocumentsRequest"
        required: true
        x-exportParamName: BulkIndexDocumentsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: bulkIndex
      x-speakeasy-group: indexing.documents
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.documents.bulk_index(upload_id="<id>", datasource="<value>", documents=[])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.documents.bulkIndex({
                uploadId: "<id>",
                datasource: "<value>",
                documents: [],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.BulkIndexDocumentsRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1BulkindexdocumentsResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    BulkIndexDocumentsRequest req = BulkIndexDocumentsRequest.builder()
                            .uploadId("<id>")
                            .datasource("<value>")
                            .documents(List.of())
                            .build();

                    PostApiIndexV1BulkindexdocumentsResponse res = sdk.indexing().documents().bulkIndex()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Documents.BulkIndex(ctx, components.BulkIndexDocumentsRequest{\n        UploadID: \"<id>\",\n        Datasource: \"<value>\",\n        Documents: []components.DocumentDefinition{},\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/updatepermissions:
    post:
      summary: Update document permissions
      description: Updates the permissions for a given document without modifying document content.
      tags:
        - Documents
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdatePermissionsRequest"
        required: true
        x-exportParamName: UpdatePermissionsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
        "429":
          description: Too Many Requests
      x-speakeasy-name-override: updatePermissions
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.update_permissions(datasource="<value>", permissions={})

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.updatePermissions({
                datasource: "<value>",
                permissions: {},
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DocumentPermissionsDefinition;
            import com.glean.api_client.glean_api_client.models.components.UpdatePermissionsRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1UpdatepermissionsResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    UpdatePermissionsRequest req = UpdatePermissionsRequest.builder()
                            .datasource("<value>")
                            .permissions(DocumentPermissionsDefinition.builder()
                                .build())
                            .build();

                    PostApiIndexV1UpdatepermissionsResponse res = sdk.indexing().permissions().updatePermissions()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.UpdatePermissions(ctx, components.UpdatePermissionsRequest{\n        Datasource: \"<value>\",\n        Permissions: components.DocumentPermissionsDefinition{},\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/processalldocuments:
    post:
      summary: Schedules the processing of uploaded documents
      description: |
        Schedules the immediate processing of documents uploaded through the indexing API. By default the uploaded documents will be processed asynchronously but this API can be used to schedule processing of all documents on demand.

        If a `datasource` parameter is specified, processing is limited to that custom datasource. Without it, processing applies to all documents across all custom datasources.
        #### Rate Limits
        This endpoint is rate-limited to one usage every 3 hours. Exceeding this limit results in a 429 response code. Here's how the rate limit works:
        1. Calling `/processalldocuments` for datasource `foo` prevents another call for `foo` for 3 hours.
        2. Calling `/processalldocuments` for datasource `foo` doesn't affect immediate calls for `bar`.
        3. Calling `/processalldocuments` for all datasources prevents any datasource calls for 3 hours.
        4. Calling `/processalldocuments` for datasource `foo` doesn't affect immediate calls for all datasources.

        For more frequent document processing, contact Glean support.
      tags:
        - Documents
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProcessAllDocumentsRequest"
        x-exportParamName: ProcessAllDocumentsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "429":
          description: Too Many Requests
      x-speakeasy-name-override: processAll
      x-speakeasy-group: indexing.documents
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.documents.process_all()

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.documents.processAll();


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1ProcessalldocumentsResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1ProcessalldocumentsResponse res = sdk.indexing().documents().processAll()
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Documents.ProcessAll(ctx, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/deletedocument:
    post:
      summary: Delete document
      description: Deletes the specified document from the index. Succeeds if document is not present.
      tags:
        - Documents
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DeleteDocumentRequest"
        required: true
        x-exportParamName: DeleteDocumentRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: delete
      x-speakeasy-group: indexing.documents
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.documents.delete(datasource="<value>", object_type="<value>", id="<id>")

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.documents.delete({
                datasource: "<value>",
                objectType: "<value>",
                id: "<id>",
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DeleteDocumentRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DeletedocumentResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    DeleteDocumentRequest req = DeleteDocumentRequest.builder()
                            .datasource("<value>")
                            .objectType("<value>")
                            .id("<id>")
                            .build();

                    PostApiIndexV1DeletedocumentResponse res = sdk.indexing().documents().delete()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Documents.Delete(ctx, components.DeleteDocumentRequest{\n        Datasource: \"<value>\",\n        ObjectType: \"<value>\",\n        ID: \"<id>\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/indexuser:
    post:
      summary: Index user
      description: Adds a datasource user or updates an existing user.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IndexUserRequest"
        required: true
        x-exportParamName: IndexUserRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: indexUser
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.index_user(datasource="<value>", user={
                    "email": "Art.Schaden@hotmail.com",
                    "name": "<value>",
                })

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.indexUser({
                datasource: "<value>",
                user: {
                  email: "Art.Schaden@hotmail.com",
                  name: "<value>",
                },
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DatasourceUserDefinition;
            import com.glean.api_client.glean_api_client.models.components.IndexUserRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1IndexuserResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    IndexUserRequest req = IndexUserRequest.builder()
                            .datasource("<value>")
                            .user(DatasourceUserDefinition.builder()
                                .email("Art.Schaden@hotmail.com")
                                .name("<value>")
                                .build())
                            .build();

                    PostApiIndexV1IndexuserResponse res = sdk.indexing().permissions().indexUser()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.IndexUser(ctx, components.IndexUserRequest{\n        Datasource: \"<value>\",\n        User: components.DatasourceUserDefinition{\n            Email: \"Art.Schaden@hotmail.com\",\n            Name: \"<value>\",\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/bulkindexusers:
    post:
      summary: Bulk index users
      description: |
        Replaces the users in a datasource using paginated batch API calls. Please refer to the [bulk indexing](https://developers.glean.com/indexing/documents/bulk-upload-model) documentation for an explanation of how to use bulk endpoints.
        Note: Any users deleted from the existing set will have their associated memberships deleted as well.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BulkIndexUsersRequest"
        required: true
        x-exportParamName: BulkIndexUsersRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: bulkIndexUsers
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.bulk_index_users(upload_id="<id>", datasource="<value>", users=[
                    {
                        "email": "Ivory_Cummerata@hotmail.com",
                        "name": "<value>",
                    },
                ])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.bulkIndexUsers({
                uploadId: "<id>",
                datasource: "<value>",
                users: [
                  {
                    email: "Ivory_Cummerata@hotmail.com",
                    name: "<value>",
                  },
                  {
                    email: "Ivory_Cummerata@hotmail.com",
                    name: "<value>",
                  },
                  {
                    email: "Ivory_Cummerata@hotmail.com",
                    name: "<value>",
                  },
                ],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.BulkIndexUsersRequest;
            import com.glean.api_client.glean_api_client.models.components.DatasourceUserDefinition;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1BulkindexusersResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    BulkIndexUsersRequest req = BulkIndexUsersRequest.builder()
                            .uploadId("<id>")
                            .datasource("<value>")
                            .users(List.of(
                                DatasourceUserDefinition.builder()
                                    .email("Ivory_Cummerata@hotmail.com")
                                    .name("<value>")
                                    .build(),
                                DatasourceUserDefinition.builder()
                                    .email("Ivory_Cummerata@hotmail.com")
                                    .name("<value>")
                                    .build(),
                                DatasourceUserDefinition.builder()
                                    .email("Ivory_Cummerata@hotmail.com")
                                    .name("<value>")
                                    .build()))
                            .build();

                    PostApiIndexV1BulkindexusersResponse res = sdk.indexing().permissions().bulkIndexUsers()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.BulkIndexUsers(ctx, components.BulkIndexUsersRequest{\n        UploadID: \"<id>\",\n        Datasource: \"<value>\",\n        Users: []components.DatasourceUserDefinition{\n            components.DatasourceUserDefinition{\n                Email: \"Ivory_Cummerata@hotmail.com\",\n                Name: \"<value>\",\n            },\n            components.DatasourceUserDefinition{\n                Email: \"Ivory_Cummerata@hotmail.com\",\n                Name: \"<value>\",\n            },\n            components.DatasourceUserDefinition{\n                Email: \"Ivory_Cummerata@hotmail.com\",\n                Name: \"<value>\",\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/indexgroup:
    post:
      summary: Index group
      description: Add or update a group in the datasource.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IndexGroupRequest"
        required: true
        x-exportParamName: IndexGroupRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: indexGroup
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.index_group(datasource="<value>", group={
                    "name": "<value>",
                })

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.indexGroup({
                datasource: "<value>",
                group: {
                  name: "<value>",
                },
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DatasourceGroupDefinition;
            import com.glean.api_client.glean_api_client.models.components.IndexGroupRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1IndexgroupResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    IndexGroupRequest req = IndexGroupRequest.builder()
                            .datasource("<value>")
                            .group(DatasourceGroupDefinition.builder()
                                .name("<value>")
                                .build())
                            .build();

                    PostApiIndexV1IndexgroupResponse res = sdk.indexing().permissions().indexGroup()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.IndexGroup(ctx, components.IndexGroupRequest{\n        Datasource: \"<value>\",\n        Group: components.DatasourceGroupDefinition{\n            Name: \"<value>\",\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/bulkindexgroups:
    post:
      summary: Bulk index groups
      description: |
        Replaces the groups in a datasource using paginated batch API calls. Please refer to the [bulk indexing](https://developers.glean.com/indexing/documents/bulk-upload-model) documentation for an explanation of how to use bulk endpoints.
        Note: Any groups deleted from the existing set will have their associated memberships deleted as well.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BulkIndexGroupsRequest"
        required: true
        x-exportParamName: BulkIndexGroupsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: bulkIndexGroups
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.bulk_index_groups(upload_id="<id>", datasource="<value>", groups=[
                    {
                        "name": "<value>",
                    },
                ])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.bulkIndexGroups({
                uploadId: "<id>",
                datasource: "<value>",
                groups: [
                  {
                    name: "<value>",
                  },
                  {
                    name: "<value>",
                  },
                ],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.BulkIndexGroupsRequest;
            import com.glean.api_client.glean_api_client.models.components.DatasourceGroupDefinition;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1BulkindexgroupsResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    BulkIndexGroupsRequest req = BulkIndexGroupsRequest.builder()
                            .uploadId("<id>")
                            .datasource("<value>")
                            .groups(List.of(
                                DatasourceGroupDefinition.builder()
                                    .name("<value>")
                                    .build(),
                                DatasourceGroupDefinition.builder()
                                    .name("<value>")
                                    .build()))
                            .build();

                    PostApiIndexV1BulkindexgroupsResponse res = sdk.indexing().permissions().bulkIndexGroups()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.BulkIndexGroups(ctx, components.BulkIndexGroupsRequest{\n        UploadID: \"<id>\",\n        Datasource: \"<value>\",\n        Groups: []components.DatasourceGroupDefinition{\n            components.DatasourceGroupDefinition{\n                Name: \"<value>\",\n            },\n            components.DatasourceGroupDefinition{\n                Name: \"<value>\",\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/indexmembership:
    post:
      summary: Index membership
      description: Add the memberships of a group in the datasource.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IndexMembershipRequest"
        required: true
        x-exportParamName: IndexMembershipRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: indexMembership
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.index_membership(datasource="<value>", membership={
                    "group_name": "<value>",
                })

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.indexMembership({
                datasource: "<value>",
                membership: {
                  groupName: "<value>",
                },
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DatasourceMembershipDefinition;
            import com.glean.api_client.glean_api_client.models.components.IndexMembershipRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1IndexmembershipResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    IndexMembershipRequest req = IndexMembershipRequest.builder()
                            .datasource("<value>")
                            .membership(DatasourceMembershipDefinition.builder()
                                .groupName("<value>")
                                .build())
                            .build();

                    PostApiIndexV1IndexmembershipResponse res = sdk.indexing().permissions().indexMembership()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.IndexMembership(ctx, components.IndexMembershipRequest{\n        Datasource: \"<value>\",\n        Membership: components.DatasourceMembershipDefinition{\n            GroupName: \"<value>\",\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/bulkindexmemberships:
    post:
      summary: Bulk index memberships for a group
      description: Replaces the memberships for a group in a datasource using paginated batch API calls. Please refer to the [bulk indexing](https://developers.glean.com/indexing/documents/bulk-upload-model) documentation for an explanation of how to use bulk endpoints.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BulkIndexMembershipsRequest"
        required: true
        x-exportParamName: BulkIndexMembershipsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: bulkIndexMemberships
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.bulk_index_memberships(upload_id="<id>", datasource="<value>", memberships=[
                    {},
                ])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.bulkIndexMemberships({
                uploadId: "<id>",
                datasource: "<value>",
                memberships: [
                  {},
                  {},
                  {},
                ],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.BulkIndexMembershipsRequest;
            import com.glean.api_client.glean_api_client.models.components.DatasourceBulkMembershipDefinition;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1BulkindexmembershipsResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    BulkIndexMembershipsRequest req = BulkIndexMembershipsRequest.builder()
                            .uploadId("<id>")
                            .datasource("<value>")
                            .memberships(List.of(
                                DatasourceBulkMembershipDefinition.builder()
                                    .build(),
                                DatasourceBulkMembershipDefinition.builder()
                                    .build(),
                                DatasourceBulkMembershipDefinition.builder()
                                    .build()))
                            .build();

                    PostApiIndexV1BulkindexmembershipsResponse res = sdk.indexing().permissions().bulkIndexMemberships()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.BulkIndexMemberships(ctx, components.BulkIndexMembershipsRequest{\n        UploadID: \"<id>\",\n        Datasource: \"<value>\",\n        Memberships: []components.DatasourceBulkMembershipDefinition{\n            components.DatasourceBulkMembershipDefinition{},\n            components.DatasourceBulkMembershipDefinition{},\n            components.DatasourceBulkMembershipDefinition{},\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/processallmemberships:
    post:
      summary: Schedules the processing of group memberships
      description: |
        Schedules the immediate processing of all group memberships uploaded through the indexing API. By default the uploaded group memberships will be processed asynchronously but this API can be used to schedule processing of all memberships on demand.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProcessAllMembershipsRequest"
        x-exportParamName: ProcessAllMembershipsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
      x-speakeasy-name-override: processMemberships
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.process_memberships()

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.processMemberships();


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1ProcessallmembershipsResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1ProcessallmembershipsResponse res = sdk.indexing().permissions().processMemberships()
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.ProcessMemberships(ctx, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/deleteuser:
    post:
      summary: Delete user
      description: |
        Delete the user from the datasource. Silently succeeds if user is not present.
        Note: All memberships associated with the deleted user will also be deleted.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DeleteUserRequest"
        required: true
        x-exportParamName: DeleteUserRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: deleteUser
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.delete_user(datasource="<value>", email="Ed.Johnston@gmail.com")

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.deleteUser({
                datasource: "<value>",
                email: "Ed.Johnston@gmail.com",
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DeleteUserRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DeleteuserResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    DeleteUserRequest req = DeleteUserRequest.builder()
                            .datasource("<value>")
                            .email("Ed.Johnston@gmail.com")
                            .build();

                    PostApiIndexV1DeleteuserResponse res = sdk.indexing().permissions().deleteUser()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.DeleteUser(ctx, components.DeleteUserRequest{\n        Datasource: \"<value>\",\n        Email: \"Ed.Johnston@gmail.com\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/deletegroup:
    post:
      summary: Delete group
      description: |
        Delete group from the datasource. Silently succeeds if group is not present.
        Note: All memberships associated with the deleted group will also be deleted.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DeleteGroupRequest"
        required: true
        x-exportParamName: DeleteGroupRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: deleteGroup
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.delete_group(datasource="<value>", group_name="<value>")

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.deleteGroup({
                datasource: "<value>",
                groupName: "<value>",
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DeleteGroupRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DeletegroupResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    DeleteGroupRequest req = DeleteGroupRequest.builder()
                            .datasource("<value>")
                            .groupName("<value>")
                            .build();

                    PostApiIndexV1DeletegroupResponse res = sdk.indexing().permissions().deleteGroup()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.DeleteGroup(ctx, components.DeleteGroupRequest{\n        Datasource: \"<value>\",\n        GroupName: \"<value>\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/deletemembership:
    post:
      summary: Delete membership
      description: Delete membership to a group in the specified datasource. Silently succeeds if membership is not present.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DeleteMembershipRequest"
        required: true
        x-exportParamName: DeleteMembershipRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: deleteMembership
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.delete_membership(datasource="<value>", membership={
                    "group_name": "<value>",
                })

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.deleteMembership({
                datasource: "<value>",
                membership: {
                  groupName: "<value>",
                },
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DatasourceMembershipDefinition;
            import com.glean.api_client.glean_api_client.models.components.DeleteMembershipRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DeletemembershipResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    DeleteMembershipRequest req = DeleteMembershipRequest.builder()
                            .datasource("<value>")
                            .membership(DatasourceMembershipDefinition.builder()
                                .groupName("<value>")
                                .build())
                            .build();

                    PostApiIndexV1DeletemembershipResponse res = sdk.indexing().permissions().deleteMembership()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.DeleteMembership(ctx, components.DeleteMembershipRequest{\n        Datasource: \"<value>\",\n        Membership: components.DatasourceMembershipDefinition{\n            GroupName: \"<value>\",\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/debug/{datasource}/status:
    post:
      x-beta: true
      summary: |
        Beta: Get datasource status
      description: |
        Gather information about the datasource's overall status. Currently in beta, might undergo breaking changes without prior notice.

        Tip: Refer to the [Troubleshooting tutorial](https://developers.glean.com/indexing/debugging/datasource-config) for more information.
      tags:
        - Troubleshooting
      parameters:
        - name: datasource
          in: path
          description: The datasource to get debug status for.
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json; charset=UTF-8:
              schema:
                $ref: "#/components/schemas/DebugDatasourceStatusResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
      x-speakeasy-name-override: status
      x-speakeasy-group: indexing.datasource
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.datasource.status(datasource="<value>")

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.datasource.status("<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DebugDatasourceStatusResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1DebugDatasourceStatusResponse res = sdk.indexing().datasource().status()
                            .datasource("<value>")
                            .call();

                    if (res.debugDatasourceStatusResponse().isPresent()) {
                        System.out.println(res.debugDatasourceStatusResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Datasource.Status(ctx, \"<value>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.DebugDatasourceStatusResponse != nil {\n        // handle response\n    }\n}"
  /api/index/v1/debug/{datasource}/document:
    post:
      x-beta: true
      summary: |
        Beta: Get document information
      description: |
        Gives various information that would help in debugging related to a particular document. Currently in beta, might undergo breaking changes without prior notice.

        Tip: Refer to the [Troubleshooting tutorial](https://developers.glean.com/indexing/debugging/datasource-config) for more information.
      tags:
        - Troubleshooting
      parameters:
        - name: datasource
          in: path
          description: The datasource to which the document belongs
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/DebugDocumentRequest"
        required: true
        x-exportParamName: DebugDocumentRequest
      responses:
        "200":
          description: OK
          content:
            application/json; charset=UTF-8:
              schema:
                $ref: "#/components/schemas/DebugDocumentResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
      x-speakeasy-group: indexing.documents
      x-speakeasy-name-override: debug
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.documents.debug(datasource="<value>", object_type="Article", doc_id="art123")

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.documents.debug({
                objectType: "Article",
                docId: "art123",
              }, "<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DebugDocumentRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DebugDatasourceDocumentResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1DebugDatasourceDocumentResponse res = sdk.indexing().documents().debug()
                            .datasource("<value>")
                            .debugDocumentRequest(DebugDocumentRequest.builder()
                                .objectType("Article")
                                .docId("art123")
                                .build())
                            .call();

                    if (res.debugDocumentResponse().isPresent()) {
                        System.out.println(res.debugDocumentResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Documents.Debug(ctx, \"<value>\", components.DebugDocumentRequest{\n        ObjectType: \"Article\",\n        DocID: \"art123\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.DebugDocumentResponse != nil {\n        // handle response\n    }\n}"
  /api/index/v1/debug/{datasource}/documents:
    post:
      x-beta: true
      summary: |
        Beta: Get information of a batch of documents
      description: |
        Gives various information that would help in debugging related to a batch of documents. Currently in beta, might undergo breaking changes without prior notice.

        Tip: Refer to the [Troubleshooting tutorial](https://developers.glean.com/indexing/debugging/datasource-config) for more information.
      tags:
        - Troubleshooting
      parameters:
        - name: datasource
          in: path
          description: The datasource to which the document belongs
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/DebugDocumentsRequest"
        required: true
        x-exportParamName: DebugDocumentsRequest
      responses:
        "200":
          description: OK
          content:
            application/json; charset=UTF-8:
              schema:
                $ref: "#/components/schemas/DebugDocumentsResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
      x-speakeasy-group: indexing.documents
      x-speakeasy-name-override: debugMany
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.documents.debug_many(datasource="<value>", debug_documents=[])

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.documents.debugMany({
                debugDocuments: [
                  {
                    objectType: "Article",
                    docId: "art123",
                  },
                ],
              }, "<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DebugDocumentRequest;
            import com.glean.api_client.glean_api_client.models.components.DebugDocumentsRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DebugDatasourceDocumentsResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1DebugDatasourceDocumentsResponse res = sdk.indexing().documents().debugMany()
                            .datasource("<value>")
                            .debugDocumentsRequest(DebugDocumentsRequest.builder()
                                .debugDocuments(List.of(
                                    DebugDocumentRequest.builder()
                                        .objectType("Article")
                                        .docId("art123")
                                        .build()))
                                .build())
                            .call();

                    if (res.debugDocumentsResponse().isPresent()) {
                        System.out.println(res.debugDocumentsResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Documents.DebugMany(ctx, \"<value>\", components.DebugDocumentsRequest{\n        DebugDocuments: []components.DebugDocumentRequest{\n            components.DebugDocumentRequest{\n                ObjectType: \"Article\",\n                DocID: \"art123\",\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.DebugDocumentsResponse != nil {\n        // handle response\n    }\n}"
  /api/index/v1/debug/{datasource}/user:
    post:
      x-beta: true
      summary: |
        Beta: Get user information
      description: |
        Gives various information that would help in debugging related to a particular user. Currently in beta, might undergo breaking changes without prior notice.

        Tip: Refer to the [Troubleshooting tutorial](https://developers.glean.com/indexing/debugging/datasource-config) for more information.
      tags:
        - Troubleshooting
      parameters:
        - name: datasource
          in: path
          description: The datasource to which the user belongs
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/DebugUserRequest"
        required: true
        x-exportParamName: DebugUserRequest
      responses:
        "200":
          description: OK
          content:
            application/json; charset=UTF-8:
              schema:
                $ref: "#/components/schemas/DebugUserResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
      x-speakeasy-name-override: debug
      x-speakeasy-group: indexing.people
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.people.debug(datasource="<value>", email="u1@foo.com")

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.people.debug({
                email: "u1@foo.com",
              }, "<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DebugUserRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DebugDatasourceUserResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1DebugDatasourceUserResponse res = sdk.indexing().people().debug()
                            .datasource("<value>")
                            .debugUserRequest(DebugUserRequest.builder()
                                .email("u1@foo.com")
                                .build())
                            .call();

                    if (res.debugUserResponse().isPresent()) {
                        System.out.println(res.debugUserResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.People.Debug(ctx, \"<value>\", components.DebugUserRequest{\n        Email: \"u1@foo.com\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.DebugUserResponse != nil {\n        // handle response\n    }\n}"
  /api/index/v1/checkdocumentaccess:
    post:
      summary: Check document access
      description: |
        Check if a given user has access to access a document in a custom datasource

        Tip: Refer to the [Troubleshooting tutorial](https://developers.glean.com/indexing/debugging/datasource-config) for more information.
      tags:
        - Troubleshooting
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CheckDocumentAccessRequest"
        required: true
        x-exportParamName: CheckDocumentAccessRequest
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckDocumentAccessResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "429":
          description: Too Many Requests
      x-speakeasy-group: indexing.documents
      x-speakeasy-name-override: checkAccess
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.documents.check_access(datasource="<value>", object_type="<value>", doc_id="<id>", user_email="<value>")

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.documents.checkAccess({
                datasource: "<value>",
                objectType: "<value>",
                docId: "<id>",
                userEmail: "<value>",
              });

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.CheckDocumentAccessRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1CheckdocumentaccessResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    CheckDocumentAccessRequest req = CheckDocumentAccessRequest.builder()
                            .datasource("<value>")
                            .objectType("<value>")
                            .docId("<id>")
                            .userEmail("<value>")
                            .build();

                    PostApiIndexV1CheckdocumentaccessResponse res = sdk.indexing().documents().checkAccess()
                            .request(req)
                            .call();

                    if (res.checkDocumentAccessResponse().isPresent()) {
                        System.out.println(res.checkDocumentAccessResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Documents.CheckAccess(ctx, components.CheckDocumentAccessRequest{\n        Datasource: \"<value>\",\n        ObjectType: \"<value>\",\n        DocID: \"<id>\",\n        UserEmail: \"<value>\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.CheckDocumentAccessResponse != nil {\n        // handle response\n    }\n}"
  /api/index/v1/getdocumentstatus:
    post:
      deprecated: true
      summary: Get document upload and indexing status
      description: |
        Intended for debugging/validation. Fetches the current upload and indexing status of documents.

        Tip: Use [/debug/{datasource}/document](https://developers.glean.com/indexing/debugging/datasource-document) for richer information.
      tags:
        - Troubleshooting
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GetDocumentStatusRequest"
        required: true
        x-exportParamName: GetDocumentStatusRequest
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetDocumentStatusResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "429":
          description: Too Many Requests
      x-glean-deprecated:
        id: 7eec0433-78fd-49f9-a34f-cca83640ec24
        introduced: "2026-02-03"
        message: Endpoint is deprecated
        removal: "2026-10-15"
      x-speakeasy-deprecation-message: "Deprecated on 2026-02-03, removal scheduled for 2026-10-15: Endpoint is deprecated"
      x-speakeasy-group: indexing.documents
      x-speakeasy-name-override: status
  /api/index/v1/getdocumentcount:
    post:
      deprecated: true
      summary: Get document count
      description: |
        Fetches document count for the specified custom datasource.

        Tip: Use [/debug/{datasource}/status](https://developers.glean.com/indexing/debugging/datasource-status) for richer information.
      tags:
        - Troubleshooting
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GetDocumentCountRequest"
        required: true
        x-exportParamName: GetDocumentCountRequest
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetDocumentCountResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-glean-deprecated:
        id: c164089c-9412-4724-acf6-caf3b0d2a527
        introduced: "2026-02-03"
        message: Endpoint is deprecated
        removal: "2026-10-15"
      x-speakeasy-deprecation-message: "Deprecated on 2026-02-03, removal scheduled for 2026-10-15: Endpoint is deprecated"
      x-speakeasy-group: indexing.documents
      x-speakeasy-name-override: count
  /api/index/v1/getusercount:
    post:
      deprecated: true
      summary: Get user count
      description: |
        Fetches user count for the specified custom datasource.

        Tip: Use [/debug/{datasource}/status](https://developers.glean.com/indexing/debugging/datasource-status) for richer information.
      tags:
        - Troubleshooting
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GetUserCountRequest"
        required: true
        x-exportParamName: GetUserCountRequest
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetUserCountResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-glean-deprecated:
        id: 4f5df873-385e-4539-8183-cb764b0f06b9
        introduced: "2026-02-03"
        message: Endpoint is deprecated
        removal: "2026-10-15"
      x-speakeasy-deprecation-message: "Deprecated on 2026-02-03, removal scheduled for 2026-10-15: Endpoint is deprecated"
      x-speakeasy-name-override: count
      x-speakeasy-group: indexing.people
  /api/index/v1/betausers:
    post:
      summary: Beta users
      description: Allow the datasource be visible to the specified beta users. The default behaviour is datasource being visible to all users if it is enabled and not visible to any user if it is not enabled.
      tags:
        - Permissions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GreenlistUsersRequest"
        required: true
        x-exportParamName: GreenlistUsersRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: authorizeBetaUsers
      x-speakeasy-group: indexing.permissions
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.permissions.authorize_beta_users(datasource="<value>", emails=[
                    "Neil92@gmail.com",
                    "Alejandrin_Boyer4@hotmail.com",
                    "Shyanne_McLaughlin95@hotmail.com",
                ])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.permissions.authorizeBetaUsers({
                datasource: "<value>",
                emails: [
                  "Neil92@gmail.com",
                  "Alejandrin_Boyer4@hotmail.com",
                  "Shyanne_McLaughlin95@hotmail.com",
                ],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.GreenlistUsersRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1BetausersResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    GreenlistUsersRequest req = GreenlistUsersRequest.builder()
                            .datasource("<value>")
                            .emails(List.of(
                                "Neil92@gmail.com",
                                "Alejandrin_Boyer4@hotmail.com",
                                "Shyanne_McLaughlin95@hotmail.com"))
                            .build();

                    PostApiIndexV1BetausersResponse res = sdk.indexing().permissions().authorizeBetaUsers()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Permissions.AuthorizeBetaUsers(ctx, components.GreenlistUsersRequest{\n        Datasource: \"<value>\",\n        Emails: []string{\n            \"Neil92@gmail.com\",\n            \"Alejandrin_Boyer4@hotmail.com\",\n            \"Shyanne_McLaughlin95@hotmail.com\",\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/adddatasource:
    post:
      summary: Add or update datasource
      description: Add or update a custom datasource and its schema.
      tags:
        - Datasources
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomDatasourceConfig"
        required: true
        x-exportParamName: DatasourceConfig
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
      x-speakeasy-name-override: add
      x-speakeasy-group: indexing.datasources
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean, models
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.datasources.add(name="<value>", datasource_category=models.DatasourceCategory.UNCATEGORIZED, url_regex="https://example-company.datasource.com/.*", quicklinks=[
                    {
                        "icon_config": {
                            "color": "#343CED",
                            "key": "person_icon",
                            "icon_type": models.IconType.GLYPH,
                            "name": "user",
                        },
                    },
                ], trust_url_regex_for_view_activity=True, strip_fragment_in_canonical_url=True, is_entity_datasource=False, is_test_datasource=False)

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.datasources.add({
                name: "<value>",
                urlRegex: "https://example-company.datasource.com/.*",
                quicklinks: [
                  {
                    iconConfig: {
                      color: "#343CED",
                      key: "person_icon",
                      iconType: "GLYPH",
                      name: "user",
                    },
                  },
                ],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.*;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1AdddatasourceResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    CustomDatasourceConfig req = CustomDatasourceConfig.builder()
                            .name("<value>")
                            .urlRegex("https://example-company.datasource.com/.*")
                            .quicklinks(List.of(
                                Quicklink.builder()
                                    .iconConfig(IconConfig.builder()
                                        .color("#343CED")
                                        .key("person_icon")
                                        .iconType(IconType.GLYPH)
                                        .name("user")
                                        .build())
                                    .build()))
                            .build();

                    PostApiIndexV1AdddatasourceResponse res = sdk.indexing().datasources().add()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Datasources.Add(ctx, components.CustomDatasourceConfig{\n        Name: \"<value>\",\n        URLRegex: apiclientgo.Pointer(\"https://example-company.datasource.com/.*\"),\n        Quicklinks: []components.Quicklink{\n            components.Quicklink{\n                IconConfig: &components.IconConfig{\n                    Color: apiclientgo.Pointer(\"#343CED\"),\n                    Key: apiclientgo.Pointer(\"person_icon\"),\n                    IconType: components.IconTypeGlyph.ToPointer(),\n                    Name: apiclientgo.Pointer(\"user\"),\n                },\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/getdatasourceconfig:
    post:
      summary: Get datasource config
      description: Fetches the datasource config for the specified custom datasource.
      tags:
        - Datasources
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GetDatasourceConfigRequest"
        required: true
        x-exportParamName: GetDatasourceConfigRequest
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomDatasourceConfig"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: retrieveConfig
      x-speakeasy-group: indexing.datasources
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.datasources.retrieve_config(datasource="<value>")

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.datasources.retrieveConfig({
                datasource: "<value>",
              });

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.GetDatasourceConfigRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1GetdatasourceconfigResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    GetDatasourceConfigRequest req = GetDatasourceConfigRequest.builder()
                            .datasource("<value>")
                            .build();

                    PostApiIndexV1GetdatasourceconfigResponse res = sdk.indexing().datasources().retrieveConfig()
                            .request(req)
                            .call();

                    if (res.customDatasourceConfig().isPresent()) {
                        System.out.println(res.customDatasourceConfig().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Datasources.RetrieveConfig(ctx, components.GetDatasourceConfigRequest{\n        Datasource: \"<value>\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.CustomDatasourceConfig != nil {\n        // handle response\n    }\n}"
  /api/index/v1/rotatetoken:
    post:
      summary: Rotate token
      description: Rotates the secret value inside the Indexing API token and returns the new raw secret. All other properties of the token are unchanged. In order to rotate the secret value, include the token as the bearer token in the `/rotatetoken` request. Please refer to [Token rotation](https://developers.glean.com/indexing/authentication/token-rotation) documentation for more information.
      tags:
        - Authentication
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RotateTokenResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
      x-speakeasy-name-override: rotateToken
      x-speakeasy-group: indexing.authentication
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.authentication.rotate_token()

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.authentication.rotateToken();

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1RotatetokenResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1RotatetokenResponse res = sdk.indexing().authentication().rotateToken()
                            .call();

                    if (res.rotateTokenResponse().isPresent()) {
                        System.out.println(res.rotateTokenResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Authentication.RotateToken(ctx)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.RotateTokenResponse != nil {\n        // handle response\n    }\n}"
  /api/index/v1/indexemployee:
    post:
      summary: Index employee
      description: Adds an employee or replaces the existing information about an employee.
      tags:
        - People
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/IndexEmployeeRequest"
        required: true
        x-exportParamName: IndexEmployeeRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: index
      x-speakeasy-group: indexing.people
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.people.index(employee={
                    "email": "Jerrold_Hermann@hotmail.com",
                    "department": "<value>",
                    "datasource_profiles": [
                        {
                            "datasource": "github",
                            "handle": "<value>",
                        },
                    ],
                })

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.people.index({
                employee: {
                  email: "Jerrold_Hermann@hotmail.com",
                  department: "<value>",
                  datasourceProfiles: [
                    {
                      datasource: "github",
                      handle: "<value>",
                    },
                  ],
                },
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.*;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1IndexemployeeResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    IndexEmployeeRequest req = IndexEmployeeRequest.builder()
                            .employee(EmployeeInfoDefinition.builder()
                                .email("Jerrold_Hermann@hotmail.com")
                                .department("<value>")
                                .datasourceProfiles(List.of(
                                    DatasourceProfile.builder()
                                        .datasource("github")
                                        .handle("<value>")
                                        .build()))
                                .build())
                            .build();

                    PostApiIndexV1IndexemployeeResponse res = sdk.indexing().people().index()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.People.Index(ctx, components.IndexEmployeeRequest{\n        Employee: components.EmployeeInfoDefinition{\n            Email: \"Jerrold_Hermann@hotmail.com\",\n            Department: \"<value>\",\n            DatasourceProfiles: []components.DatasourceProfile{\n                components.DatasourceProfile{\n                    Datasource: \"github\",\n                    Handle: \"<value>\",\n                },\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/bulkindexemployees:
    post:
      summary: Bulk index employees
      description: Replaces all the currently indexed employees using paginated batch API calls. Please refer to the [bulk indexing](https://developers.glean.com/indexing/documents/bulk-upload-model) documentation for an explanation of how to use bulk endpoints.
      tags:
        - People
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/BulkIndexEmployeesRequest"
        required: true
        x-exportParamName: BulkIndexEmployeesRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-glean-deprecated:
        id: ce596f49-55c4-465e-bf3c-5a3a33906e1f
        introduced: "2026-02-03"
        message: Endpoint is deprecated
        removal: "2026-10-15"
      deprecated: true
      x-speakeasy-deprecation-message: "Deprecated on 2026-02-03, removal scheduled for 2026-10-15: Endpoint is deprecated"
      x-speakeasy-name-override: bulkIndex
      x-speakeasy-group: indexing.people
  /api/index/v1/indexemployeelist: {}
  /api/index/v1/processallemployeesandteams:
    post:
      summary: Schedules the processing of uploaded employees and teams
      description: |
        Schedules the immediate processing of employees and teams uploaded through the indexing API. By default all uploaded people data will be processed asynchronously but this API can be used to schedule its processing on demand.
      tags:
        - People
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "429":
          description: Too Many Requests
      x-speakeasy-name-override: processAllEmployeesAndTeams
      x-speakeasy-group: indexing.people
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.people.process_all_employees_and_teams()

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.people.processAllEmployeesAndTeams();


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1ProcessallemployeesandteamsResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1ProcessallemployeesandteamsResponse res = sdk.indexing().people().processAllEmployeesAndTeams()
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.People.ProcessAllEmployeesAndTeams(ctx)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/deleteemployee:
    post:
      summary: Delete employee
      description: Delete an employee. Silently succeeds if employee is not present.
      tags:
        - People
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/DeleteEmployeeRequest"
        required: true
        x-exportParamName: DeleteEmployeeRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: delete
      x-speakeasy-group: indexing.people
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.people.delete(employee_email="<value>")

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.people.delete({
                employeeEmail: "<value>",
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DeleteEmployeeRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DeleteemployeeResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    DeleteEmployeeRequest req = DeleteEmployeeRequest.builder()
                            .employeeEmail("<value>")
                            .build();

                    PostApiIndexV1DeleteemployeeResponse res = sdk.indexing().people().delete()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.People.Delete(ctx, components.DeleteEmployeeRequest{\n        EmployeeEmail: \"<value>\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/indexteam:
    post:
      summary: Index team
      description: Adds a team or updates information about a team
      tags:
        - People
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/IndexTeamRequest"
        required: true
        x-exportParamName: IndexTeamRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: indexTeam
      x-speakeasy-group: indexing.people
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.people.index_team(team={
                    "id": "<id>",
                    "name": "<value>",
                    "datasource_profiles": [
                        {
                            "datasource": "github",
                            "handle": "<value>",
                        },
                    ],
                    "members": [
                        {
                            "email": "Valerie9@gmail.com",
                        },
                    ],
                })

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.people.indexTeam({
                team: {
                  id: "<id>",
                  name: "<value>",
                  datasourceProfiles: [
                    {
                      datasource: "github",
                      handle: "<value>",
                    },
                    {
                      datasource: "github",
                      handle: "<value>",
                    },
                    {
                      datasource: "github",
                      handle: "<value>",
                    },
                  ],
                  members: [
                    {
                      email: "Nasir.Hilll73@hotmail.com",
                    },
                  ],
                },
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.*;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1IndexteamResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    IndexTeamRequest req = IndexTeamRequest.builder()
                            .team(TeamInfoDefinition.builder()
                                .id("<id>")
                                .name("<value>")
                                .members(List.of(
                                    TeamMember.builder()
                                        .email("Nasir.Hilll73@hotmail.com")
                                        .build()))
                                .datasourceProfiles(List.of(
                                    DatasourceProfile.builder()
                                        .datasource("github")
                                        .handle("<value>")
                                        .build(),
                                    DatasourceProfile.builder()
                                        .datasource("github")
                                        .handle("<value>")
                                        .build(),
                                    DatasourceProfile.builder()
                                        .datasource("github")
                                        .handle("<value>")
                                        .build()))
                                .build())
                            .build();

                    PostApiIndexV1IndexteamResponse res = sdk.indexing().people().indexTeam()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.People.IndexTeam(ctx, components.IndexTeamRequest{\n        Team: components.TeamInfoDefinition{\n            ID: \"<id>\",\n            Name: \"<value>\",\n            DatasourceProfiles: []components.DatasourceProfile{\n                components.DatasourceProfile{\n                    Datasource: \"github\",\n                    Handle: \"<value>\",\n                },\n                components.DatasourceProfile{\n                    Datasource: \"github\",\n                    Handle: \"<value>\",\n                },\n                components.DatasourceProfile{\n                    Datasource: \"github\",\n                    Handle: \"<value>\",\n                },\n            },\n            Members: []components.TeamMember{\n                components.TeamMember{\n                    Email: \"Nasir.Hilll73@hotmail.com\",\n                },\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/deleteteam:
    post:
      summary: Delete team
      description: Delete a team based on provided id.
      tags:
        - People
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/DeleteTeamRequest"
        required: true
        x-exportParamName: DeleteTeamRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: deleteTeam
      x-speakeasy-group: indexing.people
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.people.delete_team(id="<id>")

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.people.deleteTeam({
                id: "<id>",
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DeleteTeamRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DeleteteamResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    DeleteTeamRequest req = DeleteTeamRequest.builder()
                            .id("<id>")
                            .build();

                    PostApiIndexV1DeleteteamResponse res = sdk.indexing().people().deleteTeam()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.People.DeleteTeam(ctx, components.DeleteTeamRequest{\n        ID: \"<id>\",\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/bulkindexteams:
    post:
      summary: Bulk index teams
      description: Replaces all the currently indexed teams using paginated batch API calls. Please refer to the [bulk indexing](https://developers.glean.com/indexing/documents/bulk-upload-model) documentation for an explanation of how to use bulk endpoints.
      tags:
        - People
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/BulkIndexTeamsRequest"
        required: true
        x-exportParamName: BulkIndexTeamsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: bulkIndexTeams
      x-speakeasy-group: indexing.people
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.people.bulk_index_teams(upload_id="<id>", teams=[
                    {
                        "id": "<id>",
                        "name": "<value>",
                        "datasource_profiles": [
                            {
                                "datasource": "github",
                                "handle": "<value>",
                            },
                        ],
                        "members": [
                            {
                                "email": "Nina_Erdman16@gmail.com",
                            },
                        ],
                    },
                ])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.people.bulkIndexTeams({
                uploadId: "<id>",
                teams: [
                  {
                    id: "<id>",
                    name: "<value>",
                    datasourceProfiles: [
                      {
                        datasource: "github",
                        handle: "<value>",
                      },
                      {
                        datasource: "github",
                        handle: "<value>",
                      },
                    ],
                    members: [],
                  },
                  {
                    id: "<id>",
                    name: "<value>",
                    datasourceProfiles: [
                      {
                        datasource: "github",
                        handle: "<value>",
                      },
                      {
                        datasource: "github",
                        handle: "<value>",
                      },
                    ],
                    members: [],
                  },
                  {
                    id: "<id>",
                    name: "<value>",
                    datasourceProfiles: [
                      {
                        datasource: "github",
                        handle: "<value>",
                      },
                      {
                        datasource: "github",
                        handle: "<value>",
                      },
                    ],
                    members: [],
                  },
                ],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.*;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1BulkindexteamsResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    BulkIndexTeamsRequest req = BulkIndexTeamsRequest.builder()
                            .uploadId("<id>")
                            .teams(List.of(
                                TeamInfoDefinition.builder()
                                    .id("<id>")
                                    .name("<value>")
                                    .members(List.of())
                                    .datasourceProfiles(List.of(
                                        DatasourceProfile.builder()
                                            .datasource("github")
                                            .handle("<value>")
                                            .build(),
                                        DatasourceProfile.builder()
                                            .datasource("github")
                                            .handle("<value>")
                                            .build()))
                                    .build(),
                                TeamInfoDefinition.builder()
                                    .id("<id>")
                                    .name("<value>")
                                    .members(List.of())
                                    .datasourceProfiles(List.of(
                                        DatasourceProfile.builder()
                                            .datasource("github")
                                            .handle("<value>")
                                            .build(),
                                        DatasourceProfile.builder()
                                            .datasource("github")
                                            .handle("<value>")
                                            .build()))
                                    .build(),
                                TeamInfoDefinition.builder()
                                    .id("<id>")
                                    .name("<value>")
                                    .members(List.of())
                                    .datasourceProfiles(List.of(
                                        DatasourceProfile.builder()
                                            .datasource("github")
                                            .handle("<value>")
                                            .build(),
                                        DatasourceProfile.builder()
                                            .datasource("github")
                                            .handle("<value>")
                                            .build()))
                                    .build()))
                            .build();

                    PostApiIndexV1BulkindexteamsResponse res = sdk.indexing().people().bulkIndexTeams()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.People.BulkIndexTeams(ctx, components.BulkIndexTeamsRequest{\n        UploadID: \"<id>\",\n        Teams: []components.TeamInfoDefinition{\n            components.TeamInfoDefinition{\n                ID: \"<id>\",\n                Name: \"<value>\",\n                DatasourceProfiles: []components.DatasourceProfile{\n                    components.DatasourceProfile{\n                        Datasource: \"github\",\n                        Handle: \"<value>\",\n                    },\n                    components.DatasourceProfile{\n                        Datasource: \"github\",\n                        Handle: \"<value>\",\n                    },\n                },\n                Members: []components.TeamMember{},\n            },\n            components.TeamInfoDefinition{\n                ID: \"<id>\",\n                Name: \"<value>\",\n                DatasourceProfiles: []components.DatasourceProfile{\n                    components.DatasourceProfile{\n                        Datasource: \"github\",\n                        Handle: \"<value>\",\n                    },\n                    components.DatasourceProfile{\n                        Datasource: \"github\",\n                        Handle: \"<value>\",\n                    },\n                },\n                Members: []components.TeamMember{},\n            },\n            components.TeamInfoDefinition{\n                ID: \"<id>\",\n                Name: \"<value>\",\n                DatasourceProfiles: []components.DatasourceProfile{\n                    components.DatasourceProfile{\n                        Datasource: \"github\",\n                        Handle: \"<value>\",\n                    },\n                    components.DatasourceProfile{\n                        Datasource: \"github\",\n                        Handle: \"<value>\",\n                    },\n                },\n                Members: []components.TeamMember{},\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/bulkindexshortcuts:
    post:
      summary: Bulk index external shortcuts
      description: Replaces all the currently indexed shortcuts using paginated batch API calls. Note that this endpoint is used for indexing shortcuts not hosted by Glean. If you want to upload shortcuts that would be hosted by Glean, please use the `/uploadshortcuts` endpoint. For information on what you can do with Golinks, which are Glean-hosted shortcuts, please refer to [this](https://docs.glean.com/user-guide/knowledge/go-links/how-go-links-work) page.
      tags:
        - Shortcuts
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/BulkIndexShortcutsRequest"
        required: true
        x-exportParamName: BulkIndexShortcutsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: bulkIndex
      x-speakeasy-group: indexing.shortcuts
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.shortcuts.bulk_index(upload_id="<id>", shortcuts=[
                    {
                        "input_alias": "<value>",
                        "destination_url": "https://plump-tune-up.biz/",
                        "created_by": "<value>",
                        "intermediate_url": "https://lean-sightseeing.net",
                    },
                ])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.shortcuts.bulkIndex({
                uploadId: "<id>",
                shortcuts: [
                  {
                    inputAlias: "<value>",
                    destinationUrl: "https://plump-tune-up.biz/",
                    createdBy: "<value>",
                    intermediateUrl: "https://lean-sightseeing.net",
                  },
                  {
                    inputAlias: "<value>",
                    destinationUrl: "https://plump-tune-up.biz/",
                    createdBy: "<value>",
                    intermediateUrl: "https://lean-sightseeing.net",
                  },
                ],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.BulkIndexShortcutsRequest;
            import com.glean.api_client.glean_api_client.models.components.ExternalShortcut;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1BulkindexshortcutsResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    BulkIndexShortcutsRequest req = BulkIndexShortcutsRequest.builder()
                            .uploadId("<id>")
                            .shortcuts(List.of(
                                ExternalShortcut.builder()
                                    .inputAlias("<value>")
                                    .destinationUrl("https://plump-tune-up.biz/")
                                    .createdBy("<value>")
                                    .intermediateUrl("https://lean-sightseeing.net")
                                    .build(),
                                ExternalShortcut.builder()
                                    .inputAlias("<value>")
                                    .destinationUrl("https://plump-tune-up.biz/")
                                    .createdBy("<value>")
                                    .intermediateUrl("https://lean-sightseeing.net")
                                    .build()))
                            .build();

                    PostApiIndexV1BulkindexshortcutsResponse res = sdk.indexing().shortcuts().bulkIndex()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Shortcuts.BulkIndex(ctx, components.BulkIndexShortcutsRequest{\n        UploadID: \"<id>\",\n        Shortcuts: []components.ExternalShortcut{\n            components.ExternalShortcut{\n                InputAlias: \"<value>\",\n                DestinationURL: \"https://plump-tune-up.biz/\",\n                CreatedBy: \"<value>\",\n                IntermediateURL: \"https://lean-sightseeing.net\",\n            },\n            components.ExternalShortcut{\n                InputAlias: \"<value>\",\n                DestinationURL: \"https://plump-tune-up.biz/\",\n                CreatedBy: \"<value>\",\n                IntermediateURL: \"https://lean-sightseeing.net\",\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/uploadshortcuts:
    post:
      summary: Upload shortcuts
      description: Creates glean shortcuts for uploaded shortcuts info. Glean would host the shortcuts, and they can be managed in the knowledge tab once uploaded.
      tags:
        - Shortcuts
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/UploadShortcutsRequest"
        required: true
        x-exportParamName: UploadShortcutsRequest
      responses:
        "200":
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "409":
          description: Conflict
      x-speakeasy-name-override: upload
      x-speakeasy-group: indexing.shortcuts
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                glean.indexing.shortcuts.upload(upload_id="<id>", shortcuts=[
                    {
                        "input_alias": "<value>",
                        "destination_url": "https://majestic-pharmacopoeia.info/",
                        "created_by": "<value>",
                    },
                ])

                # Use the SDK ...
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              await glean.indexing.shortcuts.upload({
                uploadId: "<id>",
                shortcuts: [
                  {
                    inputAlias: "<value>",
                    destinationUrl: "https://majestic-pharmacopoeia.info/",
                    createdBy: "<value>",
                  },
                  {
                    inputAlias: "<value>",
                    destinationUrl: "https://majestic-pharmacopoeia.info/",
                    createdBy: "<value>",
                  },
                  {
                    inputAlias: "<value>",
                    destinationUrl: "https://majestic-pharmacopoeia.info/",
                    createdBy: "<value>",
                  },
                ],
              });


            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.IndexingShortcut;
            import com.glean.api_client.glean_api_client.models.components.UploadShortcutsRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1UploadshortcutsResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    UploadShortcutsRequest req = UploadShortcutsRequest.builder()
                            .uploadId("<id>")
                            .shortcuts(List.of(
                                IndexingShortcut.builder()
                                    .inputAlias("<value>")
                                    .destinationUrl("https://majestic-pharmacopoeia.info/")
                                    .createdBy("<value>")
                                    .build(),
                                IndexingShortcut.builder()
                                    .inputAlias("<value>")
                                    .destinationUrl("https://majestic-pharmacopoeia.info/")
                                    .createdBy("<value>")
                                    .build(),
                                IndexingShortcut.builder()
                                    .inputAlias("<value>")
                                    .destinationUrl("https://majestic-pharmacopoeia.info/")
                                    .createdBy("<value>")
                                    .build()))
                            .build();

                    PostApiIndexV1UploadshortcutsResponse res = sdk.indexing().shortcuts().upload()
                            .request(req)
                            .call();

                    // handle response
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.Shortcuts.Upload(ctx, components.UploadShortcutsRequest{\n        UploadID: \"<id>\",\n        Shortcuts: []components.IndexingShortcut{\n            components.IndexingShortcut{\n                InputAlias: \"<value>\",\n                DestinationURL: \"https://majestic-pharmacopoeia.info/\",\n                CreatedBy: \"<value>\",\n            },\n            components.IndexingShortcut{\n                InputAlias: \"<value>\",\n                DestinationURL: \"https://majestic-pharmacopoeia.info/\",\n                CreatedBy: \"<value>\",\n            },\n            components.IndexingShortcut{\n                InputAlias: \"<value>\",\n                DestinationURL: \"https://majestic-pharmacopoeia.info/\",\n                CreatedBy: \"<value>\",\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
  /api/index/v1/debug/{datasource}/document/events:
    post:
      x-beta: true
      summary: |
        Beta: Get document lifecycle events
      description: |
        Retrieves lifecycle events for a specific document including upload time, index times and deletions. Rate limited to 1 request per minute per datasource. Currently in beta, might undergo breaking changes without prior notice.
      tags:
        - Troubleshooting
      parameters:
        - name: datasource
          in: path
          description: The datasource to which the document belongs
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json; charset=UTF-8:
            schema:
              $ref: "#/components/schemas/DebugDocumentLifecycleRequest"
        required: true
        x-exportParamName: DebugDocumentLifecycleRequest
      responses:
        "200":
          description: OK
          content:
            application/json; charset=UTF-8:
              schema:
                $ref: "#/components/schemas/DebugDocumentLifecycleResponse"
        "400":
          description: Bad Request
        "401":
          description: Not Authorized
        "429":
          description: Too Many Requests
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.troubleshooting.post_api_index_v1_debug_datasource_document_events(datasource="<value>", object_type="Article", doc_id="art123", start_date="2025-05-01", max_events=50)

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.troubleshooting.postApiIndexV1DebugDatasourceDocumentEvents({
                objectType: "Article",
                docId: "art123",
                startDate: "2025-05-01",
                maxEvents: 50,
              }, "<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.DebugDocumentLifecycleRequest;
            import com.glean.api_client.glean_api_client.models.operations.PostApiIndexV1DebugDatasourceDocumentEventsResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PostApiIndexV1DebugDatasourceDocumentEventsResponse res = sdk.troubleshooting().postApiIndexV1DebugDatasourceDocumentEvents()
                            .datasource("<value>")
                            .debugDocumentLifecycleRequest(DebugDocumentLifecycleRequest.builder()
                                .objectType("Article")
                                .docId("art123")
                                .startDate("2025-05-01")
                                .maxEvents(50L)
                                .build())
                            .call();

                    if (res.debugDocumentLifecycleResponse().isPresent()) {
                        System.out.println(res.debugDocumentLifecycleResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Troubleshooting.PostAPIIndexV1DebugDatasourceDocumentEvents(ctx, \"<value>\", components.DebugDocumentLifecycleRequest{\n        ObjectType: \"Article\",\n        DocID: \"art123\",\n        StartDate: apiclientgo.Pointer(\"2025-05-01\"),\n        MaxEvents: apiclientgo.Pointer[int64](50),\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.DebugDocumentLifecycleResponse != nil {\n        // handle response\n    }\n}"
  /rest/api/index/document/{docId}/custom-metadata/{groupName}:
    servers:
      - url: https://{instance}-be.glean.com
        variables:
          instance:
            default: instance-name
            description: The instance name (typically the email domain without the TLD) that determines the deployment backend.
    parameters:
      - name: docId
        in: path
        description: Unique Glean identifier of the document
        required: true
        schema:
          type: string
      - name: groupName
        in: path
        description: Name of the metadata group as specified while adding schema
        required: true
        schema:
          type: string
    put:
      summary: Add or update custom metadata
      description: Associates custom metadata with a specific document. Custom metadata enables you to enrich documents with additional structured information that can be used for search, filtering, and faceting.
      tags:
        - Custom Metadata
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomMetadataPutRequest"
        required: true
        x-exportParamName: CustomMetadataPutRequest
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "400":
          $ref: "#/components/responses/BadRequestError"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
        "404":
          $ref: "#/components/responses/NotFoundError"
        "429":
          $ref: "#/components/responses/TooManyRequestsError"
        "500":
          $ref: "#/components/responses/InternalServerError"
      x-speakeasy-name-override: upsert
      x-speakeasy-group: indexing.customMetadata
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.custom_metadata.upsert(doc_id="<id>", group_name="<value>", custom_metadata=[])

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.customMetadata.upsert({
                customMetadata: [],
              }, "<id>", "<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.CustomMetadataPutRequest;
            import com.glean.api_client.glean_api_client.models.errors.ErrorInfoResponse;
            import com.glean.api_client.glean_api_client.models.operations.PutRestApiIndexDocumentDocIdCustomMetadataGroupNameResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws ErrorInfoResponse, Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PutRestApiIndexDocumentDocIdCustomMetadataGroupNameResponse res = sdk.indexing().customMetadata().upsert()
                            .docId("<id>")
                            .groupName("<value>")
                            .customMetadataPutRequest(CustomMetadataPutRequest.builder()
                                .customMetadata(List.of())
                                .build())
                            .call();

                    if (res.successResponse().isPresent()) {
                        System.out.println(res.successResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.CustomMetadata.Upsert(ctx, \"<id>\", \"<value>\", components.CustomMetadataPutRequest{\n        CustomMetadata: []components.CustomProperty{},\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.SuccessResponse != nil {\n        // handle response\n    }\n}"
    delete:
      summary: Remove custom metadata
      description: Removes all custom metadata for the specified metadata group from a document.
      tags:
        - Custom Metadata
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "400":
          $ref: "#/components/responses/BadRequestError"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
        "404":
          $ref: "#/components/responses/NotFoundError"
        "429":
          $ref: "#/components/responses/TooManyRequestsError"
        "500":
          $ref: "#/components/responses/InternalServerError"
      x-speakeasy-name-override: delete
      x-speakeasy-group: indexing.customMetadata
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.custom_metadata.delete(doc_id="<id>", group_name="<value>")

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.customMetadata.delete("<id>", "<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.errors.ErrorInfoResponse;
            import com.glean.api_client.glean_api_client.models.operations.DeleteRestApiIndexDocumentDocIdCustomMetadataGroupNameResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws ErrorInfoResponse, Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    DeleteRestApiIndexDocumentDocIdCustomMetadataGroupNameResponse res = sdk.indexing().customMetadata().delete()
                            .docId("<id>")
                            .groupName("<value>")
                            .call();

                    if (res.successResponse().isPresent()) {
                        System.out.println(res.successResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.CustomMetadata.Delete(ctx, \"<id>\", \"<value>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.SuccessResponse != nil {\n        // handle response\n    }\n}"
  /rest/api/index/custom-metadata/schema/{groupName}:
    servers:
      - url: https://{instance}-be.glean.com
        variables:
          instance:
            default: instance-name
            description: The instance name (typically the email domain without the TLD) that determines the deployment backend.
    parameters:
      - name: groupName
        in: path
        description: Name of the metadata group schema
        required: true
        schema:
          type: string
    get:
      summary: Retrieve metadata schema
      description: Retrieves the current schema definition for a metadata group.
      tags:
        - Custom Metadata
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomMetadataSchema"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
        "404":
          $ref: "#/components/responses/NotFoundError"
        "429":
          $ref: "#/components/responses/TooManyRequestsError"
        "500":
          $ref: "#/components/responses/InternalServerError"
      x-speakeasy-name-override: getSchema
      x-speakeasy-group: indexing.customMetadata
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.custom_metadata.get_schema(group_name="<value>")

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.customMetadata.getSchema("<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.errors.ErrorInfoResponse;
            import com.glean.api_client.glean_api_client.models.operations.GetRestApiIndexCustomMetadataSchemaGroupNameResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws ErrorInfoResponse, Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    GetRestApiIndexCustomMetadataSchemaGroupNameResponse res = sdk.indexing().customMetadata().getSchema()
                            .groupName("<value>")
                            .call();

                    if (res.customMetadataSchema().isPresent()) {
                        System.out.println(res.customMetadataSchema().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.CustomMetadata.GetSchema(ctx, \"<value>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.CustomMetadataSchema != nil {\n        // handle response\n    }\n}"
    put:
      summary: Create or update metadata schema
      description: Defines or updates the schema for a metadata group. Schemas should be defined before indexing metadata.
      tags:
        - Custom Metadata
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomMetadataSchema"
        required: true
        x-exportParamName: CustomMetadataSchema
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "400":
          $ref: "#/components/responses/BadRequestError"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
        "409":
          description: Conflict - Schema already exists with incompatible changes
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorInfoResponse"
        "429":
          $ref: "#/components/responses/TooManyRequestsError"
        "500":
          $ref: "#/components/responses/InternalServerError"
      x-speakeasy-name-override: upsertSchema
      x-speakeasy-group: indexing.customMetadata
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.custom_metadata.upsert_schema(group_name="<value>", metadata_keys=[])

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.customMetadata.upsertSchema({
                metadataKeys: [],
              }, "<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.components.CustomMetadataSchema;
            import com.glean.api_client.glean_api_client.models.errors.ErrorInfoResponse;
            import com.glean.api_client.glean_api_client.models.operations.PutRestApiIndexCustomMetadataSchemaGroupNameResponse;
            import java.lang.Exception;
            import java.util.List;

            public class Application {

                public static void main(String[] args) throws ErrorInfoResponse, Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    PutRestApiIndexCustomMetadataSchemaGroupNameResponse res = sdk.indexing().customMetadata().upsertSchema()
                            .groupName("<value>")
                            .customMetadataSchema(CustomMetadataSchema.builder()
                                .metadataKeys(List.of())
                                .build())
                            .call();

                    if (res.successResponse().isPresent()) {
                        System.out.println(res.successResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"github.com/gleanwork/api-client-go/models/components\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.CustomMetadata.UpsertSchema(ctx, \"<value>\", components.CustomMetadataSchema{\n        MetadataKeys: []components.CustomMetadataPropertyDefinition{},\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.SuccessResponse != nil {\n        // handle response\n    }\n}"
    delete:
      summary: Remove metadata schema
      description: Deletes the schema definition for a metadata group. This does not delete existing metadata values on documents.
      tags:
        - Custom Metadata
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "400":
          $ref: "#/components/responses/BadRequestError"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
        "404":
          $ref: "#/components/responses/NotFoundError"
        "429":
          $ref: "#/components/responses/TooManyRequestsError"
        "500":
          $ref: "#/components/responses/InternalServerError"
      x-speakeasy-name-override: deleteSchema
      x-speakeasy-group: indexing.customMetadata
      x-codeSamples:
        - lang: python
          label: Python (API Client)
          source: |-
            from glean.api_client import Glean
            import os


            with Glean(
                api_token=os.getenv("GLEAN_API_TOKEN", ""),
                server_url="https://mycompany-be.glean.com",
            ) as glean:

                res = glean.indexing.custom_metadata.delete_schema(group_name="<value>")

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (API Client)
          source: |-
            import { Glean } from "@gleanwork/api-client";

            const glean = new Glean({
              apiToken: process.env["GLEAN_API_TOKEN"] ?? "",
              serverURL: "https://mycompany-be.glean.com",
            });

            async function run() {
              const result = await glean.indexing.customMetadata.deleteSchema("<value>");

              console.log(result);
            }

            run();
        - lang: java
          label: Java (API Client)
          source: |-
            package hello.world;

            import com.glean.api_client.glean_api_client.Glean;
            import com.glean.api_client.glean_api_client.models.errors.ErrorInfoResponse;
            import com.glean.api_client.glean_api_client.models.operations.DeleteRestApiIndexCustomMetadataSchemaGroupNameResponse;
            import java.lang.Exception;

            public class Application {

                public static void main(String[] args) throws ErrorInfoResponse, Exception {

                    Glean sdk = Glean.builder()
                            .apiToken(System.getenv().getOrDefault("GLEAN_API_TOKEN", ""))
                        .build();

                    DeleteRestApiIndexCustomMetadataSchemaGroupNameResponse res = sdk.indexing().customMetadata().deleteSchema()
                            .groupName("<value>")
                            .call();

                    if (res.successResponse().isPresent()) {
                        System.out.println(res.successResponse().get());
                    }
                }
            }
        - lang: go
          label: Go (API Client)
          source: "package main\n\nimport(\n\t\"context\"\n\t\"os\"\n\tapiclientgo \"github.com/gleanwork/api-client-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := apiclientgo.New(\n        apiclientgo.WithSecurity(os.Getenv(\"GLEAN_API_TOKEN\")),\n        apiclientgo.WithServerURL(\"https://mycompany-be.glean.com\"),\n    )\n\n    res, err := s.Indexing.CustomMetadata.DeleteSchema(ctx, \"<value>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.SuccessResponse != nil {\n        // handle response\n    }\n}"
components:
  securitySchemes:
    APIToken:
      scheme: bearer
      type: http
  responses:
    SuccessResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SuccessResponse"
    BadRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorInfoResponse"
    UnauthorizedError:
      description: Not Authorized
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorInfoResponse"
    NotFoundError:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorInfoResponse"
    TooManyRequestsError:
      description: Too Many Requests
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorInfoResponse"
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorInfoResponse"
  schemas:
    IndexDocumentRequest:
      type: object
      description: Describes the request body of the /indexdocument API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        document:
          description: Document being added/updated
          $ref: "#/components/schemas/DocumentDefinition"
      required:
        - document
    IndexDocumentsRequest:
      type: object
      description: Describes the request body of the /indexdocuments API call
      properties:
        uploadId:
          type: string
          description: Optional id parameter to identify and track a batch of documents.
        datasource:
          type: string
          description: Datasource of the documents
        documents:
          description: Batch of documents being added/updated
          type: array
          items:
            $ref: "#/components/schemas/DocumentDefinition"
      required:
        - documents
        - datasource
    UpdatePermissionsRequest:
      type: object
      description: Describes the request body of the /updatepermissions API call
      properties:
        datasource:
          type: string
        objectType:
          type: string
          description: The type of the document (Case, KnowledgeArticle for Salesforce for example). It cannot have spaces or _
        id:
          type: string
          description: The datasource specific id for the document. This field is case insensitive and should not be more than 200 characters in length.
        viewURL:
          type: string
          description: |
            The permalink for viewing the document. **Note: viewURL is a required field if id was not set when uploading the document.**'
        permissions:
          $ref: "#/components/schemas/DocumentPermissionsDefinition"
          description: The permissions that define who can view this document in the search results. Please refer to [this](https://developers.glean.com/indexing/documents/permissions) for more details.
      required:
        - permissions
        - datasource
    GetDocumentCountRequest:
      type: object
      description: Describes the request body of the /getdocumentcount API call
      properties:
        datasource:
          type: string
          description: Datasource name for which document count is needed.
      required:
        - datasource
    GetDocumentCountResponse:
      type: object
      description: Describes the response body of the /getdocumentcount API call
      properties:
        documentCount:
          type: integer
          description: Number of documents corresponding to the specified custom datasource.
    GetDocumentStatusRequest:
      type: object
      description: Describes the request body for /getdocumentstatus API call
      properties:
        datasource:
          type: string
          description: Datasource to get fetch document status for
        objectType:
          type: string
          description: Object type of the document to get the status for
        docId:
          type: string
          description: Glean Document ID within the datasource to get the status for.
      required:
        - datasource
        - objectType
        - docId
    GetDocumentStatusResponse:
      type: object
      description: Describes the response body of the /getdocumentstatus API call
      properties:
        uploadStatus:
          type: string
          description: Upload status, enum of NOT_UPLOADED, UPLOADED, STATUS_UNKNOWN
        lastUploadedAt:
          type: integer
          format: int64
          description: Time of last successful upload, in epoch seconds
        indexingStatus:
          type: string
          description: Indexing status, enum of NOT_INDEXED, INDEXED, STATUS_UNKNOWN
        lastIndexedAt:
          type: integer
          format: int64
          description: Time of last successful indexing, in epoch seconds
    BulkIndexRequest:
      type: object
      description: Describes the request body of a bulk upload API call
      required:
        - uploadId
      properties:
        uploadId:
          type: string
          description: Unique id that must be used for this bulk upload instance
        isFirstPage:
          type: boolean
          description: true if this is the first page of the upload. Defaults to false
        isLastPage:
          type: boolean
          description: true if this is the last page of the upload. Defaults to false
        forceRestartUpload:
          type: boolean
          description: Flag to discard previous upload attempts and start from scratch. Must be specified with isFirstPage=true
    BulkIndexTeamsRequest:
      type: object
      description: Describes the request body of the /bulkindexteams API call
      allOf:
        - $ref: "#/components/schemas/BulkIndexRequest"
        - type: object
          properties:
            teams:
              description: Batch of team information
              type: array
              items:
                $ref: "#/components/schemas/TeamInfoDefinition"
          required:
            - teams
    BulkIndexEmployeesRequest:
      type: object
      description: Describes the request body of the /bulkindexemployees API call
      allOf:
        - $ref: "#/components/schemas/BulkIndexRequest"
        - type: object
          properties:
            employees:
              description: Batch of employee information
              type: array
              items:
                $ref: "#/components/schemas/EmployeeInfoDefinition"
            disableStaleDataDeletionCheck:
              type: boolean
              description: True if older employee data needs to be force deleted after the upload completes. Defaults to older data being deleted only if the percentage of data being deleted is less than 20%. This must only be set when `isLastPage = true`
          required:
            - employees
    BulkIndexDocumentsRequest:
      type: object
      description: Describes the request body of the /bulkindexdocuments API call
      allOf:
        - $ref: "#/components/schemas/BulkIndexRequest"
        - type: object
          properties:
            datasource:
              type: string
              description: Datasource of the documents
            documents:
              description: Batch of documents for the datasource
              type: array
              items:
                $ref: "#/components/schemas/DocumentDefinition"
            disableStaleDocumentDeletionCheck:
              type: boolean
              description: True if older documents need to be force deleted after the upload completes. Defaults to older documents being deleted asynchronously. This must only be set when `isLastPage = true`
          required:
            - datasource
            - documents
    ProcessAllDocumentsRequest:
      type: object
      description: Describes the request body of the /processalldocuments API call
      properties:
        datasource:
          type: string
          description: If provided, process documents only for this custom datasource. Otherwise all uploaded documents are processed.
    DeleteDocumentRequest:
      type: object
      description: Describes the request body of the /deletedocument API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        datasource:
          type: string
          description: datasource of the document
        objectType:
          type: string
          description: object type of the document
        id:
          type: string
          description: The id of the document
      required:
        - datasource
        - id
        - objectType
    IndexUserRequest:
      type: object
      description: Describes the request body of the /indexuser API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        datasource:
          type: string
          description: The datasource for which the user is added
        user:
          description: The user to be added or updated
          $ref: "#/components/schemas/DatasourceUserDefinition"
      required:
        - datasource
        - user
    GetUserCountRequest:
      type: object
      description: Describes the request body of the /getusercount API call
      properties:
        datasource:
          type: string
          description: Datasource name for which user count is needed.
      required:
        - datasource
    GetUserCountResponse:
      type: object
      description: Describes the response body of the /getusercount API call
      properties:
        userCount:
          type: integer
          description: Number of users corresponding to the specified custom datasource.
    BulkIndexUsersRequest:
      type: object
      description: Describes the request body for the /bulkindexusers API call
      properties:
        uploadId:
          type: string
          description: Unique id that must be used for this instance of datasource users upload
        isFirstPage:
          type: boolean
          description: true if this is the first page of the upload. Defaults to false
        isLastPage:
          type: boolean
          description: true if this is the last page of the upload. Defaults to false
        forceRestartUpload:
          type: boolean
          description: Flag to discard previous upload attempts and start from scratch. Must be specified with isFirstPage=true
        datasource:
          type: string
          description: datasource of the users
        users:
          description: batch of users for the datasource
          type: array
          items:
            $ref: "#/components/schemas/DatasourceUserDefinition"
        disableStaleDataDeletionCheck:
          type: boolean
          description: True if older user data needs to be force deleted after the upload completes. Defaults to older data being deleted only if the percentage of data being deleted is less than a reasonable threshold. This must only be set when `isLastPage = true`
      required:
        - uploadId
        - datasource
        - users
    GreenlistUsersRequest:
      type: object
      description: Describes the request body of the /betausers API call
      properties:
        datasource:
          type: string
          description: Datasource which needs to be made visible to users specified in the `emails` field.
        emails:
          type: array
          description: The emails of the beta users
          items:
            type: string
            format: email
      required:
        - datasource
        - emails
    DatasourceUserDefinition:
      type: object
      description: describes a user in the datasource
      properties:
        email:
          type: string
        userId:
          description: To be supplied if the user id in the datasource is not the email
          type: string
        name:
          type: string
        isActive:
          type: boolean
          description: set to false if the user is a former employee or a bot
      required:
        - email
        - name
    IndexGroupRequest:
      type: object
      description: Describes the request body of the /indexgroup API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        datasource:
          type: string
          description: The datasource for which the group is added
        group:
          description: The group to be added or updated
          $ref: "#/components/schemas/DatasourceGroupDefinition"
      required:
        - datasource
        - group
    BulkIndexGroupsRequest:
      type: object
      description: Describes the request body for the /bulkindexgroups API call
      properties:
        uploadId:
          type: string
          description: Unique id that must be used for this instance of datasource groups upload
        isFirstPage:
          type: boolean
          description: true if this is the first page of the upload. Defaults to false
        isLastPage:
          type: boolean
          description: true if this is the last page of the upload. Defaults to false
        forceRestartUpload:
          type: boolean
          description: Flag to discard previous upload attempts and start from scratch. Must be specified with isFirstPage=true
        datasource:
          type: string
          description: datasource of the groups
        groups:
          description: batch of groups for the datasource
          type: array
          items:
            $ref: "#/components/schemas/DatasourceGroupDefinition"
        disableStaleDataDeletionCheck:
          type: boolean
          description: True if older group data needs to be force deleted after the upload completes. Defaults to older data being deleted only if the percentage of data being deleted is less than a reasonable threshold. This must only be set when `isLastPage = true`
      required:
        - uploadId
        - datasource
        - groups
    DatasourceGroupDefinition:
      type: object
      description: describes a group in the datasource
      properties:
        name:
          type: string
          description: name of the group. Should be unique among all groups for the datasource, and cannot have spaces.
      required:
        - name
    IndexMembershipRequest:
      type: object
      description: Describes the request body of the /indexmembership API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        datasource:
          type: string
          description: The datasource for which the membership is added
        membership:
          description: The membership to be added or updated
          $ref: "#/components/schemas/DatasourceMembershipDefinition"
      required:
        - datasource
        - membership
    BulkIndexMembershipsRequest:
      type: object
      description: Describes the request body for the /bulkindexmemberships API call
      properties:
        uploadId:
          type: string
          description: Unique id that must be used for this instance of datasource group memberships upload
        isFirstPage:
          type: boolean
          description: true if this is the first page of the upload. Defaults to false
        isLastPage:
          type: boolean
          description: true if this is the last page of the upload. Defaults to false
        forceRestartUpload:
          type: boolean
          description: Flag to discard previous upload attempts and start from scratch. Must be specified with isFirstPage=true
        datasource:
          type: string
          description: datasource of the memberships
        group:
          type: string
          description: group who's memberships are specified
        memberships:
          description: batch of memberships for the group
          type: array
          items:
            $ref: "#/components/schemas/DatasourceBulkMembershipDefinition"
      required:
        - uploadId
        - datasource
        - memberships
    ProcessAllMembershipsRequest:
      type: object
      description: Describes the request body of the /processallmemberships API call
      properties:
        datasource:
          type: string
          description: If provided, process group memberships only for this custom datasource. Otherwise all uploaded memberships are processed.
    DatasourceMembershipDefinition:
      type: object
      description: describes the membership row of a group. Only one of memberUserId and memberGroupName can be specified.
      properties:
        groupName:
          description: The group for which the membership is specified
          type: string
        memberUserId:
          description: If the member is a user, then the email or datasource id for the user
          type: string
        memberGroupName:
          description: If the member is a group, then the name of the member group
          type: string
      required:
        - groupName
    DatasourceBulkMembershipDefinition:
      type: object
      description: describes the membership row of a group in the bulk uploaded. Only one of memberUserId and memberGroupName can be specified.
      properties:
        memberUserId:
          description: If the member is a user, then the email or datasource id for the user
          type: string
        memberGroupName:
          description: If the member is a group, then the name of the member group
          type: string
    DeleteUserRequest:
      type: object
      description: Describes the request body of the /deleteuser API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        datasource:
          type: string
          description: The datasource for which the user is removed
        email:
          description: The email of the user to be deleted
          type: string
      required:
        - datasource
        - email
    DeleteGroupRequest:
      type: object
      description: Describes the request body of the /deletegroup API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        datasource:
          type: string
          description: The datasource for which the group is removed
        groupName:
          description: the name of the group to be deleted
          type: string
      required:
        - datasource
        - groupName
    DeleteMembershipRequest:
      type: object
      description: Describes the request body of the /deletemembership API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        datasource:
          type: string
          description: The datasource for which the membership is removed
        membership:
          description: the name of the membership to be deleted
          $ref: "#/components/schemas/DatasourceMembershipDefinition"
      required:
        - datasource
        - membership
    DeleteEmployeeRequest:
      type: object
      description: Describes the request body of the /deleteemployee API call
      properties:
        version:
          type: integer
          format: int64
          description: Version number for document for optimistic concurrency control. If absent or 0 then no version checks are done.
        employeeEmail:
          description: The deleted employee's email
          type: string
      required:
        - employeeEmail
    DeleteTeamRequest:
      type: object
      description: Describes the request body of the /deleteteam API call
      properties:
        id:
          description: The deleted team's id
          type: string
      required:
        - id
    DocumentDefinition:
      type: object
      description: Indexable document structure
      properties:
        title:
          type: string
          description: Document title, in plain text, if present. If not present, the title would be attempted to be extracted from the content.
        filename:
          type: string
          description: Source filename, in plain text, for the document. May be used as a fallback title for the document, if the title is not provided and cannot be extracted from the content. Populate this if there is no explicit title for the document and the content is sourced from a file.
        container:
          type: string
          description: The container name for the content (Folder for example for file content).
        containerDatasourceId:
          type: string
          description: This represents the datasource sepcific id of the container.
        containerObjectType:
          type: string
          description: This represents the object type of the container. It cannot have spaces or _
        datasource:
          type: string
        objectType:
          type: string
          description: The type of the document (Case, KnowledgeArticle for Salesforce for example). It cannot have spaces or _
        viewURL:
          type: string
          description: |
            The permalink for viewing the document. **Note: viewURL is a required field for non-entity datasources, but not required if the datasource is used to push custom entities (ie. datasources where isEntityDatasource is false).**'
        id:
          type: string
          description: |
            The datasource specific id for the document. This field is case insensitive and should not be more than 200 characters in length. Note: id is a required field for datasources created after 1st March 2025
        summary:
          $ref: "#/components/schemas/ContentDefinition"
        body:
          $ref: "#/components/schemas/ContentDefinition"
        author:
          $ref: "#/components/schemas/UserReferenceDefinition"
        owner:
          $ref: "#/components/schemas/UserReferenceDefinition"
          description: The current owner of the document, if not the author.
        permissions:
          $ref: "#/components/schemas/DocumentPermissionsDefinition"
          description: The permissions that define who can view this document in the search results. Please refer to [this](https://developers.glean.com/indexing/documents/permissions) for more details.
        createdAt:
          type: integer
          format: int64
          description: The creation time, in epoch seconds.
        updatedAt:
          type: integer
          format: int64
          description: The last update time, in epoch seconds.
        updatedBy:
          $ref: "#/components/schemas/UserReferenceDefinition"
        tags:
          type: array
          items:
            type: string
          description: Labels associated with the document.
        interactions:
          $ref: "#/components/schemas/DocumentInteractionsDefinition"
        status:
          type: string
        additionalUrls:
          type: array
          items:
            type: string
          description: Additional variations of the URL that this document points to.
        nativeAppUrl:
          type: string
          description: A deep link, if available, into the datasource's native application for the user's platform (e.g. slack://channel/message).
        comments:
          type: array
          items:
            $ref: "#/components/schemas/CommentDefinition"
          description: Comments associated with the document.
        customProperties:
          type: array
          items:
            $ref: "#/components/schemas/CustomProperty"
          description: Additional metadata properties of the document. These can surface as [facets and operators](https://developers.glean.com/indexing/datasource/custom-properties/operators_and_facets).
      required:
        - datasource
    CommentDefinition:
      type: object
      description: Describes a comment on a document
      properties:
        id:
          type: string
          description: The document specific id for the comment. This field is case insensitive and should not be more than 200 characters in length.
        author:
          $ref: "#/components/schemas/UserReferenceDefinition"
          description: The author of the comment.
        content:
          $ref: "#/components/schemas/ContentDefinition"
          description: The content of the comment.
        createdAt:
          type: integer
          format: int64
          description: The creation time, in epoch seconds.
        updatedAt:
          type: integer
          format: int64
          description: The last updated time, in epoch seconds.
        updatedBy:
          $ref: "#/components/schemas/UserReferenceDefinition"
          description: The user who last updated the comment.
      required:
        - id
    ContentDefinition:
      type: object
      description: Describes text content or base64 encoded binary content
      properties:
        mimeType:
          type: string
        textContent:
          type: string
          description: text content. Only one of textContent or binary content can be specified
        binaryContent:
          type: string
          description: base64 encoded binary content. Only one of textContent or binary content can be specified
      required:
        - mimeType
    UserReferenceDefinition:
      type: object
      description: Describes how a user is referenced in a document. The user can be referenced by email or by a datasource specific id.
      properties:
        email:
          type: string
        datasourceUserId:
          type: string
          description: some datasources refer to the user by the datasource user id in the document
        name:
          type: string
    PermissionsGroupIntersectionDefinition:
      type: object
      description: describes a list of groups that are all required in a permissions constraint
      properties:
        requiredGroups:
          type: array
          items:
            type: string
    DocumentPermissionsDefinition:
      type: object
      description: describes the access control details of the document
      properties:
        allowedUsers:
          description: List of users who can view the document
          type: array
          items:
            $ref: "#/components/schemas/UserReferenceDefinition"
        allowedGroups:
          description: List of groups that can view the document
          type: array
          items:
            type: string
        allowedGroupIntersections:
          description: List of allowed group intersections. This describes a permissions constraint of the form ((GroupA AND GroupB AND GroupC) OR (GroupX AND GroupY) OR ...
          type: array
          items:
            $ref: "#/components/schemas/PermissionsGroupIntersectionDefinition"
        allowAnonymousAccess:
          description: If true, then any Glean user can view the document
          type: boolean
        allowAllDatasourceUsersAccess:
          description: If true, then any user who has an account in the datasource can view the document.
          type: boolean
    DocumentInteractionsDefinition:
      type: object
      description: describes the interactions on the document
      properties:
        numViews:
          type: integer
        numLikes:
          type: integer
        numComments:
          type: integer
    CheckDocumentAccessRequest:
      type: object
      description: Describes the request body of the /checkdocumentaccess API call
      properties:
        datasource:
          type: string
          description: Datasource of document to check access for.
        objectType:
          type: string
          description: Object type of document to check access for.
        docId:
          type: string
          description: Glean Document ID to check access for.
        userEmail:
          type: string
          description: Email of user to check access for.
      required:
        - datasource
        - objectType
        - docId
        - userEmail
    CheckDocumentAccessResponse:
      type: object
      description: Describes the response body of the /checkdocumentaccess API call
      properties:
        hasAccess:
          type: boolean
          description: If true, user has access to document for search
    CustomProperty:
      type: object
      description: Describes the custom properties of the object.
      properties:
        name:
          type: string
        value:
          description: Must be a string, a number (for INT properties), or an array of strings. A boolean is not valid. When OpenAPI Generator supports `oneOf`, we can semantically enforce this.
    DatasourceConfig:
      $ref: "#/components/schemas/SharedDatasourceConfig"
    GetDatasourceConfigRequest:
      type: object
      description: Describes the request body of the /getdatasourceconfig API call
      properties:
        datasource:
          type: string
          description: Datasource name for which config is needed.
      required:
        - datasource
    DatasourceConfigList:
      description: List of datasource configurations.
      required:
        - datasourceConfig
      properties:
        datasourceConfig:
          type: array
          description: Datasource configuration.
          items:
            $ref: "#/components/schemas/SharedDatasourceConfig"
    RotateTokenResponse:
      description: Describes the response body of the /rotatetoken API call
      properties:
        rawSecret:
          type: string
          description: New raw secret
        createdAt:
          type: integer
          format: int64
          description: Unix timestamp in seconds when the new secret value is assigned to the token. The token needs to be rotated before `rotationPeriodMinutes` past the createdAt timestamp otherwise it would be rendered unusable.
        rotationPeriodMinutes:
          type: integer
          format: int64
          description: Refers to the time period in minutes before which this token needs to be rotated. It is required to rotate the token within the specified `rotationPeriodMinutes` after each `/rotatetoken` call, otherwise the tokens would expire. Note that the token would still expire at `expiresAt` timestamp provided during token creation even if the token is being regularly rotated. `rotationPeriodMinutes` property is inherited from the parent token being rotated
    IndexEmployeeRequest:
      type: object
      description: Info about an employee and optional version for that info
      properties:
        employee:
          description: Info about the employee
          $ref: "#/components/schemas/EmployeeInfoDefinition"
        version:
          description: Version number for the employee object. If absent or 0 then no version checks are done
          type: integer
          format: int64
      required:
        - employee
    IndexEmployeeListRequest:
      type: object
      description: Describes the request body of the /indexemployeelist API call
      properties:
        employees:
          description: List of employee info and version.
          type: array
          items:
            $ref: "#/components/schemas/IndexEmployeeRequest"
    StructuredLocation:
      type: object
      description: Detailed location with information about country, state, city etc.
      properties:
        deskLocation:
          type: string
          description: Desk number.
        timezone:
          type: string
          description: Location's timezone, e.g. UTC, PST.
        address:
          type: string
          description: Office address or name.
        city:
          type: string
          description: Name of the city.
        state:
          type: string
          description: State code.
        region:
          type: string
          description: Region information, e.g. NORAM, APAC.
        zipCode:
          type: string
          description: ZIP Code for the address.
        country:
          type: string
          description: Country name.
        countryCode:
          type: string
          description: Alpha-2 or Alpha-3 ISO 3166 country code, e.g. US or USA.
    SocialNetworkDefinition:
      type: object
      description: Employee's social network profile
      properties:
        name:
          type: string
          description: Possible values are "twitter", "linkedin".
        profileName:
          type: string
          description: Human-readable profile name.
        profileUrl:
          type: string
          description: Link to profile.
    AdditionalFieldDefinition:
      type: object
      description: Additional information about the employee or team.
      properties:
        key:
          type: string
          description: Key to reference this field, e.g. "languages". Note that the key should be all lowercase alphabetic characters with no numbers, spaces, hyphens or underscores.
        value:
          type: array
          description: |
            List of type string or HypertextField.

            HypertextField is defined as
            ```
            {
              anchor: string,    // Anchor text for the hypertext field.
              hyperlink: string, // URL for the hypertext field.
            }
            ```
            Example: ```{"anchor":"Glean","hyperlink":"https://glean.com"}```

            When OpenAPI Generator supports oneOf, we will semantically enforce this in the docs.

            **Note**: If using the Python SDK to pass in a list of strings, the value may need to be a list of dictionaries. In that case, the key in that dictionary will be ignored.
            Example: ```"languages": [{"lang":"English","lang":"Spanish",...}]```. In this case, the key "lang" will be ignored and can even be passed in as an empty string.
          items:
            type: object
            description: Either a string or HypertextField. When OpenAPI Generator supports oneOf, we can semantically enforce this in the docs.
    HypertextField:
      type: object
      properties:
        anchor:
          type: string
          description: Anchor text for the hypertext field.
        hyperlink:
          type: string
          description: URL for the hypertext field.
    EmployeeInfoDefinition:
      type: object
      description: Describes employee info
      properties:
        email:
          type: string
          description: The employee's email
        firstName:
          type: string
          description: |
            The first name of the employee. **Note**: The value cannot be empty
        lastName:
          type: string
          description: |
            The last name of the employee. **Note**: The value cannot be empty
        preferredName:
          type: string
          description: The preferred name or nickname of the employee
        id:
          type: string
          description: |
            **[Advanced]** A unique universal internal identifier for the employee. This is solely used for understanding manager relationships along with `managerId`.
        phoneNumber:
          type: string
          description: The employee's phone number.
        location:
          type: string
          description: The employee's location (city/office name etc).
          deprecated: true
          x-glean-deprecated:
            id: a7f6fbaa-0eaf-4c0c-a4f5-ab90347f73fd
            introduced: "2026-02-05"
            message: Field is deprecated
            removal: "2026-10-15"
          x-speakeasy-deprecation-message: "Deprecated on 2026-02-05, removal scheduled for 2026-10-15: Field is deprecated"
        structuredLocation:
          description: Detailed location with information about country, state, city etc.
          $ref: "#/components/schemas/StructuredLocation"
        title:
          type: string
          description: The employee's role title.
        photoUrl:
          type: string
          format: uri
          description: The employee's profile pic
        businessUnit:
          type: string
          description: Typically the highest level organizational unit; generally applies to bigger companies with multiple distinct businesses.
        department:
          type: string
          description: An organizational unit where everyone has a similar task, e.g. `Engineering`.
        datasourceProfiles:
          type: array
          description: The datasource profiles of the employee, e.g. `Slack`,`Github`.
          items:
            $ref: "#/components/schemas/DatasourceProfile"
        teams:
          type: array
          description: Info about the employee's team(s)
          items:
            $ref: "#/components/schemas/EmployeeTeamInfo"
        startDate:
          type: string
          format: date
          description: The date when the employee started
        endDate:
          type: string
          format: date
          description: If a former employee, the last date of employment.
        bio:
          type: string
          description: Short biography or mission statement of the employee.
        pronoun:
          type: string
          description: She/her, He/his or other pronoun.
        alsoKnownAs:
          type: array
          description: Other names associated with the employee.
          items:
            type: string
        profileUrl:
          type: string
          description: Link to internal company person profile.
        socialNetworks:
          type: array
          description: List of social network profiles.
          items:
            $ref: "#/components/schemas/SocialNetworkDefinition"
        managerEmail:
          type: string
          description: The email of the employee's manager
        managerId:
          type: string
          description: |
            **[Advanced]** A unique universal internal identifier for the employee's manager. This is solely used in conjunction with `id`.
        type:
          type: string
          description: The type of the employee, an enum of `FULL_TIME`, `CONTRACTOR`, `NON_EMPLOYEE`
          default: FULL_TIME
        relationships:
          type: array
          description: List of unidirectional relationships with other employees. E.g. this employee (`A`) is a CHIEF_OF_STAFF to another employee (`B`); or this employee (`A`) is an EXECUTIVE_ASSISTANT of another employee (`C`). The mapping should be attached to `A`'s profile.
          items:
            $ref: "#/components/schemas/EntityRelationship"
        status:
          type: string
          description: The status of the employee, an enum of `CURRENT`, `FUTURE`, `EX`
          default: CURRENT
        additionalFields:
          type: array
          description: List of additional fields with more information about the employee.
          items:
            $ref: "#/components/schemas/AdditionalFieldDefinition"
      required:
        - department
        - email
    EmployeeAndVersionDefinition:
      type: object
      description: describes info about an employee and optional version for that info
      properties:
        employee:
          description: Info about the employee
          $ref: "#/components/schemas/EmployeeInfoDefinition"
        version:
          description: Version number for the employee object. If absent or 0 then no version checks are done
          type: integer
          format: int64
      required:
        - info
    EmployeeTeamInfo:
      type: object
      description: Information about which team an employee belongs to
      properties:
        id:
          type: string
          description: unique identifier for this team
        name:
          type: string
          description: Team name
        url:
          type: string
          format: uri
          description: Link to internal company team page
    EntityRelationship:
      type: object
      description: Describes a relationship edge between a source and destination entity
      required:
        - name
        - email
      properties:
        name:
          type: string
          description: The title or type of relationship. Currently an enum of `CHIEF_OF_STAFF`, `EXECUTIVE_ASSISTANT`
        email:
          type: string
          description: Email of the person with whom the relationship exists. Per the example above, either `B` or `C`'s email depending on the relationship.
    TeamMember:
      type: object
      description: Information about a team's member
      properties:
        email:
          type: string
          description: The member's email
          format: email
        relationship:
          type: string
          description: The member's relationship to the team, an enum of `MEMBER`, `MANAGER`, `LEAD`, `POINT_OF_CONTACT`, `OTHER`
          default: MEMBER
        join_date:
          type: string
          format: date
          description: The member's start date
      required:
        - email
    TeamEmail:
      type: object
      description: Information about a team's email
      properties:
        email:
          type: string
          format: email
          description: An email address
        type:
          type: string
          description: An enum of `PRIMARY`, `SECONDARY`, `ONCALL`, `OTHER`
          default: OTHER
      required:
        - email
        - type
    TeamInfoDefinition:
      type: object
      description: Information about an employee's team
      properties:
        id:
          type: string
          description: The unique ID of the team
        name:
          type: string
          description: Human-readable team name
        description:
          type: string
          description: The description of this team
        businessUnit:
          type: string
          description: Typically the highest level organizational unit; generally applies to bigger companies with multiple distinct businesses.
        department:
          type: string
          description: An organizational unit where everyone has a similar task, e.g. `Engineering`.
        photoUrl:
          type: string
          format: uri
          description: A link to the team's photo
        externalLink:
          type: string
          format: uri
          description: |
            A link to an external team page. If set, team results will link to it.
        emails:
          type: array
          description: The emails of the team
          items:
            $ref: "#/components/schemas/TeamEmail"
        datasourceProfiles:
          type: array
          description: The datasource profiles of the team, e.g. `Slack`,`Github`.
          items:
            $ref: "#/components/schemas/DatasourceProfile"
        members:
          type: array
          description: The members of the team
          items:
            $ref: "#/components/schemas/TeamMember"
        additionalFields:
          type: array
          description: List of additional fields with more information about the team.
          items:
            $ref: "#/components/schemas/AdditionalFieldDefinition"
      required:
        - id
        - members
        - name
    IndexTeamRequest:
      type: object
      description: Info about a team and optional version for that info
      properties:
        team:
          description: Info about the team
          $ref: "#/components/schemas/TeamInfoDefinition"
        version:
          description: Version number for the team object. If absent or 0 then no version checks are done
          type: integer
          format: int64
      required:
        - team
    BulkIndexShortcutsRequest:
      type: object
      description: Describes the request body of the /bulkindexshortcuts API call
      allOf:
        - $ref: "#/components/schemas/BulkIndexRequest"
        - type: object
          properties:
            shortcuts:
              description: Batch of shortcuts information
              type: array
              items:
                $ref: "#/components/schemas/ExternalShortcut"
          required:
            - shortcuts
    UploadShortcutsRequest:
      type: object
      description: Describes the request body of the /uploadshortcuts API call
      allOf:
        - $ref: "#/components/schemas/BulkIndexRequest"
        - type: object
          properties:
            shortcuts:
              description: Batch of shortcuts information
              type: array
              items:
                $ref: "#/components/schemas/IndexingShortcut"
          required:
            - shortcuts
    DebugDatasourceStatusResponse:
      type: object
      description: Describes the response body of the /debug/{datasource}/status API call
      properties:
        documents:
          type: object
          properties:
            bulkUploadHistory:
              type: object
              $ref: "#/components/schemas/BulkUploadHistoryEventList"
            counts:
              type: object
              properties:
                uploaded:
                  type: array
                  items:
                    $ref: "#/components/schemas/DatasourceObjectTypeDocumentCountEntry"
                  description: |
                    A list of object types and corresponding upload counts. Note: This data may be cached and could be up to 3 hours stale.
                indexed:
                  type: array
                  description: The number of documents indexed, grouped by objectType
                  items:
                    $ref: "#/components/schemas/DatasourceObjectTypeDocumentCountEntry"
            processingHistory:
              $ref: "#/components/schemas/ProcessingHistoryEventList"
        identity:
          type: object
          properties:
            processingHistory:
              $ref: "#/components/schemas/ProcessingHistoryEventList"
            users:
              $ref: "#/components/schemas/DebugDatasourceStatusIdentityResponseComponent"
            groups:
              $ref: "#/components/schemas/DebugDatasourceStatusIdentityResponseComponent"
            memberships:
              $ref: "#/components/schemas/DebugDatasourceStatusIdentityResponseComponent"
        datasourceVisibility:
          type: string
          description: The visibility of the datasource, an enum of VISIBLE_TO_ALL, VISIBLE_TO_TEST_GROUP, NOT_VISIBLE
          enum:
            - ENABLED_FOR_ALL
            - ENABLED_FOR_TEST_GROUP
            - NOT_ENABLED
          example: ENABLED_FOR_ALL
    DebugDatasourceStatusIdentityResponseComponent:
      type: object
      properties:
        bulkUploadHistory:
          type: object
          $ref: "#/components/schemas/BulkUploadHistoryEventList"
        counts:
          type: object
          properties:
            uploaded:
              type: integer
              description: The number of users/groups/memberships uploaded
              example: 15
    DatasourceObjectTypeDocumentCountEntry:
      type: object
      properties:
        objectType:
          type: string
          description: The object type of the document
          example: Article
        count:
          type: integer
          description: The number of documents of the corresponding objectType
          example: 15
    BulkUploadHistoryEvent:
      type: object
      description: Information about a successful bulk upload
      properties:
        uploadId:
          type: string
          description: The unique ID of the upload
          example: upload-id-content-1707403081
        startTime:
          type: string
          description: The start time of the upload in ISO 8601 format
          example: "2021-08-06T17:58:01.000Z"
        endTime:
          type: string
          description: The end time of the upload in ISO 8601 format, 'NA' if the upload is still active
          example: "2021-08-06T18:58:01.000Z"
        status:
          type: string
          description: The status of the upload, an enum of ACTIVE, SUCCESSFUL
          enum:
            - ACTIVE
            - SUCCESSFUL
          example: SUCCESSFUL
        processingState:
          type: string
          description: The current state of the upload, an enum of UNAVAILABLE, UPLOAD STARTED, UPLOAD IN PROGRESS, UPLOAD COMPLETED, DELETION PAUSED, INDEXING COMPLETED
          enum:
            - UNAVAILABLE
            - UPLOAD STARTED
            - UPLOAD IN PROGRESS
            - UPLOAD COMPLETED
            - DELETION PAUSED
            - INDEXING COMPLETED
          example: UPLOAD COMPLETED
    BulkUploadHistoryEventList:
      description: Information about active and recent successful uploads for the datasource
      type: array
      items:
        $ref: "#/components/schemas/BulkUploadHistoryEvent"
    DebugDocumentRequest:
      type: object
      description: Describes the request body of the /debug/{datasource}/document API call.
      properties:
        objectType:
          type: string
          description: Object type of the document to get the status for.
          example: Article
        docId:
          type: string
          description: Glean Document ID within the datasource to get the status for.
          example: art123
      required:
        - objectType
        - docId
    DebugDocumentResponse:
      type: object
      description: Describes the response body of the /debug/{datasource}/document API call
      properties:
        status:
          type: object
          description: Upload and indexing status of the document
          $ref: "#/components/schemas/DocumentStatusResponse"
        uploadedPermissions:
          $ref: "#/components/schemas/DocumentPermissionsDefinition"
    DebugDocumentsRequest:
      type: object
      description: Describes the request body of the /debug/{datasource}/documents API call.
      properties:
        debugDocuments:
          type: array
          description: Documents to fetch debug information for
          items:
            $ref: "#/components/schemas/DebugDocumentRequest"
      required:
        - debugDocuments
    DebugDocumentsResponseItem:
      type: object
      description: Describes the response body of a single document in the /debug/{datasource}/documents API call
      properties:
        docId:
          type: string
          description: Id of the document
        objectType:
          type: string
          description: objectType of the document
        debugInfo:
          type: object
          description: Debug information of the document
          $ref: "#/components/schemas/DebugDocumentResponse"
    DebugDocumentsResponse:
      type: object
      description: Describes the response body of a single document in the /debug/{datasource}/documents API call
      properties:
        documentStatuses:
          type: array
          description: List of document ids/urls and their debug information
          items:
            $ref: "#/components/schemas/DebugDocumentsResponseItem"
    DocumentStatusResponse:
      type: object
      description: Describes the document status response body
      properties:
        uploadStatus:
          type: string
          description: Upload status, enum of NOT_UPLOADED, UPLOADED, STATUS_UNKNOWN
          example: UPLOADED
        lastUploadedAt:
          type: string
          description: Time of last successful upload for the document, in ISO 8601 format
          example: "2021-08-06T17:58:01.000Z"
        indexingStatus:
          type: string
          description: Indexing status, enum of NOT_INDEXED, INDEXED, STATUS_UNKNOWN
          example: INDEXED
        lastIndexedAt:
          type: string
          description: Time of last successful indexing for the document, in ISO 8601 format
          example: "2021-08-06T17:58:01.000Z"
        permissionIdentityStatus:
          type: string
          description: Permission identity status, enum of NOT_UPLOADED, UPLOADED, STATUS_UNKNOWN (Always unknown if `identityDatasourceName` is set). Document visibility may be affected status is `NOT_UPLOADED`.
          example: UPLOADED
    LifeCycleEvent:
      type: object
      properties:
        event:
          type: string
          description: Type of event
          enum:
            - UPLOADED
            - INDEXED
            - DELETION_REQUESTED
            - DELETED
          example: INDEXED
        timestamp:
          type: string
          description: Timestamp of the event
          example: "2021-08-06T17:58:01.000Z"
    ProcessingHistoryEvent:
      type: object
      description: Processing history event for a datasource
      properties:
        startTime:
          type: string
          description: The start time of the processing in ISO 8601 format
          example: "2021-08-06T17:58:01.000Z"
        endTime:
          type: string
          description: The end time of the processing in ISO 8601 format, 'NA' if still in progress
          example: "2021-08-06T18:58:01.000Z"
    ProcessingHistoryEventList:
      description: Information about processing history for the datasource
      type: array
      items:
        $ref: "#/components/schemas/ProcessingHistoryEvent"
    DebugUserRequest:
      type: object
      description: Describes the request body of the /debug/{datasource}/user API call
      properties:
        email:
          type: string
          description: Email ID of the user to get the status for
          example: u1@foo.com
      required:
        - email
    DebugUserResponse:
      type: object
      description: Describes the response body of the /debug/{datasource}/user API call
      properties:
        status:
          type: object
          description: Upload and indexing status of the user
          $ref: "#/components/schemas/UserStatusResponse"
        uploadedGroups:
          type: array
          description: List of groups the user is a member of, as uploaded via permissions API.
          items:
            $ref: "#/components/schemas/DatasourceGroupDefinition"
    UserStatusResponse:
      type: object
      description: Describes the user status response body
      properties:
        isActiveUser:
          type: boolean
          description: Whether the user is active or not
          example: true
        uploadStatus:
          $ref: "#/components/schemas/UploadStatusEnum"
        lastUploadedAt:
          type: string
          description: Time of last successful upload for the user, in ISO 8601 format
          example: "2021-08-06T17:58:01.000Z"
    UploadStatusEnum:
      type: string
      description: Upload status, enum of NOT_UPLOADED, UPLOADED, STATUS_UNKNOWN
      enum:
        - UPLOADED
        - NOT_UPLOADED
        - STATUS_UNKNOWN
      example: UPLOADED
    DebugDocumentLifecycleRequest:
      type: object
      description: Describes the request body of the /debug/{datasource}/document/events API call.
      properties:
        objectType:
          type: string
          description: Object type of the document to get lifecycle events for.
          example: Article
        docId:
          type: string
          description: Glean Document ID within the datasource to get lifecycle events for.
          example: art123
        startDate:
          type: string
          description: The start date for events to be fetched. Cannot be more than 30 days (default 7 days) in the past.
          example: "2025-05-01"
        maxEvents:
          type: integer
          description: Max number of events to be fetched. Cannot be more than 100 (default 20).
          example: 50
      required:
        - objectType
        - docId
    DebugDocumentLifecycleResponse:
      type: object
      description: Describes the response body of the /debug/{datasource}/document/events API call
      properties:
        lifeCycleEvents:
          type: array
          description: List of lifecycle events corresponding to the document
          items:
            $ref: "#/components/schemas/LifeCycleEvent"
    CustomMetadataPutRequest:
      type: object
      description: Request body for adding or updating custom metadata on a document
      properties:
        customMetadata:
          type: array
          description: Array of custom metadata key-value pairs
          items:
            $ref: "#/components/schemas/CustomProperty"
      required:
        - customMetadata
    CustomMetadataSchema:
      type: object
      description: Schema for custom metadata containing metadata key definitions
      properties:
        metadataKeys:
          type: array
          description: Array of metadata key definitions
          items:
            $ref: "#/components/schemas/CustomMetadataPropertyDefinition"
      required:
        - metadataKeys
    SuccessResponse:
      type: object
      description: Success response for custom metadata operations
      properties:
        success:
          type: boolean
          description: Indicates if the operation was successful
          default: true
    ErrorInfoResponse:
      type: object
      description: Error response for custom metadata operations
      properties:
        error:
          type: string
          description: Error message describing what went wrong
        message:
          type: string
          description: Additional details about the error
      required:
        - error
    PropertyDefinition:
      properties:
        name:
          type: string
          description: The name of the property in the `DocumentMetadata` (e.g. 'createTime', 'updateTime', 'author', 'container'). In the future, this will support custom properties too.
        displayLabel:
          type: string
          description: The user friendly label for the property.
        displayLabelPlural:
          type: string
          description: The user friendly label for the property that will be used if a plural context.
        propertyType:
          type: string
          enum:
            - TEXT
            - DATE
            - INT
            - USERID
            - PICKLIST
            - TEXTLIST
            - MULTIPICKLIST
          description: The type of custom property - this governs the search and faceting behavior. Note that MULTIPICKLIST is not yet supported.
        uiOptions:
          type: string
          enum:
            - NONE
            - SEARCH_RESULT
            - DOC_HOVERCARD
        hideUiFacet:
          type: boolean
          description: If true then the property will not show up as a facet in the UI.
        uiFacetOrder:
          type: integer
          description: Will be used to set the order of facets in the UI, if present. If set for one facet, must be set for all non-hidden UI facets. Must take on an integer value from 1 (shown at the top) to N (shown last), where N is the number of non-hidden UI facets. These facets will be ordered below the built-in "Type" and "Tag" operators.
        skipIndexing:
          type: boolean
          description: If true then the property will not be indexed for retrieval and ranking.
        group:
          type: string
          description: The unique identifier of the `PropertyGroup` to which this property belongs.
    PropertyGroup:
      description: A grouping for multiple PropertyDefinition. Grouped properties will be displayed together in the UI.
      properties:
        name:
          type: string
          description: The unique identifier of the group.
        displayLabel:
          type: string
          description: The user-friendly group label to display.
    ObjectDefinition:
      description: The definition for an `DocumentMetadata.objectType` within a datasource.
      properties:
        name:
          type: string
          description: Unique identifier for this `DocumentMetadata.objectType`. If omitted, this definition is used as a default for all unmatched `DocumentMetadata.objectType`s in this datasource.
        displayLabel:
          type: string
          description: The user-friendly name of the object for display.
        docCategory:
          type: string
          enum:
            - UNCATEGORIZED
            - TICKETS
            - CRM
            - PUBLISHED_CONTENT
            - COLLABORATIVE_CONTENT
            - QUESTION_ANSWER
            - MESSAGING
            - CODE_REPOSITORY
            - CHANGE_MANAGEMENT
            - PEOPLE
            - EMAIL
            - SSO
            - ATS
            - KNOWLEDGE_HUB
            - EXTERNAL_SHORTCUT
            - ENTITY
            - CALENDAR
            - AGENTS
          description: The document category of this object type.
        propertyDefinitions:
          type: array
          items:
            $ref: "#/components/schemas/PropertyDefinition"
        propertyGroups:
          type: array
          description: A list of `PropertyGroup`s belonging to this object type, which will group properties to be displayed together in the UI.
          items:
            $ref: "#/components/schemas/PropertyGroup"
        summarizable:
          description: Whether or not the object is summarizable
          type: boolean
    CanonicalizingRegexType:
      description: Regular expression to apply to an arbitrary string to transform it into a canonical string.
      properties:
        matchRegex:
          type: string
          description: Regular expression to match to an arbitrary string.
        rewriteRegex:
          type: string
          description: Regular expression to transform into a canonical string.
    ConnectorType:
      type: string
      description: The source from which document content was pulled, e.g. an API crawl or browser history
      enum:
        - API_CRAWL
        - BROWSER_CRAWL
        - BROWSER_HISTORY
        - BUILTIN
        - FEDERATED_SEARCH
        - PUSH_API
        - WEB_CRAWL
        - NATIVE_HISTORY
    IconConfig:
      description: Defines how to render an icon
      properties:
        generatedBackgroundColorKey:
          type: string
        backgroundColor:
          type: string
        color:
          type: string
        key:
          type: string
        iconType:
          enum:
            - COLLECTION
            - CUSTOM
            - DATASOURCE
            - DATASOURCE_INSTANCE
            - FAVICON
            - FILE_TYPE
            - GENERATED_BACKGROUND
            - GLYPH
            - MIME_TYPE
            - NO_ICON
            - PERSON
            - REACTIONS
            - URL
        masked:
          type: boolean
          description: Whether the icon should be masked based on current theme.
        name:
          type: string
          description: The name of the icon if applicable, e.g. the glyph name for `IconType.GLYPH` icons.
        url:
          type: string
          description: The URL to an image to be displayed if applicable, e.g. the URL for `iconType.URL` icons.
      example:
        color: "#343CED"
        key: person_icon
        iconType: GLYPH
        name: user
    Quicklink:
      description: An action for a specific datasource that will show up in autocomplete and app card, e.g. "Create new issue" for jira.
      properties:
        name:
          type: string
          description: Full action name. Used in autocomplete.
        shortName:
          type: string
          description: Shortened name. Used in app cards.
        url:
          type: string
          description: The URL of the action.
        iconConfig:
          $ref: "#/components/schemas/IconConfig"
          description: The config for the icon for this quicklink
        id:
          type: string
          description: Unique identifier of this quicklink
        scopes:
          type: array
          description: The scopes for which this quicklink is applicable
          items:
            type: string
            enum:
              - APP_CARD
              - AUTOCOMPLETE_EXACT_MATCH
              - AUTOCOMPLETE_FUZZY_MATCH
              - AUTOCOMPLETE_ZERO_QUERY
              - NEW_TAB_PAGE
    SharedDatasourceConfigNoInstance:
      type: object
      description: Structure describing shared config properties of a datasource with no multi-instance support.
      required:
        - name
      properties:
        name:
          type: string
          description: Unique identifier of datasource instance to which this config applies.
        displayName:
          type: string
          description: The user-friendly instance label to display. If omitted, falls back to the title-cased `name`.
        datasourceCategory:
          type: string
          enum:
            - UNCATEGORIZED
            - TICKETS
            - CRM
            - PUBLISHED_CONTENT
            - COLLABORATIVE_CONTENT
            - QUESTION_ANSWER
            - MESSAGING
            - CODE_REPOSITORY
            - CHANGE_MANAGEMENT
            - PEOPLE
            - EMAIL
            - SSO
            - ATS
            - KNOWLEDGE_HUB
            - EXTERNAL_SHORTCUT
            - ENTITY
            - CALENDAR
            - AGENTS
          default: UNCATEGORIZED
          description: The type of this datasource. It is an important signal for relevance and must be specified and cannot be UNCATEGORIZED. Please refer to [this](https://developers.glean.com/docs/indexing_api_datasource_category/) for more details.
        urlRegex:
          type: string
          description: "Regular expression that matches URLs of documents of the datasource instance. The behavior for multiple matches is non-deterministic. **Note: `urlRegex` is a required field for non-entity datasources, but not required if the datasource is used to push custom entities (ie. datasources where isEntityDatasource is false). Please add a regex as specific as possible to this datasource instance.**"
          example: https://example-company.datasource.com/.*
        iconUrl:
          type: string
          description: The URL to an image to be displayed as an icon for this datasource instance. Must have a transparency mask. SVG are recommended over PNG. Public, scio-authenticated and Base64 encoded data URLs are all valid (but not third-party-authenticated URLs).
        objectDefinitions:
          type: array
          description: The list of top-level `objectType`s for the datasource.
          items:
            $ref: "#/components/schemas/ObjectDefinition"
        suggestionText:
          type: string
          description: Example text for what to search for in this datasource
        homeUrl:
          type: string
          description: The URL of the landing page for this datasource instance. Should point to the most useful page for users, not the company marketing page.
        crawlerSeedUrls:
          type: array
          description: This only applies to WEB_CRAWL and BROWSER_CRAWL datasources. Defines the seed URLs for crawling.
          items:
            type: string
        iconDarkUrl:
          type: string
          description: The URL to an image to be displayed as an icon for this datasource instance in dark mode. Must have a transparency mask. SVG are recommended over PNG. Public, scio-authenticated and Base64 encoded data URLs are all valid (but not third-party-authenticated URLs).
        hideBuiltInFacets:
          type: array
          description: List of built-in facet types that should be hidden for the datasource.
          items:
            type: string
            enum:
              - TYPE
              - TAG
              - AUTHOR
              - OWNER
        canonicalizingURLRegex:
          type: array
          description: A list of regular expressions to apply to an arbitrary URL to transform it into a canonical URL for this datasource instance. Regexes are to be applied in the order specified in this list.
          items:
            $ref: "#/components/schemas/CanonicalizingRegexType"
        canonicalizingTitleRegex:
          type: array
          description: A list of regular expressions to apply to an arbitrary title to transform it into a title that will be displayed in the search results
          items:
            $ref: "#/components/schemas/CanonicalizingRegexType"
        redlistTitleRegex:
          type: string
          description: A regex that identifies titles that should not be indexed
        connectorType:
          allOf:
            - $ref: "#/components/schemas/ConnectorType"
          type: string
          deprecated: false
        quicklinks:
          type: array
          description: List of actions for this datasource instance that will show up in autocomplete and app card, e.g. "Create new issue" for jira
          items:
            $ref: "#/components/schemas/Quicklink"
        renderConfigPreset:
          type: string
          description: The name of a render config to use for displaying results from this datasource. Any well known datasource name may be used to render the same as that source, e.g. `web` or `gdrive`. Please refer to [this](https://developers.glean.com/docs/rendering_search_results/) for more details
        aliases:
          type: array
          description: Aliases that can be used as `app` operator-values.
          items:
            type: string
        isOnPrem:
          type: boolean
          description: Whether or not this datasource is hosted on-premise.
        trustUrlRegexForViewActivity:
          type: boolean
          default: true
          description: True if browser activity is able to report the correct URL for VIEW events. Set this to true if the URLs reported by Chrome are constant throughout each page load. Set this to false if the page has Javascript that modifies the URL during or after the load.
        includeUtmSource:
          type: boolean
          description: If true, a utm_source query param will be added to outbound links to this datasource within Glean.
        stripFragmentInCanonicalUrl:
          type: boolean
          default: true
          description: If true, the fragment part of the URL will be stripped when converting to a canonical url.
    CustomDatasourceConfig:
      description: Structure describing config properties of a custom datasource
      allOf:
        - $ref: "#/components/schemas/SharedDatasourceConfigNoInstance"
        - type: object
          properties:
            identityDatasourceName:
              type: string
              description: If the datasource uses another datasource for identity info, then the name of the datasource. The identity datasource must exist already and the datasource with identity info should have its visibility enabled for search results.
            productAccessGroup:
              type: string
              description: If the datasource uses a specific product access group, then the name of that group.
            isUserReferencedByEmail:
              type: boolean
              description: whether email is used to reference users in document ACLs and in group memberships.
            isEntityDatasource:
              type: boolean
              default: false
              description: True if this datasource is used to push custom entities.
            isTestDatasource:
              type: boolean
              default: false
              description: True if this datasource will be used for testing purpose only. Documents from such a datasource wouldn't have any effect on search rankings.
    DatasourceProfile:
      required:
        - datasource
        - handle
      properties:
        datasource:
          type: string
          example: github
          description: The datasource the profile is of.
        handle:
          type: string
          description: The display name of the entity in the given datasource.
        url:
          type: string
          description: URL to view the entity's profile.
        nativeAppUrl:
          type: string
          description: A deep link, if available, into the datasource's native application for the entity's platform (i.e. slack://...).
        isUserGenerated:
          type: boolean
          description: For internal use only. True iff the data source profile was manually added by a user from within Glean (aka not from the original data source)
    ShortcutProperties:
      properties:
        inputAlias:
          type: string
          description: link text following the viewPrefix as entered by the user. For example, if the view prefix is `go/` and the shortened URL is `go/abc`, then `abc` is the inputAlias.
        description:
          type: string
          description: A short, plain text blurb to help people understand the intent of the shortcut.
        destinationUrl:
          type: string
          format: url
          description: destination URL for the shortcut.
        createdBy:
          type: string
          description: Email of the user who created this shortcut.
        createTime:
          type: integer
          format: int64
          description: The time the shortcut was created in epoch seconds.
        updatedBy:
          type: string
          description: Email of the user who last updated this shortcut.
        updateTime:
          type: integer
          format: int64
          description: The time the shortcut was updated in epoch seconds.
    ExternalShortcut:
      allOf:
        - $ref: "#/components/schemas/ShortcutProperties"
        - type: object
          required:
            - destinationUrl
            - intermediateUrl
            - createdBy
            - inputAlias
      properties:
        title:
          type: string
          description: Title of the golink
        intermediateUrl:
          type: string
          format: url
          description: The URL from which the user is then redirected to the destination URL.
        decayedVisitScore:
          type: number
          format: double
          description: decayed visits score for ranking
        editUrl:
          type: string
          format: url
          description: The URL using which the user can access the edit page of the shortcut.
    SharedDatasourceConfig:
      description: Structure describing shared config properties of the datasource (including multi-instance support)
      allOf:
        - $ref: "#/components/schemas/SharedDatasourceConfigNoInstance"
        - type: object
          properties:
            datasourceName:
              type: string
              description: The (non-unique) name of the datasource of which this config is an instance, e.g. "jira".
            instanceOnlyName:
              type: string
              description: The instance of the datasource for this particular config, e.g. "onprem".
            instanceDescription:
              type: string
              description: A human readable string identifying this instance as compared to its peers, e.g. "github.com/askscio" or "github.askscio.com"
    IndexingShortcut:
      allOf:
        - $ref: "#/components/schemas/ShortcutProperties"
        - type: object
          required:
            - destinationUrl
            - createdBy
            - inputAlias
      properties:
        unlisted:
          type: boolean
          description: Whether this shortcut is unlisted or not. Unlisted shortcuts are visible to author and admins only.
        urlTemplate:
          type: string
          description: For variable shortcuts, contains the URL template; note, `destinationUrl` contains default URL.
    CustomMetadataPropertyDefinition:
      type: object
      description: The definition for a key within a Custom Metadata schema. Only the fields applicable to Custom Metadata are exposed.
      properties:
        name:
          type: string
          description: The name of the metadata key.
        propertyType:
          type: string
          enum:
            - TEXT
            - PICKLIST
            - TEXTLIST
            - MULTIPICKLIST
          description: The type of metadata key. This governs the search and faceting behavior.
        skipIndexing:
          type: boolean
          description: If true then the property will not be indexed for retrieval and ranking.
      required:
        - name
        - propertyType
