Partner Inventory API.
A read-only JSON API for independent dealers who want to show FEM machines and attachments on their own website. You keep your customers and your own margin; we keep the listing data accurate. Everything is served over HTTPS from fullyequippedmachinery.com.
Getting a key
Keys are issued by hand. Email sales@fullyequippedmachinery.com with your dealership name, the website you will publish on, and whether you also want attachment pricing. We will send a key that looks like femk_live_….
Treat the key as a password. Call the API from your server, never from browser JavaScript — a key in front-end code is a key you have published. If a key is exposed, tell us and we will revoke it and issue a new one. We cannot read your key back to you; only a one-way hash of it is stored.
Authentication
Send the key as a bearer token on every request:
curl -H "Authorization: Bearer femk_live_…" \
https://fullyequippedmachinery.com/api/partners/v1/machinesKeys are not accepted in query strings. Query strings end up in access logs, browser history and Referer headers, which is how keys leak.
Endpoints
GET /machines
Every FEM machine currently available, with specifications, installed equipment, location, retail pricing in CAD and USD, and absolute photo URLs. Machines that have sold are removed from the response rather than flagged, so a listing driven by this endpoint disappears instead of going stale.
{
"count": 4,
"generated_at": "2026-08-11T09:30:00.000Z",
"machines": [
{
"id": "1",
"fem_url": "https://fullyequippedmachinery.com/equipment/…",
"year": 2021,
"make": "Hitachi",
"model": "ZX135USK-6",
"hours": 2950.3,
"ton_class": "13.5 Ton",
"status": "available",
"location": "Surrey BC",
"price": { "basis": "retail", "cad": 159000, "usd": 112900 },
"specifications": { "equipmentType": "Excavator", "…": "…" },
"installed_equipment": ["Hydraulic quick coupler", "…"],
"shipping": null,
"photos": [
{ "url": "https://…/api/catalog-media/1/0", "alt": "…", "kind": "finished_photo", "sort": 0 }
]
}
]
}GET /machines/{id}
A single machine, for refreshing one listing without re-pulling the catalogue. Returns 404 if the unit is not currently available.
GET /machines/pricing
Your margin. Confidential. What you earn on a machine sale, if a rate has been agreed with you. Requires the pricing scope.
You list machines at FEM's retail price, so this is never a display number — it is your economics on a completed sale, and it is returned two ways because it settles two ways. dealer_net is what you pay FEM if you fulfil the sale. margin is what FEM pays you as commission if we fulfil it. They are the same spread from either end, so one agreed rate covers both and you do not have to decide who ships before you can quote.
{
"pricing_agreed": true,
"discount_percent": <your agreed rate>,
"machines": [
{
"id": "1",
"make": "Hitachi",
"model": "ZX135USK-6",
"retail": { "cad": 159000, "usd": 112900 },
"dealer_net": { "cad": ..., "usd": ... },
"margin": { "cad": ..., "usd": ... }
}
]
}Retail is shown because it is already public. Your rate is set in your dealer agreement, not here.
Like all pricing endpoints, this one sends no CORS headers, is not readable from a browser, and is served no-store. Machine and attachment rates are negotiated separately — you may have one and not the other.
GET /attachments
The published attachment product line — buckets, thumbs, couplers, breakers and tilt-rotators — grouped into families, each with its SKUs, carrier class and list price. This endpoint carries list price only and is safe to render on a public page.
GET /attachments/pricing
Your cost. Confidential. Returns your dealer-net price and margin per SKU alongside list, if a discount has been agreed with you. Requires the pricing scope on your key. Same two-sided settlement as machine pricing: dealer_net if you fulfil, margin if we do.
This endpoint is for your quoting and purchasing systems. It sends no CORS headers and is not reachable from a browser on your domain, and it is served no-store so nothing caches it. If no discount has been agreed yet you will get "pricing_agreed": false and list prices — never a zero-discount price presented as wholesale. Do not render these numbers on a public page.
GET /me
Confirms your key works and reports its scopes and rate-limit budget. Useful as a health check.
Photos
Photo URLs point back at FEM and should be hotlinked, not downloaded and re-hosted. Every image is served through a reviewed manifest, so if a photo is corrected or withdrawn, your site picks up the change automatically. A copy on your server would not.
Caching and rate limits
Cache responses for five minutes. Listing responses are sent with Cache-Control: private, max-age=300 and are the freshest we promise. Keys are limited to 1,200 requests per hour; every response carries X-RateLimit-Limit and X-RateLimit-Remaining, and exceeding it returns 429. Cache properly and you will not come close.
Errors
Errors return a JSON body of the form { "error": { "code": "…", "message": "…" } } with codes missing_credential and invalid_credential (401), insufficient_scope (403), not_found (404), rate_limited (429) and unavailable (503). A 503 means we could not validate our own catalogue and are refusing to serve a partial one — retry shortly.
Building it with AI
No developer? An AI assistant can build this integration for you. The prompt below is written for that — it carries the endpoints, the response shapes and the safety rules, so the tool does not put your key somewhere public, misprice your listings, or invent inventory that does not exist.
Copy it, replace the two <<< FILL THIS IN >>> lines with what your site is built with and where it is hosted, then paste it into ChatGPT, Claude, Cursor, Copilot, Lovable, Replit — whichever tool you use.
Leave the placeholder FEM_API_KEY in place. Do not paste your real key into a chat window. The prompt already tells the assistant to read the key from an environment variable and to show you where to put it on your platform.
Scroll inside the box to read it all. Replace the two lines marked <<< FILL THIS IN >>> before you paste it into your AI tool.
Ask it to get the /me test working first. Once your dealership name comes back, add the machine listing, then the detail pages, then attachments. If something breaks, paste the exact error back to the assistant.
Terms of use
Access is granted on these terms, and a key may be revoked if they are not met:
- Listings sourced from this API must be attributed to Fully Equipped Machinery.
- List machines and attachments at the retail price the API returns. Your rate is your margin, not a price to advertise.
- Dealer-net pricing and margin are confidential. They may be used to quote, buy and settle, and may not be published, rendered on a web page, or shared outside your dealership.
- Do not republish FEM inventory to third-party marketplaces or auction sites without written permission.
- Availability and pricing are not a guarantee of sale. Confirm with FEM before committing to a customer.
- Do not share your key, and do not use it from browser-side code.
Contact
Integration questions and key requests: sales@fullyequippedmachinery.com or 1 888-334-6467.