Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/california-attorney-general:california-attorney-general-files-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
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: 'California DOJ OpenJustice Open Data Portal JSON: Files API'
version: '1.0'
summary: Anonymous JSON:API 1.0 over the California Department of Justice OpenJustice open-data portal — the Attorney General's criminal-justice datasets (Arrests, Crimes & Clearances, Homicide, Hate Crime, Use of Force, RIPA stop data, deaths in custody and 19 more), their CSV/XLSX distributions, CJSC publications and data stories.
description: The California Attorney General heads the California Department of Justice, whose Criminal Justice Statistics Center runs the OpenJustice initiative (https://openjustice.doj.ca.gov).
contact:
name: California Department of Justice — Criminal Justice Statistics Center
email: datarequests@doj.ca.gov
url: https://oag.ca.gov/research-services/request-process
termsOfService: https://oag.ca.gov/conditions
license:
name: California DOJ conditions of use (public government data; no licence text is attached to the files)
url: https://oag.ca.gov/conditions
x-derived-by: API Evangelist enrichment pipeline
x-derived-from: https://data-openjustice.doj.ca.gov/jsonapi
x-derived-on: '2026-09-17'
x-publisher-provided: false
servers:
- url: https://data-openjustice.doj.ca.gov/jsonapi
description: Production JSON:API entry point (Drupal 9, behind an F5 load balancer that sets an `oag.ca.gov` persistence cookie). Public, anonymous reads.
security: []
tags:
- name: Files
description: Downloadable distributions.
paths:
/file/file:
get:
operationId: listFileFile
summary: List file--file resources
tags:
- Files
description: 'File entities — the actual CSV, XLSX, ZIP and PDF distributions behind the datasets and publications. `uri.url` is a site-relative path under /sites/default/files/ that resolves to a direct download on https://data-openjustice.doj.ca.gov (verified: text/csv, 1,749,288 bytes for Adult_Probation_2003-2025_0.csv).
Probed anonymously 2026-09-17: HTTP 200, `application/vnd.api+json`, 3 resource object(s) returned from https://data-openjustice.doj.ca.gov/jsonapi/file/file?page[limit]=3.'
parameters:
- $ref: '#/components/parameters/pageLimit'
- $ref: '#/components/parameters/pageOffset'
- $ref: '#/components/parameters/sort'
- $ref: '#/components/parameters/filter'
- $ref: '#/components/parameters/include'
- $ref: '#/components/parameters/fields'
responses:
'200':
description: JSON:API collection document.
content:
application/vnd.api+json:
schema:
allOf:
- $ref: '#/components/schemas/CollectionDocument'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/FileFile'
'400':
$ref: '#/components/responses/BadRequest'
'503':
$ref: '#/components/responses/ServiceUnavailable'
x-probe:
url: https://data-openjustice.doj.ca.gov/jsonapi/file/file?page[limit]=3
http_status: 200
content_type: application/vnd.api+json
fetched: '2026-09-17'
resources_returned: 3
/file/file/{id}:
get:
operationId: getFileFile
summary: Get one file--file resource by UUID
tags:
- Files
description: Returns a single `file--file` resource object. Individual reads were verified on 2026-09-17 against `node--stats` (self link of the Adult Probation Caseload & Actions page). An unknown UUID returns HTTP 404 with a JSON:API error document.
parameters:
- $ref: '#/components/parameters/resourceId'
- $ref: '#/components/parameters/include'
- $ref: '#/components/parameters/fields'
responses:
'200':
description: JSON:API individual document.
content:
application/vnd.api+json:
schema:
allOf:
- $ref: '#/components/schemas/IndividualDocument'
- type: object
properties:
data:
$ref: '#/components/schemas/FileFile'
'404':
$ref: '#/components/responses/NotFound'
'503':
$ref: '#/components/responses/ServiceUnavailable'
components:
responses:
NotFound:
description: No resource with that UUID. JSON:API error document.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ErrorDocument'
example:
jsonapi:
version: '1.0'
meta:
links:
self:
href: http://jsonapi.org/format/1.0/
errors:
- title: Not Found
status: '404'
detail: 'The "entity" parameter was not converted for the path "/jsonapi/node/dataset/{entity}" (route name: "jsonapi.node--dataset.individual")'
links:
via:
href: https://data-openjustice.doj.ca.gov/jsonapi/node/dataset/00000000-0000-0000-0000-000000000000
info:
href: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5
ServiceUnavailable:
description: Not observed during the probe; listed because the site runs behind an F5 load balancer (persistence cookie `oag.ca.gov`) that answers on behalf of an unavailable origin.
BadRequest:
description: Malformed query (unknown filter field, bad sort, empty request body). JSON:API error document.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ErrorDocument'
example:
jsonapi:
version: '1.0'
meta:
links:
self:
href: http://jsonapi.org/format/1.0/
errors:
- title: Bad Request
status: '400'
detail: Invalid nested filtering. The field `nonexistent_field`, given in the path `nonexistent_field`, does not exist.
links:
via:
href: https://data-openjustice.doj.ca.gov/jsonapi/node/dataset?filter%5Bnonexistent_field%5D=x
info:
href: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1
schemas:
FileFileRelationships:
type: object
properties:
uid:
type: object
description: To-one relationship to user--user.
properties:
data:
oneOf:
- $ref: '#/components/schemas/ResourceIdentifier'
- type: 'null'
links:
$ref: '#/components/schemas/Links'
Links:
type: object
additionalProperties:
oneOf:
- type: string
format: uri
- type: object
properties:
href:
type: string
format: uri
meta:
type: object
ErrorObject:
type: object
properties:
title:
type: string
examples:
- Bad Request
- Not Found
- Unauthorized
- Method Not Allowed
status:
type: string
description: HTTP status as a STRING, per JSON:API 1.0.
examples:
- '400'
- '404'
- '401'
detail:
type: string
links:
type: object
properties:
via:
type: object
properties:
href:
type: string
format: uri
info:
type: object
properties:
href:
type: string
format: uri
source:
type: object
properties:
pointer:
type: string
parameter:
type: string
CollectionDocument:
type: object
properties:
jsonapi:
$ref: '#/components/schemas/JsonApiObject'
data:
type: array
items:
$ref: '#/components/schemas/ResourceObject'
included:
type: array
items:
$ref: '#/components/schemas/ResourceObject'
description: Present when ?include= names relationships.
meta:
type: object
properties:
omitted:
type: object
description: Present when Drupal withheld resources the anonymous caller may not view; carries a detail message and per-item links.
links:
type: object
properties:
self:
$ref: '#/components/schemas/Links'
next:
$ref: '#/components/schemas/Links'
prev:
$ref: '#/components/schemas/Links'
ErrorDocument:
type: object
required:
- errors
properties:
jsonapi:
$ref: '#/components/schemas/JsonApiObject'
errors:
type: array
items:
$ref: '#/components/schemas/ErrorObject'
FileFileAttributes:
type: object
description: Attributes observed on live `file--file` resources (3 sampled on 2026-09-17). Names are the Drupal field machine names.
properties:
drupal_internal__fid:
type: integer
langcode:
type: string
filename:
type: string
uri:
type: object
properties:
value:
type: string
description: Drupal stream URI, e.g. public://dataset/2026-07/file.csv
url:
type: string
description: Site-relative download path under /sites/default/files/
filemime:
type: string
filesize:
type: integer
status:
type: boolean
created:
type: string
format: date-time
changed:
type: string
format: date-time
IndividualDocument:
type: object
properties:
jsonapi:
$ref: '#/components/schemas/JsonApiObject'
data:
$ref: '#/components/schemas/ResourceObject'
included:
type: array
items:
$ref: '#/components/schemas/ResourceObject'
links:
$ref: '#/components/schemas/Links'
ResourceObject:
type: object
required:
- type
- id
properties:
type:
type: string
id:
type: string
format: uuid
attributes:
type: object
relationships:
type: object
links:
$ref: '#/components/schemas/Links'
ResourceIdentifier:
type: object
required:
- type
- id
properties:
type:
type: string
description: entity--bundle
id:
type: string
format: uuid
meta:
type: object
properties:
drupal_internal__target_id:
oneOf:
- type: integer
- type: string
JsonApiObject:
type: object
properties:
version:
type: string
const: '1.0'
meta:
type: object
FileFile:
type: object
description: 'File entities — the actual CSV, XLSX, ZIP and PDF distributions behind the datasets and publications. `uri.url` is a site-relative path under /sites/default/files/ that resolves to a direct download on https://data-openjustice.doj.ca.gov (verified: text/csv, 1,749,288 bytes for Adult_Probation_2003-2025_0.csv).'
properties:
type:
type: string
const: file--file
id:
type: string
format: uuid
links:
$ref: '#/components/schemas/Links'
attributes:
$ref: '#/components/schemas/FileFileAttributes'
relationships:
$ref: '#/components/schemas/FileFileRelationships'
parameters:
filter:
name: filter
in: query
style: deepObject
explode: true
schema:
type: object
additionalProperties: true
description: 'Drupal JSON:API filter family: `filter[<field>]=value` for equality, or `filter[<field>][operator]=CONTAINS&filter[<field>][value]=...` for other operators (=, <>, >, >=, <, <=, STARTS_WITH, CONTAINS, ENDS_WITH, IN, NOT IN, IS NULL, IS NOT NULL, BETWEEN). Verified 2026-09-17: `filter[title][operator]=CONTAINS&filter[title][value]=Arrest` on node/dataset returned 3 datasets; an unknown field returns HTTP 400 "Invalid nested filtering."'
example: filter[title][operator]=CONTAINS&filter[title][value]=Arrest
pageLimit:
name: page[limit]
in: query
schema:
type: integer
minimum: 1
maximum: 50
default: 50
description: 'Page size. Drupal caps the page at 50 and silently clamps larger values — verified 2026-09-17: `?page[limit]=100` on node/data_story returned 50 items and a `links.next` offset of 50.'
resourceId:
name: id
in: path
required: true
schema:
type: string
format: uuid
description: Resource UUID (the JSON:API `id`, not `drupal_internal__nid`).
pageOffset:
name: page[offset]
in: query
schema:
type: integer
minimum: 0
default: 0
description: Zero-based offset. Follow `links.next` rather than computing offsets.
sort:
name: sort
in: query
schema:
type: string
description: Comma-separated attribute names; prefix with `-` for descending (JSON:API 1.0). Verified with `sort=title`.
example: title
include:
name: include
in: query
schema:
type: string
description: 'Comma-separated relationship paths to side-load into `included` (JSON:API compound documents). Verified 2026-09-17: `include=field_source,field_data_type` on node/dataset side-loaded 148 file--file distributions across the 26 datasets.'
example: field_source,field_data_type
fields:
name: fields
in: query
style: deepObject
explode: true
schema:
type: object
additionalProperties:
type: string
description: 'Sparse fieldsets keyed by resource type: `fields[file--file]=uri,filesize,filemime,filename`. Verified.'
example: fields[file--file]=uri,filesize,filemime,filename
x-provenance:
generated: '2026-09-17'
method: probed
source: https://data-openjustice.doj.ca.gov/jsonapi
author: API Evangelist
discovery: https://openjustice.doj.ca.gov/static/js/app.27bd7a2568ccfb17905a.js (axios baseURL)
x-probe:
fetched: '2026-09-17'
index:
url: https://data-openjustice.doj.ca.gov/jsonapi
http_status: 200
content_type: application/vnd.api+json
resource_types_advertised: 70
described: 32
page_limit_cap: 50
writes:
anonymous_create_granted:
- node--signup
- node--suggestion
- node--bug
requires_credentials:
- method: POST
path: /node/dataset
status: 401
- method: PATCH
path: /node/stats/{id}
status: 401
- method: DELETE
path: /node/dataset/{id}
status: 401
excluded:
omitted_insufficient_authorization:
- action--action
- base_field_override--base_field_override
- block_content_type--block_content_type
- corresponding_reference--corresponding_reference
- editor--editor
- embed_button--embed_button
- entity_form_display--entity_form_display
- entity_form_mode--entity_form_mode
- entity_view_display--entity_view_display
- entity_view_mode--entity_view_mode
- field_config--field_config
- field_storage_config--field_storage_config
- filter_format--filter_format
- image_style--image_style
- node--bug
- node--signup
- node--suggestion
- path_alias--path_alias
- pathauto_pattern--pathauto_pattern
- rdf_mapping--rdf_mapping
- rest_resource_config--rest_resource_config
- shortcut--default
- shortcut_set--shortcut_set
- taxonomy_vocabulary--taxonomy_vocabulary
- tour--tour
- user_role--user_role
- view--view
- webform--webform
- webform_options--webform_options
- workflow--workflow
empty_collection:
- block_content--basic
- taxonomy_menu--taxonomy_menu
- taxonomy_term--tags
- webform_submission--contact
post_only_405_on_get:
- contact_message--feedback
- contact_message--personal
excluded_by_api_evangelist_on_privacy_grounds:
- user--user (anonymous GET returns 22 Drupal account display names)
- webform_submission--kinetic_energy_ab48_2022 (anonymous GET returns form-submission metadata including remote_addr and token fields)