Skip to content

Custom Integrations

Custom integrations let you connect to any REST API and pull data into Resplendent Data—even if there’s no pre-built integration for it. You define the request, tell us how to parse the response, and we handle the syncing.

Use a custom integration when:

  • The API you need isn’t in the built-in integration gallery
  • You have an internal API that exposes business data
  • You want to pull data from a SaaS tool we don’t support yet

  1. Click Settings → Custom Integrations in the sidebar
  2. You’ll see a table of all existing custom integrations with their names and descriptions
  3. Click Add to create a new one, or click the Edit button on an existing integration to modify it

The integration editor is organized into four steps: Basics, Request, Endpoints, and Sync. A live preview panel on the right side shows contextual information and lets you test your configuration as you build it.

This step covers the basics and authentication.

Field Description
Name A unique name to identify this integration
Description A short summary of what data source this integration connects to

User inputs are the values that someone will fill in when they connect this integration (e.g., API keys, account IDs, subdomain names). Each input has:

Property Description
Name Label shown to the user when connecting
Type text, number, or boolean
Default Value Optional pre-filled value
Placeholder Optional hint text shown in the input field

These input values can be referenced later in URL, header, body, and parameter configurations using the User Input Value part type.

Choose how the integration authenticates with the target API:

Auth Type How it works
None No authentication is added to requests
Basic Sends a Base64-encoded username:password in the Authorization header. Select which user inputs map to the username and password fields
Bearer Sends a token in the Authorization: Bearer <token> header. Select which user input provides the token
Custom Stores the selected key input securely without adding a header automatically. Add the API’s required header, URL parameter, or body field to the request and reference that input as a User Input Value

This step defines the base data request—the default HTTP request used when fetching data from each endpoint.

Setting Description
HTTP Method GET or POST
URL Built from parts—combine static text with connection values (user inputs)
Headers Key-value pairs added to every request
Body Request body (typically for POST requests), built from key-value parts
URL Params Query string parameters appended to the URL

Each part of the URL, headers, body, and URL params can be a Static Value, User Input Value (references an input defined in Basics), or Dataset Value. Dataset values are resolved for the table and sync operation, including the dataset name, selected columns, primary and sorting columns, page number and size, and last-update value.

This section defines how the response from data requests is parsed. Since the base data request fetches actual data rows, the output type is always tabular.

Setting Description
Response Type JSON. CSV responses are not currently supported.
Path to Tabular Data For JSON responses, the dot-separated path to the array of records (e.g., data.results)
Flatten Values If enabled, nested JSON objects within each row are flattened into top-level columns
Flatten Depth How many levels deep to flatten (1–10)

Endpoints define which datasets (tables) are available from this integration. There are two approaches:

The integration makes an API call to discover available endpoints at runtime. This is useful for APIs that expose a list of their own resources.

Setting Description
Use Base URL Whether to prepend the base URL from the Request step
Request configuration HTTP method, URL, headers, body, and URL params for the discovery request
Response parsing (Label-ID List) Parses the discovery response to extract a list of dataset names and IDs (see below)

Label-ID list response parsing is used exclusively here—for parsing the response of the endpoint discovery request. It extracts a list of dataset identifiers from the API response:

Setting Description
Response Type JSON. CSV responses are not currently supported.
Path to Tabular Data Dot-separated path to the array or object containing the endpoint list
Dataset Name/ID Path Path to the field used as the endpoint identifier. Use $key if the identifier is the key in a key-value pair
Use Separate Label Toggle on if the display name differs from the ID
Path to Dataset Label Path to the human-readable name (only shown when “Use Separate Label” is enabled)

Manually define a fixed list of endpoints. Each static endpoint can optionally override the base request and response configuration:

Setting Description
Use default request config When enabled, the endpoint inherits the base data request from the Request step. When disabled, you can customize the HTTP method, URL, headers, body, and params for this specific endpoint
Dataset/Endpoint Name The name for this dataset
Use base response config When enabled, the endpoint uses the base response parsing. When disabled, you can customize response parsing per endpoint

Configure a test endpoint used to validate the integration connection. This lets users verify their credentials work before syncing. You can use the default request config or customize the test request separately.


Configure how the integration handles large datasets and change detection.

Enable pagination if the API returns data in pages.

Setting Description
Max Page Size Maximum number of records per page
URL Parameters Query params for pagination (e.g., page = page number)
Header Parameters Pagination info sent via headers
Body Parameters Pagination info sent in the request body

Pagination parameters support dataset values in addition to static and connection values. The available dataset values for pagination are:

  • page_size — the configured max page size
  • page_number — the current page number (auto-incremented)

Enable incremental updates to only fetch records that have changed since the last sync, rather than pulling everything each time.

Setting Description
URL Parameters Filter params for changed data (e.g., since = last sync timestamp)
Header Parameters Change detection info sent via headers
Body Parameters Change detection info sent in the request body

Incremental update parameters support these dataset values:

  • last_update_value — the timestamp of the last successful sync
  • sorting_column — the column used for ordering

Enable sorting to ensure data is returned in a consistent order across paginated requests.

Setting Description
URL Parameters Sort params (e.g., sort = column name)
Header Parameters Sorting info sent via headers
Body Parameters Sorting info sent in the request body

Sorting parameters support these dataset values:

  • sorting_column — the column to sort by
  • unique_key — the primary key column

From the Custom Integrations list, click the Edit button on any row to open it in the editor. The preview panel on the right shows a live summary of your configuration, including:

  • Basics step: Integration name, description, input count, and auth type
  • Request step: Full request preview with method, URL, headers, and a test case panel for validating response parsing
  • Endpoints step: Endpoint definition type and a list of configured endpoints (click a static endpoint to preview its response parser)
  • Sync step: Summary of enabled sync features (pagination, incremental updates, sorting)

Click the Save Integration button in the top-right corner of the editor. The integration will be validated and saved.


Once saved, your custom integration shows up as a connectable data source on the Settings → Integrations page alongside the built-in integrations. Users with the appropriate role can:

  1. Click Connect on the custom integration card
  2. Fill in the user inputs you defined (API keys, account IDs, etc.)
  3. Select which datasets/endpoints to sync
  4. Start syncing data into Resplendent Data

The synced data appears as regular datasets and can be used in widgets, modified datasets, and joined datasets just like any other data source.