Configure an API request (using Celonis as an example)
Example API connection
Here is an example of how a custom connection would look to use the Reporting API.
In Data integration, the user can find the Extractor builder and build their own extractor based on an API. Here is where we will use our API to set up the connection.
To use the API connection, your configuration could look like this:
- Choose “API Key Authentication” as the Authentication Method .
In the API URL field, add the one that is applicable to you. See the Available API Domains section.
Within pagination Methods, use "skip" as Offset Parameter, and "take" as Limit Parameter. Then set a default limit. Note that the maximum limit is 100, which will be applied if no limit is set.
Example Data transformation
With this data connection, you can then create transformation to make usable data tables. Here is an example transformation script:
CREATE OR REPLACE VIEW Element AS
SELECT
-- Unique ID for the Element
CASE
WHEN T.source_table = 'elements' THEN T.original_id -- For non-versionable elements
WHEN T.source_table = 'elements$versions' THEN T.original_version_id -- For versionable elements
WHEN T.source_table IN ('elements$content', 'elements$versions$content') THEN T.original_id -- For content items (their own 'id' is unique GUID)
END AS _id,
T.source_table, -- Helps identify where the record originated ('elements', 'elements$versions', 'elements$content', 'elements$versions$content')
T.original_id, -- Original 'id' from the source table (PK for elements and content)
T.original_version_id, -- Original 'versionId' from elements$versions (PK for versions)
T.parent_fk_id, -- Original FK from content tables to their parent element/version
T.supportsVariants,
T.supportsVersions, -- FALSE for content objects
T.containerPermaLink,
T.facetName,
T.permaLink,
T.type,
T.variantId,
T.creationId,
-- Common Attributes (renamed for consistency)
T.attributes_changedOn,
T.attributes_createdOn,
T.attributes_gotoUrl,
T.attributes_name,
T.attributes_state1,
T.attributes_description,
-- Attributes specific to elements$versions (will be NULL for non-versioned elements and all content)
T.attributes_isReleased,
T.attributes_isLastInProcessOrReleased,
T.attributes_majorVersion,
T.attributes_minorVersion,
T.attributes_reviewDate,
T.attributes_validFrom,
T.attributes_validUntil,
T.attributes_version,
T.attributes_reasonForRevision,
T.attributes_imageUrl,
T.attributes_stereotype,
T.attributes_id_from_version, -- The 'id' attribute from versions
T.stereotype -- The 'stereotype' column from elements$versions
FROM (
-- Data from 'elements' table (non-versionable parent elements)
SELECT
'elements' AS source_table,
e.id AS original_id,
NULL AS original_version_id,
NULL AS parent_fk_id,
e.supportsVariants,
e.supportsVersions,
e.containerPermaLink,
e.facetName,
e.permaLink,
e.type,
e.variantId,
e.creationId,
e."attributes$changedOn$127" AS attributes_changedOn,
e."attributes$createdOn$127" AS attributes_createdOn,
e."attributes$gotoUrl$1033" AS attributes_gotoUrl,
e."attributes$name$1033" AS attributes_name,
e."attributes$state1$127" AS attributes_state1,
e."attributes$description$1033" AS attributes_description,
NULL AS attributes_isReleased,
NULL AS attributes_isLastInProcessOrReleased,
NULL AS attributes_majorVersion,
NULL AS attributes_minorVersion,
NULL AS attributes_reviewDate,
NULL AS attributes_validFrom,
NULL AS attributes_validUntil,
NULL AS attributes_version,
NULL AS attributes_reasonForRevision,
NULL AS attributes_imageUrl,
NULL AS attributes_stereotype,
NULL AS attributes_id_from_version,
NULL AS stereotype
FROM
elements AS e
WHERE
e.supportsVersions IS FALSE -- Only non-versionable top-level elements
UNION ALL
-- Data from 'elements$versions' table (versionable parent elements - specific versions)
SELECT
'elements$versions' AS source_table,
ev.id AS original_id, -- This is the FK to elements.id, but versionId is the primary identifier for this record
ev.versionId AS original_version_id,
NULL AS parent_fk_id,
NULL as supportsVariants,
NULL as supportsVersions,
ev.containerPermaLink,
ev.facetName,
ev.permaLink,
ev.type,
ev.variantId,
ev.creationId,
ev."attributes$changedOn$127" AS attributes_changedOn,
ev."attributes$createdOn$127" AS attributes_createdOn,
ev."attributes$gotoUrl$1033" AS attributes_gotoUrl,
ev."attributes$name$1033" AS attributes_name,
ev."attributes$state1$127" AS attributes_state1,
ev."attributes$description$1033" AS attributes_description,
ev."attributes$isReleased$127" AS attributes_isReleased,
ev."attributes$isLastInProcessOrReleased$127" AS attributes_isLastInProcessOrReleased,
ev."attributes$majorVersion$127" AS attributes_majorVersion,
ev."attributes$minorVersion$127" AS attributes_minorVersion,
ev."attributes$reviewDate$127" AS attributes_reviewDate,
ev."attributes$validFrom$127" AS attributes_validFrom,
ev."attributes$validUntil$127" AS attributes_validUntil,
ev."attributes$version$127" AS attributes_version,
ev."attributes$reasonForRevision$127" AS attributes_reasonForRevision,
ev."attributes$imageUrl$127" AS attributes_imageUrl,
ev."attributes$stereotype$127" AS attributes_stereotype,
ev."attributes$id$127" AS attributes_id_from_version,
ev.stereotype
FROM
"elements$versions" AS ev
WHERE
ev.versionId IS NOT NULL -- Only valid versions
...
) AS T;
CREATE OR REPLACE VIEW Content AS
SELECT
-- Parent Element's _id (from 'elements' or 'elements$versions' in the unified Element view)
(SELECT _id FROM Element WHERE source_table = 'elements' AND original_id = ec.elements_id) AS parent__id,
-- Content Element's _id (from 'elements$content' in the unified Element view)
(SELECT _id FROM Element WHERE source_table = 'elements$content' AND original_id = ec.id) AS content__id
FROM
"elements$content" AS ec
WHERE
ec.elements_id IS NOT NULL -- Only include if it has a valid parent link
UNION ALL
SELECT
-- Parent Element's _id (from 'elements$versions' in the unified Element view)
(SELECT _id FROM Element WHERE source_table = 'elements$versions' AND original_version_id = evc."elements$versions_versionId") AS parent__id,
-- Content Element's _id (from 'elements$versions$content' in the unified Element view)
(SELECT _id FROM Element WHERE source_table = 'elements$versions$content' AND original_id = evc.id) AS content__id
FROM
"elements$versions$content" AS evc
WHERE
evc."elements$versions_versionId" IS NOT NULL; -- Only include if it has a valid parent link
Example Report building
With the connection and transformation set up, you then are able to make use of the data within your Analytical tools. Here is an example of how it could look like using Celonis Views.
Available API Domains
The server region of the reporting API will match the region of your Admin App URL. For example if you are a West Europe customer, your Admin App is available on http://admin.symbio.cloud/ and http://admin.us-1.symbio.cloud/ in the East U.S. region.
Domain Region | Value | Description |
---|---|---|
West Europe | api-reporting.symbio.cloud | For customers deployed to the Europe region. |
East U.S. | api-reporting.us-1.symbio.cloud | For customers deployed to the East US region. |
Japan | api-reporting.jp-1.symbio.cloud | For customers deployed to the Japan region. |