Skip to main content

Public API

Overview

The autoGMS Public API gives integration partners programmatic access to your garage data. Use it to connect diagnostics tools, fleet management platforms, custom dashboards, parts catalogs, and mobile apps to your autoGMS account.

Key features:

  • Full read and write access to all garage data including bookings, customers, vehicles, inventory, invoices, and more
  • Webhooks -- receive real-time notifications when events happen in your garage
  • API key authentication with per-key rate limiting and permission levels
  • Garage-scoped -- every request is scoped to a specific garage
  • Audit logging -- all API activity is logged and visible in the admin panel
  • Multi-garage support -- a single key can access multiple garages in your organisation

Prerequisites

API access is a paid add-on feature. Your organisation must have API Access enabled. If the feature is not enabled, the API Access page in the dashboard will show a notice with instructions to contact support.

Once enabled, organisation administrators can create and manage API keys directly from the dashboard -- no need to contact support for key operations.


Getting Started

Step 1: Create an API Key

  1. In the dashboard sidebar, navigate to your organisation and click API Access.
  2. Click Create key in the top-right corner.
  3. Enter a descriptive name for the key (e.g., "Production backend", "Fleet dashboard", "Staging testing").
  4. Choose a permission level:
    • Read only -- can only access GET endpoints; suitable for dashboards, reporting, and read-only integrations.
    • Read & Write -- full access to all endpoints including creating and modifying data.
  5. Click Create.
  6. The full API key is displayed once. Copy it immediately and store it securely -- it cannot be retrieved again after this dialog is closed.

Your organisation has a maximum number of active keys (shown at the top of the page). The Create button is disabled when you reach the limit.

Step 2: Make Your First Request

Use your API key in the X-API-Key header:

GET https://api.autoGMS.com/api/v1/garages
X-API-Key: agms_pk_live_your_key_here

This returns a list of all garages your key has access to.

Step 3: Access Garage Data

All data endpoints require a garage ID in the URL:

GET https://api.autoGMS.com/api/v1/garages/{garageId}/bookings
X-API-Key: agms_pk_live_your_key_here

Available Data

The API provides read and write access to all major areas of your garage:

ResourceReadWrite
GaragesLocation details, contact info--
CustomersProfiles, booking history, vehiclesCreate, update customers and vehicles
VehiclesVehicle details, VIN decodingCreate, update, delete vehicles
BookingsAll bookings with status, technicians, parts, stagesCreate, update, change status, delete, assign technicians and parts
Booking StagesJob stages with assigned techniciansCreate, update, change status, delete stages
TechniciansTeam list, performance stats, assigned work--
ServicesService catalog with pricing--
InventoryStock levels, low-stock alerts, barcode lookupCreate items, update details, adjust stock
InvoicesInvoice details, payment status--
EstimatesEstimate details, approval status, line itemsCreate, update, send estimates
Purchase OrdersPO details, procurement statistics--
BaysBay availability and current assignments--
WebhooksList subscriptions, delivery historyCreate, update, delete, test webhooks

Note: Write operations require a Read & Write API key. Read-only keys can only access GET endpoints.


Common Use Cases

Diagnostics Integration

Connect your diagnostics equipment to look up vehicles and create bookings:

GET  /api/v1/garages/{garageId}/vehicles/vin-lookup?vin=JTMHY7AJ5E4012345
POST /api/v1/garages/{garageId}/bookings

Fleet Management Dashboard

Monitor all active jobs, technician workloads, and bay availability:

GET /api/v1/garages/{garageId}/bookings/counts
GET /api/v1/garages/{garageId}/technicians
GET /api/v1/garages/{garageId}/bays

Parts Catalog Integration

Check inventory levels, adjust stock, and get low-stock alerts:

GET  /api/v1/garages/{garageId}/inventory?lowStock=true
GET /api/v1/garages/{garageId}/inventory/barcode/6291041500123
POST /api/v1/garages/{garageId}/inventory/{itemId}/adjust

Booking Automation

Create bookings, assign technicians, and manage job stages programmatically:

POST /api/v1/garages/{garageId}/bookings
POST /api/v1/garages/{garageId}/bookings/{bookingId}/status
POST /api/v1/garages/{garageId}/bookings/{bookingId}/technician
POST /api/v1/garages/{garageId}/bookings/{bookingId}/stages

Real-Time Notifications (Webhooks)

Receive instant notifications when events happen in your garage:

POST /api/v1/garages/{garageId}/webhooks

Subscribe to events like booking.completed, inventory.low_stock, invoice.paid, and more. autoGMS sends an HTTP POST to your URL whenever the event occurs.

Current high-coverage webhook events in v1 include:

  • customer.created
  • booking.created
  • booking.updated
  • booking.status_changed
  • booking.completed
  • technician.assigned
  • estimate.created
  • estimate.sent
  • inventory.low_stock

Custom Reporting

Pull financial data for external reporting tools:

GET /api/v1/garages/{garageId}/invoices?status=paid&dateFrom=2026-01-01
GET /api/v1/garages/{garageId}/purchase-orders/stats

For integrations like AssetMinder, use this pattern to avoid scheduling overlaps:

  1. Read first:
    • GET /api/v1/garages/{garageId}/bookings
    • GET /api/v1/garages/{garageId}/bookings/counts
    • GET /api/v1/garages/{garageId}/bays
  2. Build/refresh external calendar slots from active booking states.
  3. Optional write-back booking creation with POST /bookings.
  4. Handle booking guardrails:
    • GARAGE_CLOSED (409) — selected date is closed.
    • DATE_AT_CAPACITY (409) — daily capacity reached.
    • SLOT_AT_CAPACITY (409) — selected time slot is full.
    • ACTIVE_JOB_EXISTS (409) — same vehicle already has an active job.
  5. Use webhooks to keep external calendars near real-time, then reconcile with periodic polling.

API Response Format

All responses use a consistent JSON format.

Successful response:

{
"success": true,
"data": { ... }
}

List response with pagination:

{
"success": true,
"data": [ ... ],
"pagination": {
"page": 1,
"limit": 20,
"total": 156,
"totalPages": 8,
"hasMore": true
}
}

Error response:

{
"success": false,
"error": {
"type": "NotFoundError",
"message": "Booking not found",
"code": "RESOURCE_NOT_FOUND"
}
}

Common scheduling conflict errors for write integrations:

  • GARAGE_CLOSED (409)
  • DATE_AT_CAPACITY (409)
  • TIMESLOT_REQUIRED (400) when the garage requires a slot and no timeslot is supplied
  • INVALID_TIMESLOT (400) when timeslot is not valid for that date
  • SLOT_AT_CAPACITY (409)
  • ACTIVE_JOB_EXISTS (409)

If a garage uses time-slot scheduling, include a timeslot field in booking writes using HH:MM format, for example:

{
"date": "2026-03-04",
"timeslot": "09:00"
}

Pagination and Filtering

Pagination

All list endpoints support pagination:

ParameterDefaultMaxDescription
page1--Page number
limit20100Items per page

Example: GET /api/v1/garages/{garageId}/bookings?page=2&limit=50

Sorting

Use the sort parameter. Prefix with - for descending order:

  • sort=-date -- Newest first
  • sort=name -- Alphabetical

Date Filtering

Most list endpoints support date range filtering:

  • dateFrom=2026-01-01 -- Records from this date onwards
  • dateTo=2026-01-31 -- Records up to this date

Rate Limiting

Each API key has a request limit per minute based on its tier:

TierRequests per Minute
Standard60
Premium300
Enterprise1,000

Every response includes rate limit headers:

RateLimit-Limit: 60
RateLimit-Remaining: 42
RateLimit-Reset: 1706000000

If you exceed the limit, you will receive a 429 Too Many Requests response. Wait until the Retry-After period expires before making more requests.


Managing API Keys

API keys are managed from the API Access page in your organisation dashboard. Any organisation administrator can perform these actions.

API Access Dashboard

The API Access page shows:

  • Stats overview -- four summary cards displaying total requests (30 days), error rate, average latency (with p50/p95/p99 percentiles when available), and total data transferred.
  • Keys table -- lists all keys (active and revoked) with per-key metrics:
ColumnWhat it shows
NameKey name and masked prefix
PermissionRead only or Read & Write
Requests (30d)Request count for the last 30 days, with HTTP method breakdown
LifetimeTotal all-time request count
Errors (30d)Error count with spike detection (flags if 24-hour error rate is double the 30-day rate)
LatencyAverage response time
DataTotal data transferred
ActivityFirst and last request dates
StatusActive or Revoked

Key Actions

Each active key has three actions in the table:

  • View usage -- opens a detailed daily usage breakdown and per-endpoint statistics for that specific key.
  • Rotate -- generates a new key and invalidates the old one. The new key is shown once -- copy it immediately. Use this if a key may have been compromised.
  • Revoke -- permanently disables the key. Revoked keys remain visible in the table (greyed out) for audit purposes but can no longer be used for API requests.

Rotation and revocation are permanent and cannot be undone.

Analytics Cards

Below the keys table, the page shows additional analytics when data is available:

  • Method breakdown -- a visual bar showing request distribution across HTTP methods (GET, POST, PUT, PATCH, DELETE)
  • Top endpoints (30d) -- the most-called API paths with request counts, error counts, and average latency
  • Recent errors (7d) -- error patterns with status codes, error codes, occurrence counts, and sample paths
  • Requests by hour (30d) -- a histogram showing request distribution across hours of the day (UTC)
  • Response size distribution -- how response payload sizes are distributed
  • Top user agents (30d) -- which client libraries or tools are calling the API
  • Top IPs (30d) -- which IP addresses generate the most traffic
  • Usage by garage -- request distribution per garage with error rates and latency

Complete Endpoint Reference

All endpoints are prefixed with /api/v1. Resource endpoints use /garages/{garageId}/.

Garages

EndpointDescription
GET /garagesList all garages accessible to this key
GET /garages/{garageId}Get garage details

Customers

EndpointDescription
GET /garages/{gid}/customersList garage customers
GET /garages/{gid}/customers/search?q=ahmedSearch by name, email, or phone
POST /garages/{gid}/customersCreate a customer
PATCH /garages/{gid}/customers/{cid}Update a customer
GET /garages/{gid}/customers/{cid}Get customer with booking stats
GET /garages/{gid}/customers/{cid}/vehiclesList customer vehicles
POST /garages/{gid}/customers/{cid}/vehiclesAdd a vehicle to a customer
GET /garages/{gid}/customers/{cid}/bookingsList customer bookings

Vehicles

EndpointDescription
GET /garages/{gid}/vehiclesList all vehicles
POST /garages/{gid}/vehiclesCreate a vehicle
PATCH /garages/{gid}/vehicles/{vid}Update a vehicle
DELETE /garages/{gid}/vehicles/{vid}Delete a vehicle
GET /garages/{gid}/vehicles/{vid}Get vehicle details
GET /garages/{gid}/vehicles/vin-lookup?vin=...Decode a VIN

Bookings

EndpointDescription
GET /garages/{gid}/bookingsList bookings (filter by status, date, customer, technician)
POST /garages/{gid}/bookingsCreate a booking
GET /garages/{gid}/bookings/countsGet counts by status
GET /garages/{gid}/bookings/{bid}Get full booking detail
PATCH /garages/{gid}/bookings/{bid}Update a booking
DELETE /garages/{gid}/bookings/{bid}Delete a booking (pending/confirmed only)
POST /garages/{gid}/bookings/{bid}/statusChange booking status
POST /garages/{gid}/bookings/{bid}/technicianAssign a technician
GET /garages/{gid}/bookings/{bid}/inventoryList assigned parts
POST /garages/{gid}/bookings/{bid}/inventoryAssign parts to a booking
GET /garages/{gid}/bookings/{bid}/partsList assigned parts (alias)
GET /garages/{gid}/bookings/{bid}/attachmentsList attachments
GET /garages/{gid}/bookings/{bid}/stagesList project stages
POST /garages/{gid}/bookings/{bid}/stagesCreate a stage
PATCH /garages/{gid}/bookings/{bid}/stages/{sid}Update a stage
POST /garages/{gid}/bookings/{bid}/stages/{sid}/statusChange stage status
DELETE /garages/{gid}/bookings/{bid}/stages/{sid}Delete a stage

Stage lifecycle values commonly used by project workflows are:

  • draft
  • open
  • in_progress
  • completed
  • invoiced
  • closed

Technicians

EndpointDescription
GET /garages/{gid}/techniciansList technicians
GET /garages/{gid}/technicians/{tid}/statsPerformance statistics
GET /garages/{gid}/technicians/{tid}/bookingsAssigned bookings

Services

EndpointDescription
GET /garages/{gid}/servicesService catalog
GET /garages/{gid}/services/{sid}Service details
GET /garages/{gid}/services/{sid}/pricesPricing by vehicle type

Inventory

EndpointDescription
GET /garages/{gid}/inventoryList items
POST /garages/{gid}/inventoryCreate an inventory item
GET /garages/{gid}/inventory/{iid}Get item
PATCH /garages/{gid}/inventory/{iid}Update an item
POST /garages/{gid}/inventory/{iid}/adjustAdjust stock (add or subtract)
GET /garages/{gid}/inventory/low-stockItems below threshold
GET /garages/{gid}/inventory/categoriesCategories with counts
GET /garages/{gid}/inventory/statsInventory statistics
GET /garages/{gid}/inventory/barcode/{code}Barcode lookup

Invoices

EndpointDescription
GET /garages/{gid}/invoicesList invoices
GET /garages/{gid}/invoices/{iid}Get invoice detail

Estimates

EndpointDescription
GET /garages/{gid}/estimatesList estimates
POST /garages/{gid}/estimatesCreate an estimate
GET /garages/{gid}/estimates/{eid}Get estimate detail
PATCH /garages/{gid}/estimates/{eid}Update an estimate
POST /garages/{gid}/estimates/{eid}/sendSend an estimate to the customer

Purchase Orders

EndpointDescription
GET /garages/{gid}/purchase-ordersList purchase orders
GET /garages/{gid}/purchase-orders/{pid}Get PO detail
GET /garages/{gid}/purchase-orders/statsProcurement statistics

Bays

EndpointDescription
GET /garages/{gid}/baysList bays with current status

Webhooks

EndpointDescription
GET /garages/{gid}/webhooksList your webhook subscriptions
POST /garages/{gid}/webhooksCreate a webhook subscription
PATCH /garages/{gid}/webhooks/{wid}Update a webhook
DELETE /garages/{gid}/webhooks/{wid}Delete a webhook
POST /garages/{gid}/webhooks/{wid}/testSend a test event
GET /garages/{gid}/webhooks/{wid}/deliveriesView delivery history

Coming Soon

  • OAuth 2.0 -- Third-party authentication for marketplace integrations

Need More Help?

  • Enable API access: Email support@myautogms.com to add the API Access add-on to your subscription
  • Key management: Use the API Access page in your dashboard to create, rotate, and revoke keys
  • General support: Email support@myautogms.com
  • Integration scope and technical design review: Email support@myautogms.com and include:
    • target garage(s)
    • required permissions (read or read_write)
    • expected sync direction (pull-only vs push + pull)
    • expected volume (requests/minute, bookings/day)

Quick Reference

I want to...Endpoint / ActionMethod
Get API credentialsAPI Access page → Generate KeyDashboard
List all bookingsGET /api/v1/bookingsGET
Create a bookingPOST /api/v1/bookingsPOST
Get booking detailsGET /api/v1/bookings/:idGET
Update a bookingPATCH /api/v1/bookings/:idPATCH
List customersGET /api/v1/customersGET
Create a customerPOST /api/v1/customersPOST
List servicesGET /api/v1/servicesGET
List invoicesGET /api/v1/invoicesGET
Get availabilityGET /api/v1/availabilityGET
AuthenticateAuthorization: Bearer <api_key>Header
View API docsAPI Access page → DocumentationDashboard