Skip to main content

Export API - 2.0

Written by Team Enterpret
Updated over 2 weeks ago

This Help Center article explains how to export bulk data from your Enterpret Knowledge Graph using the Knowledge Graph Export API (also referred to as the “Bulk Export API”).

These APIs are intended for customers who want to:

  • Build a data warehouse / lake sync from Enterpret

  • Perform offline analysis or reporting

  • Integrate Enterpret objects into internal tools


How your data is represented in Enterpret

Your domain data in Enterpret is represented as a set of related Knowledge Graph objects. These objects come together to build the Knowledge Graph for your Enterpret instance.

The Knowledge Graph is extensible: each tenant can have additional tenant-specific objects, fields, and relationships. However, the objects below are commonly present as part of core Enterpret functionality.

Core objects (commonly available)

Note: the Knowledge Graph is extensible, so object IDs can vary by tenant and configuration. Always use the “List exportable objects” endpoint to confirm the exact objectID values available in your workspace.

Feedback record

  • Feedback Record: Contains feedback records for your tenant (for example: reviews, support tickets, survey responses, call transcripts).

    • Export object ID: feedback_record

Taxonomy (product taxonomy)

Taxonomy is represented using a set of objects that describe both:

  • The nodes in the taxonomy (each level’s metadata), and

  • The hierarchy paths that connect nodes across levels

Common taxonomy objects:

  • product_taxonomy_hierarchy: A list of taxonomy “paths”. Each row represents a single path made of 5 levels, containing the IDs of:

    • l1, l2, l3, theme, subtheme

  • product_taxonomy_l1: Details for an L1 ID

  • product_taxonomy_l2: Details for an L2 ID

  • product_taxonomy_l3: Details for an L3 ID

  • theme: Details for a Theme ID

  • subtheme: Details for a Subtheme ID

Feedback summaries

  • Feedback Summary: A feedback record can have one or more summaries.

    • Example: For audio feedback, each chapter/segment may have its own summary for a sub-part of the record.

    • Summaries are captured in the feedback_summary object.

    • Export object ID: feedback_summary

Predictions (taxonomy assignments)

  • Predictions: A feedback record can have more than one taxonomy path predicted on it.

    • These predictions are captured in the product_feedback_envelope object, which includes details like the predicted taxonomy path (and associated metadata).

    • Export object ID: product_feedback_envelope


Authentication

All endpoints require Bearer token authentication. Include your API token in the Authorization header:

Authorization: Bearer <your-api-token>

Base URL

https://api.enterpret.com/export

API endpoints

1. List exportable objects

Use this endpoint to discover which Knowledge Graph objects are available to export in your workspace, and what their objectID values are.

Endpoint: POST /external/v2/objects

Request

Request body (optional):

{   "paginationToken": "string (optional)" }

Field

Type

Required

Description

paginationToken

string

No

Token from previous response for pagination

Response

{
"objects": [
{
"id": "string",
"name": "string",
"description": "string"
}
],
"paginationToken": "string (optional)"
}

Field

Type

Description

objects

array

List of Knowledge Graph objects

objects[].id

string

Unique identifier of the object (use this as objectID in the export endpoint)

objects[].name

string

Human-readable name of the object

objects[].description

string

Description of what the object contains

paginationToken

string

Present if there are more objects to list

Example request

curl -X POST "https://api.enterpret.com/export/external/v2/objects" \
-H "Authorization: Bearer <your-api-token>" \
-H "Content-Type: application/json" \
-d '{}'

Example response

{
"objects": [
{
"id": "feedback_record",
"name": "Feedback Record"
},
{
"id": "feedback_summary",
"name": "Feedback Summary"
},
{
"id": "product_feedback_envelope",
"name": "Product Feedback Envelope"
},
{
"id": "product_taxonomy_hierarchy",
"name": "Product Taxonomy Hierarchy"
},
{
"id": "product_taxonomy_l1",
"name": "Product Taxonomy L1"
},
{
"id": "product_taxonomy_l2",
"name": "Product Taxonomy L2"
},
{
"id": "product_taxonomy_l3",
"name": "Product Taxonomy L3"
},
{
"id": "theme",
"name": "Theme"
},
{
"id": "subtheme",
"name": "Subtheme"
}
]
}

2. Export object data (bulk CSV)

Exports bulk data for a specific Knowledge Graph object and time range. The API returns signed URLs to one or more CSV files that contain the exported rows.

Endpoint: POST /external/v2/export

Request

{
"objectID": "string",
"startTime": "string",
"endTime": "string (optional)",
"cursor": "string (optional)"
}

Parameters

Field

Type

Required

Description

objectID

string

Yes

The ID of the Knowledge Graph object to export (discover using POST /external/v2/objects)

startTime

string

Yes

Start of the time range in ISO 8601 format: YYYY-MM-DDTHH:MMZ

endTime

string

No

End of the time range in ISO 8601 format. Defaults to current time if not provided

cursor

string

No

Pagination cursor from a previous response to retrieve the next batch of files

Time format

The startTime and endTime fields must be in ISO 8601 format with UTC timezone:

Format: YYYY-MM-DDTHH:MMZ

Examples:
- "2025-12-12T00:00Z" (December 12, 2025 at midnight UTC)
- "2025-12-31T23:00Z" (December 31, 2025 at 11 PM UTC)

How time windows work (important)

The export time window is based on when the record was created or updated inside Enterpret, not when the record was originally created in your source system.

  • If a record was created in your source system in May 2025, but it was first ingested into Enterpret on Oct 25, it will appear in the export file for Oct 25 (for the corresponding object).

  • If that same record is updated again in Enterpret on Nov 10, it will appear again in the export file for Nov 10 with the updated values.

You can think of export files as deltas (changes within the window), and you should upsert downstream using the object’s primary identifier.

Minimum granularity is currently hourly, and timestamps are rounded to the hour boundary for window boundaries.

Response

{
"files": ["string"],
"cursor": "string (optional)"
}

Field

Type

Description

files

array of strings

Signed URLs to the exported CSV files. URLs are valid for a limited time.

cursor

string

Present if there are more files to retrieve. Pass this in the next request to continue pagination.

Example request

curl -X POST "https://api.enterpret.com/export/external/v2/export" \
-H "Authorization: Bearer <your-api-token>" \
-H "Content-Type: application/json" \
-d '{
"objectID": "feedback_record",
"startTime": "2025-12-12T00:00:00Z",
"endTime": "2025-12-31T23:00:00Z"
}'

Example response

{
"files": [
"https://s3.amazonaws.com/enterpret-exports/org-123/feedback/2025-12-12.csv?X-Amz-Signature=...",
"https://s3.amazonaws.com/enterpret-exports/org-123/feedback/2025-12-13.csv?X-Amz-Signature=..."
],
"cursor": "eyJsYXN0S2V5IjoiMjAyNS0xMi0xNCJ9"
}

Pagination (fetch all files)

If the cursor field is present in the response, there are more files to retrieve. Make subsequent requests with the cursor to get all files:

curl -X POST "https://api.enterpret.com/external/v2/export" \
-H "Authorization: Bearer <your-api-token>" \
-H "Content-Type: application/json" \
-d '{
"objectID": "feedback",
"startTime": "2025-12-12T00:00:00Z",
"endTime": "2025-12-31T23:00:00Z",
"cursor": "eyJsYXN0S2V5IjoiMjAyNS0xMi0xNCJ9"
}'

CSV file format

Exported CSV files contain attributes of the exported object (columns can vary by object and by tenant configuration). The first row contains column headers.

Example CSV structure for a feedback-like object:

record_id,event_time,channel,message_text,language_code
fbk_001,2025-12-12T10:30:00Z,Support,"Login fails after 2FA setup",en
fbk_002,2025-12-12T11:45:00Z,Reviews,"App crashes when opening settings",en

Error responses

All endpoints return errors in the following format:

{
"error": {
"code": "string",
"message": "string"
}
}

Common error codes

HTTP Status

Code

Description

400

INVALID_REQUEST_ARGUMENT

Invalid or missing required parameters

401

UNAUTHORIZED

Invalid or expired authentication token

403

FORBIDDEN

Token does not have required permissions

404

NOT_FOUND

Requested object not found

429

RATE_LIMITED

Too many requests, please retry later

500

INTERNAL_ERROR

Internal server error


Rate limits

  • Export object data: 10 requests per minute per organization

  • List exportable objects: 60 requests per minute per organization


Best practices

  1. List objects first: Start with POST /external/v2/objects to discover the correct objectIDs for your tenant.

  2. Use pagination: Always check for the cursor field and continue fetching until no cursor is returned.

  3. Download files promptly: Signed URLs have a limited validity period. Download files as soon as you receive the URLs.

  4. Respect rate limits: Implement exponential backoff when receiving 429 errors.

  5. Use appropriate time ranges: For large datasets, export data in smaller time ranges to manage file sizes and speed up downstream ingestion.


FAQ

Is there a formal data dictionary or data model for the Knowledge Graph objects?

The CSV headers in each export define the columns for that object. Because Enterpret supports dynamic attributes on ingested objects, columns are also dynamic — they vary by organization and source configuration. Use the /objects endpoint to discover available objects, then export a small time range to inspect the CSV headers for your specific schema.

How do objects relate to one another?

Objects are linked via foreign keys on their records. For example, product_feedback_envelope contains a theme_id field that maps to theme.record_id

These relationships are intuitive and follow the same pattern across objects. Contact our support team for the comprehensive list of relations for your organization.

Is record_id the primary key? Is it globally unique within each object?

Yes. record_id is the primary key and is unique within each object type.

Can taxonomy predictions (themes, subthemes) change after a record is first processed?

Yes. Records can be updated over time as taxonomy models improve. Updated records will reappear in subsequent export time windows. For any given time range, you can assume all returned records reflect the latest state as of the upper bound of that range. This means you do not need to re-fetch historical windows, just process each new export window and upsert into your warehouse.

Does the Export API surface deleted records?

No. The Export API does not currently include records that have been deleted from Enterpret. If you are building a historical replica, be aware that deletions on the Enterpret side will not be reflected in your exports.

Did this answer your question?