User guide
APIs
Release notes

Huwise's Portal API Documentation (1.0)

Download OpenAPI specification:

The Portal API provides programmatic access to the public-facing resources of a Huwise Data Product Marketplace. It is primarily a read-only API, exposing high-level portal objects such as navigation menus, identity providers, glossary terms, and pages (both studio and code editor). It also supports form submission, enabling automated workflows for data collection and change requests.

This API is designed for portal developers building custom front-ends, administrators automating workflows, or projects requiring a fully headless portal experience. It differs from the Explore API, which focuses on discovering and consuming data assets, and from the Automation API, which provides administrative management of portal objects and data assets.

Studio Pages

Endpoints for accessing studio pages built with the visual editor.

Studio page summary

slug
string

The unique slug identifier of the page, used in the URL

uid
string

The unique identifier of the page

title
string

The title of the page

updated_at
string <date-time>

The date and time the page was last updated (UTC)

is_restricted
boolean

Whether the page requires specific permissions to access

{
  • "slug": "air-quality-dashboard",
  • "uid": "pa_8f3km9",
  • "title": "Air Quality Dashboard",
  • "updated_at": "2026-01-15T14:30:00Z",
  • "is_restricted": false
}

Studio page

slug
string

The unique slug identifier of the page, used in the URL

uid
string

The unique identifier of the page

title
string

The title of the page

description
string

The description of the page

updated_at
string <date-time>

The date and time the page was last updated (UTC)

object (StudioPageContent)

The content structure of a studio page, as designed in the visual editor.

{
  • "slug": "air-quality-dashboard",
  • "uid": "pa_8f3km9",
  • "title": "Air Quality Dashboard",
  • "description": "Real-time air quality metrics and historical trends",
  • "updated_at": "2026-01-15T14:30:00Z",
  • "content": {
    }
}

List studio pages

List all published studio pages accessible to the current user. Returns page summaries without content. Use the retrieve endpoint to get the full page content.

Authorizations:
QueryAPIKeyHeaderAPIKey

Responses

Response samples

Content type
application/json
{
  • "total_count": 18,
  • "next": null,
  • "previous": null,
  • "results": [
    ]
}

Retrieve studio page

Retrieve a single studio page by its slug, including its full content (visual blocks, layouts, data providers, and filters).

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

Responses

Response samples

Content type
application/json
{
  • "slug": "air-quality-dashboard",
  • "uid": "pa_8f3km9",
  • "title": "Air Quality Dashboard",
  • "description": "Real-time air quality metrics and historical trends",
  • "updated_at": "2026-01-15T14:30:00Z",
  • "content": {
    }
}

Code Editor Pages

Endpoints for accessing pages built with the code editor (HTML/CSS).

Code editor page summary

slug
string

The unique slug identifier of the page, used in the URL

title
string

The title of the page

updated_at
string <date-time>

The date and time the page was last updated (UTC)

is_restricted
boolean

Whether the page requires specific permissions to access

{
  • "slug": "custom-analytics",
  • "title": "Custom Analytics",
  • "updated_at": "2026-02-10T09:15:00Z",
  • "is_restricted": false
}

Code editor page

slug
string

The unique slug identifier of the page, used in the URL

title
object

The title of the page as a multilingual object, keyed by language code

object

The page content as multilingual objects

updated_at
string <date-time>

The date and time the page was last updated (UTC)

{
  • "slug": "custom-analytics",
  • "title": {
    },
  • "content": {
    },
  • "updated_at": "2026-02-10T09:15:00Z"
}

Localized code editor page

slug
string

The unique slug identifier of the page, used in the URL

title
string

The title of the page in the requested language

object

The page content in the requested language

updated_at
string <date-time>

The date and time the page was last updated (UTC)

{
  • "slug": "custom-analytics",
  • "title": "Custom Analytics",
  • "content": {
    },
  • "updated_at": "2026-02-10T09:15:00Z"
}

List code editor pages

List all published code editor pages accessible to the current user. Returns page summaries without content. Use the retrieve endpoint to get the full page content.

Authorizations:
QueryAPIKeyHeaderAPIKey

Responses

Response samples

Content type
application/json
{
  • "total_count": 18,
  • "next": null,
  • "previous": null,
  • "results": [
    ]
}

Retrieve code editor page

Retrieve a single code editor page by its slug, including its full multilingual content.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

Responses

Response samples

Content type
application/json
{
  • "slug": "custom-analytics",
  • "title": {
    },
  • "content": {
    },
  • "updated_at": "2026-02-10T09:15:00Z"
}

Retrieve localized code editor page

Retrieve a single code editor page by its slug, with content localized to the specified language.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

language
required
string = 2 characters
Example: en

A 2-letter language code (ISO 639-1)

Responses

Response samples

Content type
application/json
{
  • "slug": "custom-analytics",
  • "title": "Custom Analytics",
  • "content": {
    },
  • "updated_at": "2026-02-10T09:15:00Z"
}

Forms

Endpoints for interacting with published forms: retrieving their content, submitting responses, and managing submissions. Forms are composed of sections containing input blocks (text, number, choice, date, location, image, etc.). POST endpoints require authentication via API key. To build, configure, or publish forms, refer to the Automation API.

Form submissions

A form submission represents a single response provided by a user through a published form. Submissions are always tied to the specific published version of the form that was active at the time of submission.

A submission contains:

  • the collected data, structured as key–value pairs using the technical IDs of each block
  • metadata, including the submission language, creation date, update date, and user information
  • the submission status, which can be pending, approved, or rejected when moderation is enabled, and always approved when moderation is disabled
  • a revision history, only available when moderation is enabled, which records changes requested or applied during the review process
  • a change request link, available only when enable_frontoffice_submission_edition is activated, allowing users to view their submitted data and submit a revision from the front office

To list, update, or delete submissions, use the Automation API.

Form content

title
string

The title of the form

description
string

The description displayed at the top of the form

default_language
string

The default language of the form (ISO 639-1 code)

other_languages
Array of strings

Other available languages for the form

Array of objects

The form sections. Each section contains input blocks. Available block types include: text, number, contact, choice, advanced_choice, autofill, boolean, location_picker, location_search, date_time, url, image, legal, keywords, siret, and linked_datasets.

enable_recaptcha
boolean

Whether reCAPTCHA verification is enabled on this form

ending
object

The form ending configuration, displayed after a successful submission. Can be a thank-you message, a page redirect, or an external URL redirect.

{
  • "title": "Customer Feedback Survey",
  • "description": "Help us improve our services by sharing your experience.",
  • "default_language": "en",
  • "other_languages": [
    ],
  • "sections": [
    ],
  • "enable_recaptcha": false,
  • "ending": { }
}

Quotas status

is_submissions_quota_reached
boolean

Whether the submission quota has been reached

{
  • "is_submissions_quota_reached": false
}

Form submit response

is_valid
boolean

Whether the submission passed validation

Array of objects

List of validation errors (empty if submission is valid)

{
  • "is_valid": true,
  • "errors": [
    ]
}

Get form content

Retrieve the latest published version of a form by its slug. Returns the form structure including sections, input blocks, and configuration.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

Responses

Response samples

Content type
application/json
{
  • "title": "Customer Feedback Survey",
  • "description": "Help us improve our services by sharing your experience.",
  • "default_language": "en",
  • "other_languages": [
    ],
  • "sections": [
    ],
  • "enable_recaptcha": false,
  • "ending": { }
}

Get form quotas status

Check whether the submission quota has been reached for a given form. When the quota is reached, new submissions are rejected. Use this endpoint before displaying the form to avoid a poor user experience.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

Responses

Response samples

Content type
application/json
{
  • "is_submissions_quota_reached": false
}

Submit form

Create a new form submission. The submission data should be sent as multipart/form-data with a data field containing a JSON object. Structure the data using the technical IDs of each form block as keys. Authentication: No authentication is needed if the form's access type is set to open. Use an API key for forms with restricted or authenticated access. This endpoint is rate-limited. If moderation is enabled on the form, the submission will have a pending status until approved or rejected by a moderator. If moderation is disabled, the submission is always approved. Important: Use the form's slug (not the uid) in the endpoint URL. To list, update, or delete submissions, use the Automation API.

Authorizations:
NoneHeaderAPIKeyQueryAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

Request Body schema: multipart/form-data
data
string

JSON-encoded form field values. Keys are block technical identifiers, values depend on the block type.

Responses

Response samples

Content type
application/json
{
  • "is_valid": true,
  • "errors": [
    ]
}

Retrieve form submission

Retrieve a specific form submission by its identifier. If a revision (change request) exists, it is returned. Otherwise, only the original submission is returned.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

submission_uid
required
string
Example: 7c9519d9-62fc-4a8a-a5ef-5213aff7f55e

The unique identifier of the submission (UUID)

Responses

Response samples

Content type
application/json
{
  • "cat_name": "Rio",
  • "cat_age": 5,
  • "cat_breed": [
    ],
  • "contact": {
    },
  • "comments": null
}

Submit change request

Submit a change request for an existing form submission. This endpoint is only available when enable_frontoffice_submission_edition is activated on the form. If moderation is disabled, the submission is updated directly. If moderation is enabled, a change request (revision) is created instead. Only one change request can exist for a submission at a time; a new request replaces any previous pending one from the same user. The data format is the same as for the submit endpoint. This endpoint requires authentication via API key and is rate-limited.

Authorizations:
HeaderAPIKeyQueryAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

submission_uid
required
string
Example: 7c9519d9-62fc-4a8a-a5ef-5213aff7f55e

The unique identifier of the submission (UUID)

Request Body schema: multipart/form-data
data
string

JSON-encoded form field values. Keys are block technical identifiers, values depend on the block type.

Responses

Response samples

Content type
application/json
{
  • "is_valid": true,
  • "errors": [
    ]
}

Get form image content

Retrieve the binary content of an image embedded in a form definition (e.g., an image used in a block label or description). Returns the raw image data with the appropriate content type.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
slug
required
string
Example: my-page

The unique slug identifier of the resource

storedfile_id
required
string
Example: 42

The identifier of the stored image file

Responses

Response samples

Content type
application/json
{
  • "error_code": "not_found",
  • "message": "Not found."
}

Glossary

Endpoints for accessing glossary terms. Requires the Marketplace Experience to be enabled.

Glossary term

uid
string

The unique identifier of the glossary term

name
string

The display name of the glossary term

aliases
Array of strings

Alternative names for this glossary term

description
string

The description of the glossary term. Can be excluded by setting the include_description query parameter to false.

{
  • "uid": "te_abc123",
  • "name": "API",
  • "aliases": [
    ],
  • "description": "A set of protocols and tools for building software applications"
}

List glossary terms

List all glossary terms. Results are not paginated.

Authorizations:
QueryAPIKeyHeaderAPIKey
query Parameters
search
string

Search in display names and aliases

include_description
boolean
Default: true

Whether to include the description field in the response

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve glossary term

Retrieve a single glossary term by its unique identifier.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
uid
required
string
Example: te_abc123

The unique identifier of the glossary term

query Parameters
include_description
boolean
Default: true

Whether to include the description field in the response

Responses

Response samples

Content type
application/json
{
  • "uid": "te_abc123",
  • "name": "API",
  • "aliases": [
    ],
  • "description": "A set of protocols and tools for building software applications"
}

Configuration

Endpoints for accessing portal configuration such as navigation menus.

Navigation

Array of objects (Menu item)

The ordered list of navigation menu items

{
  • "menu": [
    ]
}

Get navigation

Retrieve the portal navigation menu configuration. Returns all menu items with labels in all available languages. Use the localized endpoint to get labels in a specific language.

Authorizations:
QueryAPIKeyHeaderAPIKey

Responses

Response samples

Content type
application/json
{
  • "menu": [
    ]
}

Get localized navigation

Retrieve the portal navigation menu configuration with labels localized to the specified language. Returns a 404 if the language is not configured.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
language
required
string = 2 characters
Example: en

A 2-letter language code (ISO 639-1)

Responses

Response samples

Content type
application/json
{
  • "menu": [
    ]
}

Related Assets

Endpoints for exploring relationships between assets. Requires the Marketplace Experience to be enabled.

Related asset

relation_type
string

The type of relationship between the two assets

object

The related asset

{
  • "relation_type": "derived_from",
  • "asset": {
    }
}

Get asset usages

List all assets that use the specified asset. Requires the Marketplace Experience to be enabled. Results are paginated.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
asset_uid
required
string
Example: da_abc123

The unique identifier of the asset

query Parameters
limit
number [ 0 .. 1000 ]
Default: 20
Example: limit=20

The maximum number of results returned by the API when the response is paginated. Tip: You can make a request with the parameter "limit" set to 0 to get only the metadata ("results" property will contain an empty array).

offset
number

The number of results to skip before beginning the listing in case of a paginated response

relation_type
Array of strings

Filter by one or more relation types

category
string

Filter by asset category label

is_showcase
boolean

Filter by showcase assets

Responses

Response samples

Content type
application/json
{
  • "total_count": 18,
  • "next": null,
  • "previous": null,
  • "results": [
    ]
}

Get asset sources

List all assets that are sources of the specified asset. Requires the Marketplace Experience to be enabled. Results are paginated.

Authorizations:
QueryAPIKeyHeaderAPIKey
path Parameters
asset_uid
required
string
Example: da_abc123

The unique identifier of the asset

query Parameters
limit
number [ 0 .. 1000 ]
Default: 20
Example: limit=20

The maximum number of results returned by the API when the response is paginated. Tip: You can make a request with the parameter "limit" set to 0 to get only the metadata ("results" property will contain an empty array).

offset
number

The number of results to skip before beginning the listing in case of a paginated response

relation_type
Array of strings

Filter by one or more relation types

category
string

Filter by asset category label

is_showcase
boolean

Filter by showcase assets

Responses

Response samples

Content type
application/json
{
  • "total_count": 18,
  • "next": null,
  • "previous": null,
  • "results": [
    ]
}

Identity Providers

Endpoints for listing active SSO providers configured on the domain. These endpoints provide the information needed to build the login page (provider names, login links, and labels). They do not cover identity provider management or authentication configuration.

Identity provider

provider_type
string
Enum: "SAML" "OIDC" "PROCONNECT"

The protocol used by the identity provider

provider_name
string

The internal name of the identity provider

login_link
string

The URL to initiate the authentication flow with this provider

login_link_label
string

The label displayed on the login button for this provider

is_default_login
boolean

Whether this provider is used as the default login option

{
  • "provider_type": "SAML",
  • "provider_name": "Corporate SSO",
  • "login_link": "/login/saml/?idp=corporate-sso",
  • "login_link_label": "Sign in with Corporate SSO",
  • "is_default_login": false
}

List identity providers

List active SSO providers configured on the domain. Returns the information needed to display authentication options on the login page. Providers are ordered by type (PROCONNECT first, then SAML, then OIDC).

Authorizations:
QueryAPIKeyHeaderAPIKey
query Parameters
lang
string
Example: lang=en

Language code for login link labels

Responses

Response samples

Content type
application/json
{
  • "total_count": 18,
  • "next": null,
  • "previous": null,
  • "results": [
    ]
}