California Attorney General Feedback API

The three anonymous feedback creates the site footer uses.

Operations 3

POST /node/signup Submit a newsletter sign-up (email address) #
POST /node/suggestion Submit a dataset suggestion #
POST /node/bug Submit a bug report #

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-feedback-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-feedback-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 'California DOJ OpenJustice Open Data Portal JSON: Feedback…'
  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: Feedback
  description: The three anonymous feedback creates the site footer uses.
paths:
  /node/signup:
    post:
      operationId: createNodeSignup
      summary: Submit a newsletter sign-up (email address)
      tags:
      - Feedback
      description: 'Anonymous create of a `node--signup` resource. This is the operation the OpenJustice site footer performs (its app bundle POSTs `/jsonapi/node/signup` with a `node--signup` payload whose `title` and `body.value` both carry the submitted text, `body.format` "plain_text"). Verified 2026-09-17: an anonymous POST with an EMPTY body returned HTTP 400 "Empty request body." rather than 401, i.e. anonymous access to this create route is granted (by contrast an empty anonymous POST to /node/dataset returns 401 "No authentication credentials provided."). No populated request was sent by API Evangelist — do not call this operation to test; it creates a record the DOJ staff will read. Anonymous GET on this collection returns an empty page with meta.omitted (submissions are not readable back).'
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              type: object
              required:
              - data
              properties:
                data:
                  type: object
                  required:
                  - type
                  - attributes
                  properties:
                    type:
                      type: string
                      const: node--signup
                    attributes:
                      type: object
                      properties:
                        title:
                          type: string
                        body:
                          type: object
                          properties:
                            value:
                              type: string
                            format:
                              type: string
                              const: plain_text
      responses:
        '201':
          description: Created (the site code checks for statusText "Created"). Not exercised by API Evangelist.
        '400':
          $ref: '#/components/responses/BadRequest'
        '422':
          description: JSON:API validation error document (Drupal entity validation).
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ErrorDocument'
      x-probe:
        url: https://data-openjustice.doj.ca.gov/jsonapi/node/signup
        method: POST
        body: (empty)
        http_status: 400
        detail: Empty request body.
        fetched: '2026-09-17'
  /node/suggestion:
    post:
      operationId: createNodeSuggestion
      summary: Submit a dataset suggestion
      tags:
      - Feedback
      description: 'Anonymous create of a `node--suggestion` resource. This is the operation the OpenJustice site footer performs (its app bundle POSTs `/jsonapi/node/suggestion` with a `node--suggestion` payload whose `title` and `body.value` both carry the submitted text, `body.format` "plain_text"). Verified 2026-09-17: an anonymous POST with an EMPTY body returned HTTP 400 "Empty request body." rather than 401, i.e. anonymous access to this create route is granted (by contrast an empty anonymous POST to /node/dataset returns 401 "No authentication credentials provided."). No populated request was sent by API Evangelist — do not call this operation to test; it creates a record the DOJ staff will read. Anonymous GET on this collection returns an empty page with meta.omitted (submissions are not readable back).'
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              type: object
              required:
              - data
              properties:
                data:
                  type: object
                  required:
                  - type
                  - attributes
                  properties:
                    type:
                      type: string
                      const: node--suggestion
                    attributes:
                      type: object
                      properties:
                        title:
                          type: string
                        body:
                          type: object
                          properties:
                            value:
                              type: string
                            format:
                              type: string
                              const: plain_text
      responses:
        '201':
          description: Created (the site code checks for statusText "Created"). Not exercised by API Evangelist.
        '400':
          $ref: '#/components/responses/BadRequest'
        '422':
          description: JSON:API validation error document (Drupal entity validation).
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ErrorDocument'
      x-probe:
        url: https://data-openjustice.doj.ca.gov/jsonapi/node/suggestion
        method: POST
        body: (empty)
        http_status: 400
        detail: Empty request body.
        fetched: '2026-09-17'
  /node/bug:
    post:
      operationId: createNodeBug
      summary: Submit a bug report
      tags:
      - Feedback
      description: 'Anonymous create of a `node--bug` resource. This is the operation the OpenJustice site footer performs (its app bundle POSTs `/jsonapi/node/bug` with a `node--bug` payload whose `title` and `body.value` both carry the submitted text, `body.format` "plain_text"). Verified 2026-09-17: an anonymous POST with an EMPTY body returned HTTP 400 "Empty request body." rather than 401, i.e. anonymous access to this create route is granted (by contrast an empty anonymous POST to /node/dataset returns 401 "No authentication credentials provided."). No populated request was sent by API Evangelist — do not call this operation to test; it creates a record the DOJ staff will read. Anonymous GET on this collection returns an empty page with meta.omitted (submissions are not readable back).'
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              type: object
              required:
              - data
              properties:
                data:
                  type: object
                  required:
                  - type
                  - attributes
                  properties:
                    type:
                      type: string
                      const: node--bug
                    attributes:
                      type: object
                      properties:
                        title:
                          type: string
                        body:
                          type: object
                          properties:
                            value:
                              type: string
                            format:
                              type: string
                              const: plain_text
      responses:
        '201':
          description: Created (the site code checks for statusText "Created"). Not exercised by API Evangelist.
        '400':
          $ref: '#/components/responses/BadRequest'
        '422':
          description: JSON:API validation error document (Drupal entity validation).
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ErrorDocument'
      x-probe:
        url: https://data-openjustice.doj.ca.gov/jsonapi/node/bug
        method: POST
        body: (empty)
        http_status: 400
        detail: Empty request body.
        fetched: '2026-09-17'
components:
  schemas:
    JsonApiObject:
      type: object
      properties:
        version:
          type: string
          const: '1.0'
        meta:
          type: object
    ErrorDocument:
      type: object
      required:
      - errors
      properties:
        jsonapi:
          $ref: '#/components/schemas/JsonApiObject'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorObject'
    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
  responses:
    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
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)