---
title: "Create a service record"
method: POST
path: "/api/v1/vehicles/{id}/service-records"
tags: ["Maintenance"]
---

# Create a service record

`POST /api/v1/vehicles/{id}/service-records`

## Request

- Base URL: `https://fleetkeep.co.uk`
- URL: `https://fleetkeep.co.uk/api/v1/vehicles/{id}/service-records`
- Auth: OAuth 2 (authorization code, authorization URL `https://fleetkeep.co.uk/auth/oauth2/authorize`, token URL `https://fleetkeep.co.uk/auth/oauth2/token`, scopes: `maintenance:write`)

Two-step operator-confirmed write for non-mobile clients. First send the proposed record with an 8-128 character Idempotency-Key; Fleetkeep returns confirmation_required. Retry the identical body and key with X-Fleetkeep-Confirmation. Safe retries return the original record with replay true. The signed Fleetkeep mobile client uses its native review flow. updateServiceReminder defaults to true.

## Headers

- `Idempotency-Key` string, required
- `X-Fleetkeep-Confirmation` string

## Request body

- ServiceRecordInput
  - `servicedAt` string, date, required
  - `odometerMileage` integer, nullable
  - `supplier` string, nullable
  - `invoiceReference` string, nullable
  - `costPence` integer, nullable
  - `workSummary` string, required
  - `partsNotes` string, nullable
  - `nextServiceDueDate` string, date, nullable
  - `nextServiceDueMileage` integer, nullable
  - `notes` string, nullable
  - `updateServiceReminder` boolean

## Response `200`

An idempotent retry returned the previously created record.

- ServiceRecordCreateEnvelope
  - `record` ServiceRecord, required
    - `id` string, uuid, required
    - `vehicleId` string, uuid, required
    - `servicedAt` string, date, required
    - `odometerMileage` integer, nullable, required
    - `supplier` string, nullable, required
    - `invoiceReference` string, nullable, required
    - `costPence` integer, nullable, required
    - `workSummary` string, required
    - `partsNotes` string, nullable, required
    - `nextServiceDueDate` string, date, nullable, required
    - `nextServiceDueMileage` integer, nullable, required
    - `notes` string, nullable, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
  - `replay` boolean, required

## Other responses

- `201`: Service record created.
- `400`: The request body or query was invalid.
- `401`: Missing or invalid Bearer access token.
- `403`: Token does not include the required scope.
- `404`: The requested resource does not exist on the authorised user's account, is the wrong event type, or is immutable history for this operation.
- `409`: Confirmation is required, invalid, expired or invalidated by an event update.
- `429`: Per-token rate limit exceeded (60 requests per minute).

---

[API](https://skmtc.dev/fleetkeep/apis/fleetkeep-api.md) · [All operations](https://skmtc.dev/fleetkeep/apis/fleetkeep-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fleetkeep/apis/fleetkeep-api/revisions/ace19bc0d64d?raw)
