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:

1:n1:n1:1sourcedefines0:nAssetproperty or dealAbstractextracted dataDocumentsource PDFTemplatedefines fieldsField Valueper template fieldLinkdocument citation
  • 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:

  1. Go to Settings and scroll down to the Team Roles section.
  2. Click Create role and add a name (e.g. "View only API").
  3. Click the Assets selector and choose All assets or restrict to specific assets.
  4. Uncheck any write permissions.
  5. 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.

Portfolio AgentAll assets

Reasons across your entire portfolio. Surface patterns, answer cross-asset questions, and generate reports over all abstracts and assets.

Asset AgentSingle asset

Scoped to one property. Answers questions about an asset, its abstracts, and every document linked to it.

Abstract AgentSingle abstract

Works within one abstract. Extracts, validates, and enriches field values by reasoning over the linked source documents.

Document AgentSingle document

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

POST/assets

Create

Create an asset
PropertyTypeDescription
namerequiredstringName
teamrequiredintegerThe ID of the team to which this asset will belong
templateinteger | nullOptional. The ID of the template that this asset should follow.
200Successful ResponseAsset
GET/teams/{team_id}/assets

Get all team's assets

NameTypeDescription
team_idrequiredintegerTeam Id
NameTypeDescription
sortBystringSort By
offsetintegerOffset
limitinteger | nullLimit
templateinteger | nullTemplate ID
timeZonestringTime Zone
columnsstring | nulle.g. name,lastUpdatedA comma-separated list of columns to include
200Successful ResponseGetAssetsResponse

Abstracts

POST/abstracts

Create

Create an abstract
PropertyTypeDescription
namerequiredstringName
assetrequiredintegerThe ID of the asset to which this abstract will belong
templateinteger | nullOptional. The ID of the template that this abstract should follow.
200Successful ResponseAbstract
GET/abstracts

Get specific abstracts

NameTypeDescription
idrequiredstringe.g. 20010,19499A comma-separated list of IDs
200Successful Response{ [id]: Abstract }

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.

GET/teams/{team_id}/abstracts/stream

Stream one or more Abstracts.

Streams a list of abstracts as JSON text separated by new lines. On your client, do the following:
1. Stream a line of text
2. Parse that text as JSON
3. Repeat until stream is complete to get all abstracts.
NameTypeDescription
team_idrequiredintegerTeam Id
NameTypeDescription
sortBystringSort By
offsetintegerOffset
limitinteger | nullLimit
templateinteger | nullTemplate ID
timeZonestringTime Zone
200Stream of Abstract objects as newline-delimited JSON
GET/teams/{team_id}/abstractsdeprecated

Get Team Abstracts

Deprecated: This endpoint will be removed on 2025-12-31. Use /teams/{team_id}/abstracts/stream instead.
NameTypeDescription
team_idrequiredintegerTeam Id
NameTypeDescription
sortBystringSort By
offsetintegerOffset
limitinteger | nullLimit
templateinteger | nullTemplate ID
timeZonestringTime Zone
columnsstring | nulle.g. name,lastUpdatedA comma-separated list of columns to include
200Successful ResponseGetAbstractsResponse

Templates

GET/templates

Get

Get one or more templates
NameTypeDescription
idrequiredstringe.g. 20010,19499A comma-separated list of IDs
200Successful Response{ [id]: Template }
GET/organizations/{organization_id}/templates

Get all templates used by your organization

NameTypeDescription
organization_idrequiredintegerOrganization Id
NameTypeDescription
teamIdinteger | nullTeam ID
typeTemplateType | nullType
sortBystring | nullSort By
limitinteger | nullLimit
offsetinteger | nullOffset
200Successful ResponseGetTemplateResponse

Documents

POST/documents/multiple

Upload Doc Multiple

PropertyTypeDescription
namesrequiredstring[]Names
filesrequiredstring (binary)[]Files
team_idintegerTeam Id
asset_idinteger | nullAsset Id
template_idinteger | nullTemplate Id
uploadbooleanUpload
200Successful Response

Users

GET/users/me

Get Organization & Team's user has access to

200Successful ResponseUserMe

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.

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:

  1. Filter all ResponseField entries for the grid field.
  2. Group entries by position (row).
  3. Within each row, order cells by the column order defined in TemplateFieldGrid.columns.
  4. Use GridColumn.name as the column header.

Schemas

These are the response object types returned across the API.

GetAssetsResponse

Response for request to get team's assets

PropertyTypeDescription
datarequiredany[]Data
countrequiredintegerCount
GetAbstractsResponse

Response for request to get team's abstracts

PropertyTypeDescription
datarequiredAbstract[]Data
countrequiredintegerCount
GetTemplateResponse
PropertyTypeDescription
datarequiredTemplate[]Data
countrequiredintegerCount
CreateAssetRequest

POST /assets body

PropertyTypeDescription
namerequiredstringName
teamrequiredintegerThe ID of the team to which this asset will belong
templateinteger | nullOptional. The ID of the template that this asset should follow.
CreateAbstractRequest

POST /abstracts body

PropertyTypeDescription
namerequiredstringName
assetrequiredintegerThe ID of the asset to which this abstract will belong
templateinteger | nullOptional. The ID of the template that this abstract should follow.
Abstract

An abstract

PropertyTypeDescription
idrequiredintegerID
assetrequiredintegerAsset ID
assetNamerequiredstringAsset Name
createdAtrequiredstring (date-time)Created At
createdByrequiredintegerCreated By
creatorNamerequiredstringCreator Name
documentsrequiredinteger[]Document IDs
fieldsrequiredany[]Fields
lastUpdatedrequiredstring (date-time)Last Updated
linksrequiredLink[]Links
namerequiredstringName
numDocumentsrequiredinteger# of Documents
percentCompleterequirednumber% Complete
percentLinkedrequirednumber% Linked
templaterequiredinteger | nullTemplate ID
templateNamerequiredstringTemplate Name
teamrequiredintegerTeam ID
Asset

An asset

PropertyTypeDescription
idrequiredintegerID
createdAtrequiredstring (date-time)Created At
createdByrequiredintegerCreated By
creatorNamerequiredstringCreator Name
fieldsrequiredany[]Fields
lastUpdatedrequiredstring (date-time)Last Updated
namerequiredstringName
numAbstractsrequiredinteger# of Abstracts
teamrequiredintegerTeam ID
templaterequiredinteger | nullTemplate ID
templateNamerequiredstringTemplate Name
Template

A template

PropertyTypeDescription
idrequiredintegerID
createdByrequiredintegerCreated By (ID)
createdAtrequiredstring (date-time)Created At
creatorNamerequiredstringCreated By (Name)
inUserequiredbooleanIn Use
citationsrequiredbooleanCitations
lastUpdatedrequiredstring (date-time)Last Updated
namerequiredstringName
numAbstractsrequiredinteger# of Abstracts
numFieldsrequiredinteger# of Fields
orgIdrequiredintegerOrganization ID
sectionsrequiredSection[]Sections
typerequiredTemplateTypeTemplate types
Document

A document

PropertyTypeDescription
idrequiredintegerID
abstractsrequiredinteger[]Abstract IDs
assetrequiredinteger | nullAsset ID
assetNamerequiredstringAsset Name
fieldsrequiredany[]Fields
lastUpdatedrequiredstring (date-time)Last Updated
namerequiredstringName
numAbstractsrequiredinteger# of Abstracts
numLinksrequiredinteger# of Links
pagesrequiredobjectPages
pageCountrequiredinteger# of Pages
teamrequiredintegerTeam ID
templaterequiredinteger | nullTemplate ID
templateNamerequiredstringTemplate Name
uploadedAtrequiredstring (date-time)Uploaded At
uploadedByrequiredintegerUploaded By
uploaderNamerequiredstringUploader Name
urlrequiredstringURL
wasConvertedrequiredbooleanWas Converted
wasIndexedrequiredbooleanWas Indexed
UserMe
PropertyTypeDescription
user_idrequiredintegerID
namerequiredstringName
emailrequiredstring (email)Email
teamsrequiredinteger[]Team IDs
organizationsrequiredinteger[]Organization IDs
calendarrequiredobject | nullCalendar
is_adminrequiredbooleanIs Admin
mfa_opt_inrequiredboolean | nullMFA Opt In
ask_ai_enabledrequiredbooleanAsk AI Enabled
ask_ai_asset_enabledrequiredbooleanAsk AI Asset Enabled
ask_ai_abstracts_table_enabledrequiredbooleanAsk AI Abstracts Table Enabled
ResponseField

An abstract, asset, or document field

PropertyTypeDescription
idrequiredintegerField int ID
fieldrequiredstringField ID
valuerequiredstring | nullValue
linksinteger[] | nullExplicit link IDs for citations
positioninteger | nullSort order for multi-row text
Section

A section

PropertyTypeDescription
idrequiredstringSection ID
namerequiredstringSection Name
fieldsrequiredany[]Fields
TemplateField

A template field

PropertyTypeDescription
idrequiredstringField ID
namerequiredstringField Name
typerequiredFieldTypeField types
inUserequiredbooleanIn use?
definitionstringdefault: ""Definition
exclusionsstringdefault: ""Exclusions
TemplateFieldDropdown

A dropdown template field

PropertyTypeDescription
idrequiredstringField ID
namerequiredstringField Name
typerequiredFieldTypeField types
inUserequiredbooleanIn use?
definitionstringdefault: ""Definition
exclusionsstringdefault: ""Exclusions
optionsrequiredstring[]Dropdown Options
multibooleandefault: falseMultiselect dropdown?
TemplateFieldGrid

A grid template field

PropertyTypeDescription
idrequiredstringField ID
namerequiredstringField Name
typerequiredFieldTypeField types
inUserequiredbooleanIn use?
definitionstringdefault: ""Definition
exclusionsstringdefault: ""Exclusions
columnsrequiredGridColumn[]Grid Columns
GridColumn

A grid column

PropertyTypeDescription
idstringdefault: ""Column ID
namerequiredstringColumn Name
typerequiredGridColumnTypeGrid column types
FieldType

Field types

currencydatedropdowngridgrid-flexnumbertext
GridColumnType

Grid column types

currencydatenumbertext
TemplateType

Template types

abstractassetdocument