API Documentation

REST API for equipment maintenance tracking. All responses are JSON.

Authentication

Include your API key as a Bearer token in every request:

Authorization: Bearer maintio_xxxxxxxxxxxxxxxxxxxx

Generate API keys in your dashboard. All keys start with maintio_. The raw key is shown only once at creation.

Base URL

https://api.maint.io

Endpoints

GET /v1/assets

List all assets for the authenticated tenant.

Parameters

updated_since ISO 8601 datetime Return only assets updated after this timestamp.
POST /v1/assets

Create a new asset.

Request body

{ "id": "<uuid>", "name": "Pump A", "location": "Bay 3", "description": "..." }
GET /v1/tags/{tagId}

Look up a tag by its 10-character ID. Returns state: assigned | unlinked | retired.

POST /v1/tags/batch

Generate a batch of unlinked tag IDs.

Request body

{ "count": 100 }
GET /v1/records

List maintenance records.

Parameters

asset_id uuid Filter by asset.
updated_since ISO 8601 Delta filter.
POST /v1/records

Create a maintenance record. Idempotent — supply your own UUID.

Request body

{ "id": "<uuid>", "asset_id": "<uuid>", "record_type": "Inspection", "performed_at": "...", "description": "..." }
GET /v1/changes

Unified delta feed — assets, tags, and records updated since a timestamp.

Parameters

updated_since ISO 8601 Required. Use the previous response's next_updated_since for pagination.
limit integer Default 500. Max 1000.

Error codes

HTTP code Meaning
401 INVALID_API_KEY API key missing, malformed, or revoked.
403 INSUFFICIENT_SCOPE Key lacks the required scope for this action.
409 STALE_WRITE Updated_at mismatch — another client wrote first. Re-fetch and retry.
409 TAG_CONFLICT Tag ID already registered to a different asset.
429 QUOTA_EXCEEDED Monthly request quota exhausted. Upgrade or wait for reset.
429 RATE_LIMITED Per-minute limit reached. Retry after X-RateLimit-Reset.

Rate limits

Plan Requests/month Requests/minute
Solo 50,000 60
Team 500,000 300
Business 5,000,000 1,000
Enterprise Custom Custom