Intempt Docs
Developer DocsAPI Reference

Data Hub API Reference

Programmatic access to user attributes and event attributes.

Data Hub API Reference

Covers two resource families: user attributes and event attributes. Both follow the standard /v1/{orgName}/projects/{projectName}/... path pattern.

📘 Authentication

These endpoints authenticate with a JWT bearer token (Authorization: Bearer <jwt>), the same as a signed-in console session — not an apiKey query parameter like the ingestion endpoints (Track Data, Consent, Choose API). See Authentication for how to obtain one.


List Attributes

GET /v1/{orgName}/projects/{projectName}/attributes

Returns user attributes for the project, with optional filters and pagination.

Query Parameters

ParameterTypeRequiredDescription
pageintegerNoPage number (via pageable)
sizeintegerNoPage size (via pageable)
attributeTypestringNoOne of extracted, predicted, scoring, calculated, metric
scoringTypestringNoScoring subtype, when attributeType is scoring
namestringNoFilter by attribute name
titlestringNoFilter by attribute title
createdByintegerNoFilter by creator's person ID

Examples

List all scoring attributes

GET /v1/{orgName}/projects/{projectName}/attributes?attributeType=scoring

Responses

200 OK

Returns an object with a userAttributes array and a total count — not a bare array.

{
  "userAttributes": [
    {
      "id": "1",
      "name": "user_owner",
      "attributeType": "extracted",
      "type": "user",
      "title": "User owner",
      "description": "Intempt user owner.",
      "example": "",
      "active": true,
      "createdAt": "2026-03-11T09:08:30.328772Z",
      "updatedAt": "2026-03-11T09:08:30.328772Z",
      "createdBy": {
        "id": "system",
        "type": "system",
        "name": "System",
        "pictureUrl": null
      },
      "updatedBy": {
        "id": "system",
        "type": "system",
        "name": "System",
        "pictureUrl": null
      },
      "segmentationAvailable": true,
      "pii": true,
      "unique": true,
      "schema": {
        "type": "record",
        "name": "schema",
        "fields": [
          {
            "name": "intempt_user_owner",
            "type": ["null", "long"],
            "default": null
          }
        ]
      },
      "fields": [
        {
          "id": null,
          "name": "intempt_user_owner",
          "title": "User owner",
          "objectType": "long",
          "itemsType": null,
          "items": null,
          "possibleValues": null
        }
      ],
      "system": true,
      "fieldNames": [],
      "strategy": "last"
    }
  ],
  "total": 162
}

400 Bad Request

Invalid filter parameters.


Response Fields

FieldTypeDescription
userAttributesarrayThe list of attribute objects (see below)
totalintegerTotal number of attributes matching the query, across all pages
userAttributes[].idstringAttribute ID
userAttributes[].namestringAttribute name
userAttributes[].attributeTypestringextracted, predicted, scoring, calculated, or metric
userAttributes[].typestringuser or account
userAttributes[].titlestringDisplay title
userAttributes[].descriptionstringDescription
userAttributes[].examplestringExample value
userAttributes[].activebooleanWhether the attribute is active
userAttributes[].createdAtstring (date-time)Creation timestamp
userAttributes[].updatedAtstring (date-time)Last update timestamp
userAttributes[].createdByobjectWho created it — {id, type, name, pictureUrl}
userAttributes[].updatedByobjectWho last updated it — same shape as createdBy
userAttributes[].segmentationAvailablebooleanWhether this attribute can be used in segment conditions
userAttributes[].piibooleanWhether the attribute holds personally identifiable information
userAttributes[].uniquebooleanWhether values must be unique
userAttributes[].systembooleanWhether this is a system-defined attribute
userAttributes[].schemaobjectAvro-style schema describing the attribute's underlying field
userAttributes[].fieldsarrayField definitions backing this attribute
userAttributes[].fieldNamesarrayUnderlying field names, when applicable
userAttributes[].strategystringAggregation/resolution strategy (e.g. "last")

Create Attribute

POST /v1/{orgName}/projects/{projectName}/attributes

Creates a user attribute. Required fields are attributeType and title. The exact shape of the request varies by attributeType (for example, extracted and scoring attributes each accept type-specific fields beyond the ones listed below).

Request Body

FieldTypeRequiredDescription
attributeTypestringYesextracted, predicted, scoring, calculated, or metric
titlestringYesDisplay title
descriptionstringNoDescription
examplestringNoExample value
typestringNouser or account
activebooleanNoWhether the attribute is active
segmentationAvailablebooleanNoWhether this attribute can be used in segment conditions
piibooleanNoWhether the attribute holds personally identifiable information
uniquebooleanNoWhether values must be unique

Retrieve, Update, Delete a Single Attribute

GET /v1/{orgName}/projects/{projectName}/attributes/{attributeId} PUT /v1/{orgName}/projects/{projectName}/attributes/{attributeId} DELETE /v1/{orgName}/projects/{projectName}/attributes/{attributeId}

GET returns a single attribute object — the same shape as one item inside List Attributes' userAttributes array, not wrapped in that envelope. PUT accepts the same body as Create Attribute. DELETE takes no body.


List Event Attributes

GET /v1/{orgName}/projects/{projectName}/event-attributes

Returns event attributes for a collection.

Query Parameters

ParameterTypeRequiredDescription
collectionIdstringYesThe event collection to list attributes for

200 OK

Returns an _embedded array and a total count — not the same envelope shape as List Attributes (userAttributes).

{
  "_embedded": [
    {
      "id": "696107",
      "name": "transformer",
      "displayName": "transformer",
      "events": null,
      "collectionId": "1729891230671200257",
      "description": "",
      "example": "",
      "visibility": true,
      "objectType": "string",
      "itemsType": null,
      "items": null,
      "type": "EVENT",
      "typeLabel": "Event attributes",
      "fullPath": "data.transformer"
    }
  ],
  "total": 2
}

Response Fields

FieldTypeDescription
_embeddedarrayThe list of event attributes in this collection
_embedded[].idstringAttribute ID
_embedded[].namestringAttribute name
_embedded[].displayNamestringDisplay name
_embedded[].collectionIdstringThe event collection this attribute belongs to
_embedded[].descriptionstringDescription
_embedded[].examplestringExample value
_embedded[].visibilitybooleanWhether the attribute is visible
_embedded[].objectTypestringUnderlying data type (e.g. string)
_embedded[].typestringAlways EVENT for this endpoint
_embedded[].typeLabelstringHuman-readable type label
_embedded[].fullPathstringDot-notation path to this attribute on the event payload (e.g. data.transformer)
totalintegerTotal number of attributes in this collection

Search Event Attributes

POST /v1/{orgName}/projects/{projectName}/event-attributes

Despite the POST method, this searches and filters existing event attributes rather than creating one. Use this when you need filters beyond what collectionId alone supports on the GET endpoint above.

📘 Good to know

The GET and POST methods on this same path do different things: GET lists by collection, POST searches by a filter body. Don't assume POST here means create.

Request Body

FieldTypeRequiredDescription
collectionIdstringNoLimit the search to one event collection. Omit to search across all collections
filtersarrayYesFilter conditions — pass [] for no filters. Cannot be omitted or null
pageSizeintegerYesNumber of results per page
pageNumberintegerYesPage number to return
{
  "filters": [],
  "pageSize": 10,
  "pageNumber": 0
}

Responses

200 OK

Returns an _embedded array of event attributes.

{
  "_embedded": [
    {
      "id": "696107",
      "name": "transformer",
      "displayName": "transformer",
      "events": null,
      "collectionId": "1729891230671200257",
      "description": "",
      "example": "",
      "visibility": true,
      "objectType": "string",
      "itemsType": null,
      "items": null,
      "type": "EVENT",
      "typeLabel": "Event attributes",
      "fullPath": "data.transformer"
    }
  ],
  "total": 2
}

400 Bad Request

Returned both for a malformed request (e.g. missing filters, pageSize, or pageNumber) and when no event attributes match the search:

{
  "errors": [
    {
      "message": "Event attributes not found"
    }
  ]
}

Response Fields

FieldTypeDescription
_embeddedarrayThe list of matching event attributes
_embedded[].idstringAttribute ID
_embedded[].namestringAttribute name
_embedded[].displayNamestringDisplay name
_embedded[].collectionIdstringThe event collection this attribute belongs to
_embedded[].descriptionstringDescription
_embedded[].examplestringExample value
_embedded[].visibilitybooleanWhether the attribute is visible
_embedded[].objectTypestringUnderlying data type (e.g. string)
_embedded[].typestringAlways EVENT for this endpoint
_embedded[].typeLabelstringHuman-readable type label
_embedded[].fullPathstringDot-notation path to this attribute on the event payload (e.g. data.transformer)
totalintegerTotal number of matching attributes

On this page