Download OpenAPI specification:Download
The Everlaw API is organized around REST. Our API has predictable resource-oriented URLS, returns JSON-encoded responses, and uses standard HTTP response codes, authentication and methods.
The Everlaw API uses API keys to authenticate requests. You can view and manage keys for your organization on the Organization Admin page.
Your API keys grant access to your Everlaw platform data - be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, open S3 buckets, etc.
You should provide your API key as a Bearer token when making an API request by setting the "Authorization" header:
Authorization: Bearer everlaw-api.XXXX.YYYYYYYY
You must provide your API key with every request, and all API requests must be made over HTTPS.
All responses are in JSON format. Response entities are encapsulated in a JSON object along with any other top-level response content, e.g. pagination links (see the Pagination section below):
{
"data": {
"id": 1,
"name": "Test Project"
...
}
}
Some API endpoints fetch lists of objects (e.g. listing all users in an organization).
These list API endpoints share a common structure, taking at least these two parameters:
limit
and after
. The Everlaw API utilizes cursor-based pagination via the after
parameter.
This parameter takes an existing object ID value and returns objects starting after the given ID.
The limit
parameter specifies how many objects you would like to return in a given request.
Paginated responses will include a links
entry in the top-level response that provides pre-built
pagination links for fetching more results (if they exist). This links
object will always
include a next
key which is a URL to fetch the next page of results OR null
if this was the last
page of results:
{
"data": [{
"id": 1,
"name": "Test Project"
...
}],
"links": {
"next": "https://...."
}
}
The Everlaw API employs rate limiting to help limit the performance impact of API activity and
maintain stability. There is a fixed rate limit of 25 requests per second enforced per authenticating
user account. Request rates that exceed this limit may see error responses with status code 429
.
Additionally, there is a stricter rate limit enforced for failed authentication (invalid/missing
API tokens).
A basic approach for handling rate limiting is to watch for 429
status codes and employ a retry
mechanism. This retry mechanism should follow an exponential backoff schedule (with increasing
delays between successive retries) to reduce request rates when necessary.
When using the Everlaw API it is important to consider users that are interacting through the Everlaw platform - actions you take through the API (particularly those that create or modify platform objects, such as uploads/datasets) can impact the platform experience for your reviewers. To help keep this experience user-friendly and performant, Everlaw imposes some limits on how the API can be used, including the rate limits discussed above as well as operation-specific limits. These limits include caps on the number of user-visible objects created via the API (for example, a limit on the number of datasets that can be created via the API), and will be called out on the specific operations below.
If you hit one of these limits, the operation will fail with response code 422
(unprocessable) and
include an error message indicating the particular limit. These limits can be adjusted for specific
databases or organizations as necessary to allow for continued API use - please contact Everlaw Support
for more information or if you would like to adjust a particular limit.
The Everlaw API uses conventional HTTP response codes to indicate the success or failure of an
API request. In general, codes in the 2xx
range indicate success; codes in the 4xx
range
indicate an error with the request content (e.g. a missing parameter, or insufficient permissions);
codes in the 5xx
range indicate an error with our servers (e.g. scheduled maintenance).
Error responses will include a JSON body with a human-readable title indicating the cause of the error and the HTTP status code:
{
"title": "You do not have permission to make this request",
"status": 403
}
Users on Everlaw are typically members of one or more organizations. These organizations are a convenient way to group and manage user accounts as well as case data (databases and projects) owned by the organization. Each organization is associated with a list of members (some of whom may be "org admins") as well as a list of databases and their associated projects that the organization owns.
Organizations are administered by members that have been granted the "org admin" role, allowing them administrative control over membership, SAML/SSO configuration, access to organization-owned cases, management permissions over organization API keys, and other functionality. Organization-level API keys are also granted this "org admin" role. For more details, see Organization Administrator.
Matters on Everlaw are organized into top-level entities known as databases. Each database is a separate collection of documents owned and administered by a particular organization. Every database has one or more associated projects, which contain a subset (possibly all) of the documents in the database, but which have their own entirely separate review work. For more details, see Database and Project Permissions.
There are a few important actions possible at the database level - in particular, uploading and deleting documents and administering (creating/modifying/deleting) projects associated with the database. These are managed via permissions on the database objects. For more details, see Database Administration and Permissions.
At the project level, permissions are managed via User Groups, which comprise a set of permissions and a list of members granted those permissions. Users can be members of one or more groups, and are granted the union of all the permissions of those groups. For more details, see User Groups and Project Permissions.
Organization admins are by default granted administrative access to the databases owned by that organization (as well as all associated projects). It is possible to disable this org admin access for specific databases as necessary to limit org admin access; in that case, org admins will be able to fetch basic summary information about the database/projects (e.g. its name, total billable size, etc) but not access documents or other similar data. This distinction is reflected in the separation of "Database/Project Org Admin" endpoints from others at the database and project levels. For more details, see Organization Admin: Organization and Project Administration.
Matters on Everlaw are billed based on the amount of data hosted each month. There are several endpoints available to fetch billing information for a particular month by database or project or across an entire organization. This billing information includes sizes of the hosted data by data type (native, pre-processed, produced) and storage type (standard, ECA) as well as project/database status information relevant for billing - e.g. when a project was suspended or deleted.
Monthly billing information will include both final sizes and peak sizes. Final sizes reflect the size at the end of the month (or the current date, if the month has not yet ended), whereas peak sizes reflect the maximum size observed over the given month (which is the basis for computing your actual bill). Each size point includes sizes for Standard and ECA (Early Case Assessment) data, which are further broken down by data type.
Monthly billing information also includes status information that reflects the state of the project/database over the course of the month. This includes the effective state of the project for the sake of billing (i.e. do we consider the project to have been active/suspended/deleted for the month), the final/end-of-month state for the project, and timestamps for important state changes (e.g. suspension, deletion).
When requesting billing information for a database, our response will include separate billable size and state information for each project in that database, as well as a combined overall billable size and state for the database. The combined database size typically reflects the size of the largest project in that database, and the status is the merger of the status of all the projects (e.g. if any project is active, the database as a whole is considered active; if all projects are suspended, the database is considered suspended, etc).
List databases you have access to, either via explicit admin permission or as an org admin for its owning organization.
None.
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "context": "EVERLAW",
- "databaseFields": [
- {
- "name": "string",
- "type": "TEXT",
- "value": "string"
}
], - "id": 0,
- "name": "string",
- "orgAdminAccess": true,
}
],
}
Get user information for the account associated with the API key provided with the request.
None.
{- "data": {
- "firstName": "Jane",
- "id": 1,
- "lastName": "Doe",
- "organizations": [
- {
- "id": 0,
- "name": "Law Firm X",
- "orgAdmin": true
}
], - "primaryOrganization": 1,
- "title": "Attorney",
- "username": "jdoe",
- "email": "user@example.com",
- "userIdentifiers": [
- {
- "abbreviation": "I1",
- "label": "Identifier1"
}
], - "lastActivity": "2019-08-24T14:15:22Z",
- "lastLoggedOut": "2019-08-24T14:15:22Z",
- "mfaRequired": true
}
}
List all organizations that you have access to. This will always include all organizations the calling user is a member of.
None.
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "id": 1,
- "name": "Law Firm X",
- "saml": {
- "entityId": "string",
- "mfaBypass": true,
- "state": "DISABLED",
- "updated": "2019-08-24T14:15:22Z"
},
}
],
}
List all projects you have access to
None.
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "created": "2020-09-03T02:00:37Z",
- "database": {
- "context": "EVERLAW",
- "id": 1,
- "name": "Example Case",
- "orgAdminAccess": true,
}, - "displayName": "Example Case",
- "eca": false,
- "id": 2,
- "mfaRequired": false,
- "name": "(default)",
- "partial": false,
- "productionMode": false,
- "suspended": false,
}
],
}
Syncs the people in a legal hold directory by uploading a csv file. Usage goes as curl -H "Authorization: Bearer everlaw-api.yoursecretkeyhere" -F "file=@path/to/custodian/file.csv" api.sandbox.everlaw.com/v1/directories/directory-id-number/custodians.
This sync will overwrite all values of existing people with an email in the provided csv file. If a property is not present for a person, that property will be empty after the update. People with a user principal name but no email will be ignored, and all ignored people will be reported in the response to the request.
Column names are changed to lowercase and matched against a list of properties. We currently support: "email" "business phone" "company name" "user principal name" "employee start date" "employee end date" "manager name" "manager email" "mobile phone" "role" "employee type" "department" "fax number" "office location" "other emails" "preferred language" "notes" "name" "first name" "middle name" "last name".
Ignored fields that will be supported at a later date: "employee id" "identities" "my site" "preferred data location"
The only supported date format is yyyy-MM-dd.
There are two ways of providing names to a person: by specifying the "name" property or by any of the name sub properties i.e. first/middle/last name. If any of the name sub properties are present for a given person, they will be concatenated and that will provide the name for that person. If the name property is present and none of the name sub properties are present, it will fall back and use that to provide the name.
If a person has neither an "email" property entry nor a "user principal name" property entry, this will result in an error.
Extra white space around value will be trimmed. Cells only containing white space will be assigned to null. We support a maximum CSV size of 190MB.
You must have organization admin or legal hold organization admin access on the owning organization of the requested directory.
directoryId required | integer The legal hold directory id |
file | string <binary> |
{- "data": {
- "custodians": [
- "string"
]
}
}
Fetch a single organization by id.
You must be a member of the requested organization.
orgId required | integer The organization id |
{- "data": {
- "id": 1,
- "name": "Law Firm X",
- "saml": {
- "entityId": "string",
- "mfaBypass": true,
- "state": "DISABLED",
- "updated": "2019-08-24T14:15:22Z"
},
}
}
Fetch monthly billing information for the given organization. By default, fetches data for the current year/month. The result will include database and project billing information for databases owned by the organization. Each month of billing data includes peak and final (end-of-month/current) sizes as well as information about the database/project status in the given month.
Peak sizes reflect the maximum data sizes for the requested month and are used to determine the actual billable size for that month. Final sizes reflect the current size of the collection if requesting the current month, or the size at the end of the requested month otherwise.
Billable status reflects how the database/project is considered for the sake of billing in the requested month. The final status reflects the current (or end-of-month) status, which may be different. For example, if a project was suspended in the middle of a month, it will be billed as active for that month although its final status will be "Suspended".
The status information also includes timestamps for recent status changes (as of the end of the requested month) when applicable, including suspension, deletion request and deletion.
You must be an org admin for the requested organization.
orgId required | integer The organization id |
year | integer The four-digit year (e.g. 2021), defaulting to the current year |
month | integer [ 1 .. 12 ] The month of the year (1 = Jan, ... 12 = Dec), defaulting to the current month |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "created": "2019-08-24T14:15:22Z",
- "id": 0,
- "monthBilling": {
- "finalSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}, - "peakSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}
}, - "monthStatus": {
- "billingState": "ACTIVE",
- "deleted": "2019-08-24T14:15:22Z",
- "deletionRequested": "2019-08-24T14:15:22Z",
- "finalState": "ACTIVE",
- "suspended": "2019-08-24T14:15:22Z"
}, - "name": "string",
- "projects": [
- {
- "created": "2019-08-24T14:15:22Z",
- "displayName": "string",
- "eca": true,
- "id": 0,
- "monthBilling": {
- "finalSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}, - "peakSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}
}, - "monthStatus": {
- "billingState": "ACTIVE",
- "deleted": "2019-08-24T14:15:22Z",
- "deletionRequested": "2019-08-24T14:15:22Z",
- "finalState": "ACTIVE",
- "suspended": "2019-08-24T14:15:22Z"
}, - "name": "string",
- "partial": true
}
]
}
],
}
Get all databases owned by a specific organization.
You must be an org admin for the requested organization.
orgId required | integer The organization id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "context": "EVERLAW",
- "databaseFields": [
- {
- "name": "string",
- "type": "TEXT",
- "value": "string"
}
], - "id": 0,
- "name": "string",
- "orgAdminAccess": true,
}
],
}
Get all projects owned by a specific organization
You must be an org admin for the requested organization.
orgId required | integer The organization id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "created": "2020-09-03T02:00:37Z",
- "database": {
- "context": "EVERLAW",
- "id": 1,
- "name": "Example Case",
- "orgAdminAccess": true,
}, - "displayName": "Example Case",
- "eca": false,
- "id": 2,
- "mfaRequired": false,
- "name": "(default)",
- "partial": false,
- "productionMode": false,
- "suspended": false,
}
],
}
List all members of a specific organization. To access users on a project, but not within your organization, use GetProjectUsers endpoint
You must be an org admin for the requested organization.
orgId required | integer The organization id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "firstName": "Jane",
- "id": 1,
- "lastName": "Doe",
- "organizations": [
- {
- "id": 0,
- "name": "Law Firm X",
- "orgAdmin": true
}
], - "primaryOrganization": 1,
- "title": "Attorney",
- "username": "jdoe",
- "email": "user@example.com",
- "userIdentifiers": [
- {
- "abbreviation": "I1",
- "label": "Identifier1"
}
], - "lastActivity": "2019-08-24T14:15:22Z"
}
],
}
List all users with database-level permissions on a the requested database (note that these permissions are separate from project-level access).
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "permissions": [
- "DB_ADMIN"
], - "user": {
- "firstName": "Jane",
- "id": 1,
- "lastName": "Doe",
- "organizations": [
- {
- "id": 0,
- "name": "Law Firm X",
- "orgAdmin": true
}
], - "primaryOrganization": 1,
- "title": "Attorney",
- "username": "jdoe"
}
}
],
}
Get a specific database by id
You must have admin permission on the requested database or be an org admin for its owning organization.
databaseId required | integer The database id |
{- "data": {
- "context": "EVERLAW",
- "databaseFields": [
- {
- "name": "string",
- "type": "TEXT",
- "value": "string"
}
], - "id": 0,
- "name": "string",
- "orgAdminAccess": true,
}
}
Fetch monthly billing information for the given database. By default, fetches data for the current month. Each month of billing data includes peak and final (end-of-month/current) sizes for the database and all of its projects as well as information about the database's status in the given month.
Peak sizes reflect the maximum data sizes for the requested month and are used to determine the actual billable size for that month. Final sizes reflect the current size of the collection if requesting the current month, or the size at the end of the requested month otherwise.
Billable status reflects how the database is considered for the sake of billing in the requested month. The final status reflects the current (or end-of-month) status, which may be different. For example, if a project was suspended in the middle of a month, it will be billed as active for that month although its final status will be "Suspended".
The status information also includes timestamps for recent status changes (as of the end of the requested month) when applicable, including its suspension, deletion request and deletion.
You must have admin access on the requested database or be an org admin for its owning organization.
databaseId required | integer The database id |
year | integer The four-digit year (e.g. 2021), defaulting to the current year |
month | integer [ 1 .. 12 ] The month of the year (1 = Jan, ... 12 = Dec), defaulting to the current month |
{- "data": {
- "created": "2019-08-24T14:15:22Z",
- "id": 0,
- "monthBilling": {
- "finalSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}, - "peakSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}
}, - "monthStatus": {
- "billingState": "ACTIVE",
- "deleted": "2019-08-24T14:15:22Z",
- "deletionRequested": "2019-08-24T14:15:22Z",
- "finalState": "ACTIVE",
- "suspended": "2019-08-24T14:15:22Z"
}, - "name": "string",
- "projects": [
- {
- "created": "2019-08-24T14:15:22Z",
- "displayName": "string",
- "eca": true,
- "id": 0,
- "monthBilling": {
- "finalSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}, - "peakSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}
}, - "monthStatus": {
- "billingState": "ACTIVE",
- "deleted": "2019-08-24T14:15:22Z",
- "deletionRequested": "2019-08-24T14:15:22Z",
- "finalState": "ACTIVE",
- "suspended": "2019-08-24T14:15:22Z"
}, - "name": "string",
- "partial": true
}
]
}
}
List projects for a specific database identified by id
You must have admin permission on the requested database or be an org admin for its owning organization.
databaseId required | integer The database id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "created": "2020-09-03T02:00:37Z",
- "database": {
- "context": "EVERLAW",
- "id": 1,
- "name": "Example Case",
- "orgAdminAccess": true,
}, - "displayName": "Example Case",
- "eca": false,
- "id": 2,
- "mfaRequired": false,
- "name": "(default)",
- "partial": false,
- "productionMode": false,
- "suspended": false,
- "emailThreadingStatus": "IN_PROGRESS",
- "lastLogin": "2019-08-24T14:15:22Z"
}
],
}
Get database size information. This includes document counts and file sizes by document source (natively uploaded documents, processed documents and documents produced on Everlaw). Each document in the database will be counted once, regardless of the number of complete or partial projects in this database.
You must have admin access on the requested database or be an org admin for its owning organization.
databaseId required | integer The database id |
{- "data": {
- "nativeDocs": {
- "docCount": 1001,
- "imageSize": 7277320,
- "nativeSize": 1020034,
- "textSize": 123999
}, - "processedDocs": {
- "docCount": 12345,
- "imageSize": 1230020,
- "nativeSize": 926370,
- "textSize": 293910
}, - "producedDocs": {
- "docCount": 50,
- "imageSize": 7452,
- "nativeSize": 3950,
- "textSize": 1005
}
}
}
Native uploading refers to the ingestion of native-only, unprocessed (and un-numbered/Bates stamped) data into the Everlaw system. During ingestion, the Everlaw processing system will extract child documents (individual emails from an Outlook PST, compressed files from a ZIP, filesystem data from a forensic disc image, etc.), generate PDFs, and extract text and metadata. As documents are extracted and processed they will become available for review on the Everlaw platform.
Native uploads are organized into objects called Datasets, which provide a means for grouping related source files (e.g. all data in a particular collection or from a specific custodian) as well as defining a shared processing configuration. Each dataset then contains one or more source files uploaded by the user that contain the native data they would like to load into Everlaw. As each source file is uploaded, it will automatically be processed by Everlaw and the extracted documents (and their PDFs, text and metadata) will be available for search and review on the platform.
When you create a Dataset, you can also define the processing configuration you would like to use while processing documents uploaded to it. These configuration options are described below, as well as on our platform processing documentation.
This setting configures how to handle exact duplicate documents encountered during native processing. Exact duplicates are determined based on a SHA1 hash of the native file (with custom hashing for certain filetypes, including emails - see our platform documentation for more details). There are three supported options:
When a document is deduplicated, its path and custodian will be added to the All Paths and All Custodians fields on the existing documents.
You can also configure whether or not to "deNIST" the dataset - remove documents whose hashes appear in the NIST NSRL reference hash lists of known software files.
This setting determines which document types we will attempt to create PDFs for during processing. There are three supported options:
This setting determines how and when images are inlined into email bodies (versus extracted as attachments) during processing. This helps prevent the proliferation of attached footer/signature images and icons being extracted as child documents. There are three supported options:
This setting allows you to specify the particular language to detect when doing optical character recognition (OCR). By default, this is set to 'auto', which can detect and extract all Latin-alphabet languages (e.g. English, French, German) as well as Chinese, Japanese and Korean (CJK languages), with the caveat that autodetection will only detect and extract one language (in addition to English) per page.
You can alternatively provide an ISO/DIS 639-3 language code of a specific supported language you would like to detect (e.g. 'rus' for Russian) - in this mode, OCR will only detect that one language and English.
For more details about configuring an OCR language, see our platform processing documentation.
This setting controls the default page size used when generating PDFs. There are two supported options:
This setting controls whether PowerPoint speaker notes are included when generating PDF and text files. There are three supported options:
This configuration setting is used to specify the timezone from which the documents were originally collected. This timezone will be assumed for any extracted dates (e.g. metadata) that do not specify an explicit timezone. Email date headers will also be displayed in this timezone when generating PDFs. The value should be a timezone name from the tz (IANA time zone) database, e.g. "America/Los_Angeles", "Europe/London".
This configuration allows you to specify which partial projects this upload should be included in. Documents uploaded to a database will always be included in all complete projects in that database. By default, they are not included in any partial projects.
When creating a dataset, you can specify a default custodian to apply to every file that gets uploaded within it. Later, when uploading a source file to a dataset, you can specify a custodian to apply to that specific file and all its children which will take precedence over the default dataset custodian. You can also specify a mapping from child path (within that source file) to custodian for fine-grained control - for example, if you're uploading a ZIP file with the following directories:
Jane Doe - Emails/
Jane Doe - Hard Drive/
Mike Smith - Emails/
You can specify a child custodians map of
{
"Jane Doe - Emails/": "Jane Doe",
"Jane Doe - Hard Drive/": "Jane Doe",
"Mike Smith - Emails/": "Mike Smith"
}
The end result will be the following:
Jane Doe - Emails/
- Custodian "Jane Doe"Jane Doe - Hard Drive/
- Custodian "Jane Doe"Mike Smith - Emails/
- Custodian "Mike Smith"Passwords can be supplied when uploading a new source file. These passwords will be used when attempting to open any encrypted file found in the entire dataset (including child documents and other source files).
There are currently two options for uploading new source files to Everlaw - multipart uploading and providing a direct link (URL). The first, multipart uploading, is applicable when you have the file locally (e.g. on a filesystem attached to the computer you're connecting to the Everlaw API). The second, providing a direct link, is applicable when the file you wish to upload is hosted on a publicly accessible server or cloud storage service (e.g. Amazon S3, Google Cloud Storage) to which Everlaw can connect directly.
When sending local files to Everlaw using multipart uploading, each file is transferred in one or more separate parts that are uploaded independently. This allows for parallel, error-resilient and resumable uploading of very large files (up to 5TB). Each part is a contiguous section of the binary content of the file, and can be uploaded in any order. After initiating a source file upload and determining an appropriate part size, you can then upload each part of the file separately - for each part, you request a pre-authenticated URL from Everlaw to which to send the part's content (as a PUT request). After a part is successfully uploaded, the response will include a short string identifier called an ETag; after all parts are finished, you send the collection of ETags to Everlaw to assemble the parts together into the complete file and start processing.
For example, if you're trying to upload a 50GB file, you might select a 50MB part size, so that you have 1,000 parts: part number 1 contains byte range 0-50MB, part number 2 has 50MB-100MB, etc, ... For each part (and in parallel/any order), you request a pre-authenticated URL via the Everlaw API to which you PUT that particular byte range. If any of those individual part uploads fails (e.g. due to network issues), you can request a new URL for that same part and re-try that particular upload without affecting the other parts. Additionally, if the entire upload needs to be resumed, you can list all the parts that have been successfully created (as well as their ETags) via the Everlaw API, determine which have not yet been received, and re-upload only those parts without losing the progress you've already made. Finally, after collecting the 1,000 ETags from each of those uploads, you send those in part order in a final request via the Everlaw API which triggers the assembly of those parts into your original 50GB file and begins processing.
There is a maximum of 10,000 parts per upload and each part must be 5MB to 5GB with the exception of the final part which has no minimum size. For example, if your file is 50.1MB bytes long, possible options include uploading a single 50.1MB part or uploading 5 parts of 10MB plus a final part of 0.1MB. For smaller files (< 5GB) it is reasonable to upload the entire file as a single part, but the 5GB part size limit means that any larger files must be split into multiple parts. A reasonable part size algorithm is:
def determine_part_size(total_file_size):
# Maximum of (50MB, 1/10000 of the total file size rounding up)
return max(50000000, 1 + total_file_size / 10000)
For more details about multipart uploads, see the endpoint-specific documentation below.
If the file you are uploading is hosted on a publicly accessible server or cloud storage service, you can
provide a direct link (URL) to which Everlaw can connect directly to download the file. These links must not
require any additional authentication (API keys, username/password credentials, etc.) other than what is
included in the link itself. The server host must also support Range requests via the Range
header. Examples of suitable links include pre-signed Amazon S3 URLs and Google Cloud Storage URLs.
Direct links can be provided when creating a new source file. If a link is provided, Everlaw will immediately begin downloading the file and will begin processing when that download finishes; no additional client action is necessary.
To demonstrate the overall upload process, let's assume we have a 65GB password-protected ZIP we wish to upload. First, we need to determine what dataset we'd like to use - we may already have an existing dataset with our desired processing configuration that we want to add this file to, or we may want to create a new dataset. Let's create a new dataset called "Upload Walkthrough" in our database (id 555) with our desired configuration using the PostDatabaseDataset operation:
POST /v1/databases/555/datasets
{
"name": "Upload Walkthrough",
"description": "A demo dataset for walking through the upload process",
"deduplication": "NONE",
"timezone": "America/Los_Angeles"
}
Response:
{
"data": {
"id": 1201,
"name": "Upload Walkthrough",
...
}
}
With our target dataset (id 1201), we can create a new source file using the
PostDatasetFile operation.
We have the file on our local filesystem (not publicly accessible), so we can't provide a directLink
;
we also want to include password and custodian information. Assuming the ZIP has a few different subdirectories
for different custodians, we can set those using the childCustodians
parameter:
POST /v1/databases/555/datasets/1201/sourceFiles
{
"filename": "my_encrypted_collection.zip",
"passwords": ["my_zip_password"],
"childCustodians": {
"Custodian_A_Collection/": "Custodian A",
"Custodian_B_Collection/": "Custodian B"
}
}
Response:
{
"data": {
"id": 988,
"state": "UPLOADING",
...
}
}
The source file (id 988) is now in state "UPLOADING" and we can start uploading the individual parts - let's choose a part size of 100MB, giving us 650 parts. We then upload each of those parts - let's walk through part number 25. First, we request a pre-authenticated URL for that part using the PostSourceFilePart operation:
POST /v1/databases/555/sourceFiles/988/parts/25
Response:
{
"data": {
"partNumber": 25,
"url": "https://everlaw-demo.s3.amazonaws.com/..",
...
}
}
Next, we PUT the specific byte range for this part to the generated URL and save the resulting ETag:
PUT https://everlaw-demo.s3.amazonaws.com/...
(bytes 24,000,000,001 - 25,000,000,000, 1-indexed, inclusive)
Response:
HTTP/1.1 200
ETag: "4bb64c06b1a72539e6d3476891daf17b"
...
We then save this ETag header for part 25; once we have all 650 ETags, we can complete the upload (optionally including a SHA1 hash of the entire file contents) using the PostSourceFile operation:
POST /v1/databases/555/sourceFiles/988
{
"eTags": [..., "4bb64c06b1a72539e6d3476891daf17b", ...]
"sha1Hash": "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
}
Response:
{
"data": {
"id": 988,
"state": "PROCESSING",
...
}
}
The source file upload is now complete and the ZIP is processing - the contents will soon be available for review on the platform as Everlaw documents!
Everlaw currently imposes a limit of 1000 datasets created via API per database. Datasets created manually (on the platform) do not count towards this limit.
Additionally, there is currently a limit of 1000 source files uploaded via API per dataset (again, source files manually uploaded on the platform do not count towards this limit). We encourage clients with many files to upload to package/compress them (e.g. into ZIP archives) to remain under this limit - for example, you can package any number of files into a single archive and thereby upload them as a single source file.
List all native datasets in the given database.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "billableSize": 0,
- "created": "2019-08-24T14:15:22Z",
- "databaseId": 0,
- "deNISTing": true,
- "deduplication": "NONE",
- "description": "string",
- "fetchHyperlinkedImages": true,
- "id": 0,
- "imageInlining": "ALL",
- "name": "string",
- "numDocs": 0,
- "ocrLanguage": "string",
- "pageSize": "Letter",
- "pdfs": "DEFAULT",
- "sourceSize": 0,
- "speakerNotes": "INCLUDE",
- "timezone": "string",
- "projects": [
- 0
]
}
],
}
Create a new native dataset in the given database with the provided configuration.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
deNISTing | boolean Default: true |
deduplication | string Default: "ALL" Enum: "NONE" "ALL" "WITHIN_CUSTODIAN" |
description | string |
fetchHyperlinkedImages | boolean Default: true |
imageInlining | string Default: "SMART" Enum: "ALL" "SMART" "STRICT" |
name required | string |
ocrLanguage | |
pageSize | string Default: "Letter" Enum: "Letter" "A4" The preferred page size to use when generating PDFs |
pdfs | string Default: "DEFAULT" Enum: "DEFAULT" "ALL" "NONE" |
projects | Array of integers A list of partial project ids that this upload should be included in |
speakerNotes | string Default: "INCLUDE" Enum: "INCLUDE" "INCLUDE_STREAMLINED" "EXCLUDE" |
timezone |
{- "deNISTing": true,
- "deduplication": "NONE",
- "description": "string",
- "fetchHyperlinkedImages": true,
- "imageInlining": "ALL",
- "name": "string",
- "ocrLanguage": "auto",
- "pageSize": "Letter",
- "pdfs": "DEFAULT",
- "projects": [
- 0
], - "speakerNotes": "INCLUDE",
- "timezone": "UTC"
}
{- "data": {
- "billableSize": 0,
- "created": "2019-08-24T14:15:22Z",
- "databaseId": 0,
- "deNISTing": true,
- "deduplication": "NONE",
- "description": "string",
- "fetchHyperlinkedImages": true,
- "id": 0,
- "imageInlining": "ALL",
- "name": "string",
- "numDocs": 0,
- "ocrLanguage": "string",
- "pageSize": "Letter",
- "pdfs": "DEFAULT",
- "sourceSize": 0,
- "speakerNotes": "INCLUDE",
- "timezone": "string",
- "projects": [
- 0
]
}
}
Get a single dataset in a database.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
datasetId required | integer The dataset id |
{- "data": {
- "billableSize": 0,
- "created": "2019-08-24T14:15:22Z",
- "databaseId": 0,
- "deNISTing": true,
- "deduplication": "NONE",
- "description": "string",
- "fetchHyperlinkedImages": true,
- "id": 0,
- "imageInlining": "ALL",
- "name": "string",
- "numDocs": 0,
- "ocrLanguage": "string",
- "pageSize": "Letter",
- "pdfs": "DEFAULT",
- "sourceSize": 0,
- "speakerNotes": "INCLUDE",
- "timezone": "string",
- "projects": [
- 0
]
}
}
List source files uploaded to a given dataset.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
datasetId required | integer The dataset id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
prefix | string An optional prefix used to filter by filename (only files matching the given prefix will be included) |
{- "data": [
- {
- "datasetId": 0,
- "filename": "string",
- "id": 0,
- "size": 0,
- "state": "UPLOADING",
- "uploadSource": "LOCAL"
}
],
}
Upload a new source file to the selected dataset. You must provide a non-empty filename which must be unique among
all source files in the target dataset.
If you provide a directLink
, it must be a publicly-accessible URL supporting Range requests at which the Everlaw
server can fetch the target source file contents. When providing this URL, Everlaw will immediately begin downloading
the source file and then begin processing - no additional user action is required.
If this link is not provided, the new source file will be in state UPLOADING
and you must complete a multipart upload
of the file contents.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
datasetId required | integer The dataset id |
object A map from sub-path to custodian for child documents | |
custodian | string The default custodian to apply to this file and any children |
directLink | string If provided, a pre-authenticated URL at which Everlaw can download this file |
filename required | string The filename of the new source file |
passwords | Array of strings An array of passwords to use when attempting to open/decrypt this file (and any other files contained within) |
{- "childCustodians": {
- "Child Path1": "string",
- "Child Path2": "string"
}, - "custodian": "string",
- "directLink": "string",
- "filename": "string",
- "passwords": [
- "string"
]
}
{- "data": {
- "datasetId": 0,
- "filename": "string",
- "id": 0,
- "size": 0,
- "state": "UPLOADING",
- "uploadSource": "LOCAL"
}
}
Get a single source file in a database.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
sourceId required | integer The source file id |
{- "data": {
- "datasetId": 0,
- "filename": "string",
- "id": 0,
- "size": 0,
- "state": "UPLOADING",
- "uploadSource": "LOCAL"
}
}
Complete the upload of a single source file in a database (after uploading all parts). You must provide the ETags of all individual part uploads in their correct order (by part number).. You can also optionally provide the hex-encoded SHA1 hash of the full source file - if not included, Everlaw will generate this prior to processing which may cause a short delay.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
sourceId required | integer The source file id |
eTags required | Array of strings The ETags generated during part uploads |
sha1Hash | string The hex-encoded SHA1 hash of the full source file |
{- "eTags": [
- "string"
], - "sha1Hash": "string"
}
{- "data": {
- "datasetId": 0,
- "filename": "string",
- "id": 0,
- "size": 0,
- "state": "UPLOADING",
- "uploadSource": "LOCAL"
}
}
List completed parts and ETags for the given source file, useful for resuming interrupted multipart uploads. This listing does not include parts that have not completed uploading or are still in progress.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
sourceId required | integer The source file id |
{- "data": [
- {
- "eTag": "string",
- "partNumber": 0,
- "size": 0
}
]
}
Initiate an upload for a single part of a source file. Each upload can have a maximum of 10,000 parts, and each part can be 5MB to 5GB in size aside from the last part which has no minimum size. This endpoint returns a URL; you should then PUT the appropriate byte range of the file to that URL. The response from that PUT request will include an ETag header which you must save; after all parts are finished you then send that list of ETags to the PostSourceFile endpoint to complete the upload. These URLs expire approximately one hour after generation.
Note: these URLs connect to Amazon Web Service's (AWS) storage API, which returns XML content, not JSON. Common issues/error codes include:
For more information on the AWS S3 storage API, see the Multipart Upload overview and the UploadPart documentation.
You must have admin access on the requested database, or, if the database allows org admin access, be an org admin for its owning organization.
databaseId required | integer The database id |
sourceId required | integer The source file id |
partNum required | integer [ 1 .. 10000 ] The part number |
{- "data": {
- "partNumber": 0,
- "url": "string"
}
}
List all assignment groups and assignments on the given project.
This is a list of assignment groups where each contains a property assignments
that lists the assignments under that group.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "assignments": [
- {
- "assigneeId": 3141,
- "batchId": 11,
- "created": "2021-08-16T23:27:13Z",
- "id": 20
}
], - "created": "2021-08-16T22:57:13Z",
- "id": 27,
- "name": "un-coded docs"
}
],
}
List all Bates number prefixes on the given project.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
{- "data": [
- "ABC"
]
}
List all binders on the given project, including their names, IDs, and owning users.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "id": 0,
- "name": "string",
- "ownerId": 0
}
],
}
List all categories and codes on the given project.
This is a list of categories where each contains a property codes
that lists the codes under that category.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
{- "data": [
- {
- "codes": [
- {
- "id": 28,
- "name": "Confidential"
}, - {
- "id": 29,
- "name": "Highly Confidential"
}, - {
- "id": 30,
- "name": "Not Confidential"
}
], - "id": 27,
- "name": "Confidentiality"
}
]
}
List all native datasets in the given project.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "billableSize": 0,
- "created": "2019-08-24T14:15:22Z",
- "databaseId": 0,
- "deNISTing": true,
- "deduplication": "NONE",
- "description": "string",
- "fetchHyperlinkedImages": true,
- "id": 0,
- "imageInlining": "ALL",
- "name": "string",
- "numDocs": 0,
- "ocrLanguage": "string",
- "pageSize": "Letter",
- "pdfs": "DEFAULT",
- "sourceSize": 0,
- "speakerNotes": "INCLUDE",
- "timezone": "string"
}
],
}
List all searchable freeform codes on the given project. The list includes the name, id, and format of each freeform code.
The different formats are:
"TEXT"
- simple text-valued codes, searchable as exact values or non-exact parsed values. "DATE_TIME"
- date and time codes."NUMBER"
- number codes.More information about freeform codes can be found in Freeform codes.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
{- "data": [
- {
- "format": "TEXT",
- "id": 27,
- "name": "Meeting location"
}
]
}
List user groups for a given project
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "id": 1,
- "name": "Administrators",
- "permissions": [
- "READ",
- "ADMIN"
],
}
],
}
Get a specific user group for a given project
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
groupId required | integer |
{- "data": {
- "id": 1,
- "name": "Administrators",
- "permissions": [
- "READ",
- "ADMIN"
],
}
}
List users in a given user group in a project.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
groupId required | integer |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "groups": [
- {
- "id": 1,
- "name": "Administrators",
- "permissions": [
- "READ",
- "ADMIN"
],
}
], - "lastActivity": "2019-08-24T14:15:22Z",
- "permissions": [
- "READ"
], - "user": {
- "firstName": "Jane",
- "id": 1,
- "lastName": "Doe",
- "organizations": [
- {
- "id": 0,
- "name": "Law Firm X",
- "orgAdmin": true
}
], - "primaryOrganization": 1,
- "title": "Attorney",
- "username": "jdoe"
}, - "userIdentifiers": [
- {
- "abbreviation": "I1",
- "label": "Identifier1"
}
]
}
],
}
List all searchable metadata fields on the given project. The list is sorted by field name, and includes the name, the internal ID, and the format.
The different field formats are:
"TEXT"
- simple text-valued fields, searchable as exact values or non-exact parsed values. "ADDRESS_LIST"
- multi-valued email recipients metadata fields,
each value parsed into Contact Name, email address and domain."ADDRESS_FROM"
- single-valued email senders (From
) fields. "DATE_TIME"
- date and time fields."BATES"
- Bates numbers fields."SHA1"
- SHA1 hash value fields."MD5"
- MD5 hash value fields."NUMBER"
- number fields.More information about metadata formats can be found in Searching Metadata.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
{- "data": [
- {
- "format": "TEXT",
- "id": 27,
- "name": "Custodian"
}
]
}
List all processed uploads on the given project.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "created": "2021-08-16T22:57:13Z",
- "id": 22,
- "name": "upload-123"
}
],
}
List all productions on the given project.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "created": "2021-08-16T22:57:13Z",
- "id": 27,
- "name": "Opposing production set 1"
}
],
}
List all search term reports on the given project.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "id": 27,
- "lastUpdated": "2021-08-16T22:57:13Z",
- "name": "energy price terms",
- "numSearches": 10,
- "userId": 22
}
],
}
Get users with explicit permissions on a given project (this does not include org admins or other users with implicit access).
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
after | integer The id of the element after which to start this page |
limit | integer [ 1 .. 200 ] Default: 100 Max records to return |
{- "data": [
- {
- "groups": [
- {
- "id": 1,
- "name": "Administrators",
- "permissions": [
- "READ",
- "ADMIN"
],
}
], - "lastActivity": "2019-08-24T14:15:22Z",
- "permissions": [
- "READ"
], - "user": {
- "firstName": "Jane",
- "id": 1,
- "lastName": "Doe",
- "organizations": [
- {
- "id": 0,
- "name": "Law Firm X",
- "orgAdmin": true
}
], - "primaryOrganization": 1,
- "title": "Attorney",
- "username": "jdoe"
}, - "userIdentifiers": [
- {
- "abbreviation": "I1",
- "label": "Identifier1"
}
]
}
],
}
Get info on a specific user on a particular project
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
userId required | integer |
{- "data": {
- "groups": [
- {
- "id": 1,
- "name": "Administrators",
- "permissions": [
- "READ",
- "ADMIN"
],
}
], - "lastActivity": "2019-08-24T14:15:22Z",
- "permissions": [
- "READ"
], - "user": {
- "firstName": "Jane",
- "id": 1,
- "lastName": "Doe",
- "organizations": [
- {
- "id": 0,
- "name": "Law Firm X",
- "orgAdmin": true
}
], - "primaryOrganization": 1,
- "title": "Attorney",
- "username": "jdoe"
}, - "userIdentifiers": [
- {
- "abbreviation": "I1",
- "label": "Identifier1"
}
]
}
}
Get a specific project by id.
You must have read access on the requested project or be an org admin for its owning organization.
projectId required | integer The project id |
{- "data": {
- "created": "2020-09-03T02:00:37Z",
- "database": {
- "context": "EVERLAW",
- "id": 1,
- "name": "Example Case",
- "orgAdminAccess": true,
}, - "displayName": "Example Case",
- "eca": false,
- "id": 2,
- "mfaRequired": false,
- "name": "(default)",
- "partial": false,
- "productionMode": false,
- "suspended": false,
- "emailThreadingStatus": "IN_PROGRESS",
- "lastLogin": "2019-08-24T14:15:22Z"
}
}
Fetch monthly billing information for the given project. By default, fetches data for the current month. Each month of billing data includes peak and final (end-of-month/current) sizes as well as information about the project's status in the given month.
Peak sizes reflect the maximum data sizes for the requested month and are used to determine the actual billable size for that month. Final sizes reflect the current size of the collection if requesting the current month, or the size at the end of the requested month otherwise.
Billable status reflects how the project is considered for the sake of billing in the requested month. The final status reflects the current (or end-of-month) status, which may be different. For example, if a project was suspended in the middle of a month, it will be billed as active for that month although its final status will be "Suspended".
The status information also includes timestamps for recent status changes (as of the end of the requested month) when applicable, including its suspension, deletion request and deletion.
You must have admin access on the requested project or be an org admin for its owning organization.
projectId required | integer The project id |
year | integer The four-digit year (e.g. 2021), defaulting to the current year |
month | integer [ 1 .. 12 ] The month of the year (1 = Jan, ... 12 = Dec), defaulting to the current month |
{- "data": {
- "created": "2019-08-24T14:15:22Z",
- "displayName": "string",
- "eca": true,
- "id": 0,
- "monthBilling": {
- "finalSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}, - "peakSize": {
- "eca": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}, - "standard": {
- "billableGb": 0,
- "nativeBytes": 0,
- "processedBytes": 0,
- "producedBytes": 0
}
}
}, - "monthStatus": {
- "billingState": "ACTIVE",
- "deleted": "2019-08-24T14:15:22Z",
- "deletionRequested": "2019-08-24T14:15:22Z",
- "finalState": "ACTIVE",
- "suspended": "2019-08-24T14:15:22Z"
}, - "name": "string",
- "partial": true
}
}
Get project size information for a specific project. This includes current document counts and file size information by document source (natively uploaded documents, processed documents and documents produced on Everlaw).
You must have analytics access on the requested project or be an org admin for its owning organization.
projectId required | integer The project id |
{- "data": {
- "nativeDocs": {
- "docCount": 1001,
- "imageSize": 7277320,
- "nativeSize": 1020034,
- "textSize": 123999
}, - "processedDocs": {
- "docCount": 12345,
- "imageSize": 1230020,
- "nativeSize": 926370,
- "textSize": 293910
}, - "producedDocs": {
- "docCount": 50,
- "imageSize": 7452,
- "nativeSize": 3950,
- "textSize": 1005
}
}
}
Running a search query on the project involves calling the PostProjectSearch
endpoint, providing the term
property (see the different terms below), and a query
property,
specific for the type of term.
This term searches for documents matching the given assignment criteria. See GetProjectAssignmentGroups for obtaining the project assignment groups, assignments and assignees.
Query properties:
userId
(integer, optional) - Searches for all documents assigned to the specific user. The userId
must match
an assigneeId
of any assignment.assignmentGroup
(object, optional)id
(int) - the id of the assignment group. See GetProjectAssignmentGroups for project assignment groups endpoint.criteria
(string, Default: "ALL_IN_GROUP"
, Enum: "ALL_IN_GROUP"
"ASSIGNED"
"UNASSIGNED"
"ASSIGNMENT"
"USER"
) - additional criteria for selection.userId
(integer, only if criteria
is "USER"
) - the user id of the assignee.assignmentId
(integer, only if criteria
is "ASSIGNMENT"
) - the specific assignment id.reviewStatus
(string, Default: "ANY"
, Enum: "ANY"
"REVIEWED"
"NOT_REVIEWED"
) -
whether to select documents that have been reviewed, not reviewed (according to the review criteria of the group), or either.Exactly one of userId
or assignmentGroup
should be provided.
Example query
{
"term": "ASSIGNED",
"query": {
"assignmentGroup": {
"id": 11,
"criteria": "ASSIGNMENT",
"assignmentId": 22,
"reviewStatus": "NOT_REVIEWED"
}
}
}
This term searches for documents with Bates numbers matching the given properties.
Query properties:
prefix
(string, optional) - the prefix of the Bates number of the document.
See GetProjectBatesPrefixes for the available Bates number prefixes for the project.
Omitted or null
means "any prefix".pageSearch
(boolean, optional) - whether to search for Bates numbers of pages in addition to documentsnumRange
(object, optional) - when omitted, searches for all Bates with the given (mandatory) prefix
begin
(string, optional) - the lower bound of the Bates number (inclusive)end
(string, optional) - the upper bound of the Bates number (inclusive)numRange
must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search. To search for a specific value, set both begin
and end
to the desired value.Bates numbers are required here as strings to accommodate Australian Doc IDs, but will be treated as numbers for all intents and purposes. For example, leading zeroes are not required (a search for ABC1 will return ABC001).
Example query
{
"term": "BATES",
"query": {
"prefix": "ABC",
"pageSearch": true,
"numRange": {
"begin": "1000",
"end": "1999"
}
}
}
This term searches for documents with billable size in the given range.
Query properties:
begin
(integer, optional) - lower bound, in bytes (inclusive)end
(integer, optional) - upper bound, in bytes (inclusive)Valid queries must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search. To search for an exact number, set both begin
and end
to the desired number.
Example query
{
"term": "BILLABLE_SIZE",
"query": {
"begin": 1000000
}
}
This term searches for binders matching the given criteria
binderId (integer, optional): The id of the binder to search for. See [GetProjectBinders](#operation/GetProjectBinders) for the available binders for the project. If 'binderId' is omitted or
null`, the search returns all binders on the project. userId
(integer, optional) - See GetProjectUsers for project users endpoint.groupId
(integer, optional) - See GetProjectGroups for project groups endpoint.userId
or groupId
may be provided, but not both. When neither is provided,
the search is for binders regardless of the user or user group that applied it.dateRange
(object, optional)begin
(string, optional) - the lower bound of the date range, in ISO 8601 format.
e.g. 2007-12-03T10:15:30.00Z
end
(string, optional) - the upper bound of the date range, in ISO 8601 format.dateRange
must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search.If dateRange
is null
or omitted the search is for currently applied binders.
Note that in that case the search must not specify a specific userId
or groupId
.
Example query
{
"term": "BINDER",
"query": {
"binderId": 7,
"userId": 12345,
"dateRange": {
"begin": "2022-01-01T00:00:00.00Z",
"end": "2022-02-01T00:00:00.00Z"
}
}
}
This term searches document text. It allows for all of the complex text searching supported by the Contents search term in the UI including, for example, proximity and fuzzy searches. See Advanced Content Searches.
Query properties:
value
(string, optional): the text to search forhasAnyText
(boolean, optional): if true
, docs that have any text at all, if false
, finds docs that have no text
Exactly one of value
or hasAnyText
should be provided.Example search for a value:
{
"term": "CONTENTS",
"query": {
"value": "Cow"
}
}
Example search for documents that have any text:
{
"term": "CONTENTS",
"query": {
"hasAnyText": true
}
}
This term searches for documents coded matching the given criteria.
Query properties:
labelId
(integer, optional): The id of the label (category or code) to search for.
See GetProjectCodes for the available categories and codes for the project.
If labelId
is omitted or null
, the search returns documents with any code on the project. userId
(integer, optional) - See GetProjectUsers for project users endpoint.groupId
(integer, optional) - See GetProjectGroups for project groups endpoint.userId
or groupId
may be provided, but not both. When neither is provided,
the search is for coding regardless of the user or user group that coded it.dateRange
(object, optional)begin
(string, optional) - the lower bound of the date range, in ISO 8601 format.
e.g. 2007-12-03T10:15:30.00Z
end
(string, optional) - the upper bound of the date range, in ISO 8601 format.dateRange
must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search.If dateRange
is null
or omitted the search is for currently coded documents.
Note that in that case the search must not specify a specific userId
or groupId
.
Example query
{
"term": "CODED",
"query": {
"labelId": 7,
"userId": 12345,
"dateRange": {
"begin": "2022-01-01T00:00:00.00Z",
"end": "2022-02-01T00:00:00.00Z"
}
}
}
This term allows to deduplicate among search hits for the given search operand. For details, see Deduplicate among search hits.
Query properties:
operand
(object): The search to be deduplicated. Can be of any supported term.Example:
{
"term": "DEDUPLICATE",
"query": {
"operand": {
"term": "METADATA",
"query": {
"field": "Custodian",
"value": "Jane"
}
}
}
}
This term searches for documents matching the given freeform code criteria.
Query properties:
id
(int): The freeform code id.exact
(boolean, Default: false): TEXT
format allow searching for exact value.
If this property is true
, exact value search is performed. Otherwise, free-form substring search
(including proximity search, regex, etc) is performed.value
: The information you're searching for.
The expected inputs for value
depend on the format of the code you specified.
See Metadata term for information about the TEXT
, DATE_TIME
and NUMBER
formats.null
or omit it.
To search for documents with any value in a specified code, denoted by (Any value) on the Everlaw search page,
instead use the NOT
logical term to negate a search for a null value.See GetProjectFreeformCodes for the available codes and their formats, on a specific project.
Example query
{
"term": "FREEFORM_CODES",
"query": {
"id": 26,
"value": "Everlaw Oakland"
}
}
This term allows to group search hits for the given search operand, and optionally filter out certain context from groups.
With this term, the PostProjectSearch result numGroups
metric indicates the number of groups based on the grouping criteria.
Without this term, numGroups
is always equal to numDocs
.
Query properties:
grouping
(string, Enum: "ATTACHMENTS"
"EMAIL_THREADS"
"EXACT_DUPLICATES"
"VERSIONS"
):removeFromGroup
(string, Enum: "NONE"
"PARENT"
"CHILDREN"
"SEARCH_HITS"
"NON_HITS"
"NON_INCLUSIVE_EMAILS"
, Default: "NONE"
):operand
(object): The search to be grouped. Can be of any supported term.Example:
{
"term": "GROUPING",
"query": {
"grouping": "ATTACHMENTS",
"removeFromGroup": "PARENT",
"operand": {
"term": "METADATA",
"query": {
"field": "Custodian",
"value": "Jane"
}
}
}
}
This term searches for documents for which the given format is available.
Query properties:
format
(string, Enum: "IMAGE"
"NATIVE"
"PDF"
"TEXT"
)Example query
{
"term": "HAS_FORMAT",
"query": {
"format": "NATIVE"
}
}
This term searches for documents matching a logical compound query, combining other terms via OR
, AND
,
or NOT
logical operators.
Query properties:
operator
(string, Enum: "AND"
"OR"
"NOT"
): the logical operator.operands
(array, only if operator
is "AND"
or "OR"
): search terms that must all, or any, match for this query to match,
depending on whether the operator is "AND"
or "OR"
, respectively. Can be any number of any supported terms.operand
(object, only if operator
is "NOT"
): search term that is to be negated. Can be any supported term.Example "AND"
:
{
"term": "LOGICAL",
"query": {
"operator": "AND",
"operands": [
{
"term": "METADATA",
"query": {
"field": "Custodian",
"value": "Jane"
}
},
{
"term": "METADATA",
"query": {
"field": "Subject",
"value": "Hello"
}
}
]
}
}
Example "NOT"
:
{
"term": "LOGICAL",
"query": {
"operator": "NOT",
"operand": {
"term": "METADATA",
"query": {
"field": "Custodian",
"value": "Jane"
}
}
}
}
This term searches for documents matching the given metadata field criteria.
Query properties:
field
(string): The name of a searchable metadata field of the projectexact
(boolean, Default: false): TEXT
, MD5
and SHA1
formats allow searching for exact value.
If this property is true
, exact value search is performed. Otherwise, free-form substring search
(including proximity search, regex, etc) is performed.value
: The information you're searching for.
The expected inputs for value
depend on the format of the field you specified.
Each field format is described in more detail below.null
or omit it.
To search for documents with any value in a specified field, denoted by (Any value) on the Everlaw search page,
instead use the NOT
logical term to negate a search for a null value.See GetProjectMetadataFields for the available fields and their formats, on a specific project. In addition to the fields returned by that endpoint, the following smart aliases are available by name:
"All Text Fields"
(TEXT
format)"Parties"
(ADDRESS_LIST
format)"Recipients"
(ADDRESS_LIST
format)"Primary Date"
(DATE_TIME
format)"Family Date"
(DATE_TIME
format)"All Date Fields"
(DATE_TIME
format)The value
property is a string.
Example query
{
"term": "METADATA",
"query": {
"field": "Custodian",
"value": "Jane"
}
}
Exact query
{
"term": "METADATA",
"query": {
"field": "Custodian",
"exact": true,
"value": "Jane Doe"
}
}
Fields that are address lists, such as To
, CC
and Parties
contains multiple addresses.
Each address can contain a name and/or an email address, intended to represent a single party or individual.
If an email address exists in a field, the domain name is extracted from it as well.
The "value" property is an object, with the following properties:
operator
(string, Default: "ANY"
, Enum: "ANY"
"ALL"
) - whether either of the terms provided should appear in the field,
or all of them must, to generate a hit. exclusive
(boolean, Default false
) - whether nothing else other than the provided terms should appear
in the field,
i.e. the field should exclusively include communication between the given parties without anyone else included.terms
array of objects. Each term object includes the following properties:value
(string) - the value to search for.kind
(string, Enum: "NAME"
"EMAIL"
"DOMAIN"
"TEXT"
)"NAME"
searches for value
as a Contact Name, including its associated email addresses."EMAIL"
searches for value
as an email address."DOMAIN"
searches for value
as a domain of the field's email addresses."TEXT"
free-form text search for value
within the field.Example query
{
"term": "METADATA",
"query": {
"field": "To",
"value": {
"operator": "ALL",
"exclusive": true,
"terms":[
{
"value": "John Doe",
"kind": "NAME"
},
{
"value": "Jane Doe",
"kind": "NAME"
}
]
}
}
}
This is the format of the From
metadata field, representing a sender of a message.
Similar to ADDRESS_LIST but each document can contain only up to one address.
The "value" property is an object, with the following property:
terms
array of objects. When more than one term is given, the search is for any of them to match.
Each term object includes the following properties:value
(string) - the value to search for.kind
(string, Enum: "NAME"
"EMAIL"
"DOMAIN"
"TEXT"
)Example query
{
"term": "METADATA",
"query": {
"field": "From",
"value": {
"terms":[
{
"value": "@everlaw.com",
"kind": "DOMAIN"
},
{
"value": "Everlaw",
"kind": "TEXT"
}
]
}
}
}
The "value" property is an object, with the following properties:
begin
(string, optional) - the lower bound of the date range, in ISO 8601 format.
e.g. 2007-12-03T10:15:30.00Z
end
(string, optional) - the upper bound of the date range, in ISO 8601 format.Valid queries must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search.
Example query
{
"term": "METADATA",
"query": {
"field": "Date Sent",
"value": {
"begin": "2007-12-03T10:15:00.00Z",
"end": "2007-12-03T11:15:00.00Z"
}
}
}
The "value" property is an object, with the following properties:
prefix
(string, optional) - the prefix of the Bates represented by the field. Missing or null means "any prefix"numRange
(object, mandatory)begin
(string, optional) - the lower bound of the Bates number (inclusive)end
(string, optional) - the upper bound of the Bates number (inclusive)numRange
must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search. To search for a specific value, set both begin
and end
to the desired value.Bates numbers are required here as strings to accommodate Australian Doc IDs, but will be treated as numbers for all intents and purposes. For example, leading zeroes are not required (a search for ABC1 will return ABC001).
Example query
{
"term": "METADATA",
"query": {
"field": "Other Bates",
"value": {
"prefix": "ABC",
"numRange": {
"begin": "1000",
"end": "1999"
}
}
}
}
The "value" property is an object, with the following properties:
begin
(integer, optional) - the lower bound of the number (inclusive)end
(integer, optional) - the upper bound of the number (inclusive)Valid queries must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search. To search for an exact number, set both begin
and end
to the desired number.
Example query
{
"term": "METADATA",
"query": {
"field": "Exhibit Number",
"value": {
"begin": 2,
"end": 4
}
}
}
This term searches for documents that were uploaded via a native data upload.
Query properties:
datasetId
(integer, optional): The id of the dataset to search for.
See GetDatabaseDatasets for the available datasets for the database
(not all might be available for the project).
If omitted or null
, the search is for any dataset (any native upload).Example query
{
"term": "NATIVE_UPLOADED",
"query": {
"datasetId": 7
}
}
This term searches for documents with number of pages in the given range.
Query properties:
begin
(integer, optional) - lower bound (inclusive)end
(integer, optional) - upper bound (inclusive)Valid queries must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search. To search for an exact number, set both begin
and end
to the desired number.
Example query
{
"term": "NUM_PAGES",
"query": {
"begin": 100
}
}
This term searches for documents that were uploaded via a processed data upload.
Query properties:
uploadId
(integer, optional): The id of the upload to search for.
If omitted or null
, the search is for any upload (any processed upload).Example query
{
"term": "PROCESSED_UPLOADED",
"query": {
"uploadId": 78
}
}
This term searches for documents with the given processing flag.
Query properties:
flag
(string, Enum: "CONTAINER_DOC"
"EMBEDDED_FILE"
"EMBEDDED_FILE_ERROR"
"EMPTY_TEXT"
"ENCRYPTED"
"FLAGGED_MALICIOUS"
"HAS_OCR"
"HAS_PLACEHOLDER_PDF"
"HAS_TRANSCODED_OUTPUT"
"HAS_TRANSCRIPTION"
"HAS_VALID_TRANSCRIPTION"
"METADATA_ERROR"
"NIST_DUPLICATE"
"OCR_ERROR"
"OPENED_WITH_PASSWORD"
"PARTIAL_SUPPORT"
"UNKNOWN_DOC_TYPE"
)Example query
{
"term": "PROCESSING_FLAG",
"query": {
"flag": "ENCRYPTED"
}
}
This term searches for documents with the given processing state (stage and status.)
Query properties:
stage
(string, Enum: "EXAMINE"
"PDF"
"TEXT"
)status
(string, Enum: "SUCCESS"
"ERROR"
)Example query
{
"term": "PROCESSING_STATE",
"query": {
"stage": "PDF",
"status": "SUCCESS"
}
}
This term searches for documents matching the given production criteria. See GetProjectProductions for obtaining the project productions.
Query properties:
productionId
(integer, optional) - if provided, searches for documents produced by this production
(or the originals, depending on the whichDocs
parameter). Otherwise searches for any produced (or original) documents.whichDocs
(string, Default: "PRODUCED"
, Enum: "PRODUCED"
"ORIGINAL"
) -
whether to search for the produced documents, or the originals they were produced from.flag
(String, optional, Enum: "ENDORSED_BY_CODE"
"ERROR_DOCUMENT"
"HAS_OCR_TEXT"
"NO_SOURCE_IMAGES"
"OCR_ERROR"
"PLACEHOLDER_IMAGE"
"REDACTED_DOCUMENT"
"WITHHELD_DOCUMENT"
) -
if provided, searches for documents with the given production flag.Example query
{
"term": "PRODUCED",
"query": {
"productionId": 11,
"whichDocs": "PRODUCED",
"flag": "REDACTED_DOCUMENT"
}
}
This term searches for documents of other partial projects within the database.
Query properties:
id
(integer) - The project id. Must be within the same database as the project this search is run on,
and must be a partial project.
See GetDatabaseProjects for obtaining the projects of the database.Example query
{
"term": "PROJECT",
"query": {
"id": 72
}
}
This term searches for documents with promotion codes matching the given criteria. This term is only available on ECA projects. For details, see Early Case Assessment Databases.
Query properties:
code
(string, optional, Enum: "CUSTODIAN"
"DATE_RANGE"
"KEYWORD"
"OTHER"
"PRODUCED"
"UNITIZED"
"UPLOADED_DIRECTLY"
) -code
is omitted or null
, the search returns documents with any promotion code on the project. userId
(integer, optional) - See GetProjectUsers for project users endpoint.groupId
(integer, optional) - See GetProjectGroups for project groups endpoint.userId
or groupId
may be provided, but not both. When neither is provided,
the search is for promotion codes regardless of the user or user group that coded it.dateRange
(object, optional)begin
(string, optional) - the lower bound of the date range, in ISO 8601 format.
e.g. 2007-12-03T10:15:30.00Z
end
(string, optional) - the upper bound of the date range, in ISO 8601 format.dateRange
must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search.If dateRange
is null
or omitted the search is for currently coded documents.
Note that in that case the search must not specify a specific userId
or groupId
.
Example query
{
"term": "PROMOTION_CODE",
"query": {
"code": "KEYWORD",
"userId": 12345,
"dateRange": {
"begin": "2022-01-01T00:00:00.00Z",
"end": "2022-02-01T00:00:00.00Z"
}
}
}
This term searches for documents matching the given redaction criteria.
Query properties:
stamped
(object, optional) - If this parameter is provided the search is only for stamped redactions.
Otherwise, it includes redactions that are not stamped. stamp
(string, optional) - The specific stamp to search for. If omitted or null
, the search is for any stamped redaction.type
(string, Default: "ALL"
, Enum: "ALL"
"NON_METADATA_ONLY"
"METADATA_ONLY"
) - Filter by redaction type.userId
(integer, optional) - See GetProjectUsers for project users endpoint.groupId
(integer, optional) - See GetProjectGroups for project groups endpoint.userId
or groupId
may be provided, but not both. When neither is provided,
the search is for redactions by any user.dateRange
(object, optional)begin
(string, optional) - the lower bound of the date range, in ISO 8601 format.
e.g. 2007-12-03T10:15:30.00Z
end
(string, optional) - the upper bound of the date range, in ISO 8601 format.dateRange
must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search.If dateRange
is provided, the search is for redactions that were created or updated in the given range.
Example query
{
"term": "REDACTIONS",
"query": {
"stamped": {
"stamp": "TOP SECRET"
},
"type": "NON_METADATA_ONLY",
"userId": 77,
"dateRange": {"end": "2022-01-04T00:00:00Z"}
}
This term searches for documents matching Search Term Reports criteria. See GetProjectSearchTermReports for obtaining the project search term reports.
Query properties:
id
(integer, optional) - The search term report id. If omitted or null
,
the search is for hits of any search term report on the project.whichDocs
(string, Default: "HITS_AND_FAMILY_MEMBERS_OF_HITS"
, Enum: "HITS_AND_FAMILY_MEMBERS_OF_HITS"
"ONLY_HITS"
"ONLY_FAMILY_MEMBERS_OF_HITS"
) - criteria for inclusion in this search.Example query
{
"term": "SEARCH_TERM_REPORT",
"query": {
"id": 72,
"whichDocs": "ONLY_FAMILY_MEMBERS_OF_HITS"
}
}
This term searches for documents of the given type.
Query properties:
type
(string, Enum: "AUDIO"
"BINARY"
"CAD"
"CALENDAR"
, "CHAT"
, "COMPRESSED"
, "DATABASE"
,
"DOCUMENT"
, "EMAIL"
, "EMPTY_FILE"
, "GIS"
, "HTML"
, "IMAGE"
, "MAILBOX"
, "MEETING"
, "OTHER"
,
"PDF"
, "PRESENTATION"
, "PROFILE"
, "PROJECT_MANAGEMENT"
, "SPREADSHEET"
, "TEXT"
, "TRANSCRIPT"
,
"UNKNOWN"
, "VIDEO"
)Example query
{
"term": "TYPE",
"query": {
"type": "SPREADSHEET"
}
}
This term searches for documents with views matching the given criteria.
Query properties:
userId
(integer, optional) - See GetProjectUsers for project users endpoint.groupId
(integer, optional) - See GetProjectGroups for project groups endpoint.userId
or groupId
may be provided, but not both. When neither is provided,
the search is for views by any user.dateRange
(object, optional)begin
(string, optional) - the lower bound of the date range, in ISO 8601 format.
e.g. 2007-12-03T10:15:30.00Z
end
(string, optional) - the upper bound of the date range, in ISO 8601 format.dateRange
must include at least one of begin
or end
. If only one is provided,
it's an open-ended range search.If dateRange
is null
or omitted the search is for any time.
Example query
{
"term": "VIEWED",
"query": {
"userId": 12345,
"dateRange": {
"begin": "2022-01-01T00:00:00.00Z",
"end": "2022-02-01T00:00:00.00Z"
}
}
}
Run a search query on the project and return the number of documents it matches, the number of document groups within the matching documents (see Grouping term), along with optionally requested additional summary metrics.
You must have read access on the requested project, or, if the project's database allows org admin access, be an org admin for its owning organization.
projectId required | integer The project id |
extraSummaryMetrics | Array of strings Default: [] Items Enum: "NUM_PAGES" "BILLABLE_SIZE" Optional extra summary metrics requested in addition to number of documents |
query required | object <JSON> JSON object of the term-specific search query specification |
term required | string The search term. Enum: |
{- "extraSummaryMetrics": [
- "BILLABLE_SIZE"
], - "query": {
- "operands": [
- {
- "query": {
- "operands": [
- {
- "query": {
- "exact": true,
- "field": "Custodian",
- "value": "Adam Jones"
}, - "term": "METADATA"
}, - {
- "query": {
- "exact": true,
- "field": "Custodian",
- "value": "Jeff Skilling"
}, - "term": "METADATA"
}
], - "operator": "OR"
}, - "term": "LOGICAL"
}, - {
- "query": {
- "operands": [
- {
- "query": {
- "field": "From",
- "value": {
- "terms": [
- {
- "kind": "DOMAIN",
- "value": "@enron.com"
}
]
}
}, - "term": "METADATA"
}, - {
- "query": {
- "field": "Date Sent",
- "value": {
- "begin": "2000-12-03T00:00:00.00Z",
- "end": "2000-12-04T00:00:00.00Z"
}
}, - "term": "METADATA"
}
], - "operator": "OR"
}, - "term": "LOGICAL"
}
], - "operator": "AND"
}, - "term": "LOGICAL"
}
{- "data": {
- "billableSize": 50831161048,
- "numDocs": 649395,
- "numGroups": 314157,
- "numPages": 1341558
}
}