---
title: "Create a private metadata record or upload a private document"
method: POST
path: "/api/v1/vehicles/{id}/documents"
tags: ["Vehicles"]
---

# Create a private metadata record or upload a private document

`POST /api/v1/vehicles/{id}/documents`

## Request

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

## Request body

- VehicleDocumentInput
  - `documentType` 'service_record' | 'invoice' | 'insurance' | 'inspection' | 'toll_statement' | 'warranty' | 'other', required
  - `title` string, required
  - `reference` string, nullable
  - `supplier` string, nullable
  - `issuedAt` string, date, nullable
  - `expiresAt` string, date, nullable
  - `notes` string, nullable

## Response `201`

Private record created with driverVisible false

- object
  - `record` VehicleDocument, required
    - `id` string, uuid, required
    - `documentType` 'service_record' | 'invoice' | 'insurance' | 'inspection' | 'toll_statement' | 'warranty' | 'other', required
    - `title` string, required
    - `reference` string, nullable, required
    - `supplier` string, nullable, required
    - `issuedAt` string, date, nullable, required
    - `expiresAt` string, date, nullable, required
    - `notes` string, nullable, required
    - `storageStatus` 'metadata_only' | 'uploaded', required
    - `fileName` string, nullable, required
    - `fileSize` integer, nullable, required
    - `contentType` string, nullable, required
    - `uploadedAt` string, date-time, nullable, required
    - `driverVisible` boolean, required
    - `createdAt` string, date-time, required
    - `downloadHref` string, nullable

## Other responses

- `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.
- `429`: Per-token rate limit exceeded (60 requests per minute).
- `503`: A required private storage, provider configuration or service dependency is unavailable.

---

[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)
