California Attorney General Files API

Downloadable distributions.

Operations 2

GET /file/file List file--file resources #
GET /file/file/{id} Get one file--file resource by UUID #

Documentation

Specifications

Other Resources

🔗
APIDiscovery
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/discovery/california-attorney-general-openjustice-jsonapi-index.json
🔗
Datasets
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/datasets/california-attorney-general-datasets.yml
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/examples/_index.yml
🔗
Website
https://openjustice.doj.ca.gov/
🔗
Conventions
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/conventions/california-attorney-general-conventions.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/errors/california-attorney-general-problem-types.yml
🔗
Conformance
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/conformance/california-attorney-general-conformance.yml
🔗
Lifecycle
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/lifecycle/california-attorney-general-lifecycle.yml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/data-model/california-attorney-general-data-model.yml
🔗
Plans
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/plans/california-attorney-general-plans-pricing.yml
🔗
X-MCPServerCandidate
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/mcp/california-attorney-general-mcp.yml
🔗
ToolCrosswalk
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/mcp/california-attorney-general-tool-crosswalk.yml
🔗
LLMsTxt
https://raw.githubusercontent.com/api-evangelist/california-attorney-general/refs/heads/main/llms/california-attorney-general-llms.txt

Work with this as data

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 Specification

california-attorney-general-files-api-openapi.yml Raw ↑
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)