Fleetio API: What You Can Automate on Each Plan
A fault code should reach the shop before the vehicle reaches the shoulder. Carly can turn Fleetio’s alert into the work order, message, and follow-up task. It can also chase a stalled purchase-order approval, route an overdue service issue, update drivers or managers, and give the fleet a recurring brief instead of another dashboard queue.
Fleetio’s API is fully self-serve — you generate a key from Settings without talking to anyone — but it’s Professional and Premium only. Fleetio’s help center says it verbatim: “API access is only available for Professional and Premium Plan customers.” If you’re on Essential, there is no API and no webhooks, and no add-on will change that.
That’s the whole buying decision, so here it is up front alongside what the tiers actually cost.
What fleets actually automate with it
The jobs that come up most, all of which Fleetio already knows about and simply doesn’t act on:
- Fault codes that open work. A DTC alert fires and, instead of waiting for someone to check the dashboard, it opens a work order and messages the shop with the vehicle and the code.
- Purchase orders that stop stalling. A PO sits at “pending approval” for four days because the approver never saw it. The status change itself can chase them, and chase again if it’s still sitting there tomorrow.
- Overdue service that chases itself. An issue is created and nobody’s assigned. Rather than a weekly report nobody reads, the issue can route to the right person the moment it appears.
The pattern is the same in each: Fleetio has the event, and the follow-up is the part that falls through.
What each plan gets you
Fleetio publishes this, though the figures are a 5-asset annual band rather than a universal per-vehicle rate:
| Essential | Professional | Premium | |
|---|---|---|---|
| Per vehicle / month | $4 annual, $5 monthly | $7, annual only | $10, annual only |
| API access | None | 50 requests/min | 250 requests/min |
| Webhooks | None | 10,000 events / 30 days | Unlimited |
| Automations | None | Up to 5 active | Up to 40 active |
One correction worth making, because search results get it wrong consistently: several summaries report Professional as “API access at 10,000 requests per 30 days.” That’s not the API limit — 10,000 per 30 days is the webhook event allowance. Professional’s API limit is 50 requests per minute.
Fleetio’s own pricing footnote notes that subscriptions price on plan, fleet size range, contract term, and payment term, so treat $4/$7/$10 as the shape rather than your quote.
Getting a key
Account Menu → Settings → Manage API Keys → + Add API Key → give it a label, select an API version, save.
You also need the Account Token, shown below the key listing on that same page. If you can’t find it, it’s sitting in your dashboard URL — in https://secure.fleetio.com/abc123/dashboard, the token is abc123.
Both go in headers:
Authorization: Token YOUR_API_KEY
Account-Token: YOUR_ACCOUNT_TOKEN
The literal word Token is required. Fleetio’s docs shout about this, and it’s still the most common auth failure people hit — Authorization: YOUR_KEY fails in a way that reads like a bad key.
Keys inherit the permissions of whoever created them. A key made by a restricted user returns 403 on anything that user can’t see, which is worth knowing before you have an ops manager generate one on your behalf.
Versioning is date-based via X-Api-Version, currently 2025-05-05. Omitting it is safe — keys auto-lock to the version current when they were created.
Full CRUD, not a read-only API
Create, update, and delete are all available on vehicles, work orders, service entries, fuel entries, issues, parts, purchase orders and line items, meter entries, contacts, location entries, equipment, expense entries, vendors, submitted inspection forms, tires, and custom fields.
There’s also a Bulk API handling up to 100 records per request, which the docs recommend as soon as you expect to exceed 20 requests per minute — sensible given a 50/min ceiling on Professional.
The webhooks are the real reason to be here
Seventy-plus outbound events, HMAC-SHA256 signed in X-Fleetio-Webhook-Signature, and manageable through the API itself rather than only the UI. This is a better event surface than most fleet software ships.
Setup: Account Settings → Administration → Webhooks → + Add Webhook, pick an event type and target URL. The secret key is under the webhook’s dropdown as “View Secret Key.”
The event list, by object:
- Vehicles — created, updated, status changed, group changed, archived, deleted, assigned, comment added
- Work orders — created, updated, deleted, status changed, comment added, document added
- Issues — created, updated, deleted, resolved, closed, comment added
- Service entries, fuel entries, meter entries, expense entries — created, updated, deleted (plus comment added on the first three)
- Purchase orders — created, updated, pending approval, approved, purchased, received, closed, deleted, comment added
- DTC alerts — created, resolved
- Inspections — submitted form created, submitted form deleted
- Parts, contacts, vendors, equipment — created, updated, deleted, comment added, plus archive/merge/assign on contacts
- Places — created, updated, deleted, visited
- Vehicle assignments, location entries, users, import completed
Payloads carry id, event, an ISO 8601 timestamp, triggered_by (a user or null), and the triggering object.
The retry policy has teeth. Your endpoint must return 200 within 30 seconds. Failures retry five times in the first hour, then hourly for 24 hours — but after three consecutive failed messages Fleetio disables the webhook entirely. A brief outage doesn’t back off, it kills the subscription until someone manually re-enables it. Build the receiver to acknowledge fast and process asynchronously.
Three things that waste a day
- The base URL says v1, but half the resources are v2. Docs advertise
/api/v1/, yet as of version 2024-06-30 work orders, service entries, issues, and contacts are documented as v2, while vehicles, fuel entries, parts, meter entries, and purchase orders stayed v1. Both paths respond to auth, so guessing wrong gives you a confusing 401 rather than a clean 404. - Trial accounts silently can’t test. Fleetio states that sample data under a trial account isn’t accessible via the API — you have to create your own records. Your first calls return empty arrays against a fleet you can plainly see in the UI, which looks exactly like broken auth.
- Two pagination models mid-migration. Endpoints on 2024-01-01 and later use cursor pagination (
start_cursor/next_cursor,per_pagemax 100); older ones use deprecated page-based paging. Andestimated_remaining_countis explicitly approximate and caps out around 500 — don’t use it as a record count.
One thing not to overclaim: Fleetio ships no public MCP server. There’s a post on Fleetio’s engineering blog about setting up an MCP server in Rails, but it’s a generic tutorial by a Fleetio engineer using a placeholder — not a customer-connectable endpoint.
Getting the event to do something
Seventy webhook types only matter if something is on the other end. Most fleets wire a couple into Slack and stop there, which turns a genuine event stream into a notification feed nobody reads.
Handing it to an AI assistant hits a specific limit.
Scheduled work is no longer the dividing line — ChatGPT and Claude both run tasks on a timer without anyone watching. The line that still holds is event triggers. Nothing kicks off because something happened in one of your apps; it kicks off because the clock said so, which means anything time-sensitive waits for the next run.
“Summarize last month’s work orders” is well inside what ChatGPT or Claude will do with a Fleetio export. “Open a work order and notify the shop the moment a DTC alert fires” is not, because nothing on that side is watching for the alert.
Carly covers that half:
- Fires on the Fleetio event —
dtc_alert_created,issue_created,purchase_order_pending_approval, whichever you care about - Runs the full response in one flow — read the issue, look up the vehicle and assignee, draft the message, send it, update the record
- Actually sends — Gmail and Outlook, with attachments
- Acknowledges fast — which matters against a 30-second timeout and a three-strikes auto-disable
Because Fleetio exposes a public API, you can connect it natively to Carly from the Integrations tab with your API token. Carly can then use Fleetio in on-demand, recurring, and event-triggered workflows. AI agents start at $35/month, and workflow steps that don’t use AI run free and unlimited.
Frequently Asked Questions
Which Fleetio plans include API access?
Professional and Premium only. Essential has no API and no webhooks. Professional allows 50 requests per minute and 10,000 webhook events per 30 days; Premium allows 250 requests per minute and unlimited webhook events.
How do I get a Fleetio API key?
Account Menu → Settings → Manage API Keys → + Add API Key. You’ll also need the Account Token from the same page, or from your dashboard URL. Both go in headers, and the Authorization header must include the literal word Token.
Does the Fleetio API cost extra on top of the plan?
No separate API fee is published. API access and webhooks are included plan features on Professional and Premium. Since Fleetio prices per vehicle, heavier API use doesn’t itself raise your bill — but moving off Essential does.
What webhooks does Fleetio support?
More than 70 events across vehicles, work orders, issues, service and fuel entries, purchase orders, DTC alerts, inspections, parts, contacts, vendors, equipment, and places. They’re HMAC-SHA256 signed and can be managed through the API as well as the UI.
Why do my Fleetio API calls return empty results on a trial?
Trial sample data isn’t exposed through the API. You need to create your own records to test against, even though the demo fleet is visible in the web interface.
More: AI agents for ops · Best AI workflow automation tools · Best AI agents for productivity
Ready to automate your busywork?
Carly schedules, researches, and briefs you—so you can focus on what matters.
See what people say
"Before Carly, I relied on a Calendly link, but the whole process felt impersonal and not very professional. Carly changed that by handling all the back-and-forth, so I'm no longer stuck in endless email threads trying to line up schedules.
Now Carly reaches out to candidates, shares my real-time availability, lets them pick a slot, then sends a Zoom link and drops it straight into my calendar. She sends reminders to both of us before each call, which has significantly reduced no-shows and last-minute confusion.
On top of scheduling, Carly acts like a full executive assistant, sending me my schedule the night before so I can prepare for each call. It reminds me of the old x.ai assistant, but Carly is noticeably smarter, faster, and better suited to my healthcare recruitment business."


