Apperio Analytics API
A set of non resource based endpoints that power various components within Apperio. These endpoints primarily support discovery and data investigation.
A set of non resource based endpoints that power various components within Apperio. These endpoints primarily support discovery and data investigation.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/apperio-analytics-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Apperio API Documentation Analytics API
description: '# Introduction
The Apperio API allows law firms and businesses to enhance their internal
business intelligence capabilities.'
servers:
- url: https://sandbox.apperio.com/
- url: https://app.apperio.com/
tags:
- name: Analytics
description: 'A set of non resource based endpoints that power various components
within Apperio. These endpoints primarily support discovery and data
investigation.'
paths:
/api/v1/data/analytics:
get:
summary: Analytics
description: 'Capabilities: BUSINESS, LAW_FIRM, PAGINATION
Denormalised data is split along one or more "dimensions". Each
dimension supplied segments the requested data over that dimension.
For example, if you were interested in finding your total WIP, you
would simply supply `wip` as a metric. If you were interested in
finding this per law firm, you would also supply `law_firm_id` as a
dimension, and if you wanted this over time, you would supply
`date,law_firm_id`.'
parameters:
- name: start_date
in: query
required: true
schema:
type: string
enum:
- NdaysAgo
- today
- dd-mm-yyyy
description: Inclusive date to gather data from
example: 90daysAgo
- name: end_date
in: query
required: true
schema:
type: string
enum:
- NdaysAgo
- today
- dd-mm-yyyy
description: Inclusive date to gather data to
example: today
- name: metrics
in: query
schema:
type: string
enum:
- hours_worked_wip
- hours_worked_billed
- hours_worked
- hours_worked_wip_no_budget
- hours_worked_billed_no_budget
- hours_worked_no_budget
- fees_worked_billed
- fees_worked_wip
- fees_worked
- fees_worked_billed_no_budget
- fees_worked_wip_no_budget
- fees_worked_no_budget
- rate
- rate_no_budget
- rate_percentile
- rate_percentile_no_budget
- rate_min
- rate_min_no_budget
- rate_max
- rate_max_no_budget
- rate_avg
- rate_avg_no_budget
- fees_wip
- fees_wip_no_budget
- fees_billed
- fees_billed_no_budget
- fees_billable
- fees_billable_no_budget
- fees_write_down_billed
- fees_write_down_wip
- fees_write_down
- fees_activity_cost
- fees_write_down_billed_no_budget
- fees_write_down_wip_no_budget
- fees_write_down_no_budget
- fees_activity_cost_no_budget
- disbursements_wip
- disbursements_wip_no_budget
- disbursements_billed
- disbursements_billed_no_budget
- disbursements_billable
- disbursements_billable_no_budget
- disbursements_write_down_billed
- disbursements_write_down_wip
- disbursements_write_down
- disbursements_activity_cost
- disbursements_write_down_billed_no_budget
- disbursements_write_down_wip_no_budget
- disbursements_write_down_no_budget
- disbursements_activity_cost_no_budget
- write_down
- write_down_no_budget
- activity_cost
- activity_cost_no_budget
- engagement_opened
- wip
- wip_no_budget
- billed
- billed_no_budget
- billable
- billable_no_budget
- engagement_worked
description: CSV of metrics to include in the results
required: true
example: wip,billed
- name: dimensions
in: query
schema:
type: string
enum:
- date
- week
- month
- quarter
- year
- age
- engagement_id
- fee_earner_id
- fee_earner_role_id
- standard_role_id
- law_firm_id
- business_id
- currency
- folder_id
- pass_through
- team_id
- fee_structure
- standard_fee_structure_id
- business_matter_type_id
- law_firm_currency
- business_currency
- engagement_currency
- expense_type_id
- invoice_id
- ebilling_invoice_id
- business_config_id
- tag_id
description: CSV of dimensions to apply to the query
- name: page
in: query
schema:
type: string
- name: limit
in: query
schema:
type: integer
minimum: 1
description: The number of items to return
- name: engagement_id
in: query
schema:
type: int
description: Filter by a single matter
- name: engagement_id__in
in: query
schema:
type: string
description: 'Comma separated list of Apperio matter identifiers. The commas must
be URL encoded (%2C)
'
example: 25%2C66
- name: business_config_id
in: query
schema:
type: int
description: 'Filter matters to the one Apperio business-law firm connection identifier
'
- name: business_config_id__in
in: query
schema:
type: string
description: 'Comma separated list of Apperio business-law firm connection identifiers.
The commas must be URL encoded (%2C)
'
- name: business_id
in: query
schema:
type: int
description: 'Filter matters to the one business
'
- name: business_matter_type_id__isnull
in: query
schema:
type: boolean
description: 'Filter matters where the matter type isn''t set
'
- name: business_matter_type_id__in
in: query
schema:
type: string
description: 'Comma separated list of Apperio business matter type identifiers. The commas must
be URL encoded (%2C)
'
- name: fee_structure
in: query
schema:
type: int
description: 'Filter matters to the one fee structure
'
- name: fee_structure__in
in: query
schema:
type: string
example: fixed%2Ccapped
description: 'Comma separated list of fee_structures. The commas must
be URL encoded (%2C)
'
- name: folder_id__isnull
in: query
schema:
type: boolean
description: 'Filter matters that haven''t been assigned to a folder
'
- name: folder_id__in
in: query
schema:
type: string
description: 'Comma separated list of folders. The commas must
be URL encoded (%2C)
'
- name: law_firm_id
in: query
schema:
type: int
description: 'Filter matters to the one firm
'
- name: law_firm_id__in
in: query
schema:
type: string
description: 'Comma separated list of firms. The commas must
be URL encoded (%2C)
'
- name: pass_through
in: query
schema:
type: boolean,
description: Filter matters where costs are(n't) passed through to the end client
- name: tag_id__in
in: query
schema:
type: string
description: 'Comma separated list of tags in the form of `[TAG_SET_ID]__[TAG_ID]`
or `[TAG_SET_ID]__isnull`. Those tags with the same tag set identifier
will first be combined with an OR and then the groups will be combined
with an AND. That is, matters need to belong to at least one tag per
tag set group. `[TAG_SET_ID]__isnull` corresponds to matters that have
not been assigned any tag in `TAG_SET_ID`.
The commas must be URL encoded (%2C).
'
example: 2__78%2C2__80%2C5__isnull
- name: team_id__isnull
in: query
schema:
type: int
description: 'Filter matters that haven''t been assigned to a business team
'
- name: team_id__in
in: query
schema:
type: string
description: 'Comma separated list of business teams. The commas must
be URL encoded (%2C)
'
tags:
- Analytics
responses:
'200':
description: 'Analytic data
'
content:
application/json:
schema:
type: object
properties:
analytics:
type: object
properties:
query:
type: object
description: 'Contains the data used when querying analytics.
'
properties:
start_date:
type: string
example: 90daysAgo
end_date:
type: string
example: today
limit:
type:
- integer
- 'null'
example: null
ordering:
type:
- string
- 'null'
example: null
currency:
type:
- string
- 'null'
example: null
columns:
type: array
items:
type: string
example:
- date
- law_firm_id
- wip
description: 'The name of each column, dimensions followed by metrics.
'
column-types:
type: array
items:
type: string
enum:
- DIMENSION
- METRIC
example:
- DIMENSION
- DIMENSION
- METRIC
description: 'Is the value at index a dimension or metric value
'
column-data-types:
type: array
items:
type: string
enum:
- CURRENCY
- INT
- FLOAT
- DATE
- STRING
- COUNT
- BOOL_COUNT
- BOOL
example:
- DATE
- INT
- CURRENCY
description: 'The data type of the value at each index within thr row
'
rows:
type: array
items:
type: array
description: 'Each array contains the requested dimensions followed by metrics.
'
example:
- - 01-03-2020
- 1
- 100
- - 01-03-2020
- 2
- 500
- - 02-03-2020
- 1
- 400
pagination:
type: object
properties:
next:
type:
- string
- 'null'
description: location of the next page
example: aAbBcCdDeEfFgG
previous:
type:
- string
- 'null'
description: location of the previous page
example: null
nextPage:
type:
- string
- 'null'
description: value of the next page paginator
example: https://app.apperio.com/api/v1/analytics?page=aAbBcCdDeEfFgG
previousPage:
type:
- string
- 'null'
description: value of the previous page paginator
example: null
'400':
description: 'Bad request
'
content:
application/json:
schema:
type: object
additionalProperties:
type: array
items:
type: string
description: 'Error messages
'
operationId: getApiV1DataAnalytics
x-operation-id-source: derived