> For the complete documentation index, see [llms.txt](https://docs.brigge.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.brigge.ai/documentation/brigge-for-engineers/systems.md).

# Systems

## Introduction

In Brigge, a *system* is the mechanism used to connect to a third-party application or service. It contains everything required to connect and sync data.&#x20;

You'll find a library of standard systems in the Brigge [marketplace](/documentation/getting-started/marketplace.md), ready to install and use. Simply find the required system and install it, then [add your credentials](#credentials). Once this is done, the system becomes available for selection when configuring [*Connector* nodes](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md) in pipelines.&#x20;

If you can't find a system that you need in the marketplace, you can build it with Brigge's [system builder](#building-custom-systems) (or as Briggette to build it for you). &#x20;

{% hint style="info" %}
In Brigge, you'll find all systems installed and/or built for your organisation on the [*Systems & Credentials*](#user-content-fn-1)[^1] page.
{% endhint %}

## Breaking down a system

Before starting work with systems, it's important to understand the moving parts and how they are related:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FiG6E0v3y0vtGKTkBxHz7%2FSystem%20config.svg?alt=media&amp;token=3c8a9021-1ee9-4fcf-af26-dcf16bbf5d90" alt=""><figcaption></figcaption></figure></div>

These parts are summarised below and then detailed in subsequent sections:

{% stepper %}
{% step %}
**System (the external app/service)**

A *System* is configured with [*Authentication flows*](#authentication-flows) and [*Endpoints*](#endpoints).&#x20;

An *Authentication Flow* determines how the *System* is authenticated (for example, Basic Auth, OAuth, API key), and also specific *System* behaviour when a given set of *Credentials* and *Endpoint* are selected in pipelines.
{% endstep %}

{% step %}
**Credentials (allow access that app/service)**

To authenticate a *System* for use in pipelines, you need [*Credentials*](/documentation/brigge-for-engineers/credentials.md) - a named set of authentication values. To define a set of *Credentials*, you select an *Authentication Flow* and provide the associated details (e.g. For a *Basic Auth* flow, you will likely provide a username and password). Credentials are stored securely and never exposed to users once saved.&#x20;

A *System* might be associated with one set of *Credentials* (for example, an API token that authorises access to Production data), or multiple sets (for example, an API token that authorises access to Production data and another API token that authorises access to Sandbox data).
{% endstep %}

{% step %}
**Pipeline connector nodes (connect to the app/service)**

To use a *System* in a pipeline, you choose a set of *Credentials* and an *Endpoint.*&#x20;

Keep in mind that selected *Credentials* are associated with an underlying *Authentication Flow*. So, if the selected *Endpoint* references authentication variables, these are resolved at runtime from values provided in the *Authentication Flow* setu&#x70;*.*
{% endstep %}
{% endstepper %}

## Building custom systems&#x20;

With Brigge's *System Builder*, you can build any system that you need to integrate. When configuring a system, you specify its connection type (HTTP/S, FTP/S, SFTP, S3, or SQL), at least one *Authentication flow*, and required endpoints (the specific requests you'll make).

The simplest way to create a system is to let our AI assistant do it for you. Simply ask Briggette to build the system and paste a link to the relevant API documentation. However, if you prefer a manual approach, you can create a system from the *Systems & Credentials* page:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FIoeAC8Ue3JZxyLTkngXT%2Fcreate%20system%20option%20b.png?alt=media&amp;token=5c07c6ec-7dba-4568-9389-94189fa27dbf" alt="" width="375"><figcaption></figcaption></figure></div>

From here, you build the system in three stages: [general details](#basic-details), [authentication flows](#authentication-flows), and [endpoints](#endpoints):

<div data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2Fr0oMnKWTfBkxFnOYFNtf%2FCreate%20system.svg?alt=media&amp;token=c96282dc-def5-492c-b8c3-b2758985f466" alt=""><figcaption></figcaption></figure></div>

### General details

Provide a name, logo, and general details for your new system:&#x20;

<div data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FIG4wBYJKvNicbmYyB4DD%2Fsystems%20-%20basic.png?alt=media&amp;token=82225391-f441-4e56-b57e-588bab685ea8" alt=""><figcaption></figcaption></figure></div>

<details>

<summary>General details guidance</summary>

Fields and options on the *Systems* ➥ *Basic Details* page are summarised below:

<table><thead><tr><th width="166.865478515625">Field/option</th><th>Summary</th></tr></thead><tbody><tr><td>Logo</td><td>Every system requires a logo. Click the placeholder to upload an image and crop to size as needed. Supported file types are: <code>.png</code>, <code>.jpg</code>, <code>.gif</code>, <code>.bmp</code>, <code>.svg</code>. </td></tr><tr><td>Name</td><td>Enter a name to identify this system throughout Brigge.</td></tr><tr><td>Description</td><td>Optionally, enter a description. This can be helpful for other users, and also for Brigge's AI tools.  </td></tr><tr><td>Protocol</td><td>Select the required protocol. Available options are: <br><code>HTTP/S</code>, <code>FTP/S</code>, <code>SFTP</code>, <code>S3</code>, <code>SQL</code>. Note that the protocol cannot be changed after the system is saved. If you save the wrong protocol, you should <a href="#deleting-a-system">delete the system</a> and start again.</td></tr><tr><td>Rate limit</td><td>The maximum number of requests this endpoint can make within a set time period (e.g. 100 requests per minute). Requests over the limit are rejected until the period resets. Typically, the API documentation associated with this system will provide guidance on how this option should be set. </td></tr><tr><td>Date format</td><td>Select the expected date format for data received from or sent to this system.</td></tr><tr><td>Colour (Hex)</td><td>Enter a hex code directly or use the colour picker to set an accent colour for this system.</td></tr></tbody></table>

After saving these details, you can go to add [authentication flows](#authentication-flows) and [endpoints](#endpoints)

<div align="left"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FILLb8w2JOdgL7DnCT4sz%2Fsystem%20saved.png?alt=media&amp;token=e9d38b93-c7f5-41a9-a0c7-e2e07c6413ee" alt=""><figcaption></figcaption></figure></div>

</details>

### Authentication flows

An *Authentication Flow* determines:

* How the *System* is authenticated (for example, Basic Auth, OAuth, API key). You choose an *Authentication* *Flow* and then, if necessary, add/update authentication variables to determine the steps a user must complete and what information they provide to authenticate.&#x20;
* Specific *System* behaviour in pipelines when a given set of *Credentials* and *Endpoint* are selected in a [connector node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md). For example, you can define authentication variables that are never exposed to users, but are referenced in endpoints and resolved at pipeline runtime when this authentication flow is used.

#### Working with authentication flows

Brigge includes a range of authentication flow templates that can be used as-is, or as a starting point for you to update. You must provide at least one authentication flow (otherwise there would be no way to authenticate the system). If needed, you can configure multiple flows - for example:

* If a system supports multiple authentication types
* If you need multiple 'flavours' of the same authentication type

<details>

<summary>Adding an authentication flow</summary>

{% stepper %}
{% step %}
**Select the create authentication flow option**

In the left panel, click the options menu (three dots) for `authentication`, then select `create authentication flow`:

<table data-card-size="large" data-view="cards"><thead><tr><th></th></tr></thead><tbody><tr><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FXsylcVg7ql8mI3vBLKoe%2Fadd%20auth%20flow%201.png?alt=media&amp;token=ed4643ec-f2aa-44a5-bbb5-0e186bd47551" alt=""></td></tr><tr><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FvpuXkZmHNgBQTNtWHoGK%2Fadd%20auth%20flow%202a.png?alt=media&amp;token=3672aa4a-357b-46ca-afad-9d54a8f1a03e" alt=""></td></tr></tbody></table>
{% endstep %}

{% step %}
**Enter a name and select an authentication flow template**

The name specified here is displayed users when [adding credentials](/documentation/brigge-for-engineers/credentials.md) for this system:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FXkgcE3r15XXkc69cZBq3%2Fcreate%20auth%20flow%203.png?alt=media&amp;token=f24ebcd6-4d76-4b03-991c-7b67ff7811c8" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Select an authentication template**

Brigge includes a range of authentication flow templates that can be used as-is, or as a starting point for you to [update (and optionally save as a template](#updating-an-authentication-flow)).&#x20;

{% hint style="info" %}
For detailed information about configuring some of the most commonly used authentication templates, see [Authentication flow templates](#authentication-flow-templates).
{% endhint %}

Select an `authentication flow template`, then [review the configuration](#configuring-an-authentication-flow), [test the flow](#testing-an-authentication-flow), and [update settings](#updating-an-authentication-flow) as needed.&#x20;
{% endstep %}
{% endstepper %}

</details>

<details>

<summary>Configuring an authentication flow</summary>

Having [created an authentication flow](#adding-an-authentication-flow) (or selected an existing one), *General Settings* and options are displayed. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FV2b29ODBppOAKcLm9jmP%2FAuth%20flow%20options.svg?alt=media&amp;token=a747e448-97e9-4470-b150-ba097008b015" alt=""><figcaption></figcaption></figure></div>

Items on this page are summarised below.

{% stepper %}
{% step %}
**General settings**

The *General Settings* tab includes general information and options for the selected authentication flow:

<table><thead><tr><th width="188.46875" valign="top">Field</th><th valign="top">Summary</th></tr></thead><tbody><tr><td valign="top">Authentication flow name</td><td valign="top">This name is displayed to users when <a href="/documentation/brigge-for-engineers/credentials.md">adding credentials</a> for this system. You can update this if needed. </td></tr><tr><td valign="top">Documentation/help link</td><td valign="top">It can be helpful to provide a link to the API documentation that you're using to build this system, for future reference.</td></tr><tr><td valign="top">Variables</td><td valign="top"><p>Authentication flow variables are used to specify  values that need to be passed into requests at runtime.  They serve two purposes:</p><ul><li>To determine fields that users must complete when adding credentials for this system. If a variable is configured with the <code>display type</code> set to <code>form</code>, users are prompted to enter (or confirm) the value when <a href="/documentation/brigge-for-engineers/credentials.md">adding credentials</a>.</li><li>To define values that can be added to system endpoints and resolved at runtime when the endpoint is used in conjunction with this authentication flow.</li></ul><p></p><p>Authentication flow templates are pre-configured with known variables that the flow needs to work. These are generic - check your API documentation for the application/service you're integrating and <a href="#working-with-variables">update, add, or remove variables</a> as needed. </p></td></tr></tbody></table>
{% endstep %}

{% step %}
**Authentication requests**

An authentication flow might make one or more requests to authenticate associated [credentials](/documentation/brigge-for-engineers/credentials.md). Any requests are shown to the right of *General Settings*. For example:&#x20;

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2F6frRBckdBTvKn4I3ny7X%2Fauth%20request%20example.jpg?alt=media&amp;token=08ee4f9e-01c4-4a39-98bd-efdb8608873f" alt=""><figcaption></figcaption></figure></div>

If multiple requests are present, they run in sequence from left to right. If needed, you can add more requests using the `add request` button.

{% hint style="info" %}
Not all authentication flows need requests. For example:

* *Basic auth* and API key types pass credentials into endpoint request headers on every call. In this case, you ensure that each endpoint is configured for credentials to be passed as headers. To test authentication, you test the endpoint.&#x20;
* OAuth 2-style flows (e.g. authorisation code, refresh token) require a preliminary call to an authentication server to obtain a token, and perhaps a second call to refresh it once expired. In this case, you would add any requests needed for authentication to happen.&#x20;
  {% endhint %}

Authentication request settings are the same as endpoint requests. For more details, see [Working with system requests](#working-with-system-requests)).

{% hint style="warning" %}
It can be useful to add requests here for testing purposes. That's fine, but remember to remove any unnecessary requests when you've finished testing, otherwise they will be considered part of the authentication flow.&#x20;
{% endhint %}
{% endstep %}

{% step %}
**Save**&#x20;

If you've made any changes to the authentication flow (for example, [updating or adding variables](#working-with-variables)) they must be saved to take effect.&#x20;
{% endstep %}

{% step %}
**Test auth flow**

If this authentication flow has one or more requests, use the `test auth flow` button to step through an authentication flow and check it's working correctly.&#x20;

If multiple authentication flows are defined for the system, you can choose which one to test - then enter (or select existing) credentials to be tested.&#x20;

{% hint style="warning" %}
Unsaved changes are ignored during testing. &#x20;
{% endhint %}
{% endstep %}
{% endstepper %}

</details>

<details>

<summary>Working with authentication flow variables</summary>

#### How to expose authentication variables for user input

If a variable is configured with the `display type` set to `form`, users are prompted to enter (or confirm) a value when [adding credentials](/documentation/brigge-for-engineers/credentials.md) for this system. For example:

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>A <code>basic auth</code> flow includes two variables  (<code>username</code> and <code>password</code>), both with <code>display type</code> set to <code>form</code>:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FFCJcOs2EzTISSv41UgTS%2Fauth%20variable%20eg0.png?alt=media&amp;token=a2c7f651-2f04-44f7-9cd0-3fa01ae24456" alt=""></td></tr><tr><td>User adds credentials and selects the <code>basic auth</code> flow. They are prompted to authenticate with a <code>username</code> and <code>password</code>: </td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FKVZrJfxxv8ldtRflPKSm%2Fauth%20variable%20eg1.png?alt=media&amp;token=f495952c-5919-4f80-a0b6-69cbaef36df2" alt=""></td></tr></tbody></table>

#### How to reference authentication variables in system endpoints

You can define variables that aren't necessarily needed for authentication, but can be referenced in endpoint configurations and applied at runtime. The examples below show how this can work.

**Example 1**

Most REST API endpoints have the same base URL. You can define this as a variable on the authentication flow once, and then reference this in endpoints as needed. &#x20;

{% stepper %}
{% step %}
**Authentication flow**&#x20;

Add a `base_url` variable with a static value of `https://myexample.com/api` and the `display type` set to `none` (so it's not exposed to users when they are adding credentials).
{% endstep %}

{% step %}
**Endpoints**&#x20;

Reference the `base_url` variable in endpoint URLs, for example:&#x20;

`GET` `{{base_url}}/contacts`&#x20;

`POST` `{{base_url}}/contact`
{% endstep %}

{% step %}
**Credentials**

Add credentials which use this authentication flow.
{% endstep %}

{% step %}
**Pipeline connector nodes**

Configure a pipeline [connector node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md) to use these credentials. The full URL for the selected endpoint resolves at runtime from the `base_url` on the authentication flow associated with selected credentials.
{% endstep %}
{% endstepper %}

**Example 2**

Let's take example 1 a step further. Suppose your API has *two* base URLs - one for a Sandbox and another for Production.&#x20;

{% stepper %}
{% step %}
**Authentication flows**

Define two authentication flows, e.g.: *Sandbox (basic auth)* and *Production (basic auth)*.&#x20;

Both would have the same authentication setup, but different `base_url` values. For example:&#x20;

`https://sandbox.myexample.com/api`&#x20;

`https://production.myexample.com/api`
{% endstep %}

{% step %}
**Endpoints**&#x20;

Reference the `base_url` variable in endpoint URLs, for example:&#x20;

`GET` `{{base_url}}/contacts`&#x20;

`POST` `{{base_url}}/contact`.
{% endstep %}

{% step %}
**Credentials**

Define two sets of credentials:

* Sandbox credentials (using the *Sandbox (basic auth)* authentication flow.
* Production credentials (using the *Production (basic auth)* authentication flow.
  {% endstep %}

{% step %}
**Pipeline connector nodes**

Configure a pipeline [connector node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md) to use either *Sandbox* or *Production* credentials. The full URL for the selected endpoint resolves at runtime from the `base_url` on the authentication flow associated with the selected credentials.
{% endstep %}
{% endstepper %}

</details>

<details>

<summary>Duplicating an authentication flow</summary>

It can sometimes be useful to make a copy of an authentication flow - for example, if you want different flavours of the same flow, or to take a backup before making changes. To do this:

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Hover your cursor over the required authentication flow and click the three-dot options menu. </td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2Fr4ovomo0YNSkqlvOJe46%2Fdupe%20auth%20flow%20a.png?alt=media&amp;token=8517b86e-331f-4c12-9a69-4052b2da996d">dupe auth flow a.png</a></td></tr><tr><td>Select the <code>duplicate</code> option from the options menu. </td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FrJEKerg0S2QQw9AgEz34%2Fdupe%20auth%20flow%20b.png?alt=media&amp;token=2e97132e-581d-4871-94db-ec55d30da858">dupe auth flow b.png</a></td></tr><tr><td>A new authentication flow is added to the list. It has the same name as the original flow, appended with an incremental number. You can now rename and update this flow as needed.</td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FAo9evVs0ym0128IEW9C7%2Fdupe%20auth%20flow%20c.png?alt=media&amp;token=c31beb1c-44f4-4c76-9c55-e3cdc2dcb779">dupe auth flow c.png</a></td></tr></tbody></table>

</details>

<details>

<summary>Deleting an authentication flow</summary>

If an authentication flow is no longer in use, you can delete it. To do this, follow the steps below:&#x20;

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Hover your cursor over the required auth flow and click the three-dot options menu. </td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FrAVHkIZx9XnmBwWkdBRi%2Fdelete%20auth%20flow%20a.png?alt=media&amp;token=d26e6b99-1af5-4a53-8571-910b839b6f64">delete auth flow a.png</a></td></tr><tr><td>Select the <code>delete</code> option from the options menu. When prompted, confirm this action.</td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FWJbtDT5Y3JfngN7HfxP5%2Fdelete%20auth%20flow%20b.png?alt=media&amp;token=9df8b85e-ae8e-4d71-b4c0-f9404e971a41">delete auth flow b.png</a></td></tr></tbody></table>

</details>

### Endpoints

*Endpoints* are the API requests that will be available for selection in pipelines when a [connector node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md) is configured to use the system. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2F5QSsbUgxproIo9vhmVf6%2Fendpoints%20in%20pipeline%20connector.jpg?alt=media&amp;token=34fd4ebc-7e09-4d55-a2d6-6cd54cde6f2b" alt=""><figcaption></figcaption></figure></div>

#### Working with endpoint groups

In Brigge, endpoints are added to groups. If a system requires lots of endpoints, this is useful to organise them into logical categories.&#x20;

{% hint style="info" %}
By default, new endpoints are ungrouped in the sidebar, which means users will see a flat list of endpoints when configuring [connector nodes](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md). If you [assign endpoints groups](#configuring-an-endpoint-general), users can navigate groups to find the required endpoint.
{% endhint %}

<details>

<summary>Creating an endpoint group</summary>

At least one group must exist before [endpoints are created](#creating-an-endpoint). If no groups exist, click the `create endpoint group` button in the left panel. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FeL9hQccbEBXZO3GCUZzs%2Fcreate%20endpoint%20group%201%20from%200.png?alt=media&amp;token=197c873c-815b-43c4-a4ae-875c6bcbd1e8" alt="" width="352"><figcaption></figcaption></figure></div>

Otherwise, follow the steps below:

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Click the <code>endpoints</code> three-dot options menu. For example: </td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FSAhXD8SPlG30KDkgcZQt%2Fcreate%20endpoint%20group%20a2.png?alt=media&amp;token=f6836abd-3a30-4b4a-8454-8dc1881eb192" alt=""></td></tr><tr><td>Then select <code>create endpoint group</code>. For example:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FIqzH6nBeKxJgmAGnAUVJ%2Fcreate%20endpoint%20group%20a1.png?alt=media&amp;token=562fac40-1168-4d56-b2aa-281f91a0e032" alt=""></td></tr><tr><td>A new group is added to the end of the endpoint list. Hover your cursor over the placeholder name, then click the <code>edit</code> icon. For example:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FbLrCrBo5i59JO7I4olD8%2Fcreate%20endpoint%20group%203.png?alt=media&amp;token=21a59296-3e7b-4da3-a530-4c4d729e2243" alt=""></td></tr><tr><td> Enter an confirm your preferred name:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2F5JgyR2wlu9nPKvwdS3uK%2Fcreate%20endpoint%20group%204a.png?alt=media&amp;token=41826a99-66a8-41e2-b8ef-9fb881187d3d" alt=""></td></tr></tbody></table>

</details>

<details>

<summary>Duplicating an endpoint group</summary>

#### Introduction

When an endpoint group is duplicated, the group and its associated endpoints are cloned and added to the end of the endpoints list. Existing names are appended with 1 or (if a clone already exists) the next incremental number. For example:

<div align="left"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2Fh0EQvSpniai77PUoZb0I%2FDuplicated%20endpoint%20group.svg?alt=media&amp;token=d71c2bde-17b6-4ca5-997c-c3973f212274" alt=""><figcaption></figcaption></figure></div>

#### How to duplicate an endpoint group

To duplicate an endpoint group, follow the steps below:

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Hover your cursor over the endpoint group that you want to duplicate. A three-dot options menu is shown, for example: </td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FSyz4xd8tKXDHIiEsSmIt%2Fendpoint%20group%20options%20menu.png?alt=media&amp;token=16fd5808-beb9-4541-8a02-9238f639d30b" alt=""></td></tr><tr><td>Then select <code>duplicate</code>. For example:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FLX3cgtXqqiLWF7zytog7%2Fduplicate%20endpoint%20group%202a.png?alt=media&amp;token=2731062b-425a-46a0-a8c6-61cfce66f8ef" alt=""></td></tr><tr><td>A new group is added to the end of the endpoint list. Hover your cursor over the placeholder name, then click the <code>edit</code> icon. For example:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FbLrCrBo5i59JO7I4olD8%2Fcreate%20endpoint%20group%203.png?alt=media&amp;token=21a59296-3e7b-4da3-a530-4c4d729e2243" alt=""></td></tr><tr><td> Enter an confirm your preferred name:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2F5JgyR2wlu9nPKvwdS3uK%2Fcreate%20endpoint%20group%204a.png?alt=media&amp;token=41826a99-66a8-41e2-b8ef-9fb881187d3d" alt=""></td></tr></tbody></table>

</details>

<details>

<summary>Deleting an endpoint group</summary>

#### Introduction

Deleting an endpoint group removes the group only - it does not remove associated endpoints. If endpoints are present, they are categorised as `ungrouped`. If needed, you can [move ungrouped endpoints to a different group](#moving-an-endpoint-to-a-different-group).

#### How to delete an endpoint group

To delete an endpoint group, follow the steps below:

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Hover your cursor over the endpoint group that you want to delete. A three-dot options menu is shown, for example: </td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FSyz4xd8tKXDHIiEsSmIt%2Fendpoint%20group%20options%20menu.png?alt=media&amp;token=16fd5808-beb9-4541-8a02-9238f639d30b" alt=""></td></tr><tr><td>Then select <code>delete</code>. For example:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FV0Xg79bT5V0NRXodjdxV%2Fdelete%20group%20option.png?alt=media&amp;token=092e4ea6-5b56-4fb2-8d7c-490ff5f15b42" alt=""></td></tr></tbody></table>

</details>

#### Working with endpoints

<details>

<summary>Creating an endpoint</summary>

#### Introduction

To use a system in a pipeline, it must include at least one endpoint. To create an endpoint, click the `endpoints` three-dot menu, then select `create endpoint`. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FX0YYz2OmRx3o1TDEh3El%2FCreate%20endpoint%201.png?alt=media&amp;token=1b86c3f2-40d7-4663-abc2-ffaed83d699a" alt=""><figcaption></figcaption></figure></div>

A new ([ungrouped](#moving-an-endpoint-to-a-different-group)) endpoint is created, ready to configure. Configuration requirements will vary, depending on the system and the type of endpoint you're adding.&#x20;

#### Working with endpoints

The follow sections explain how to configure a new endpoint in general terms:

* [Configuring an endpoint (general)](#configuring-an-endpoint-general)
* [Configuring an endpoint (request)](#configuring-an-endpoint-request)
* [Configuring an endpoint (schemas)](#configuring-an-endpoint-schemas)

{% hint style="info" %}
If you need to create an endpoint that has similar settings to one that exists already, it is often quicker to [duplicate an existing endpoint ](#duplicating-an-endpoint)and then update the configuration.
{% endhint %}

</details>

<details>

<summary>Configuring an endpoint (general settings)</summary>

#### Introduction

The *General settings* tab is where you define information and options for the endpoint as a whole. Some are informational, whereas others determine behaviour when this endpoint is used:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FHhDyAEtlte0xlUuN0uXh%2FEndpoint%20-%20general%20settings.svg?alt=media&amp;token=c5c50336-f867-4d49-8019-8f3d2aabcf4a" alt=""><figcaption></figcaption></figure></div>

#### Understanding endpoint options

Items on this page are summarised below:

{% stepper %}
{% step %}
**Endpoint name & description**

Enter a name to be displayed wherever this endpoint is used in the system. Optionally, provide a description that may prove helpful for AI queries.
{% endstep %}

{% step %}
**Enable pagination options**

If the request is fetching data and pagination is required, toggle `enable pagination` to `on`. This activates a pagination tab, where you can configure the required pagination settings. For more information, see [Endpoint pagination options](#endpoint-pagination-options).
{% endstep %}

{% step %}
**Assign group**

By default, new endpoints are ungrouped in the sidebar, which means users see a flat list of endpoints when configuring connector nodes. If you have [created groups](#creating-an-endpoint-group), you can assign this endpoint here.&#x20;
{% endstep %}

{% step %}
**Variables for this request**

Endpoint variables are used to specify values that need to be passed into requests at runtime. Any variables defined here can be referenced/utilised elsewhere in the endpoint setup (e.g. in [request](#understanding-request-setup-options) configuration or [pagination](#endpoint-pagination-options) setup). &#x20;

Variables can be exposed to users in pipelines (so the user can enter a value) OR, they might be hidden and referenced elsewhere in the endpoint setup, to be resolved at runtime.

For example, you might have a utility pipeline that's designed to be run manually, where a user can enter an `id` for the data they want to retrieve. By configuring an `id` variable with `display type` set to `form`, it is exposed for users to complete when they add this endpoint to a pipeline connector node - this is shown below:

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Add an <code>id</code> variable to the endpoint configuration:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FAwBtpyq6Bi33lyO9E4rs%2Fendpoint%20variable%20eg1.png?alt=media&amp;token=4d9aa3f5-fa28-4d1d-8c46-a1c84d8577d8" alt=""></td></tr><tr><td>This allows pipeline users to enter an <code>id</code> value to be retrieved:</td><td><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FSErz8KWpsO65H82PhDVt%2Fendpoint%20variable%20eg2.png?alt=media&amp;token=890fda3d-9aa6-44fc-80b2-3b2f49625cc8" alt=""></td></tr></tbody></table>

See [Working with variables](#working-with-variables) for more information about adding and managing variables.
{% endstep %}
{% endstepper %}

</details>

<details>

<summary>Configuring an endpoint (request settings)</summary>

#### Introduction

An endpoint *is* a request, so there will only ever be one request associated with any endpoint.&#x20;

The setup for an endpoint request is the same as that for [authentication requests](#configuring-an-authentication-flow) - for more details, see [Working with system requests](#working-with-system-requests)). For information about testing requests, see [Testing system requests](#testing-system-requests).

</details>

<details>

<summary>Configuring an endpoint (schemas)</summary>

#### Introduction

A schema describes the expected structure of data associated with this endpoint. It describes which fields are expected, where they are expected, and their associated data types.&#x20;

#### Adding schemas for an endpoint

Adding an endpoint schema is optional, but advisable. It helps [pipeline](/documentation/brigge-for-transformers/pipelines.md) users navigate the the data structure for field selection [when this endpoint is used](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md) (for example, when mapping data to/from this system), and, if needed, it can also be used to validate the data structure at any point in a pipeline. For more information about working with schemas in Brigge, see [Schemas](/documentation/brigge-for-transformers/schemas.md).

You can add one schema, or multiple schemas for an endpoint.

{% hint style="info" %}
**Why would I need more than one schema for an endpoint?**

The shape of data can change as it moves through a pipeline. For example:

1. A [connector node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md) might retrieve a single payload at the start of a pipeline (let's say a `tasks` array with 20 `task` objects) and this is passed into a [split node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/split-node.md).&#x20;
2. The easiest way to configure a [split node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/split-node.md) is to select a schema associated with incoming data, and navigate the data structure to choose the element where data is split. So, the first schema that we need for our endpoint is for the data in its original, unchanged state (for example: *List tasks - received*).
3. Now suppose the [split node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/split-node.md) outputs 20 payloads, with one `task` object per payload. The shape of our data is now changed, so we'd need another schema to reflect the structure of a single-item payload (for example: *List tasks - split*).
4. Finally, suppose that the 20 payloads pass into a [map node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/map-node.md), where only a subset of fields is mapped (and therefore output). Once again, the shape of our data is changed, so we'd need another schema to reflect the structure of mapped data (for example: *List tasks - mapped*).
   {% endhint %}

</details>

<details>

<summary>Endpoint pagination options</summary>

#### Introduction

Pagination lets you pull large datasets in smaller chunks instead of one large request. Most APIs cap how many records they'll return at once (typically 100 or fewer), so pagination allows you to fetch consecutive pages until there is no more to retrieve.&#x20;

Every API implements pagination differently. For example, some use page numbers, some use limit/skip parameters, others use cursor tokens.&#x20;

{% hint style="info" %}
The API documentation for the system you're building will normally provide information on the expected implementation.&#x20;
{% endhint %}

#### The Brigge approach for pagination

Brigge uses a flexible, rule-based approached to configure any pagination type needed. You build logic around three things:

<table><thead><tr><th width="184.80078125">Item</th><th>Summary</th></tr></thead><tbody><tr><td>Pagination variable</td><td>A parameter that 'keeps count' (e.g. <code>skip</code> or <code>page</code>), changing with each request so the API knows where to pick up next.</td></tr><tr><td>New value</td><td>An expression that updates the pagination variable after each successful request, so the next call moves forward and previous data is not repeated.</td></tr><tr><td>Stop condition(s)</td><td>Rules that tell Brigge when to stop fetching data. Typically, this is based on the response content - for example, stopping once a page comes back with fewer records than requested. </td></tr></tbody></table>

For more information, see [Pagination options](#pagination-options).

#### The pagination loop

When pagination is enabled, data is retrieved in 'pages', where each page contains a limited number of items. After the initial request, Brigge checks if there is any more data to retrieve (based on [defined rules](#the-brigge-approach-for-pagination)), If yes, another (pagination) request is made for the next page of data, and so on.

Irrespective of the pagination type, pagination works broadly on a loop, as can be seen in the illustrationff below:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FMXQSEc7UVopJkgZc8wEr%2FEndpoint%20pagination.svg?alt=media&amp;token=3f4c0d04-6e68-4e9b-86a7-201306002f89" alt=""><figcaption></figcaption></figure></div>

These steps can be summarised as follows:

{% stepper %}
{% step %}
**Initial endpoint request**

Sends the first API call using parameters on the endpoint *Request* tab and receives response. &#x20;
{% endstep %}

{% step %}
**Process response**

This step is only needed if the [pagination setup](#pagination-options) requires values from the response (i.e. [tagged data](#tagging-response-data-for-a-system-request)). If so, values for tagged fields are used to updates variables  so they're available for pagination.
{% endstep %}

{% step %}
**Stop condition(s)**

Checks configured conditions against current variable values to determine if another request should be made for more data. If conditions are met, the loop ends and we move to the next pipeline step. If conditions are not met, the loop continues.&#x20;
{% endstep %}

{% step %}
**Recalculate**

Updates the `pagination variable` using the `new value` formula for the next pagination request.
{% endstep %}

{% step %}
**Next pagination request**

Sends the next request for data using parameters on the endpoint *Pagination* tab (including the recalculated `pagination variable`, then loops back to Step 2.
{% endstep %}
{% endstepper %}

#### Pagination options

In Brigge, [enabling pagination for an endpoint](#configuring-an-endpoint-general-settings) activates a *Pagination* tab. This is where you define pagination behaviour and request settings for the required pagination type:

<figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FgJN2rM2bmtvkZpKkIuXC%2FEndpoint%20-%20pagination%20settings.svg?alt=media&amp;token=91004798-a2ce-47ab-a5b3-dce90187e723" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Pagination logic can (and usually does) reference other endpoint setup tabs, so there are three areas to consider:

* [*General* settings tab](#configuring-an-endpoint-general-settings). Any variable created here can be referenced (by name) anywhere else in the endpoint setup, including pagination options. This is also where pagination is enabled.&#x20;
* [*Request* tab](#configuring-an-endpoint-request-settings). Defines the *first* call Brigge makes to the endpoint. Parameters defined here can have static values, or references to variables. A parameter is only sent if its `default` toggle is `on`. This tab also includes [tagged data](#tagging-response-data-for-a-system-request), which enables you to inject the value of a field found in response data, into a specified variable. In this way, the variable value is updated dynamically, ready for use downstream.
* *Pagination* tab. When pagination is enabled, a *Pagination* tab is activated for the endpoint. This is used to define pagination behaviour, including parameters to be applied for every pagination request *after* the first endpoint request. Pagination request options take precedence for all subsequent requests until pagination stops.
  {% endhint %}

In the steps below, we'll walk through these options and configure offset pagination for a `list contacts` endpoint, as an example. &#x20;

{% stepper %}
{% step %}
**Request URL**

This is the URL to be used for pagination requests - i.e. all requests (after the initial endpoint request) to retrieve more pages until pagination stops. Typically this will be the same as the main request (on the [*Requests* tab](#configuring-an-endpoint-request-settings)) but, if needed, it can be different. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FWn5EbgOKgVLJkRVrvUfi%2Foffset%20eg%201.png?alt=media&amp;token=36a3acd9-4c58-49a2-8855-680d4c044559" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Pagination variable**

This variable represents 'where we are' in the pagination sequence. Use the dropdown list to select an existing endpoint variable - all variables on the *General* tab are available for selection here. For our example, three variables have been added for this endpoint:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FCNVAaHo7rMU7luwInDZx%2Fpagination%20example%201.png?alt=media&amp;token=8e871df1-672d-4b62-92b1-17028ad3907f" alt=""><figcaption></figcaption></figure></div>

For the `pagination variable`, we select the `skip` variable (which we can see has a `default value` of `0`):

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FYgdXEMqCIWSi3a5wGXQm%2Foffset%20eg%203.png?alt=media&amp;token=757d75f8-9300-497c-80e4-c7b00eb75919" alt="" width="375"><figcaption></figcaption></figure></div>

Also notice that we have two other variables with default values - we'll need these later:

* `limit` is set to `10`
* `Remaining` is set to `1`

{% hint style="info" %}
In the context of offset pagination, `skip` is our system's equivalent name for `offset` - i.e. it represents the number of records to be skipped (because they've already been retrieved) before retrieving the next page.&#x20;
{% endhint %}
{% endstep %}

{% step %}
**How the pagination value is recalculated**

Next, we define an expression that recalculates the pagination variable before each subsequent request. What this expression looks like depends entirely on the pagination type; for our `offset` pagination we are adding `skip` and `limit` variable values together:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FVcGpmr9sFxH7Nv0U7qnP%2Foffset%20eg%204.png?alt=media&amp;token=43b11662-a4aa-43c0-bf52-d585ba5df5f8" alt=""><figcaption></figcaption></figure></div>

Here, we are saying: set the `skip` variable value to the sum of `skip` (currently `0`) and `limit` (currently `10`). So, the `pagination variable` (`skip`) is set to `10`.
{% endstep %}

{% step %}
**Rules to determine when pagination stops**

Next, we define `stop conditions` to determine when Brigge stops requesting further pages. A `stop condition` is a rule which evaluates the value of a given variable against a defined value.&#x20;

{% hint style="info" %}
Stop conditions are optional - if your pagination has some other way to determine when pagination stops, you can ignore this section.&#x20;

If you need multiple stop conditions, use the `add stop condition` option to add more (when multiple stop conditions are present, pagination stops if any one of them is met).&#x20;
{% endhint %}

The variable value to be evaluated is selected from a dropdown list - again, all variables on the *General* tab are available for selection. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2F0ohh19FsO9gLWBUaGCsN%2Foffset%20eg%204a.png?alt=media&amp;token=b0f9896d-b970-4d4b-a94c-788b3ae03871" alt=""><figcaption></figcaption></figure></div>

Here, we selected the `remaining` variable. So, we are saying: check the current value of the the `remaining` variable; if it's less than or equal to `0`, stop pagination (otherwise continue).

However, looking at our example, how is the `remaining` variable updated? We've already seen that it has a default value of `1`, but it will need an update after every request for this to be a valid condition. This is a scenario where [tagged data](#tagging-response-data-for-a-system-request) is useful.

{% hint style="info" %}
**What is tagged data?**

Tagged data is a way to inject the value of a field found in response data, into a specified variable. In this way, the variable value is updated dynamically, ready for use downstream. For more information about how data is tagged, see [Tagging response data for system requests](#tagging-response-data-for-a-system-request). &#x20;
{% endhint %}

Tagged data is added via the endpoint [*Request* tab](#configuring-an-endpoint-request-settings). For our example, the external service being integrated returns a `remaining-count` field in every response, which is the calculated number of pages left to retrieve.&#x20;

By tagging this field and mapping it to our `remaining` variable, we inject the `remaining-count` value, so the remaining value always reflects the current number of pages left to retrieve.&#x20;

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FYEaencuGkXWDkvo4B78b%2Foffset%20eg%204b.png?alt=media&amp;token=c24b520f-d9ef-4ded-9299-9c1e6c05edfc" alt=""><figcaption></figcaption></figure></div>

one or more checks, each comparing a variable against a value with an operator. When a condition evaluates true, Brigge stops requesting further pages.
{% endstep %}

{% step %}
**Pagination request settings**

The *Pagination* tab includes its own request `parameters`, `headers` and `body` settings. These work in exactly the same way as the [main endpoint *Requests* tab](#configuring-system-requests), but any settings defined here only apply to pagination requests (i.e. all requests after the first).&#x20;

This means that - if needed - the shape of pagination requests can be quite different to the main request. Any pagination settings defined here take precendence after the intial request.
{% endstep %}
{% endstepper %}

</details>

<details>

<summary>Duplicating an endpoint</summary>

It can sometimes be useful to make a copy of an endpoint - perhaps you want to make a backup before changing settings, or maybe you have multiple endpoints that share the same (or similar) settings and want to avoid configuring each one manually.&#x20;

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Hover your cursor over the required endpoint and click the three-dot options menu. </td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FgwmzPcAjNvgNH0Dk3too%2Fdupe%20endpoint%20a1.png?alt=media&amp;token=fda852e7-ed8e-4cdc-9206-8a56ad5a6102">dupe endpoint a1.png</a></td></tr><tr><td>Select the <code>duplicate</code> option from the options menu. </td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FDKmPmQxAxQCE6Vm5PphS%2Fdupe%20endpoint%20b.png?alt=media&amp;token=e8b32c97-89e7-4017-8cd5-b5370a29b703">dupe endpoint b.png</a></td></tr><tr><td>A copy of the endpoint is added to the end of the originating <a href="#working-with-endpoint-groups">endpoint group</a>. It has the same name as the original endpoint, appended with an incremental number. You can now rename and update this endpoint as needed. </td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FYZDTHTVgTpySkekSn80F%2Fdupe%20endpoint%20c2.png?alt=media&amp;token=4432138c-6dbb-48bf-8897-a1030250628f">dupe endpoint c2.png</a></td></tr></tbody></table>

</details>

<details>

<summary>Moving an endpoint to a different group</summary>

To move and endpoint to a different group, access its [general settings](#configuring-an-endpoint-general-settings) and select the required group from the dropdown list (all existing endpoint groups are available for selection). For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FW2HudBxJQbyVKPrYYr14%2Fchange%20endpoint%20group.png?alt=media&amp;token=f59fe659-537d-4db7-b443-f2846c9dd2d4" alt=""><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Deleting an endpoint</summary>

If an endpoint is no longer in use, you can delete it. To do this, follow the steps below:&#x20;

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Hover your cursor over the required endpoint and click the three-dot options menu. </td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FmiDXUmiivqUjkTCWUdXs%2Fdelete%20endpoint%20b.png?alt=media&amp;token=3fcec45c-c094-4aa3-ba3e-6e49e5a1851a">delete endpoint b.png</a></td></tr><tr><td>Select the <code>delete</code> option from the options menu. When prompted, confirm this action.</td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FmiDXUmiivqUjkTCWUdXs%2Fdelete%20endpoint%20b.png?alt=media&amp;token=3fcec45c-c094-4aa3-ba3e-6e49e5a1851a">delete endpoint b.png</a></td></tr></tbody></table>

{% hint style="info" %}
You can't delete an endpoint if its configured in a pipeline (irrespective of whether that pipeline is active). If you attempt to do so, you'll see a warning which includes any pipelines where this endpoint is used.
{% endhint %}

</details>

### System requests & variables

<details>

<summary>Configuring system requests</summary>

#### Introduction

When configuring [endpoints](#working-with-endpoints) and (depending on the flow type) [authentication flows](#authentication-flows), you define requests to the external application/service that you're integrating. Request settings and options are the same, irrespective of the context. Key elements are shown below:

<div data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FNLHViHDWuGnTwSvaP5K9%2FEndpoint%20-%20request%20settings.svg?alt=media&amp;token=98b44570-46e9-4f28-b0a7-1245e0e0fc38" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
An [endpoint](#working-with-endpoints) request will only ever be associated with one request, whereas an [authentication flow](#authentication-flows) can have multiple requests.
{% endhint %}

#### Understanding request setup options

Request options shown above are summarised below:

{% stepper %}
{% step %}
**API request URL**

Enter the URL for this request. This might be a full URL, or one that includes [authentication flow variables](#working-with-authentication-flow-variables).&#x20;

{% hint style="info" %}
You can use authentication flow variables to swap in common parts of a URL at runtime.&#x20;

For example, suppose 30 endpoint URLs reference an API version that's likely to change over time. You could enter the full URL for each endpoint - but when the API version changes, you'd need to make 30 updates.

Alternatively, you could define a variable for the API version (e.g. `api_version` set to `1.0`) and reference this variable in endpoint URLs - so:\
\
`https://production.myexample.com/api/1.0/contacts`

...would be entered as:

`https://production.myexample.com/api/{{api_version}}/contacts`\
\
At runtime, the `api_version` variable resolves to its current value (1.0). When the API version changes, you simply update the authentication flow variable. Next time endpoints are triggered in pipelines (with the associated authentication flow) the  `api_version` resolves with the latest value. &#x20;
{% endhint %}
{% endstep %}

{% step %}
**Request parameters**&#x20;

Request parameters define queries/filters, appended to the request URL at runtime.

URL parameters are added as 'key pairs' - enter a `key` (a valid field name for this API) and an associated `value`.

{% hint style="info" %}
Check your API documentation for valid parameters.&#x20;
{% endhint %}

Parameter values can be:

* Static. You provide the required value here and this is used every time the request runs.
* Dynamic. You reference an [authentication flow variable](#working-with-authentication-flow-variables); at runtime the the value resolves to whatever value is associated with the credentials used for the run.
  {% endstep %}

{% step %}
**Request headers**

Request headers are added as 'key pairs' - enter a `key` (a valid field name for this API) and an associated `value`.  They work in the same way as request parameters, except they are passed in the request headers.&#x20;

Like parameters, header values can be:

* Static. You provide the required value here and this is used every time the request runs.
* Dynamic. You reference an [authentication flow variable](#working-with-authentication-flow-variables); at runtime the the value resolves to whatever value is associated with the credentials used for the run.
  {% endstep %}

{% step %}
**Request body**

Use `body` options to determine what (if any) content is passed in the `body` section of requests. The following options are available:&#x20;

<table><thead><tr><th width="212.36328125">Option</th><th>Summary</th></tr></thead><tbody><tr><td>None</td><td>No body is sent with the request. Typically used for methods that send all required information in the request URL/parameters (e.g. GET or DELETE for REST API requests).</td></tr><tr><td>Pipeline payload</td><td>Adds content from incoming payloads to the request body. </td></tr><tr><td>Raw</td><td>A static, raw text body - for example, JSON, XML, plain text.</td></tr><tr><td>Form data (URL encoded)</td><td>Sends key-value pairs as <code>application/x-www-form-urlencoded</code> (the same format used by traditional HTML forms). Data is encoded into a single string like <code>key1=value1&#x26;key2=value2</code>. This type does not support file uploads.</td></tr><tr><td>Form data (multipart)</td><td>Sends key-value pairs as <code>multipart/form-data</code>, where each field is a separate part of the body. This is the format required for file uploads, since it can carry binary data alongside standard fields.</td></tr><tr><td>GraphQL</td><td>A body formatted specifically for GraphQL APIs - typically a JSON object containing a <code>query</code> (or <code>mutation</code>) string and an optional <code>variables</code> object, sent to a single GraphQL endpoint rather than varying by resource path.</td></tr></tbody></table>
{% endstep %}

{% step %}
**General request settings**

<table><thead><tr><th width="212.36328125">Option</th><th>Summary</th></tr></thead><tbody><tr><td>Accepted status codes</td><td>Use the dropdown list to select one or more response status codes which are considered as 'success' for this operation (e.g. <code>200 - OK</code>). If a response status code not in this list is returned,  the operation fails. </td></tr><tr><td>Timeout (seconds)</td><td>Sets the maximum time, in seconds, that Brigge waits for a response before the request fails. If the external system doesn't respond within this window, the operation times out.</td></tr><tr><td>Follow redirects</td><td>Determines whether Brigge automatically follows HTTP redirect responses (<code>3xx</code> status codes) from the target server. When enabled, redirects are followed to their final destination. When disabled, a redirect response is returned as-is rather than followed.</td></tr><tr><td>Bypass certificate verification</td><td>Controls whether Brigge validates the SSL/TLS certificate of the target server. When enabled, certificate validation is skipped (this should only be used for testing or with trusted internal systems).</td></tr></tbody></table>
{% endstep %}

{% step %}
**Test & review the request**

Once the configuration is saved, use the `test request` option to confirm it works as expected.&#x20;

{% hint style="info" %}
If you are testing an endpoint request, you can choose to test with or without [pagination](#pagination-options), and which credentials to use.&#x20;
{% endhint %}

When the test completes, you can inspect request and response details and, if needed, tag response fields to be passed into variables. For more information, see [Testing a request](#how-to-test-a-system-request).
{% endstep %}

{% step %}
**Tagged data**

Tagged data enables you to inject the value of a field found in response data, into a specified request variable. In this way, the variable value is updated dynamically, ready for use downstream (it can be particularly useful for pagination). For more information, see [Tagging response data for system requests](#tagging-response-data-for-system-requests).
{% endstep %}
{% endstepper %}

</details>

<details>

<summary>Testing system requests</summary>

#### Introduction

Having configured a request, use the `test request` button to run a test (with or without a payload), and then inspect full request and response details.&#x20;

#### How to test a system request

Follow the steps below:

{% stepper %}
{% step %}
**Test request**

Make sure that settings are saved, then click the `test request` button:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FWtyiY4a0f5tZoLvyeWQL%2Ftest%20request%201.png?alt=media&amp;token=196dbe2c-6960-47e3-a753-db020f3e0351" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Test request**

Choose whether to `enable pagination` (if defined) for this test, then `choose credentials for test` and click `next`:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FHi5Qp0RoTy0wAOmewf4E%2Ftest%20request%202a.png?alt=media&amp;token=3cc308ab-32b1-4c8d-8ad3-d343f62f4bbc" alt="" width="357"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Test request**

Optionally, paste a sample payload - then click the `test` button. For example:&#x20;

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FbAilWhIjnJocxVR2ewVb%2Ftest%20request%203.png?alt=media&amp;token=feba8755-0170-4687-a221-250f6881857a" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Sample payload behaviour depends on [how the request body is configured](#configuring-an-endpoint-request-settings). For example, is body content is set to none, no payload is expected and so you're not prompted to enter a sample.
{% endhint %}
{% endstep %}

{% step %}
**Review request & response output**

The test request completes with a success or fail outcome. In the event of a failure, it's useful to inspect the actual request that was made - for example, check if the request URL resolved as expected; review the authentication outcome, etc. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2F1OAfUIgNbRjhBVLImOwy%2Ftest%20request%204.png?alt=media&amp;token=5020ea40-b636-4ea7-91e4-27e2989e7a30" alt=""><figcaption></figcaption></figure></div>

For full response details, check the response panel. Here, you'll see what's returned for the test, including metadata. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FZjeMOhvJFOhqBtuqm9zP%2Ftest%20request%205.png?alt=media&amp;token=7de40bf4-8ced-4c2b-835e-c1f0e7498dcb" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
If needed, you can tag response fields to be resolved in existing variables.
{% endhint %}
{% endstep %}
{% endstepper %}

</details>

<details>

<summary>Tagging response data for system requests</summary>

#### Introduction

Tagged data is a way to inject the value of a field found in response data, into a specified variable. In this way, the variable value is updated dynamically, ready for use downstream.&#x20;

A common use case is for [pagination](#endpoint-pagination-options), where pagination details (e.g. number of pages retrieved, number of pages remaining, total page count, etc.) are returned with each response. We can tag these fields, map them to a variable, then reference these variables as URL queries for the next pagination request. For a walkthrough of this scenario, see [Endpoint pagination options](#endpoint-pagination-options).

#### How to tag response data & map it to a variable

To tag a response data field and then map it to an existing endpoint variable (so this response value is injected into the variable when received), follow the steps below:

{% stepper %}
{% step %}
**Check endpoint variable status**

Access [general settings for the endpoint](#configuring-an-endpoint-general-settings) and check that the required variable exists - if it doesn't [create it](#working-with-variables) now. In the example below, we will be using a variable named `remaining`.

<figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FynYVxWQcSyz6CV8oqu7R%2Ftag%20data%201.png?alt=media&amp;token=b8b30b40-c436-4624-a590-bd0cb5c25f69" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Test the endpoint request**

Access [request options](#understanding-request-setup-options) for the endpoint and use the [test request option](#how-to-test-a-system-request) to initiate the request.
{% endstep %}

{% step %}
**Inspect the response**

Still on the [request options](#understanding-request-setup-options) tab, expand the `response` section to view response details for the request. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2Fxzu7r0nPXiO61kTYhTkg%2Ftag%20data%202.png?alt=media&amp;token=b3417b28-c1af-483c-abde-e6c4e7095b1f" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Tag the required field**

Click the name of the field you want to tag. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2F5427W95pF2XVGDNqteGq%2Ftag%20data%203.png?alt=media&amp;token=b8148122-f520-4bd6-87a3-3fae83cf9ad3" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Map the tagged field to a variable**

Select the variable that you want to inject with values from tagged field. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FIMVZimMCQcsTNdUVEOFM%2Ftag%20data%204a.png?alt=media&amp;token=3a2cc95e-a3b8-4982-a8f3-bfbac412b072" alt=""><figcaption></figcaption></figure></div>

Then confirm with the `create` button:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FOxPT6SBIBkfEio0agS2c%2Ftag%20data%205a.png?alt=media&amp;token=a5180736-5fec-458e-b851-e1e11b67e14d" alt="" width="375"><figcaption></figcaption></figure></div>

Now you'll see that that `tagged data` section is updated with the new item. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FnAdrLU8DIeoDpBbru97t%2Ftag%20data%206.png?alt=media&amp;token=e59370b9-d627-4db7-8353-07693954a86c" alt=""><figcaption></figcaption></figure></div>

Wherever this variable is referenced, the value will always be set to whatever was returned in the associated tagged field in the previous request.
{% endstep %}
{% endstepper %}

</details>

<details>

<summary>Working with variables</summary>

#### Introduction

Variables can be defined and referenced throughout the setup for a system. For example, you [define variables for an authentication flow](#how-to-expose-authentication-variables-for-user-input) to determine what fields users are prompted to enter when adding credentials for the associated system. You might also define variables for endpoints, which can be surfaced for users to populate when [configuring connector nodes](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md) to use this endpoint.&#x20;

#### How are variable values populated?

Variable values can be derived from:

* User input; users are prompted to enter (or confirm) a value when working with this system in pipelines, or adding credentials.&#x20;
* System input; pipeline users never see these variables, they're just used to build logic for system behaviour.
* Dynamic input; values are injected from [tagged response data](#tagging-response-data-for-system-requests).

#### Adding & configuring variables

You can add variables via *General settings* tabs for [endpoints](#configuring-an-endpoint-general-settings) and [authentication flows](#configuring-an-authentication-flow) - just click the `create variable` option. For example:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2F5YwUa5lmcICjfMzPiVtR%2FCreate%20variable%201.png?alt=media&amp;token=00ea25a3-4046-4031-b1a9-d2406fff1650" alt=""><figcaption></figcaption></figure></div>

From here, configure behaviour for this variable:

<div align="left" data-with-frame="true"><figure><img src="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FQFPHWcjAReGywnLDh3Z6%2FVariable%20settings.svg?alt=media&amp;token=1913e060-24c1-43db-b585-0d9ecadd7b71" alt=""><figcaption></figcaption></figure></div>

These options are summarised below, using an endpoint variable as an example:

{% stepper %}
{% step %}
**Type**

Use the `type` dropdown to select the data type associated with expected values for this variable. Choose from the following types:

<table><thead><tr><th width="159.08984375">Type</th><th>Summary</th></tr></thead><tbody><tr><td>Text</td><td>A single line of free-form text input.</td></tr><tr><td>Multi-line text</td><td>Free-form text that spans multiple lines (for longer values like descriptions or notes).</td></tr><tr><td>Number</td><td>A whole number (integer), with no decimal places.</td></tr><tr><td>Decimal number</td><td>A number that allows decimal places, for values needing precision (e.g. prices or measurements).</td></tr><tr><td>Date/time</td><td>A calendar date and/or time value.</td></tr><tr><td>Drop down list</td><td>A predefined set of options from which users pick one value.</td></tr><tr><td>True/false boolean</td><td>A toggle between two states, true or false.</td></tr></tbody></table>
{% endstep %}

{% step %}
**Display type**

Use the `display type` dropdown to select if/how this variable is displayed. Choose from the following options:

<table><thead><tr><th width="159.08984375">Type</th><th>Summary</th></tr></thead><tbody><tr><td>None</td><td>The variable is never exposed to pipeline or system users. Typically used for building system logic (e.g. for pagination).</td></tr><tr><td>Form</td><td><p>The variable is displayed for users to complete. </p><p></p><p>For <a href="#working-with-authentication-flow-variables">authentication flow variables</a>, the variable is displayed to the user when <a href="/documentation/brigge-for-engineers/credentials.md">adding credentials</a> for this system. The variable value provided by the user is applied whenever this variable is referenced in the setup. <br><br>For <a href="#configuring-an-endpoint-general-settings">endpoint variables</a>, the variable is displayed to the user when this endpoint is selected in a connector node. The variable value provided by the user is applied whenever this variable is referenced in the setup.</p></td></tr><tr><td>Advanced</td><td>The variable is displayed for users to complete, in an <code>advanced</code> section of the relevant form. </td></tr></tbody></table>
{% endstep %}

{% step %}
**Label**

Enter a text label to be used throughout the system UI, to identify this variable.
{% endstep %}

{% step %}
**Key**

The programmatic identifier - a unique string that can be referenced to retrieve this variable's value.
{% endstep %}

{% step %}
**Default value**

If needed, enter a default value for the variable. For [endpoint variables](#configuring-an-endpoint-general-settings), this can be useful (for example) to start pagination counts, or to pre-populate a user-facing variable that only needs to be changed occasionally.&#x20;

For [authentication flow variables](#working-with-authentication-flow-variables), a default value can be useful (for example) to pass in a standard `base_url` that can be referenced in endpoints when this auth flow is applied.&#x20;
{% endstep %}

{% step %}
**Description**

Optionally, provide a description which will help anyone viewing this setup in future and/or to provide more context for Brigge AI tools.
{% endstep %}

{% step %}
**Secret**

Secret values are encrypted and never exposed in the Brigge UI.
{% endstep %}

{% step %}
**Required**

If a variable is defined with a form or advanced display type, toggle this option on if you want to prevent users from saving the associated [credentials](/documentation/brigge-for-engineers/credentials.md) or [connector node](/documentation/brigge-for-transformers/pipelines/pipeline-nodes/connector-node.md) form if no value is provided.
{% endstep %}
{% endstepper %}

</details>

## Managing systems

<details>

<summary>Exporting a system</summary>

#### Introduction

When a system is exported, all of its setup is written to a JSON file. If needed, you can then import this file to create a new instance of the system.&#x20;

This can be useful (for example) to take a backup of a system before making significant changes, or as a starting point to create another system with very similar properties.

#### How to export a system

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Select the system that you want to export from the <em>Systems</em> page.</td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FZqEs4RymsBmzbGi0Cbtn%2Fexport%20system%20a.png?alt=media&amp;token=3457495f-8a9a-4c1c-8220-61b2460cbc21">export system a.png</a></td></tr><tr><td>Click the three-dot options menu next to the system name.</td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FQPrg0RMGV7TpHJkms1hJ%2Fexport%20system%20b.png?alt=media&amp;token=0ec53cfe-d570-4fe9-b276-78c3361a3607">export system b.png</a></td></tr><tr><td>Select the <code>export system</code> option. The system is exported immediately and saved to the default downloads folder for your browser.</td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FuL5bKJmlURAxa46De3Mt%2Fexport%20system%20c.png?alt=media&amp;token=18dde2a8-4235-4f11-a323-bf1a61be432a">export system c.png</a></td></tr></tbody></table>

</details>

<details>

<summary>Importing a system</summary>

#### Introduction

To import a system that was previously exported from Brigge, select the `import system` option at the top of the *Systems* page.&#x20;

When prompted, upload the JSON file and confirm. The new system is added and General settings are displayed, so you can change the name and make any other changes required.

</details>

<details>

<summary>Deleting a system</summary>

#### Introduction

If a system is no longer needed and is not configured in any pipelines (even inactive pipelines) you can delete it.&#x20;

#### How to delete a system

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Select the system that you want to delete from the <em>Systems</em> page.</td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FIyJQXh8GLEmsoP1ZRjFf%2Fdelete%20system%20a.png?alt=media&amp;token=e8075612-49cb-400d-97f9-5b05e364233c">delete system a.png</a></td></tr><tr><td>Click the three-dot options menu next to the system name.</td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FRYwq1HTYokFouS1m9dqs%2Fdelete%20system%20b.png?alt=media&amp;token=dbc10c6f-d730-4af9-b806-f78f8f97cb61">delete system b.png</a></td></tr><tr><td>Select the <code>delete</code> option. If the system is found to be in use in pipelines, you'll see a warning and the delete action is not completed. Otherwise, the system is removed. </td><td><a href="https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2FgLPAP0hKWqutay7ZcR6R%2Fdelete%20system%20c.png?alt=media&amp;token=77effcfd-0d6c-4de5-ae18-6ad1033397b0">delete system c.png</a></td></tr></tbody></table>

</details>

[^1]: **How do I get there?**\
    Select *environments* from the main navigation menu:<br>

    ![](https://2172380191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8IqdqwZowcxtFpZfLa6k%2Fuploads%2Fwu1tX0PnjZ91pW6OuQIO%2Faccess%20systems.png?alt=media\&token=97feee3c-8ed0-4ae1-8b0c-505af006236a)<br>
