API Reference
For code samples, feature requests, or general inquiries, please contact your designated AbstractCRE support representative.
Overview
The AbstractCRE data model is built around the following objects:
- An Asset represents a property or deal and is the top-level container.
- An Abstract is a structured set of extracted data that belongs to an Asset.
- A Document is a source PDF or file attached to an Abstract.
- A Template defines the structure of an Abstract: its sections and the field names and types within them (text, date, currency, dropdown, grid, etc.).
- A Field Value is a single extracted value, derived from the Template definition and the source Documents.
- A Link is a citation that pins a Field Value to a specific region of a Document page.
Common use cases
Pushing data to AbstractCRE
Create assets, upload documents, and create abstracts programmatically, for example, to sync records from an external system or automate document ingestion. The key endpoints are POST /assets, POST /documents/multiple, and POST /abstracts.
Pulling all data
Export your entire portfolio at once. Use GET /teams/{team_id}/abstracts/stream to stream all abstracts as newline-delimited JSON, and GET /organizations/{organization_id}/templates to fetch the templates needed to interpret field names and structure.
Authentication
Generate an API Key
Navigate to User Settings in the AbstractCRE UI and scroll down to the API Key section to generate your secret key.
Store your API key in a secure place. Do not commit it to source control or expose it in client-side code.
Authenticate Requests
Include your API key in the x-api-key header with every request:
x-api-key: YOUR_API_KEY
For read-only use cases, consider generating your API key from a view-only account. To set one up:
- Go to Settings and scroll down to the Team Roles section.
- Click Create role and add a name (e.g. "View only API").
- Click the Assets selector and choose All assets or restrict to specific assets.
- Uncheck any write permissions.
- Scroll down and click Save.
Then invite a secondary email under that role and generate an API key from that account.
Getting Started
Before making your first request, complete Authentication to generate and configure your API key. Then follow the steps below.
1. Retrieve Your IDs
Call GET /users/me to retrieve your organization and team IDs, which you'll need for subsequent requests.
2. Fetch Templates
Call GET /organizations/{organization_id}/templates to retrieve the templates available to your organization. Templates define fields (e.g. "Lease", "Loan", "JV", ...).
3. Stream Abstracts
Use GET /teams/{team_id}/abstracts/stream to stream all abstracts for a team as newline-delimited JSON. This is the recommended way to fetch large datasets.
4. Combine Templates and Abstracts
Combine the Template and Abstract data to map field values with field definitions. This is required to properly display the value for Dropdowns, Grids, and Text when the template is using citations. See Displaying Values for details.
AI Integrations
AbstractCRE offers deeper integration options beyond the REST API for teams building AI-powered workflows or embedding AbstractCRE capabilities into their own products.
MCP
AbstractCRE exposes a Model Context Protocol (MCP) server that connects AI assistants directly to your portfolio data (abstracts, assets, templates, and documents) without writing custom integration code.
MCP access is available to select customers. Contact your designated AbstractCRE support representative to discuss enabling it for your organization.
Agents
AbstractCRE Agents are purpose-built AI workflows scoped to specific levels of the data model. Each Agent is invokable over a simple REST API and can be embedded directly in your own applications to automate extraction, analysis, and reporting tasks.
Reasons across your entire portfolio. Surface patterns, answer cross-asset questions, and generate reports over all abstracts and assets.
Scoped to one property. Answers questions about an asset, its abstracts, and every document linked to it.
Works within one abstract. Extracts, validates, and enriches field values by reasoning over the linked source documents.
Analyzes an individual document. Identifies clauses, extracts structured data, and maps content to template fields.
Agents are available to select customers. To discuss your use case and determine the right Agent for your workflow, contact your designated AbstractCRE support representative.
Resources
Assets
/assetsCreate
Request Bodyapplication/json
| Property | Type | Description |
|---|---|---|
namerequired | string | Name |
teamrequired | integer | The ID of the team to which this asset will belong |
template | integer | null | Optional. The ID of the template that this asset should follow. |
/teams/{team_id}/assetsGet all team's assets
Path Parameters
| Name | Type | Description |
|---|---|---|
team_idrequired | integer | Team Id |
Query Parameters
| Name | Type | Description |
|---|---|---|
sortBy | string | Sort By |
offset | integer | Offset |
limit | integer | null | Limit |
template | integer | null | Template ID |
timeZone | string | Time Zone |
columns | string | nulle.g. name,lastUpdated | A comma-separated list of columns to include |
Abstracts
/abstractsCreate
Request Bodyapplication/json
| Property | Type | Description |
|---|---|---|
namerequired | string | Name |
assetrequired | integer | The ID of the asset to which this abstract will belong |
template | integer | null | Optional. The ID of the template that this abstract should follow. |
/abstractsGet specific abstracts
Query Parameters
| Name | Type | Description |
|---|---|---|
idrequired | stringe.g. 20010,19499 | A comma-separated list of IDs |
Use GET /teams/{team_id}/abstracts/stream for fetching abstracts. It streams newline-delimited JSON and performs better than the deprecated paginated endpoint for large datasets.
/teams/{team_id}/abstracts/streamStream one or more Abstracts.
1. Stream a line of text
2. Parse that text as JSON
3. Repeat until stream is complete to get all abstracts.
Path Parameters
| Name | Type | Description |
|---|---|---|
team_idrequired | integer | Team Id |
Query Parameters
| Name | Type | Description |
|---|---|---|
sortBy | string | Sort By |
offset | integer | Offset |
limit | integer | null | Limit |
template | integer | null | Template ID |
timeZone | string | Time Zone |
/teams/{team_id}/abstractsdeprecatedGet Team Abstracts
/teams/{team_id}/abstracts/stream instead.Path Parameters
| Name | Type | Description |
|---|---|---|
team_idrequired | integer | Team Id |
Query Parameters
| Name | Type | Description |
|---|---|---|
sortBy | string | Sort By |
offset | integer | Offset |
limit | integer | null | Limit |
template | integer | null | Template ID |
timeZone | string | Time Zone |
columns | string | nulle.g. name,lastUpdated | A comma-separated list of columns to include |
Templates
/templatesGet
Query Parameters
| Name | Type | Description |
|---|---|---|
idrequired | stringe.g. 20010,19499 | A comma-separated list of IDs |
/organizations/{organization_id}/templatesGet all templates used by your organization
Path Parameters
| Name | Type | Description |
|---|---|---|
organization_idrequired | integer | Organization Id |
Query Parameters
| Name | Type | Description |
|---|---|---|
teamId | integer | null | Team ID |
type | TemplateType | null | Type |
sortBy | string | null | Sort By |
limit | integer | null | Limit |
offset | integer | null | Offset |
Documents
/documents/multipleUpload Doc Multiple
Request Bodymultipart/form-data
| Property | Type | Description |
|---|---|---|
namesrequired | string[] | Names |
filesrequired | string (binary)[] | Files |
team_id | integer | Team Id |
asset_id | integer | null | Asset Id |
template_id | integer | null | Template Id |
upload | boolean | Upload |
Users
/users/meGet Organization & Team's user has access to
Displaying Values
ResponseField values require some interpretation depending on the field type. Match each ResponseField to its template field using the field property (which corresponds to the template field id).
Text
When citations are enabled on a template, a single text field may produce multiple ResponseField entries, one per cited segment. To reconstruct the full value, filter all ResponseField entries for that field, sort ascending by position, and concatenate the value strings.
Each entry also carries a links array of Link IDs. A Link pins that segment to a specific region on a document page, so you can display the source citation alongside the value. Fetch the full Link objects from the abstract's links collection using those IDs.
Dropdown
For TemplateFieldDropdown fields, value is stored as a stringified integer index into the field's options array. To get the display name:
displayValue = templateField.options[parseInt(responseField.value)]
For multi-select dropdowns (multi: true), value is a comma-separated list of indices. Split on "," and look up each index in options.
Grid
For TemplateFieldGrid fields, each cell is stored as a separate ResponseField. The position represents the row number and field identifies the column via GridColumn.id.
To render a grid:
- Filter all
ResponseFieldentries for the grid field. - Group entries by
position(row). - Within each row, order cells by the column order defined in
TemplateFieldGrid.columns. - Use
GridColumn.nameas the column header.
Schemas
These are the response object types returned across the API.
GetAssetsResponseResponse for request to get team's assets
| Property | Type | Description |
|---|---|---|
datarequired | any[] | Data |
countrequired | integer | Count |
GetAbstractsResponseResponse for request to get team's abstracts
| Property | Type | Description |
|---|---|---|
datarequired | Abstract[] | Data |
countrequired | integer | Count |
GetTemplateResponse| Property | Type | Description |
|---|---|---|
datarequired | Template[] | Data |
countrequired | integer | Count |
CreateAssetRequestPOST /assets body
| Property | Type | Description |
|---|---|---|
namerequired | string | Name |
teamrequired | integer | The ID of the team to which this asset will belong |
template | integer | null | Optional. The ID of the template that this asset should follow. |
CreateAbstractRequestPOST /abstracts body
| Property | Type | Description |
|---|---|---|
namerequired | string | Name |
assetrequired | integer | The ID of the asset to which this abstract will belong |
template | integer | null | Optional. The ID of the template that this abstract should follow. |
AbstractAn abstract
| Property | Type | Description |
|---|---|---|
idrequired | integer | ID |
assetrequired | integer | Asset ID |
assetNamerequired | string | Asset Name |
createdAtrequired | string (date-time) | Created At |
createdByrequired | integer | Created By |
creatorNamerequired | string | Creator Name |
documentsrequired | integer[] | Document IDs |
fieldsrequired | any[] | Fields |
lastUpdatedrequired | string (date-time) | Last Updated |
linksrequired | Link[] | Links |
namerequired | string | Name |
numDocumentsrequired | integer | # of Documents |
percentCompleterequired | number | % Complete |
percentLinkedrequired | number | % Linked |
templaterequired | integer | null | Template ID |
templateNamerequired | string | Template Name |
teamrequired | integer | Team ID |
AssetAn asset
| Property | Type | Description |
|---|---|---|
idrequired | integer | ID |
createdAtrequired | string (date-time) | Created At |
createdByrequired | integer | Created By |
creatorNamerequired | string | Creator Name |
fieldsrequired | any[] | Fields |
lastUpdatedrequired | string (date-time) | Last Updated |
namerequired | string | Name |
numAbstractsrequired | integer | # of Abstracts |
teamrequired | integer | Team ID |
templaterequired | integer | null | Template ID |
templateNamerequired | string | Template Name |
TemplateA template
| Property | Type | Description |
|---|---|---|
idrequired | integer | ID |
createdByrequired | integer | Created By (ID) |
createdAtrequired | string (date-time) | Created At |
creatorNamerequired | string | Created By (Name) |
inUserequired | boolean | In Use |
citationsrequired | boolean | Citations |
lastUpdatedrequired | string (date-time) | Last Updated |
namerequired | string | Name |
numAbstractsrequired | integer | # of Abstracts |
numFieldsrequired | integer | # of Fields |
orgIdrequired | integer | Organization ID |
sectionsrequired | Section[] | Sections |
typerequired | TemplateType | Template types |
DocumentA document
| Property | Type | Description |
|---|---|---|
idrequired | integer | ID |
abstractsrequired | integer[] | Abstract IDs |
assetrequired | integer | null | Asset ID |
assetNamerequired | string | Asset Name |
fieldsrequired | any[] | Fields |
lastUpdatedrequired | string (date-time) | Last Updated |
namerequired | string | Name |
numAbstractsrequired | integer | # of Abstracts |
numLinksrequired | integer | # of Links |
pagesrequired | object | Pages |
pageCountrequired | integer | # of Pages |
teamrequired | integer | Team ID |
templaterequired | integer | null | Template ID |
templateNamerequired | string | Template Name |
uploadedAtrequired | string (date-time) | Uploaded At |
uploadedByrequired | integer | Uploaded By |
uploaderNamerequired | string | Uploader Name |
urlrequired | string | URL |
wasConvertedrequired | boolean | Was Converted |
wasIndexedrequired | boolean | Was Indexed |
UserMe| Property | Type | Description |
|---|---|---|
user_idrequired | integer | ID |
namerequired | string | Name |
emailrequired | string (email) | |
teamsrequired | integer[] | Team IDs |
organizationsrequired | integer[] | Organization IDs |
calendarrequired | object | null | Calendar |
is_adminrequired | boolean | Is Admin |
mfa_opt_inrequired | boolean | null | MFA Opt In |
ask_ai_enabledrequired | boolean | Ask AI Enabled |
ask_ai_asset_enabledrequired | boolean | Ask AI Asset Enabled |
ask_ai_abstracts_table_enabledrequired | boolean | Ask AI Abstracts Table Enabled |
ResponseFieldAn abstract, asset, or document field
| Property | Type | Description |
|---|---|---|
idrequired | integer | Field int ID |
fieldrequired | string | Field ID |
valuerequired | string | null | Value |
links | integer[] | null | Explicit link IDs for citations |
position | integer | null | Sort order for multi-row text |
LinkA link between a field and a document region
| Property | Type | Description |
|---|---|---|
idrequired | integer | ID |
docrequired | integer | Document ID |
fieldrequired | string | Field UUID |
heightrequired | integer | Height (px) |
widthrequired | integer | Width (px) |
pagerequired | integer | Page number |
xrequired | integer | X of the top-left corner (px) |
yrequired | integer | Y of the top-left corner (px) |
group | string (uuid) | null | Multi-page group ID |
abstractrequired | integer | Abstract ID |
SectionA section
| Property | Type | Description |
|---|---|---|
idrequired | string | Section ID |
namerequired | string | Section Name |
fieldsrequired | any[] | Fields |
TemplateFieldA template field
| Property | Type | Description |
|---|---|---|
idrequired | string | Field ID |
namerequired | string | Field Name |
typerequired | FieldType | Field types |
inUserequired | boolean | In use? |
definition | stringdefault: "" | Definition |
exclusions | stringdefault: "" | Exclusions |
TemplateFieldDropdownA dropdown template field
| Property | Type | Description |
|---|---|---|
idrequired | string | Field ID |
namerequired | string | Field Name |
typerequired | FieldType | Field types |
inUserequired | boolean | In use? |
definition | stringdefault: "" | Definition |
exclusions | stringdefault: "" | Exclusions |
optionsrequired | string[] | Dropdown Options |
multi | booleandefault: false | Multiselect dropdown? |
TemplateFieldGridA grid template field
| Property | Type | Description |
|---|---|---|
idrequired | string | Field ID |
namerequired | string | Field Name |
typerequired | FieldType | Field types |
inUserequired | boolean | In use? |
definition | stringdefault: "" | Definition |
exclusions | stringdefault: "" | Exclusions |
columnsrequired | GridColumn[] | Grid Columns |
GridColumnA grid column
| Property | Type | Description |
|---|---|---|
id | stringdefault: "" | Column ID |
namerequired | string | Column Name |
typerequired | GridColumnType | Grid column types |
FieldTypeField types
currencydatedropdowngridgrid-flexnumbertextGridColumnTypeGrid column types
currencydatenumbertextTemplateTypeTemplate types
abstractassetdocument