Fleetkeep Equipment API

Manage installed equipment, accounts and preserved lifecycle history.

GitHub OpenAPI

Operations 7

GET /api/v1/vehicles/{id}/checks List a vehicle's equipment lifecycle records #
POST /api/v1/vehicles/{id}/checks Add equipment to a vehicle #
PATCH /api/v1/vehicles/{id}/checks Update an equipment record #
DELETE /api/v1/vehicles/{id}/checks End an equipment lifecycle #
GET /api/v1/equipment/templates List stable equipment presets #
POST /api/v1/equipment/templates Preview equipment presets across owned vehicles #
PUT /api/v1/equipment/templates Apply previewed equipment presets across owned vehicles #

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/fleetkeep-co-uk:fleetkeep-co-uk-equipment-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

fleetkeep-co-uk-equipment-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Fleetkeep Co Uk Equipment API
  version: 0.8.0
  contact:
    name: Fleetkeep partner integration
    url: https://fleetkeep.co.uk/contact
    email: hello@fleetkeep.co.uk
  license:
    name: Proprietary
    url: https://fleetkeep.co.uk/legal/terms
  description: 'Operations tagged Equipment across 2 of this provider''s published API definitions: openapi.json, fleetkeep-co-uk-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://fleetkeep.co.uk
  description: Production
security:
- oauth2:
  - vehicles:read
tags:
- name: Equipment
  description: Manage installed equipment, accounts and preserved lifecycle history.
paths:
  /api/v1/vehicles/{id}/checks:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Vehicle UUID.
    get:
      tags:
      - Equipment
      summary: List a vehicle's equipment lifecycle records
      description: Returns current and historical equipment for an owned vehicle. `active` is true only when the record is not removed and has no removal date.
      operationId: listVehicleEquipment
      security:
      - oauth2:
        - vehicles:read
      responses:
        '200':
          description: Equipment lifecycle records.
          content:
            application/json:
              schema:
                type: object
                required:
                - equipment
                properties:
                  equipment:
                    type: array
                    items:
                      $ref: '#/components/schemas/EquipmentRecord'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    post:
      tags:
      - Equipment
      summary: Add equipment to a vehicle
      description: Creates an equipment lifecycle record for an owned vehicle.
      operationId: addVehicleEquipment
      security:
      - oauth2:
        - vehicles:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EquipmentInput'
      responses:
        '201':
          description: Equipment created.
          content:
            application/json:
              schema:
                type: object
                required:
                - id
                properties:
                  id:
                    type: string
                    format: uuid
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: A current record already exists for this equipment preset.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
    patch:
      tags:
      - Equipment
      summary: Update an equipment record
      description: 'Updates an owned equipment record. Current equipment cannot be ended through this operation; use the confirmed lifecycle-removal operation. Historical equipment cannot be reactivated: attempts return `equipment_history_immutable`.'
      operationId: updateVehicleEquipment
      security:
      - oauth2:
        - vehicles:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EquipmentUpdateInput'
      responses:
        '200':
          description: Equipment updated.
          content:
            application/json:
              schema:
                type: object
                required:
                - ok
                properties:
                  ok:
                    type: boolean
                    const: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Use the confirmation-gated lifecycle removal operation to end current equipment, keep historical equipment historical, or resolve a conflicting current preset record. Stable errors include `use_equipment_lifecycle_removal`, `equipment_history_immutable` and `equipment_preset_already_active`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
    delete:
      tags:
      - Equipment
      summary: End an equipment lifecycle
      description: Preserves the record as history; it does not hard-delete it. First call with the record ID and removal date returns a five-minute confirmation token. Retry the identical request with X-Fleetkeep-Confirmation. The token is bound to the user, bearer token, equipment version and removal date.
      operationId: removeVehicleEquipment
      security:
      - oauth2:
        - vehicles:write
      parameters:
      - name: X-Fleetkeep-Confirmation
        in: header
        required: false
        schema:
          type: string
        description: Confirmation token returned by the immediately preceding request.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - id
              - removedOn
              properties:
                id:
                  type: string
                  format: uuid
                removedOn:
                  type: string
                  format: date
              additionalProperties: false
      responses:
        '200':
          description: Equipment moved to lifecycle history.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EquipmentRemovalResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Confirmation is required, invalid, expired or invalidated.
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/ActionConfirmationRequired'
                - $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://fleetkeep.co.uk
      description: Production
  /api/v1/equipment/templates:
    get:
      tags:
      - Equipment
      summary: List stable equipment presets
      operationId: listEquipmentTemplates
      security:
      - oauth2:
        - vehicles:read
      responses:
        '200':
          description: Equipment preset catalogue.
          content:
            application/json:
              schema:
                type: object
                required:
                - presets
                properties:
                  presets:
                    type: array
                    items:
                      $ref: '#/components/schemas/EquipmentPreset'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
    post:
      tags:
      - Equipment
      summary: Preview equipment presets across owned vehicles
      description: Read-only preview. Existing current presets are reported as skipped and never overwritten.
      operationId: previewEquipmentTemplate
      security:
      - oauth2:
        - vehicles:read
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EquipmentTemplateInput'
      responses:
        '200':
          description: Preview result and digest required to apply the identical canonical selection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EquipmentTemplateResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
    put:
      tags:
      - Equipment
      summary: Apply previewed equipment presets across owned vehicles
      description: Applies the identical canonical selection using its preview digest. Existing current presets are skipped and never overwritten.
      operationId: applyEquipmentTemplate
      security:
      - oauth2:
        - vehicles:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EquipmentTemplateApplyInput'
      responses:
        '200':
          description: Applied template result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EquipmentTemplateResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Apply did not include the digest for the identical preview selection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://fleetkeep.co.uk
      description: Production
components:
  responses:
    Unauthorized:
      description: Missing or invalid Bearer access token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Per-token rate limit exceeded (60 requests per minute).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Token does not include the required scope.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource does not exist on the authorised user's account, is the wrong event type, or is immutable history for this operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: The request body or query was invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    EquipmentTemplateResult:
      type: object
      required:
      - digest
      - requested
      - added
      - skippedAlreadyActive
      properties:
        ok:
          type: boolean
          const: true
        confirmationRequired:
          type: boolean
          const: true
        digest:
          type: string
          pattern: ^[a-f0-9]{64}$
        requested:
          type: integer
          minimum: 1
          maximum: 500
        added:
          type: integer
          minimum: 0
          maximum: 500
        skippedAlreadyActive:
          type: integer
          minimum: 0
          maximum: 500
    EquipmentRecord:
      allOf:
      - $ref: '#/components/schemas/EquipmentInput'
      - type: object
        required:
        - id
        - active
        - createdAt
        - updatedAt
        properties:
          id:
            type: string
            format: uuid
          active:
            type: boolean
          createdAt:
            type: string
            format: date-time
          updatedAt:
            type: string
            format: date-time
    EquipmentTemplateInput:
      type: object
      required:
      - vehicleIds
      - presetKeys
      properties:
        vehicleIds:
          type: array
          minItems: 1
          maxItems: 100
          uniqueItems: true
          items:
            type: string
            format: uuid
        presetKeys:
          type: array
          minItems: 1
          maxItems: 5
          uniqueItems: true
          items:
            type: string
            enum:
            - tunnel_account
            - bridge_crossing
            - gps_tracker
            - ghost_immobiliser
            - fuel_card
        startedOn:
          type:
          - string
          - 'null'
          format: date
        reviewDueDate:
          type:
          - string
          - 'null'
          format: date
        confirmDigest:
          type: string
          pattern: ^[a-f0-9]{64}$
      additionalProperties: false
    EquipmentRemovalResult:
      type: object
      required:
      - ok
      - equipment
      properties:
        ok:
          type: boolean
          const: true
        equipment:
          type: object
          required:
          - id
          - status
          - active
          properties:
            id:
              type: string
              format: uuid
            status:
              type: string
              const: removed
            active:
              type: boolean
              const: false
    EquipmentUpdateInput:
      type: object
      required:
      - id
      - name
      - category
      - status
      properties:
        id:
          type: string
          format: uuid
        name:
          $ref: '#/components/schemas/EquipmentInput/properties/name'
        presetKey:
          $ref: '#/components/schemas/EquipmentInput/properties/presetKey'
        category:
          $ref: '#/components/schemas/EquipmentInput/properties/category'
        status:
          $ref: '#/components/schemas/EquipmentInput/properties/status'
        provider:
          $ref: '#/components/schemas/EquipmentInput/properties/provider'
        reference:
          $ref: '#/components/schemas/EquipmentInput/properties/reference'
        portalUrl:
          $ref: '#/components/schemas/EquipmentInput/properties/portalUrl'
        startedOn:
          $ref: '#/components/schemas/EquipmentInput/properties/startedOn'
        endedOn:
          $ref: '#/components/schemas/EquipmentInput/properties/endedOn'
        reviewDueDate:
          $ref: '#/components/schemas/EquipmentInput/properties/reviewDueDate'
        reminderEnabled:
          $ref: '#/components/schemas/EquipmentInput/properties/reminderEnabled'
        notes:
          $ref: '#/components/schemas/EquipmentInput/properties/notes'
        details:
          $ref: '#/components/schemas/EquipmentInput/properties/details'
      additionalProperties: false
    EquipmentInput:
      type: object
      required:
      - name
      - category
      - status
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 120
        presetKey:
          type:
          - string
          - 'null'
          enum:
          - tunnel_account
          - bridge_crossing
          - gps_tracker
          - ghost_immobiliser
          - fuel_card
          - breakdown_cover
          - warranty
          - ownership_hire
          - service_due
          - null
        category:
          type: string
          enum:
          - tracking
          - security
          - fuel
          - other
        status:
          type: string
          enum:
          - in_place
          - needs_attention
          - not_applicable
          - removed
        provider:
          type:
          - string
          - 'null'
          maxLength: 120
        reference:
          type:
          - string
          - 'null'
          maxLength: 160
        portalUrl:
          type:
          - string
          - 'null'
          format: uri
          maxLength: 500
        startedOn:
          type:
          - string
          - 'null'
          format: date
        endedOn:
          type:
          - string
          - 'null'
          format: date
        reviewDueDate:
          type:
          - string
          - 'null'
          format: date
        reminderEnabled:
          type: boolean
        notes:
          type:
          - string
          - 'null'
          maxLength: 1200
        details:
          type:
          - array
          - 'null'
          maxItems: 8
          items:
            $ref: '#/components/schemas/EquipmentDetail'
      additionalProperties: false
    ActionConfirmationRequired:
      type: object
      required:
      - error
      - confirmationToken
      - expiresAt
      properties:
        error:
          type: string
          const: confirmation_required
        confirmationToken:
          type: string
        expiresAt:
          type: string
          format: date-time
      additionalProperties: false
    EquipmentTemplateApplyInput:
      allOf:
      - $ref: '#/components/schemas/EquipmentTemplateInput'
      - type: object
        required:
        - confirmDigest
        properties:
          confirmDigest:
            type: string
            pattern: ^[a-f0-9]{64}$
    Error:
      type: object
      additionalProperties: false
      required:
      - error
      properties:
        error:
          type: string
          example: registration_required
    EquipmentPreset:
      type: object
      required:
      - key
      - name
      - shortLabel
      - category
      - description
      properties:
        key:
          type: string
          enum:
          - tunnel_account
          - bridge_crossing
          - gps_tracker
          - ghost_immobiliser
          - fuel_card
        name:
          type: string
        shortLabel:
          type: string
        category:
          type: string
          enum:
          - tracking
          - security
          - fuel
          - other
        description:
          type: string
    EquipmentDetail:
      type: object
      required:
      - label
      - value
      properties:
        label:
          type: string
          maxLength: 60
        value:
          type: string
          maxLength: 240
      additionalProperties: false
  securitySchemes:
    oauth2:
      type: oauth2
      description: OAuth 2.1 authorisation-code flow with PKCE (S256). End-user delegates per-vehicle access to a partner client. Access tokens expire after 1 hour; refresh tokens (granted with the offline_access scope) live for 30 days.
      flows:
        authorizationCode:
          authorizationUrl: https://fleetkeep.co.uk/auth/oauth2/authorize
          tokenUrl: https://fleetkeep.co.uk/auth/oauth2/token
          refreshUrl: https://fleetkeep.co.uk/auth/oauth2/token
          scopes:
            vehicles:read: Read the authorised user's vehicles and compliance dates.
            vehicles:write: Add, update, delete and bulk-add vehicles on the authorised user's behalf.
            maintenance:read: Read the authorised user's maintenance tasks and completed history.
            maintenance:write: Create, update, complete and cancel the authorised user's maintenance tasks.
            operations:read: Read the authorised user's tracking snapshots, Wex route data and operational defect records.
            operations:write: Report and complete defects on the authorised user's behalf.
            tolls:read: Read the authorised user's toll and clean-air account records, charges and statement previews.
            tolls:write: Create toll and clean-air records and apply confirmed statement imports on the authorised user's behalf.
            documents:read: List and download the authorised user's private vehicle documents.
            documents:write: Create private vehicle document records and uploads on the authorised user's behalf.
            reminders:read: Read reminder settings and contacts.
            reminders:write: Manage reminder settings and contacts, and explicitly confirm verification sends.
            profile:read: Read the authorised user's Fleetkeep account profile.
            guidance:read: Read the authorised user's approved driver guidance and private guidance document.
            exports:read: Download the authorised user's private account and fleet spreadsheet exports.
            offline_access: Issue a refresh token so the partner can refresh access without re-prompting the user.
x-refined-from:
- openapi.json
- fleetkeep-co-uk-openapi.json
x-provenance:
  method: harvested
  publisher: Fleetkeep
  source: https://fleetkeep.co.uk/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)