ev.energy Programs API

Endpoints related to incentivised charging programs.

Operations 13

GET /programs/{program_id}/vehicle_compatibility List vehicle compatibility for a program #
GET /programs List programs #
GET /programs/{program_id} Retrieve a program #
GET /incentive_schemes List incentive schemes #
POST /programs/{program_id}/user_verification Verify user #
POST /programs/{program_id}/join Join program #
GET /programs/{program_id}/tiers List program tiers #
GET /programs/{program_id}/tiers/{tier_id} Retrieve a program tier #
GET /programs/{program_id}/participation_agreement_versions List participation agreement versions #
GET /programs/{program_id}/participation_agreement_versions/{participation_agreement_version_id} Retrieve a participation agreement version #
GET /programs/{program_id}/participation_agreement_versions/current Retrieve the currently active participation agreement version #
POST /programs/{program_id}/participation_agreement_versions/{participation_agreement_version_id}/accept Accept a participation agreement version #
POST /programs/{program_id}/post-enrollment-verification Post-enrollment verification #

Documentation

Specifications

Other Resources

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/ev-energy-programs-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

ev-energy-programs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: ev.energy v2 Programs API
  version: '2.0'
  contact:
    email: developers@ev.energy
    url: developers.ev.energy
    name: ev.energy developers
  description: The official API for ev.energy, version 2.
  license:
    name: Proprietary
    url: https://ev.energy
  termsOfService: ''
servers:
- url: https://api.ev.energy/v2
  description: Live API for both production and sandbox requests.
  x-internal: false
- description: Staging server for internal testing only.
  url: https://api-staging.ev.energy/v2
  x-internal: true
security:
- oauth2: []
tags:
- name: Programs
  description: Endpoints related to incentivised charging programs.
paths:
  /programs/{program_id}/vehicle_compatibility:
    parameters:
    - $ref: '#/components/parameters/program_id'
    get:
      summary: List vehicle compatibility for a program
      description: 'List vehicle compatibility records for a specific program.


        Returns all active vehicle models that are supported by the given program.'
      tags:
      - Programs
      responses:
        '200':
          description: Return a list of vehicle compatibility records for the program.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProgramVehicleCompatibility'
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestList'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '403':
          $ref: '#/components/responses/Problem403Forbidden'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-programs-program_id-vehicle_compatibility
      parameters:
      - $ref: '#/components/parameters/expand-on-programvehiclecompatibility'
      - $ref: '#/components/parameters/version-2'
      - $ref: '#/components/parameters/user'
      security:
      - oauth2:
        - vehicle:read
  /programs:
    get:
      summary: List programs
      tags:
      - Programs
      responses:
        '200':
          description: Returns 0 or more Programs.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Program'
          headers:
            Link:
              $ref: '#/components/headers/link'
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestList'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '403':
          $ref: '#/components/responses/Problem403Forbidden'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-programs
      parameters:
      - schema:
          type: string
          pattern: ^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$
          example: 50.896453,-1.4037239
        in: query
        name: coordinates
        description: Filter the returned programs to only those available to someone who primarily charges their vehicles at these coordinates.
      - schema:
          type: string
          example: SW1 1AA
        in: query
        name: postal_code
        description: Filter the returned programs to only those available to someone someone who primarily charges their vehicles in this postal code area. The postal code needs to be in the correct format for the country specified by `country_code`.
      - schema:
          $ref: '#/components/schemas/CountryCode'
        in: query
        name: country_code
        description: Specify the country the postal code is within. Required if postal_code is used.
      - $ref: '#/components/parameters/version-2'
      - $ref: '#/components/parameters/user'
      description: 'By default, this endpoint returns all programs in our system and does not require authentication. The `coordinates`, `postal_code` and `country_code` query parameters can be used to narrow the list down to just programs eligible for particular locations. Coordinates and postal code searching are mutually exclusive and mixing the query parameters will result in a 400 error response.


        If the client is authenticated as a specific user (either via Authorisation Code grant type or the `EvEnergy-User` header) it will return only programs that user is possibly eligible for, based on the location information we have for them.

        '
      security: []
  /programs/{program_id}:
    parameters:
    - $ref: '#/components/parameters/program_id'
    get:
      summary: Retrieve a program
      tags:
      - Programs
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/Program'
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestRetrieve'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '403':
          $ref: '#/components/responses/Problem403Forbidden'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-programs-program_id
      description: Retrieve details for a single, specific program.
      security: []
      parameters:
      - $ref: '#/components/parameters/version-2'
  /incentive_schemes:
    get:
      summary: List incentive schemes
      tags:
      - Programs
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/IncentiveScheme'
          headers:
            Link:
              $ref: '#/components/headers/link'
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestList'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '403':
          $ref: '#/components/responses/Problem403Forbidden'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-incentive_schemes
      description: Returns a list of Incentive Schemes that the authenticated User is eligble for.
      parameters:
      - $ref: '#/components/parameters/evenergy-user-required'
  /programs/{program_id}/user_verification:
    parameters:
    - name: program_id
      in: path
      required: true
      schema:
        type: string
      description: The ID of the specific Program to retrieve.
    post:
      summary: Verify user
      tags:
      - Programs
      responses:
        '201':
          description: Created
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestCreate'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '403':
          $ref: '#/components/responses/Problem403Forbidden'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: post-programs-user-verification
      description: 'Upload a user''s utility account information for verification and account matching against the utility''s customer data.


        An endpoint to serve this data will be added in future.'
      parameters:
      - $ref: '#/components/parameters/version-2'
      - $ref: '#/components/parameters/user'
      requestBody:
        content:
          application/json:
            schema:
              type: object
            examples:
              Account Number Only:
                value:
                  account_number: 12345678-A
              Account Number and SAID:
                value:
                  account_number: 0987654321
                  said: ABC-12345678
              PIN:
                value:
                  pin: abcde-12345
        description: 'The body must be a JSON object containing data required for user verification. The exact dat requirements differ by program and will be validated against a dynamic JSON schema, so no specific type is defined here.


          The examples are not exhaustive.'
  /programs/{program_id}/join:
    parameters:
    - $ref: '#/components/parameters/program_id'
    post:
      summary: Join program
      tags:
      - Programs
      responses:
        '201':
          description: The user was enrolled in the program's default tier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Program'
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestCreate'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '403':
          $ref: '#/components/responses/Problem403Forbidden'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: post-programs-program_id-join
      description: 'Enrol the authenticated user in this program''s default tier.


        If the user is already enrolled in a different program they will leave

        it before joining this one. Re-joining a program the user is already in

        returns the same program unchanged.


        Returns `404` if the program does not exist or has no default tier

        configured.'
      parameters:
      - $ref: '#/components/parameters/version-2'
      - $ref: '#/components/parameters/user'
      security:
      - oauth2:
        - utility_account:write
  /programs/{program_id}/tiers:
    parameters:
    - $ref: '#/components/parameters/program_id'
    get:
      summary: List program tiers
      tags:
      - Programs
      description: 'List all selectable tiers under the given Program. Public read-only — no

        authentication required. When the request is authenticated as a specific

        user (Authorization Code grant, or Client Credentials with `EvEnergy-User`),

        each tier''s `eligible` field is populated with the user''s eligibility result.

        Anonymous or pure client-credentials requests receive `eligible: null`.

        '
      responses:
        '200':
          description: Returns 0 or more Program Tiers.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProgramTier'
          headers:
            Link:
              $ref: '#/components/headers/link'
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestList'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-programs-program_id-tiers
      parameters:
      - $ref: '#/components/parameters/previous'
      - $ref: '#/components/parameters/next'
      - $ref: '#/components/parameters/page_size'
      - $ref: '#/components/parameters/version-2'
      - $ref: '#/components/parameters/user'
      security: []
  /programs/{program_id}/tiers/{tier_id}:
    parameters:
    - $ref: '#/components/parameters/program_id'
    - $ref: '#/components/parameters/tier_id'
    get:
      summary: Retrieve a program tier
      tags:
      - Programs
      description: 'Retrieve a single tier nested under a Program. Public read-only. The

        `eligible` field is per-user (see the list endpoint description).

        '
      responses:
        '200':
          description: Returns a single Program Tier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProgramTier'
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestRetrieve'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-programs-program_id-tiers-tier_id
      parameters:
      - $ref: '#/components/parameters/version-2'
      - $ref: '#/components/parameters/user'
      security: []
  /programs/{program_id}/participation_agreement_versions:
    parameters:
    - $ref: '#/components/parameters/program_id'
    get:
      summary: List participation agreement versions
      tags:
      - Programs
      description: 'List versions of the Participation Agreement attached to the given Program.

        Public read-only — no authentication required. Fetch the single currently

        active version from the `current` sub-resource.

        '
      parameters:
      - $ref: '#/components/parameters/version-2'
      - $ref: '#/components/parameters/previous'
      - $ref: '#/components/parameters/next'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          description: Returns 0 or more Participation Agreement Versions.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ParticipationAgreementVersion'
          headers:
            Link:
              $ref: '#/components/headers/link'
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestList'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-programs-program_id-participation_agreement_versions
      security: []
  /programs/{program_id}/participation_agreement_versions/{participation_agreement_version_id}:
    parameters:
    - $ref: '#/components/parameters/program_id'
    - $ref: '#/components/parameters/participation_agreement_version_id'
    get:
      summary: Retrieve a participation agreement version
      tags:
      - Programs
      description: 'Retrieve a single Participation Agreement Version nested under a Program.

        Public read-only.

        '
      responses:
        '200':
          description: Returns a single Participation Agreement Version.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParticipationAgreementVersion'
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestRetrieve'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-programs-program_id-participation_agreement_versions-id
      parameters:
      - $ref: '#/components/parameters/version-2'
      security: []
  /programs/{program_id}/participation_agreement_versions/current:
    parameters:
    - $ref: '#/components/parameters/program_id'
    get:
      summary: Retrieve the currently active participation agreement version
      tags:
      - Programs
      description: 'Retrieve the currently active Participation Agreement Version — the

        highest-numbered published version of the Program''s agreement. `current`

        is a magic value used in place of a version UID.


        Public read-only. Returns `404` if the Program has no published version.

        '
      responses:
        '200':
          description: Returns the currently active Participation Agreement Version.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParticipationAgreementVersion'
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestRetrieve'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: get-programs-program_id-participation_agreement_versions-current
      parameters:
      - $ref: '#/components/parameters/version-2'
      security: []
  /programs/{program_id}/participation_agreement_versions/{participation_agreement_version_id}/accept:
    parameters:
    - $ref: '#/components/parameters/program_id'
    - $ref: '#/components/parameters/participation_agreement_version_id'
    post:
      summary: Accept a participation agreement version
      tags:
      - Programs
      description: 'Record that the authenticated user has accepted the given Participation

        Agreement Version, identified by its UID (e.g. the `id` returned by the

        `current` sub-resource).


        The request body must be an empty JSON object (`{}`). Sending any

        additional fields returns `400 Bad Request`. The success response is

        `201 Created` with no body. The acceptance is idempotent — repeating the

        call for the same (user, version) pair returns 201 without creating a

        duplicate acceptance record.


        Requires a user-grant access token (Authorization Code or Password). The

        endpoint is not exposed to Client Credentials clients because acceptance

        is intrinsically a per-user action.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
            example: {}
      responses:
        '201':
          description: The acceptance has been recorded.
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestCreate'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '403':
          $ref: '#/components/responses/Problem403Forbidden'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: post-programs-program_id-participation_agreement_versions-id-accept
      parameters:
      - $ref: '#/components/parameters/version-2'
      security:
      - oauth2:
        - programs:write
  /programs/{program_id}/post-enrollment-verification:
    parameters:
    - name: program_id
      in: path
      required: true
      schema:
        type: string
      description: The ID of the specific Program to retrieve.
    post:
      summary: Post-enrollment verification
      tags:
      - Programs
      responses:
        '201':
          description: Created
          headers:
            EvEnergy-Version:
              $ref: '#/components/headers/version-2'
            X-RateLimit-Limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            RetryAfter:
              $ref: '#/components/headers/retry-after'
        '400':
          $ref: '#/components/responses/Problem400BadRequestCreate'
        '401':
          $ref: '#/components/responses/Problem401Unauthorized'
        '403':
          $ref: '#/components/responses/Problem403Forbidden'
        '404':
          $ref: '#/components/responses/Problem404NotFound'
        '406':
          $ref: '#/components/responses/Problem406NotAcceptable'
        '429':
          $ref: '#/components/responses/Problem429TooManyRequests'
      operationId: post-programs-post-enrollment-verification
      description: 'Upload a user''s post-enrollment verification data for account verification.


        This endpoint validates data against the program''s post-enrollment verification schema.'
      parameters:
      - $ref: '#/components/parameters/version-2'
      - $ref: '#/components/parameters/user'
      requestBody:
        content:
          application/json:
            schema:
              type: object
            examples:
              Account Number Only:
                value:
                  account_number: 12345678-A
        description: The body must be a JSON object containing data required for post-enrollment verification. The exact data requirements differ by program and will be validated against a dynamic JSON schema, so no specific type is defined here.
components:
  parameters:
    user:
      name: EvEnergy-User
      description: If the client is authenticated using Client Credentials, setting EvEnergy-User to a valid user ID allows requests to be made as if you were directly authenticated as that user.
      in: header
      required: false
      schema:
        type: string
        pattern: user[A-Z\d]{26}
        example: user01HN2NJ9NMRZBXT1H6FT9N7735
    evenergy-user-required:
      name: EvEnergy-User
      in: header
      required: false
      description: This endpoints requires a user ID to be specified via this header when using Client Credentials authentication.
      schema:
        type: string
        pattern: user[A-Z\d]{26}
        example: user01HN2NJ9NMRZBXT1H6FT9N7735
    tier_id:
      name: tier_id
      in: path
      required: true
      schema:
        type: string
        example: tier01JCK1HPNAANB8WN253G27SFPC
        pattern: tier[A-Z\d]{26}
      description: The ID of the specific Program Tier to retrieve.
    expand-on-programvehiclecompatibility:
      name: expand
      in: query
      schema:
        type: array
        items:
          type: string
          enum:
          - model
      explode: true
      description: Specify a url field to expand into a nested resource.
    version-2:
      name: EvEnergy-Version
      description: Specify the version of this endpoint to use.
      required: false
      in: header
      schema:
        type: number
        enum:
        - 2
    page_size:
      name: page_size
      description: Specify the number of results to return per page.
      in: query
      required: false
      schema:
        type: integer
        default: 25
        minimum: 1
        maximum: 100
        example: 10
    previous:
      name: page_before
      description: Return results from the page after this ID.
      in: query
      required: false
      schema:
        type: string
        pattern: '[a-z]{4}[A-Z\d]{26}'
        example: xmpl01HNFZM7Q8FXASZXYZ6XM3TQRR
    next:
      name: page_after
      description: Return results from the page before this ID.
      in: query
      required: false
      schema:
        type: string
        pattern: '[a-z]{4}[A-Z\d]{26}'
        example: xmpl01HNFZM7Q8FXASZXYZ6XM3TQRR
    program_id:
      name: program_id
      in: path
      required: true
      schema:
        type: string
      description: The ID of the specific Program to retrieve.
    participation_agreement_version_id:
      name: participation_agreement_version_id
      in: path
      required: true
      schema:
        type: string
        example: pagv01JCDYP6Z8MX9XWVAV0A7G3KPN
        pattern: pagv[A-Z\d]{26}
      description: The ID of the specific Participation Agreement Version.
  responses:
    Problem404NotFound:
      description: This resource either does not exist or the client is not authorized to access it.
      content:
        application/problem+json:
          schema:
            type: object
            required:
            - title
            - detail
            properties:
              status:
                type: number
                example: 404
              title:
                type: string
                example: Not found
              detail:
                type: string
                example: Resource does not exist or cannot be accessed.
      headers:
        EvEnergy-Version:
          $ref: '#/components/headers/version-2'
        X-RateLimit-Limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        RetryAfter:
          $ref: '#/components/headers/retry-after'
    Problem400BadRequestRetrieve:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/RFC9457ProblemDetail'
          examples:
            Unsupported Version:
              $ref: '#/components/examples/ProblemUnsupportedVersion'
      description: A problem with the request's parameters prevented it being fulfilled.
      headers:
        EvEnergy-Version:
          $ref: '#/components/headers/version-2'
        X-RateLimit-Limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
    Problem400BadRequestCreate:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/RFC9457ProblemDetail'
          examples:
            Request failed validation:
              $ref: '#/components/examples/ProblemValidationFailedVehicle'
      description: A problem with the request's parameters prevented it being fulfilled.
      headers:
        EvEnergy-Version:
          $ref: '#/components/headers/version-2'
        X-RateLimit-Limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        RetryAfter:
          $ref: '#/components/headers/retry-after'
    Problem406NotAcceptable:
      description: Could not satisfy the request Accept header.
      content:
        application/problem+json:
          schema:
            type: object
            required:
            - title
            - detail
            properties:
              status:
                type: number
                example: 406
              title:
                type: string
                example: Not Acceptable
              detail:
                type: string
                example: Could not satisfy the request Accept header.
      headers:
        EvEnergy-Version:
          $ref: '#/components/headers/version-2'
        X-RateLimit-Limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        RetryAfter:
          $ref: '#/components/headers/retry-after'
    Problem401Unauthorized:
      description: You need to authorise requests to access this resource.
      content:
        application/problem+json:
          schema:
            type: object
            required:
            - title
            - detail
            properties:
              status:
                type: number
                example: 401
              title:
                type: string
                example: Unauthorized
              detail:
                type: string
                example: Authentication credentials were not provided.
      headers:
        EvEnergy-Version:
          $ref: '#/components/headers/version-2'
        X-RateLimit-Limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        RetryAfter:
          $ref: '#/components/headers/retry-after'
    Problem429TooManyRequests:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/RFC9457ProblemDetail'
          examples:
            Example 1:
              value:
                type: https://api.ev.energy/v2/problems/rate-limit-exceeded/
                status: 429
                title: Too Many Requests
                detail: Request was rate limited. Try again in 42 seconds
      description: The client h

# --- truncated at 32 KB (60 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ev-energy/refs/heads/main/openapi/ev-energy-programs-api-openapi.yml