CAA Consultations API

The Citizen Space (Delib) public consultation API deployed on the CAA's consultations domain. Two documented methods — json_search_results and json_consultation_details — return published CAA consultation activities as JSON with no API key and no signup. Versions 2.0 through 2.4 are served concurrently. Verified live 2026-07-28 (HTTP 200, JSON array). This is the only documented, publicly callable API on a caa.co.uk domain; it is the vendor's platform API, not a CAA aviation data API.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

uk-caa-consultations-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: CAA Consultations API (Citizen Space 2.4)
  version: '2.4'
  summary: Public consultation activities published by the UK Civil Aviation Authority.
  description: >-
    Machine-readable description of the Citizen Space (Delib) public consultation
    API deployed on the UK Civil Aviation Authority's consultations domain.


    PROVENANCE: this document is NOT published by the UK CAA or by Delib. It was
    written by API Evangelist as a faithful transcription of the CAA's own
    published API reference at https://consultations.caa.co.uk/api/2.4/ (HTTP 200,
    fetched 2026-07-28), with every parameter name, allowed value, description and
    response field copied from that page. Field names and types were then
    cross-checked against a live anonymous response
    (GET /api/2.4/json_search_results?st=open&fields=all -> HTTP 200,
    application/json, 57,395 bytes, 2026-07-28). Nothing was invented; where the
    published documentation and the live response disagree on a field name, both
    are recorded and the divergence is flagged with x-doc-name.


    The CAA publishes no OpenAPI of its own. Versions 2.0, 2.1, 2.2, 2.3 and 2.4
    are served concurrently at https://consultations.caa.co.uk/api/. No API key,
    no signup and no documented rate limit.
  contact:
    name: UK Civil Aviation Authority
    url: https://consultations.caa.co.uk/
  x-evidence:
    docs: https://consultations.caa.co.uk/api/2.4/
    docs_status: 200
    docs_probed: '2026-07-28'
    version_index: https://consultations.caa.co.uk/api/
    live_verification:
      url: https://consultations.caa.co.uk/api/2.4/json_search_results?st=open&fields=all
      status: 200
      content_type: application/json
      bytes: 57395
      probed: '2026-07-28'
    vendor_guide: https://help.delib.net/article/350-api-v2-x-developers-guide
    authored_by: API Evangelist enrichment pipeline
    method: generated
servers:
  - url: https://consultations.caa.co.uk/api/2.4
    description: Citizen Space API version 2.4 (current)
  - url: https://consultations.caa.co.uk/api/2.3
    description: Citizen Space API version 2.3
  - url: https://consultations.caa.co.uk/api/2.2
    description: Citizen Space API version 2.2
  - url: https://consultations.caa.co.uk/api/2.1
    description: Citizen Space API version 2.1
  - url: https://consultations.caa.co.uk/api/2.0
    description: Citizen Space API version 2.0
tags:
  - name: Consultations
    description: Published CAA consultation and engagement activities.
paths:
  /json_search_results:
    get:
      operationId: json_search_results
      summary: Search published consultation activities
      description: >-
        Accepts any of the documented search parameters. If no arguments are
        supplied, all published activities are returned. Any unsupported
        arguments are ignored. Returns a JSON array of activity objects.
      tags: [Consultations]
      parameters:
        - name: tx
          in: query
          required: false
          description: Free text search, case insensitive (eg "Park")
          schema: { type: string }
        - name: pc
          in: query
          required: false
          description: Postcode, accepts partial postcodes (eg "BS8" or "BS8 111")
          schema: { type: string }
        - name: st
          in: query
          required: false
          description: State, must be one of `open`, `forthcoming` or `closed`
          schema:
            type: string
            enum: [open, forthcoming, closed]
        - name: au
          in: query
          required: false
          description: Audience ID, must be one of the audiences configured on the site
          schema: { type: string }
        - name: in
          in: query
          required: false
          description: Interest ID, must be one of the interests configured on the site
          schema: { type: string }
        - name: de
          in: query
          required: false
          description: >-
            Department the activity sits within. Value must be the same as the ID
            of a department within the site
          schema: { type: string }
        - name: ar
          in: query
          required: false
          description: Area ID, must be one of the areas configured on the site
          schema: { type: string }
        - name: dk
          in: query
          required: false
          description: Date search type, must be one of `op` (open date) and `cl` (close date)
          schema:
            type: string
            enum: [op, cl]
        - name: fd
          in: query
          required: false
          description: Date to search from. Must be used in conjunction with `dk` (dd/mm/yyyy)
          schema: { type: string }
        - name: td
          in: query
          required: false
          description: Date to search until. Must be used in conjunction with `dk` (dd/mm/yyyy)
          schema: { type: string }
        - name: at
          in: query
          required: false
          description: Activity type. Must be one of the activity types available to the site.
          schema: { type: string }
        - name: ct
          in: query
          required: false
          deprecated: true
          description: >-
            (deprecated) Legacy activity type. Must be one of `QuickConsult`
            (Online Survey), `File` (Email/Postal Activity), `Document` (Offline
            Activity), or `Link` (Link)
          schema:
            type: string
            enum: [QuickConsult, File, Document, Link]
        - name: fields
          in: query
          required: false
          description: >-
            Determines which groups of metadata fields about the activities will
            be returned. Permissible values are 'basic', 'extended' and 'all'.
            Omitting this parameter is equivalent to 'basic'.
          schema:
            type: string
            enum: [basic, extended, all]
            default: basic
      responses:
        '200':
          description: A JSON array of activities matching the search.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Activity'
  /json_consultation_details:
    get:
      operationId: json_consultation_details
      summary: Get one consultation activity by department and activity ID
      description: >-
        Returns a JSON structure containing the same fields as
        json_search_results. If dept or id are not specified or do not exist, a
        404 status code is returned.
      tags: [Consultations]
      parameters:
        - name: dept
          in: query
          required: true
          description: The ID of the department (eg 'parks-and-recreation')
          schema: { type: string }
        - name: id
          in: query
          required: true
          description: The ID of the activity (eg 'spring-planting-in-kings-gardens')
          schema: { type: string }
        - name: fields
          in: query
          required: false
          description: >-
            Determines which groups of metadata fields about the activities will
            be returned. Permissible values are 'basic', 'extended' and 'all'.
            Omitting this parameter is equivalent to 'basic'.
          schema:
            type: string
            enum: [basic, extended, all]
            default: basic
      responses:
        '200':
          description: The activity.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Activity'
        '404':
          description: >-
            Returned when dept or id are not specified or do not exist
            (documented verbatim in the CAA API reference).
components:
  schemas:
    Activity:
      type: object
      title: Consultation activity
      description: >-
        A published consultation or engagement activity. Field groups follow the
        `fields` parameter: basic fields are always present, fields marked
        extended require fields=extended or above, fields marked all require
        fields=all.
      properties:
        id:
          type: string
          description: The ID of the activity
        title:
          type: string
          description: The title of the activity
        url:
          type: string
          description: The URL of the activity
        status:
          type: string
          enum: [open, forthcoming, closed]
          description: 'State: one of `open`, `forthcoming` or `closed`'
        overview:
          type: string
          description: Overview of the activity (HTML)
        startdate:
          type: string
          description: The date the activity opens / opened on (observed format yyyy/mm/dd)
        enddate:
          type: string
          description: The date the activity closes / closed on (observed format yyyy/mm/dd)
        activity_type:
          type: string
          description: The activity type ID
        workspace_title:
          type: string
          description: The title of the workspace that the activity belongs to (extended and above)
        workspace_id:
          type: string
          description: The ID of the workspace that the activity belongs to (extended and above)
        department:
          type: string
          deprecated: true
          description: (deprecated) The name of the department that the activity belongs to (extended and above)
        dept:
          type: string
          deprecated: true
          description: (deprecated) The ID of the department that the activity belongs to (extended and above)
        type_string:
          type: string
          description: Human readable activity type (extended and above)
        type:
          type: string
          deprecated: true
          description: (deprecated) The legacy type (extended and above)
        participate_url:
          type: string
          x-doc-name: participation_url
          description: >-
            The direct URL to the participation method (survey etc), skipping the
            overview page (extended and above). The published reference names this
            field `participation_url`; the live 2.4 response emits
            `participate_url` — verified 2026-07-28.
        progress:
          type: string
          description: The current state of the activity (extended and above)
        visibility:
          type: string
          enum: [public, private]
          description: Either 'public' or 'private' depending on if the activity has been hidden from end users (extended and above)
        why:
          type: [string, 'null']
          description: The contents of the 'why are we consulting?' field (all only)
        what_happens_next:
          type: [string, 'null']
          description: The contents of the 'what happens next?' field (all only)
        feedbackdate:
          type: string
          description: The date that activity feedback is/was expected (all only)
        resultdate:
          type: string
          x-doc-name: resultsdate
          description: >-
            The date that activity results are/were expected (all only). The
            published reference names this field `resultsdate`; the live 2.4
            response emits `resultdate` — verified 2026-07-28.
        contact_name:
          type: string
          description: The full name entered in the activity's contact details (all only)
        contact_jobtitle:
          type: string
          description: The job title entered in the activity's contact details (all only)
        contact_team:
          type: string
          description: The team name entered in the activity's contact details (all only)
        contact_phone:
          type: string
          description: The phone number entered in the activity's contact details (all only)
        contact_email:
          type: string
          description: The email address entered in the activity's contact details (all only)
        related_links:
          type: array
          description: A list of related links (all only)
          items:
            $ref: '#/components/schemas/RelatedLink'
        related_consultations:
          type: array
          description: A list of related activities (all only)
          items:
            $ref: '#/components/schemas/RelatedLink'
        supporting_documents:
          type: array
          description: A list of supporting documents (all only)
          items:
            $ref: '#/components/schemas/SupportingDocument'
        audiences:
          type: array
          description: A list of audiences this activity applies to (all only)
          items:
            $ref: '#/components/schemas/Term'
        areas:
          type: array
          description: >-
            A list of ids for areas this activity applies to. NB: This field is
            omitted unless area support is installed (all only)
          items:
            $ref: '#/components/schemas/Term'
        interests:
          type: array
          description: A list of ids for interests this activity applies to (all only)
          items:
            $ref: '#/components/schemas/Term'
    RelatedLink:
      type: object
      properties:
        url:
          type: string
          description: The absolute url to link to
        title:
          type: string
          description: The human-readable title of the link. Used for display.
    SupportingDocument:
      type: object
      properties:
        url:
          type: string
          description: The absolute url to link to
        title:
          type: string
          description: >-
            The human-readable title of the document, or filename if title was not
            specified. Used for display.
        size:
          type: string
          description: The size of the document including units (eg kB, MB). Used for display.
    Term:
      type: object
      description: An audience, area or interest term.
      properties:
        id:
          type: string
          description: The ID of the term. Used for searching.
        name:
          type: string
          description: The human-readable name of the term. Used for display.