The Connector for GraphQL connects the GraphQL API with the Mindbreeze InSpire search. This allows items that were fetched via GraphQL to be used in Mindbreeze Insight Apps.
The connector iterates over all objects retrieved from the GraphQL API and transforms them into Indexable entities for the Mindbreeze search index.
Administrators can start with the configuration immediately, since the Connector for GraphQL is included in Mindbreeze InSpire by default.

The crawler orchestrates the retrieval of data from a GraphQL API and transforms it into indexed documents through a sequential pipeline of metadata enrichment and flattening.
This chapter explains the basic configuration of the Connector for GraphQL in a Quickstart Guide. If you need additional information for your use case, you will find a list of all settings in the following chapters.
Add a new index in the tab “Indices” using the button “+Add Index”. Select the desired “Index Node” and “Client Service” and select the option “Connector for GraphQL” in “Data Source”. Then confirm your entries with “Apply”.
After the index is created, you can, for example, change the name of the index or apply a filter service.
In the next step, the data source must be configured in the section “Data Sources”.
The following settings must be set in the following sections to create a basic configuration:
Setting | Entry |
Endpoint for GraphQL | Example: https://company-dev.atlassian.net/gateway/api/graphql |
Setting | Entry |
GraphQL Query | Example: query custom_query_name($cloudID: ID!, $cursor: String) { |
Setting | Entry |
Pagination Type | Choose the pagination type to be used:
|
Results Pointer | Example for Cursor Paged Pagination: /data/jira/issueSearchStable/edges Example for Offset Paged Pagination: /data/GlideRecord_Query/kb_knowledge/_results |
Cursor pagination End Condition | Only necessary when the setting “Pagination Type” is set to the option “Cursor”. The following options are available:
|
Setting | Entry |
Key Pointer | Example: /sys_id/value |
Save the configuration with “Save.” The basic configuration for the Connector for GraphQL is now completed.
Setting | Description | Default setting |
Concurrent Filter and Index Dispatch Threads | The number of threads dispatching data to the filter service and index service. If the number is smaller or equal to zero, serial dispatching is caused. | Default setting: 10 |
Connection Timeout (Seconds) | Defines in seconds how long the connector will wait for a response before it cancels the API call. | Default setting: 30 |
Maximum Fetch Retries | Defines the maximum number of retries that will be attempted, when the server sends certain throttling responses (e.g., 429). | Default setting: 5 |
User Agent | Defines the header of the User Agent to be used for API calls. | Default setting: NON|SV|Mindbreeze|ConnectorForGraphQL/1.0 |
Trust all SSL certificates | Allows the use of unsecured connections. This can be used for test systems, for example.
| Default setting: Deactivated |
Setting | Description | Default setting/Example |
Log all Requests | When this setting is enabled, all requests to the GraphQL API are logged in a file named “request-log.csv.” | Default setting: Deactivated |
Dump Network Traffic | When this setting is enabled, the system saves a log file for every GraphQL network request, including the full request, response bodies and headers. Attention: Be aware that secrets like authentication headers might also be written to the network dump files. | Default setting: Deactivated |
Dump Pivoting Results | When this setting is enabled, metadata pivoting intermediate data structures are logged in the folder ‘pivoting-dump’ | Default setting: Deactivated |
Setting | Description | Default setting/Example | ||||||||
Endpoint for GraphQL | Defines the URL where GraphQL queries are sent to. Hint: The structure of the endpoint is dependent on the used data source, as shown in the column “Default setting/Example”. | Example of a ServiceNow endpoint: https://dev123456.service-now.com/now/nav/ui/classic/params/target/graphql-explorer.do Example of an Atlassian Jira endpoint: https://company-dev.atlassian.net/gateway/api/graphql | ||||||||
GraphQL Credential | Defines the credentials used to authenticate requests to the GraphQL endpoint. The following types of Credentials are supported:
| Default setting: None |
Setting | Description | Example |
GraphQL Query | Defines the GraphQL query. | See the chapter Query. |
Query Variable Value JSON | Defines custom query variables that can be used in the GraphQL query. | Example: {“limit“:3} For more context, see the chapter Query. |
Request Headers | Defines custom headers that will be sent to the GraphQL endpoint. | Example: "X-ExperimentalApi": "JiraIssueSearch" |
Setting | Description | Default setting/Example | ||||||||
Pagination Type* | This setting specifies whether the query utilizes cursor-based or offset-based pagination. Defines the type of pagination to be used. The following options are available:
| Default setting: Cursor | ||||||||
Results Pointer* | A JSON-Pointer to the JSON value that defines the results array. | Example for Cursor Paged Pagination: /data/jira/issueSearchStable/edges Example for Offset Paged Pagination: /data/GlideRecord_Query/kb_knowledge/_results | ||||||||
Cursor pagination End Condition* | This setting defines the condition used to determine when all available documents have been retrieved. Hint: Is not supported with offset pagination.
| Default setting: “Has Next Flag” Values: | ||||||||
Next Page Pointer | A JSON-Pointer to the JSON value that defines, if there is a next page. | Example: /data/jira/issueSearchStable/pageInfo/hasNextPage For more information, see the Mindbreeze Configuration for Cursor Paged Pagination. | ||||||||
Next Cursor Pointer | A JSON-Pointer to the JSON value that defines the next cursor. | Example: /data/jira/issueSearchStable/pageInfo/endCursor For more information, see the Mindbreeze Configuration for Cursor Paged Pagination. | ||||||||
Paging Variable Name | Defines the variable that is sent with the query to control the next page iteration. The variable to be defined depends on the configured query and its properties. | Example for Cursor Paged Pagination: cursor Example for Offset Paged Pagination: offset |
Setting | Description | Default setting/Example | ||||||||
Pivoting JSON Transformation | A JSON pointer to the JSON Array that should be pivoted.
| Example: See 2.4 Examples for Pivoting | ||||||||
Key Pointer* | A JSON pointer to the JSON value that acts as the unique key for Mindbreeze documents sent to the Mindbreeze filter and index service by the connector. | Example: /sys_id/value For more context, see the code example in the chapter Result for Offset Paged Pagination. | ||||||||
URL Pointer | A JSON pointer to the JSON value that should be used as Mindbreeze document URL. | Example: /url/value | ||||||||
Title Pointer | A JSON pointer to the JSON value that defines the document’s title. | Example: /text/value For more context, see the code example in the chapter Result for Offset Paged Pagination. | ||||||||
Content Pointer | A JSON pointer to the JSON value that contains the document’s primary content. | Example: /content/value | ||||||||
‘Created Date’ Pointer | A JSON pointer to the JSON value that specifies the document’s creation date. | Example: /sys_created_on/value For more context, see the code example in the chapter Result for Offset Paged Pagination. | ||||||||
‘Modified Date’ Pointer | A JSON pointer to the JSON value that specifies the document’s last modification date. | Example: /sys_updated_on/value For more context, see the code example in the chapter Result for Offset Paged Pagination. | ||||||||
Date Format | The date pattern used to parse the values provided by the created and modified date pointers. Hint: By default, the date format according to ISO 8601 is used. If a custom date format is needed, configure the date format here. | Example: MM-dd'T'HH:mm'Z' | ||||||||
Default Timezone | The default timezone that is used for parsing dates without timezone | Example: America/Phoenix UTC | ||||||||
Extension Pointer | A JSON pointer to the JSON value that defines the file extension for the document. | Example: /extension/value | ||||||||
Default Extension | The fallback file extension used, if the previous setting “Extension Pointer” is configured or if the JSON does not contain the required value. | Default setting: txt | ||||||||
I18N Metadata Extraction | Specify the metadata containing the i18n values.
| Example: See 2.5 Examples for I18N | ||||||||
GraphQL Prefix (Advanced Settings) | This setting prepends a GraphQL prefix to the metadata. | Default setting: grql |
Setting | Description | Example | ||||||||
Enable Default ACLs | When this setting is enabled, the default principals from the setting ‘Default ACL Principals’ will be added as GRANT permissions for all documents. The principals are separated by newline. | Default setting: Deactivated | ||||||||
Default ACL Principals | The principals defined in this setting will be added to the document’s GRANT principals. | Example: marketing_group developer_group | ||||||||
ACLs | Defines the property used to populate the Access Control List.
| Note: | ||||||||
Grant access to ‘everyone’ per Default | When this setting is enabled, search result access is granted to all user s by default. This might be useful for public data. | Default setting: Deactivated |
The following examples utilize queries and responses from Atlassian Jira for illustrative purposes.
Please note that this is just an example. For actual production crawling use cases, please use the dedicated Mindbreeze Atlassian Jira Connector instead to crawl Jira documents.
query custom_query_name($cloudID: ID!, $cursor: String) {
jira {
issueSearchStable(
cloudId: $cloudID
first: 50
after: $cursor
issueSearchInput: {jql: "project = ‘DEV’"}
){
totalCount
edges {
node {...}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
Configuration option:
{
"data": {
"jira": {
"issueSearchStable": {
"totalCount": 2,
"edges": [
{"<<ITEM-1>>"},
{"<<ITEM-2>>"}
],
"pageInfo": {
"hasNextPage": true,
"endCursor": "<<END-CURSOR>>"
}
}
}
}
}
Query Variable Value JSON :
{„cloudID“: „my-organization-1234“}
Static variables (e.g., IDs or Project Names) should be configured within the „Query Variables” setting.
Hint: Dynamic variables (e.g., cursors or offsets) must not be defined here, as their values change during execution.
Regardless of the type, all variables must be defined as parameters within the query to ensure they can be modified during the crawling process.
Pagination configuration:
Example value | Description | |
Query supports Cursor Pagination | true | The paging is done via cursor. |
Query supports Offset Pagination | false | The paging is not done via offset. |
Results Pointer | /data/jira/issueSearchStable/edges | The edges contain the results array. |
Next Page Pointer | /data/jira/issueSearchStable/pageInfo/hasNextPage | An identifier checks, if there is a next page. |
Next Cursor Pointer | /data/jira/issueSearchStable/pageInfo/endCursor | The cursor fetches the next page. |
Paging Variable Name | cursor | This variable is defined in the query and is used to inject the new cursor that is fetched while crawling. |
The following examples utilize queries and responses from ServiceNow for illustrative purposes.
Please note that this is just an example. For actual production crawling use cases, please use the dedicated Mindbreeze ServiceNow Connector instead to crawl ServiceNow documents.
query get_knowledge_articles($offset: Int) {
GlideRecord_Query {
kb_knowledge(pagination: {limit: 2, offset: $offset}) {
_results {
sys_id {
value
}
text {
value
}
sys_updated_on {
value
}
sys_created_on {
value
}
}
}
}
}
Configuration option:
{
"data": {
"GlideRecord_Query": {
"kb_knowledge": {
"_results": [
{
"sys_id": {
"value": "0b48fd75474321009db4b5b08b9a71c2"
},
"text": {
"value": "<p>CONTENTp>"
},
"sys_updated_on": {
"value": "2014-12-19 15:54:36"
},
"sys_created_on": {
"value": "2014-09-09 23:31:10"
}
},
{ <<ITEM-2>> }
]
}
}
}
}
Pagination configuration:
Example value | Description | |
Query supports Cursor Pagination | False | The paging is not done via cursor. |
Query supports Offset Pagination | True | The paging is done via offset. |
Results Pointer | /data/GlideRecord_Query/kb_knowledge/_results | “_results” contain the results array. |
Next Page Pointer | Not used with offset pagination. | |
Next Cursor Pointer | Not used with offset pagination. | |
Paging Variable Name | offset | This variable is defined in the query and is used to inject the new offset that is calculated while crawling. |
“Pivoting” refers to the process of converting a JSON array into a JSON object.
Original:
{
"custom_objects": [
{
"key": "a",
"value": "1"
},
{
"key": "b",
"value": "2"
}
]
}
Transformed:
{
"custom_objects": {
"a": "1",
"b": "2"
}
Original:
{
"custom_objects": [
{
"key": "a",
"value": "1",
"data_type": "int",
"last_updated": "2023-10-27T10:00:00Z",
"version": 1,
"source": "system_default"
},
{
"key": "b",
"value": "2",
"data_type": "int",
"last_updated": "2023-10-27T11:30:00Z",
"version": 2,
"source": "user_input"
}
]
}
Transformed:
{
"custom_objects": {
"a": {
"key": "a",
"value": "1",
"data_type": "int",
"last_updated": "2023-10-27T10:00:00Z",
"version": 1,
"source": "system_default"
},
"b": {
"key": "b",
"value": "2",
"data_type": "int",
"last_updated": "2023-10-27T11:30:00Z",
"version": 2,
"source": "user_input"
}
}
Original:
{
"custom_objects": [
{
"key": "a"
},
{
"key": "b"
}
]
}
Transformed:
{
"custom_objects": {
"a": {
"key": "a"
},
"b": {
"key": "b"
}
}
The connector supports i18n metadata that can be configured in the metadata settings.
Only JSON objects are supported as i18n metadata. All keys and values must be strings, and keys must comply with the ISO 639 standard.
Original:
{
"custom_objects": {
"i18n": {
"en": "Account ID",
"es": "ID de cuenta",
"fr": "ID du compte"
}
}
}
Config:
If i18n metadata is provided in a JSON array it has to be pivoted first in order to resolve it.
Original:
{
"custom_objects": {
"i18n": [{
"lang": "en",
"val": "Account ID"
}, {
"lang": "es",
"val": "ID de cuenta"
}, {
"lang": "fr",
"val": "ID du compte"
}
]
}
}
Pivoting Config:
Pivoting Result:
{
"custom_objects": {
"i18n": {
"en": "Account ID",
"es": "ID de cuenta",
"fr": "ID du compte"
}
}
}
I18N Config