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 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 tabs: General, Request Config, Endpoints, and Sync Options. A live preview panel on the right side shows contextual information and lets you test your configuration as you build it.

This tab covers the basics and authentication.

FieldDescription
NameA unique name to identify this integration
DescriptionA 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:

PropertyDescription
NameLabel shown to the user when connecting
Typetext, number, or boolean
Default ValueOptional pre-filled value
PlaceholderOptional hint text shown in the input field

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

Choose how the integration authenticates with the target API:

Auth TypeHow it works
NoneNo authentication is added to requests
BasicSends a Base64-encoded username:password in the Authorization header. Select which user inputs map to the username and password fields
BearerSends a token in the Authorization: Bearer <token> header. Select which user input provides the token
API KeySends a custom header with the API key value. Select which user input provides the key

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

SettingDescription
HTTP MethodGET or POST
URLBuilt from parts—combine static text with connection values (user inputs)
HeadersKey-value pairs added to every request
BodyRequest body (typically for POST requests), built from key-value parts
URL ParamsQuery string parameters appended to the URL

Each part of the URL, headers, body, and URL params can be either a static value (hardcoded text) or a connection value (references a user input defined on the General tab).

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.

SettingDescription
Response TypeJSON or CSV
Path to Tabular DataFor JSON responses, the dot-separated path to the array of records (e.g., data.results)
Flatten ValuesIf enabled, nested JSON objects within each row are flattened into top-level columns
Flatten DepthHow 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.

SettingDescription
Use Base URLWhether to prepend the base URL from the Request Config tab
Request configurationHTTP 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:

SettingDescription
Response TypeJSON or CSV
Path to Tabular DataDot-separated path to the array or object containing the endpoint list
Dataset Name/ID PathPath to the field used as the endpoint identifier. Use $key if the identifier is the key in a key-value pair
Use Separate LabelToggle on if the display name differs from the ID
Path to Dataset LabelPath 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:

SettingDescription
Use default request configWhen enabled, the endpoint inherits the base data request from the Request Config tab. When disabled, you can customize the HTTP method, URL, headers, body, and params for this specific endpoint
Dataset/Endpoint NameThe name for this dataset
Use base response configWhen 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.

SettingDescription
Max Page SizeMaximum number of records per page
URL ParametersQuery params for pagination (e.g., page = page number)
Header ParametersPagination info sent via headers
Body ParametersPagination 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.

SettingDescription
URL ParametersFilter params for changed data (e.g., since = last sync timestamp)
Header ParametersChange detection info sent via headers
Body ParametersChange 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.

SettingDescription
URL ParametersSort params (e.g., sort = column name)
Header ParametersSorting info sent via headers
Body ParametersSorting 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:

  • General tab: Integration name, description, input count, and auth type
  • Request Config tab: Full request preview with method, URL, headers, and a test case panel for validating response parsing
  • Endpoints tab: Endpoint definition type and a list of configured endpoints (click a static endpoint to preview its response parser)
  • Sync Options tab: 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 Data 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.