Every address, in one page.
Every option, every response field, every reason a request is refused — and it cannot drift, because the service writes it itself.
BASE ADDRESS
https://api.hykestudio.com
Every address below starts with it, and every address below is printed in full so you can copy it whole.
Rate limits
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
429 monthly-limit-reachedThe free plan only, once the month's 7,500 basic requests are used up; the answer carries Retry-After, the seconds until the month's requests start again.
Everything below is drawn by the reference viewer from the service's own description, so it always says what the service does today. Each address opens on its own.
GET
https://api.hykestudio.com/v1/vehicle
Returns the picture itself for the requested vehicle, in the requested options, immediately — not a link to a picture.
A publishable key in the key option, safe in the address — or a secret key in the Authorization: Bearer header, never in the address.
Options
keyrequiredA publishable key, sent here or in the Authorization: Bearer header — served exactly alike either way. A secret key goes in the Authorization: Bearer header only: a secret key sent here is refused invalid-key, and the key is flagged for regeneration. A key presented in both places at once is refused invalid-key. A key is required on every request — the one thing we cannot guess.
asset_idinstead of make and modelThe id of a vehicle in the catalogue — the deterministic way to ask: no matching, no guessing. It wins outright: a make, model, market or vehicle_type sent beside it is reported ignored and the id decides what is served, with the difference ignored, not-offered, and nothing is refused.
An id we hold: that exact vehicle. Colour, angle, size and the rest still follow the usual never-refuse rules.
An id we issued, vehicle still being made: a stand-in of its shape, with a difference saying the vehicle is not in the library yet (not-in-library-yet).
An id we issued and have since withdrawn or replaced: still a picture. A replaced id quietly leads to its replacement; a withdrawn one is served a stand-in of the right shape, with the difference asset_id, substituted, blocked.
An id we never issued: refused asset-id-not-found, with the closest real ids suggested when any are close enough — the one place a mistake is made loud.
makeexpected, unless asset_id is givenThe vehicle's make, expected unless asset_id is given. Left out, a generic vehicle, with the difference make, assumed, not-specified. A make we do not recognise is served a generic vehicle, with the difference make, substituted, not-recognised. A make on the do-not-make list whose vehicle we do not hold is served down the matching ladder, with the difference make, substituted, blocked.
modelexpected, unless asset_id is givenThe vehicle's model, expected unless asset_id is given. Left out, a generic vehicle — of the body style asked when the request gave one — with the difference model, assumed, not-specified. A model we do not recognise is served a generic vehicle of the right kind where we can tell, with the difference model, substituted, not-recognised. A body style typed into the model is recognised: model=civic hatchback is treated as model=civic&body=hatchback; a model name already on our lists is never cut.
yearoptionalThe model year. Left out, the newest run of years we hold for that model, with the difference year, assumed, not-specified; for a vehicle we have never made, the model's newest generation. A year outside every run we hold is served the nearest run of years, with the difference year, substituted, not-in-library-yet, at match level nearest-years.
make=yamaha&model=yzf-r1&color=blue
year=2017 
year=2022
Shown here at up to 800 px wide · delivered at 1,536 px by default, up to 3,072 px. Any softness is only this page's display size.
A sample from our library, made for our own pages: our plate and mark on it never appear on pictures you request.
Computer-generated representation. Not supplied by or affiliated with any manufacturer.
bodyoptionalOne of the sixty body styles of the five kinds, or a folded alias. A body we do not recognise is served the closest of the sixty — of the sent kind's own when a valid vehicle_type was sent — with the difference body, substituted, not-recognised. A body style of another kind than the confirmed model's is served the model's own body style, with the difference body, substituted, not-offered. The sixty, by kind: car (no default: a car with no shape known is served a plain generic vehicle): sedan, hatchback, suv, wagon, minivan, pickup, van, bus, coupe, convertible, microcar, campervan, semi_truck, box_truck, dump_truck, waste_truck, cargo_trike, rickshaw, trike, tadpole, autocycle, utv, quad, sport_utv; motorcycle (default standard): standard, sport, cruiser, touring, adventure, scooter, off_road; boat (default bowrider): bowrider, fishing, console, pontoon, watercraft, cabin_boat, yacht, sailboat, catamaran; heavy_machine (default tractor): tractor, crawler, combine, sprayer, paddy, excavator, mini_digger, loader, skid_steer, backhoe, telehandler, bulldozer, grader, hauler; aircraft (default single_prop): single_prop, twin_prop, turboprop, bizjet, airliner, helicopter.
make=toyota
body=sedan
marketoptionalWhich market's design is wanted where one name means different cars in different markets: us, europe, japan, china, india or south-korea. Left out, the account's own vehicle market, and the US design when that is empty too. It changes nothing for a vehicle sold as one design everywhere. South Korea reads as south-korea, with no difference. A value that is still not one of the six is served the market the option would have fallen back to, with the difference market, substituted, not-recognised.
vehicle_typeoptionalThe kind of vehicle wanted: car (Cars — trucks, three-wheelers and ATVs among them), motorcycle, boat, heavy_machine (farm and construction machines) or aircraft (planes and helicopters). Left out, the kind is decided from the vehicle named — the asset, the body style, the confirmed model's kind, a make that builds one kind only. Heavy Machines reads as heavy_machine, with no difference. Other words for a kind — truck, three_wheeler, atv, farm, construction — are read as the kind they belong to, with no difference; they are never listed as choices. A value that is still not one of the five is set aside and the vehicle served as though the kind were left out, with the difference vehicle_type, substituted, not-recognised. A kind the vehicle contradicts is set aside, never refused, with the difference vehicle_type, ignored, not-offered.
Each kind's body styles, the first its default when no shape is known:
- car: sedan, hatchback, suv, wagon, minivan, pickup, van, bus, coupe, convertible, microcar, campervan, semi_truck, box_truck, dump_truck, waste_truck, cargo_trike, rickshaw, trike, tadpole, autocycle, utv, quad, sport_utv (no default: a plain generic vehicle)
- motorcycle: standard, sport, cruiser, touring, adventure, scooter, off_road
- boat: bowrider, fishing, console, pontoon, watercraft, cabin_boat, yacht, sailboat, catamaran
- heavy_machine: tractor, crawler, combine, sprayer, paddy, excavator, mini_digger, loader, skid_steer, backhoe, telehandler, bulldozer, grader, hauler
- aircraft: single_prop, twin_prop, turboprop, bizjet, airliner, helicopter

vehicle_type=car 
vehicle_type=motorcycle 
vehicle_type=aircraft 
vehicle_type=aircraft
vinoptionalA 17-character vehicle identification number — digits and the letters except I, O and Q — naming the vehicle instead of by make and model or by catalogue identifier. Sent beside asset_id, the id decides and the number is never decoded, with the difference vin, ignored, not-offered. A decoded number sent beside make and model decides, and each of them is reported with the difference ignored, not-offered. A number that cannot be turned into a vehicle, or one failing the character or length check, is served a plain generic vehicle, with the difference vin, substituted, vin-not-decodable; when a make and model came with it, the make and model decide instead. A number the free United States decoder cannot resolve while the worldwide vehicle lookup is off is served a plain generic vehicle, with the difference vin, substituted, vin-outside-united-states-lookup-off. A number is never refused, and never kept.
coloroptionalA colour name on the named-colour list, matched whatever its capitals, or any six-character colour code. Left out, silver. A name not on the list is served silver, with the difference color, substituted, not-recognised. In basic settings the colour becomes silver, black or white — a basic colour is kept — with the difference color, restricted, allowance-used-up.
make=toyota&model=corolla&angle=front-3q
color=red 
color=gold 
color=white 
color=2A52E4
angleoptionalOne of the seven angles: front, front-3q, side, rear-3q, rear, side-right or hero-front. Left out, front-3q — the front three-quarter, from the vehicle's left. imagin.studio's numeric angle values are translated. A word that is not one of ours, or a number we cannot match, is served front-3q, with the difference angle, substituted, not-offered. A real angle this vehicle does not have yet is served the front three-quarter, with the difference angle, substituted, not-in-library-yet, and on a paid plan it is queued. In basic settings the angle becomes the default three-quarter front, with the difference angle, restricted, allowance-used-up. Asking for another angle never costs a new vehicle on its own: every opening-day vehicle carries all seven, so another angle of one of those is never a new vehicle; for a vehicle drawn to order, an angle not yet drawn uses no new vehicle either; and a vehicle never drawn at all is one new vehicle, made at all seven angles together. Every angle costs the same.
make=toyota&model=corolla&color=silver
angle=front 
angle=front-3q 
angle=side 
angle=rear-3q 
angle=rear 
angle=side-right 
angle=hero-front
widthoptionalThe width in pixels. Left out, 1536 — full settings serve up to 3072 on request. Above 3072 in full settings is served 3072, with the difference width, substituted, not-offered. In basic settings the width is capped at 800: any width above 800 is served 800, with the difference width, restricted, allowance-used-up.
formatoptionalwebp, png or jpg. Left out, webp. An unrecognised value is served webp, with the difference format, substituted, not-recognised. In basic settings the format is WebP or JPEG: a png is served webp, with the difference format, restricted, allowance-used-up. Never a refusal either way.
backgroundoptionaltransparent or a colour code. Left out, transparent. format=jpg with background=transparent is served white, with the difference background, substituted, not-offered. In basic settings the background becomes white, with the difference background, restricted, allowance-used-up.
make=toyota&model=corolla&color=silver&angle=front-3q&background=transparent
flipoptionalOnly the literal string true mirrors the picture; left out, the vehicle faces left. Anything else is read as absent, with no difference.
plate_textoptionalUp to 10 characters — the letters A to Z, digits, spaces and hyphens — drawn on the plate, trimmed of spaces at either end and upper-cased first. Left out or empty, a blank plate. A character outside the list is dropped and the rest served, and text longer than 10 characters is cut to the first 10 — either way with one difference, plate_text, substituted, not-offered. The text is shown back in the live answer and kept nowhere. In basic settings plate text becomes none, with the difference plate_text, restricted, allowance-used-up.
plate_styleoptionalblank — the plate as the picture has it drawn; plain — your text on a plain white plate; custom — a plate design of your own, not offered yet, so it is served the blank plate with the difference plate_style, ignored, not-offered. Left out, blank. An unrecognised value is served blank, with the difference plate_style, substituted, not-recognised. In basic settings the plate style becomes blank, with the difference plate_style, restricted, allowance-used-up.
make=toyota&model=corolla&color=red&angle=front&plate_style=plain&plate_text=YOUR+TEXT
labeloptionalYour own short label, up to 80 characters, echoed in Hyke-Label and kept on the request's record. Longer is cut to the first 80, with no difference, because a label is not a rendering option; an empty label= is no label.
We also accept imagin.studio's spellings — modelFamily, modelYear, paintDescription, modelVariant, fileType, customer, trim, bodySize, zoomLevel and zoomType — so switching to us changes an address and little else.
Response headers
Content-TypeThe picture's type — image/webp, image/png or image/jpeg.
Cache-Controlpublic, max-age=86400 on an exact match served in full settings; public, max-age=300 on any other match level and on every answer served in basic settings, exact matches included.
Hyke-MatchOne of the five match levels: exact — the vehicle you asked for; nearest-years — the same model and body style, from the closest run of years we hold; other-body-style — the same model in a different body style; stand-in-body-shape — a generic vehicle of the right shape — a generic van, a generic bus; stand-in-generic — a plain generic vehicle.
Hyke-AssetThe asset_id that was served.
Hyke-Vehicle-TypeThe kind of the vehicle served — one of the five kinds — on every picture answer.
Hyke-DifferencesHow many differences the response carries.
Hyke-Modefull or basic.
Hyke-Full-Requests-LeftHow many full requests are left this period.
Hyke-Request-Idreq_… — this request's id.
Hyke-DetailsThe address of the full record of this request.
Hyke-GenerationPresent only while a picture is being made, as <status>; ready-about=<estimated ready time>.
Hyke-LabelPresent only when the request carried a label; the label, percent-encoded as it arrived.
Hyke-DisclosureAlways: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
Hyke-Match values
exactThe vehicle you asked for.
nearest-yearsThe same model and body style, from the closest run of years we hold.
other-body-styleThe same model in a different body style.
stand-in-body-shapeA generic vehicle of the right shape — a generic van, a generic bus.
stand-in-genericA plain generic vehicle.
Worked examples
An exact match
GET /v1/vehicle?key=YOUR_KEY&make=toyota&model=corolla&year=2020&color=7B1E3C&angle=front-3q
HTTP/1.1 200 OK
Content-Type: image/webp
Cache-Control: public, max-age=86400
Hyke-Match: exact
Hyke-Asset: toyota-corolla-sedan-2019-2022
Hyke-Vehicle-Type: car
Hyke-Differences: 0
Hyke-Mode: full
Hyke-Full-Requests-Left: 112
Hyke-Request-Id: req_01J8ZK3V9Q
Hyke-Details: https://api.hykestudio.com/v1/requests/req_01J8ZK3V9Q
Hyke-Disclosure: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
‹the picture›
make=toyota&model=corolla&year=2020&color=7B1E3C&angle=front-3q
A close stand-in — the real one on its way
GET /v1/vehicle?key=YOUR_KEY&make=honda&model=civic&body=hatchback&year=2019&color=7B1E3C&angle=front-3q
HTTP/1.1 200 OK
Content-Type: image/webp
Cache-Control: public, max-age=300
Hyke-Match: other-body-style
Hyke-Asset: honda-civic-sedan-2016-2021
Hyke-Vehicle-Type: car
Hyke-Differences: 1
Hyke-Generation: queued; ready-about=2026-09-20T15:34:00Z
Hyke-Mode: full
Hyke-Full-Requests-Left: 23120
Hyke-Request-Id: req_01J8ZM7T2B
Hyke-Details: https://api.hykestudio.com/v1/requests/req_01J8ZM7T2B
Hyke-Disclosure: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
‹picture of the Civic sedan, in the colour and angle asked for›
make=honda&model=civic&body=hatchback&year=2019&color=7B1E3C&angle=front-3q
Another kind of vehicle — a personal watercraft
GET /v1/vehicle?key=YOUR_KEY&make=sea-doo&model=gtx&vehicle_type=boat&color=2A52E4&angle=front-3q
HTTP/1.1 200 OK
Content-Type: image/webp
Cache-Control: public, max-age=86400
Hyke-Match: exact
Hyke-Asset: sea-doo-gtx-watercraft-2020-2024
Hyke-Vehicle-Type: boat
Hyke-Differences: 2
Hyke-Mode: full
Hyke-Full-Requests-Left: 14988
Hyke-Request-Id: req_01J8ZR4K7P
Hyke-Details: https://api.hykestudio.com/v1/requests/req_01J8ZR4K7P
Hyke-Disclosure: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
‹the Sea-Doo GTX personal watercraft›
make=sea-doo&model=gtx&vehicle_type=boat&color=2A52E4&angle=front-3q
When the kind is not clear
Never a refusal. The picture comes back, and the response says what happened in a sentence of its own:
vehicle_type=spaceshipWe do not have a vehicle type called "spaceship", so we worked out the type from the rest of the request.
vehicle_type=boat&make=honda&model=civicThe Honda Civic is a car, so the vehicle type you sent was not used.
make=honda&model=xyzHonda makes cars, motorcycles and aircraft, and the request did not say which, so we served a plain generic vehicle. Add vehicle_type to choose.
make=honda&model=civic&body=cruiserThe Honda Civic does not come as a cruiser motorcycle, so we served the Honda Civic sedan.
vehicle_type=motorcycle, no modelNo body style was given, so we served a generic standard motorcycle, the most common kind of motorcycle.
plate_text on a boatA boat carries no licence plate, so the plate options were not used.
make=honda&model=civic&vehicle_type=boat
Refusal shapes
A value we cannot honour is never a refusal. color=banana comes back in silver, with a line in the response saying the colour was not recognised.
make=toyota&model=corolla&color=banana
A used-up full-request allowance is never a refusal either. The pictures keep coming in basic settings until the month resets or you upgrade.
Basic requests are unlimited on Starter and Pro; the free plan gets 7,500 a month. Past the month's full requests every request is still answered, and Hyke-Mode says basic. Basic settings give:
- colour: silver, black or white (a colour outside those is served in silver)
- background: white
- angle:
front-3q, the front three-quarter - width: up to 800
- format:
webporjpg - plate text: none
401 invalid-keyThe key is missing, unknown or revoked, or presented two ways at once. The same shape carries the reason code secret-key-in-address when a secret key arrived in the address, and that key is flagged for regeneration.
403 key-not-allowed-hereA locked key used where it is not allowed.
403 account-suspendedThe account is suspended.
404 asset-id-not-foundOnly for an asset_id we never issued, with did_you_mean carrying the closest real ids.
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
429 monthly-limit-reachedThe free plan only, once the month's 7,500 basic requests are used up; the answer carries Retry-After, the seconds until the month's requests start again.
503 temporarily-unavailableOur own failure; the answer carries Retry-After.
A refusal in full
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{ "error": { "type": "invalid-key",
"message": "That access key is not valid. Check it was copied in full, or create a new one.",
"help_url": "https://app.hykestudio.com/dashboard/keys",
"request_id": "req_01J8ZQ9F6G" } }
GET
https://api.hykestudio.com/v1/vehicle.json
Returns the same information a picture request for the same options would have produced, as facts instead of a picture.
A secret key in the Authorization: Bearer header only. A secret key sent in the address is refused, and that key is flagged for regeneration.
Options
Exactly the options the picture address takes — make, model, year, body, vehicle_type, market, vin, color, angle, width, format, background, flip, plate_text, plate_style, label, asset_id, and the imagin.studio spellings — minus key, which this address does not read.
Response headers
Content-Typeapplication/json — the facts, not a picture.
Hyke-Request-Idreq_… — this request's id.
Hyke-DisclosureAlways: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
The labels that ride beside the picture as headers are inside the body here instead.
The answer
The request's id; the picture address that would serve it, carrying your oldest publishable key so it is safe to paste into a page; what you asked for; what would be served; how the two relate, difference by difference; whether a picture is being made; and your plan and period.
request_idreq_… — this request's id.
image_urlThe equivalent picture address for the same options. Its key is the account's oldest active publishable key, or YOUR_KEY when the account holds none.
requestedWhat was asked for; anything not sent is null.
servedWhat was actually served.
matchHow close the served vehicle is to the one asked — level, is_exact, one plain summary sentence and every difference. The five match levels: exact — the vehicle you asked for; nearest-years — the same model and body style, from the closest run of years we hold; other-body-style — the same model in a different body style; stand-in-body-shape — a generic vehicle of the right shape — a generic van, a generic bus; stand-in-generic — a plain generic vehicle.
generationnull when nothing is being made, otherwise the generation object.
planThe plan's name, full or basic, the full requests used and allowed this period, and resets_at — when the allowance next resets.
A worked example
An exact match, asked for as facts
GET /v1/vehicle.json?make=toyota&model=corolla&year=2020&color=7B1E3C&angle=front-3q
Authorization: Bearer YOUR_KEY
HTTP/1.1 200 OK
Content-Type: application/json
{ "request_id": "req_01J8ZK3V9Q",
"image_url": "https://api.hykestudio.com/v1/vehicle?key=YOUR_KEY&make=toyota&model=corolla&year=2020&color=7B1E3C&angle=front-3q",
"requested": {
"make": "toyota", "model": "corolla", "year": 2020, "body": null,
"vehicle_type": null,
"color": "7B1E3C", "angle": "front-3q", "width": null, "format": null,
"background": null, "flip": null, "plate_text": null, "plate_style": null },
"served": {
"asset_id": "toyota-corolla-sedan-2019-2022",
"make": "Toyota", "model": "Corolla", "body": "sedan",
"vehicle_type": "car", "years": { "from": 2019, "to": 2022 },
"color": { "code": "7B1E3C", "name": null },
"angle": "front-3q", "width": 1536, "height": 1024, "format": "webp",
"background": "transparent", "flip": false,
"plate_style": "blank", "plate_text": null },
"match": {
"level": "exact", "is_exact": true,
"summary": "This is the vehicle you asked for.",
"differences": [
{ "field": "body", "kind": "assumed", "requested": null, "served": "sedan",
"why": "only-one-available",
"explanation": "No body style was given. The Toyota Corolla (2019–2022) comes in one body style in our library, the sedan." },
{ "field": "width", "kind": "assumed", "requested": null, "served": 1536,
"why": "not-specified",
"explanation": "No width was given, so we served our standard 1536 — full plans can ask for up to 3072." } ] },
"generation": null,
"plan": { "name": "free", "mode": "full",
"full_requests_used": 38, "full_requests_allowance": 150,
"resets_at": "2026-10-01T00:00:00Z" } }
make=toyota&model=corolla&year=2020&color=7B1E3C&angle=front-3q
Shown here at up to 800 px wide · delivered at 1,536 px by default, up to 3,072 px. Any softness is only this page's display size.
A sample from our library, made for our own pages: our plate and mark on it never appear on pictures you request.
Computer-generated representation. Not supplied by or affiliated with any manufacturer.
Refusal shapes
401 invalid-keyThe key is missing, unknown or revoked, or presented two ways at once. The same shape carries the reason code secret-key-in-address when a secret key arrived in the address, and that key is flagged for regeneration.
403 key-not-allowed-hereA publishable key, in the header or in the key option: this address never takes one.
403 account-suspendedThe account is suspended.
404 asset-id-not-foundOnly for an asset_id we never issued, with did_you_mean carrying the closest real ids.
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
503 temporarily-unavailableOur own failure; the answer carries Retry-After.
GET
https://api.hykestudio.com/v1/makes
Every make with at least one ready vehicle — the first level of a dropdown.
A secret key in the Authorization: Bearer header only. A secret key sent in the address is refused, and that key is flagged for regeneration.
Options
vehicle_typeoptionalOne of the five kinds. Only makes with a ready vehicle of that kind are listed, and models_ready counts that kind's models; a make that builds several kinds is listed under each. A value that is not one of the five answers an empty list, never a refusal. Left out: every kind.
Response headers
Hyke-Request-Idreq_… — this request's id.
Hyke-DisclosureAlways: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
The answer
One entry per make — its id, its name and how many of its models are ready — and the total.
Every vehicle we hold also has a page of its own, showing the exact request that returns it: Every vehicle we hold.
makesOne entry per make: id, name and models_ready, how many of its models have a ready vehicle.
totalHow many makes are listed.
A worked example
Every make we hold
GET /v1/makes
Authorization: Bearer YOUR_KEY
HTTP/1.1 200 OK
Content-Type: application/json
{ "makes": [
{ "id": "honda", "name": "Honda", "models_ready": 2 },
{ "id": "nissan", "name": "Nissan", "models_ready": 3 },
{ "id": "toyota", "name": "Toyota", "models_ready": 11 } ],
"total": 3 }
Refusal shapes
401 invalid-keyThe key is missing, unknown or revoked, or a secret key arrived in the address, which is then flagged for regeneration.
403 key-not-allowed-hereA publishable key, in the header or in the key option: this address takes a secret key only.
403 account-suspendedThe account is suspended.
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
503 temporarily-unavailableOur own failure; the answer carries Retry-After.
No not-found applies here — a kind of vehicle we do not know answers an empty list, never a refusal.
GET
https://api.hykestudio.com/v1/makes/{make}/models
Every model of one make that has at least one ready vehicle — the second level of a dropdown.
A secret key in the Authorization: Bearer header only. A secret key sent in the address is refused, and that key is flagged for regeneration.
Options
makerequired, in the addressA make id from GET /v1/makes — honda, toyota, nissan.
vehicle_typeoptionalOne of the five kinds. Narrows the list to that kind; a value that is not one of the five answers an empty list, never a refusal.
Response headers
Hyke-Request-Idreq_… — this request's id.
Hyke-DisclosureAlways: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
The answer
The make, then one entry per model — its id, its name, its kind, the body styles we hold it in, its run of years and how many of its vehicles are ready. A make we do not know answers name: null and no models.
makeThe make asked for: id, and name — null for a make we do not know.
modelsOne entry per model: id, name, vehicle_type, body_styles, years and vehicles_ready.
Worked examples
A make we hold
GET /v1/makes/honda/models
Authorization: Bearer YOUR_KEY
HTTP/1.1 200 OK
Content-Type: application/json
{ "make": { "id": "honda", "name": "Honda" },
"models": [
{ "id": "civic", "name": "Civic", "vehicle_type": "car", "body_styles": ["sedan", "hatchback"],
"years": { "from": 2012, "to": 2021 }, "vehicles_ready": 2 },
{ "id": "cr-v", "name": "CR-V", "vehicle_type": "car", "body_styles": ["suv"],
"years": { "from": 2007, "to": 2011 }, "vehicles_ready": 1 } ] }
make=honda
model=civic 
model=cr-v
Shown here at up to 800 px wide · delivered at 1,536 px by default, up to 3,072 px. Any softness is only this page's display size.
A sample from our library, made for our own pages: our plate and mark on it never appear on pictures you request.
Computer-generated representation. Not supplied by or affiliated with any manufacturer.
A make we do not know — an empty list, never a refusal
HTTP/1.1 200 OK
{ "make": { "id": "unknownmake", "name": null }, "models": [] }
Refusal shapes
401 invalid-keyThe key is missing, unknown or revoked, or a secret key arrived in the address, which is then flagged for regeneration.
403 key-not-allowed-hereA publishable key, in the header or in the key option: this address takes a secret key only.
403 account-suspendedThe account is suspended.
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
503 temporarily-unavailableOur own failure; the answer carries Retry-After.
A make we do not know is never a refusal — the answer is an empty list.
GET
https://api.hykestudio.com/v1/makes/{make}/models/{model}
Every specific vehicle of one make and model, each with its asset_id — the last level of the dropdown.
A secret key in the Authorization: Bearer header only. A secret key sent in the address is refused, and that key is flagged for regeneration.
Options
makerequired, in the addressA make id from GET /v1/makes.
modelrequired, in the addressA model id from GET /v1/makes/{make}/models.
vehicle_typeoptionalOne of the five kinds. Narrows the list to that kind; a value that is not one of the five answers an empty list, never a refusal.
Response headers
Hyke-Request-Idreq_… — this request's id.
Hyke-DisclosureAlways: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
The answer
The make, the model and its most common body style, then one entry per vehicle — its asset_id, its body style, its kind, its run of years, its market, whether it is ready or still being made, which angles are ready and, while it is being made, when it should be ready. The asset_id goes straight into the picture address.
makeThe make asked for: id, and name — null for a make we do not know.
modelThe model asked for: id, name and most_common_body — both null for a model we do not know.
vehiclesOne entry per vehicle: asset_id, body, vehicle_type, years, market, status (ready or being-made), angles_ready and, while it is being made, estimated_ready_at.
Worked examples
One model's vehicles, then the picture
GET /v1/makes/honda/models/civic
Authorization: Bearer YOUR_KEY
HTTP/1.1 200 OK
Content-Type: application/json
{ "make": { "id": "honda", "name": "Honda" },
"model": { "id": "civic", "name": "Civic", "most_common_body": "sedan" },
"vehicles": [
{ "asset_id": "honda-civic-sedan-2012-2015", "body": "sedan", "vehicle_type": "car",
"years": { "from": 2012, "to": 2015 }, "market": null, "status": "ready",
"angles_ready": ["front", "front-3q", "side", "rear-3q",
"rear", "side-right", "hero-front"] },
{ "asset_id": "honda-civic-sedan-2016-2021", "body": "sedan", "vehicle_type": "car",
"years": { "from": 2016, "to": 2021 }, "market": null, "status": "ready",
"angles_ready": ["front", "front-3q", "side", "rear-3q",
"rear", "side-right"] },
{ "asset_id": "honda-civic-hatchback-2016-2021", "body": "hatchback", "vehicle_type": "car",
"years": { "from": 2016, "to": 2021 }, "market": null, "status": "being-made",
"angles_ready": [], "estimated_ready_at": "2026-09-20T15:34:00Z" } ] }
GET /v1/vehicle?key=YOUR_KEY&asset_id=honda-civic-sedan-2016-2021&color=7B1E3C&angle=front-3q
asset_id=honda-civic-sedan-2016-2021&color=7B1E3C&angle=front-3q
Shown here at up to 800 px wide · delivered at 1,536 px by default, up to 3,072 px. Any softness is only this page's display size.
A sample from our library, made for our own pages: our plate and mark on it never appear on pictures you request.
Computer-generated representation. Not supplied by or affiliated with any manufacturer.
A model we do not know — an empty list, never a refusal
HTTP/1.1 200 OK
{ "make": { "id": "honda", "name": "Honda" },
"model": { "id": "unknownmodel", "name": null, "most_common_body": null },
"vehicles": [] }
Refusal shapes
401 invalid-keyThe key is missing, unknown or revoked, or a secret key arrived in the address, which is then flagged for regeneration.
403 key-not-allowed-hereA publishable key, in the header or in the key option: this address takes a secret key only.
403 account-suspendedThe account is suspended.
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
503 temporarily-unavailableOur own failure; the answer carries Retry-After.
A make or model we do not know is never a refusal — the answer is an empty list.
GET
https://api.hykestudio.com/v1/options
Every colour, angle, kind of vehicle, body style, market and format we offer, and the largest width.
A secret key in the Authorization: Bearer header only. A secret key sent in the address is refused, and that key is flagged for regeneration.
Options
None. The address takes nothing — it is what a request builder calls to fill its own form.
Response headers
Hyke-Request-Idreq_… — this request's id.
Hyke-DisclosureAlways: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
The answer
The named colours and their codes, that any six-character colour code is accepted as well, the seven angles, the five kinds of vehicle — each with its body styles, the first its default — every body style of every kind, the markets, the formats and the largest width.
colorsThe named colours, each a name and its six-character code.
any_color_code_acceptedtrue — any six-character colour code is accepted beside the named colours.
anglesThe seven angles.
vehicle_typesThe five kinds, each an id and its body_styles, the first its default.
body_stylesEvery body style of every kind, in the kinds' order.
marketsThe markets a design can be asked for by.
formatsThe picture formats.
max_widthThe largest width served, in pixels.
A worked example
Everything a form needs
GET /v1/options
Authorization: Bearer YOUR_KEY
HTTP/1.1 200 OK
Content-Type: application/json
{ "colors": [
{ "name": "silver", "code": "C0C0C0" },
{ "name": "black", "code": "0B0B0C" },
{ "name": "white", "code": "F4F4F2" },
{ "name": "maroon", "code": "7B1E3C" } ],
"any_color_code_accepted": true,
"angles": ["front", "front-3q", "side", "rear-3q",
"rear", "side-right", "hero-front"],
"vehicle_types": [
{ "id": "car", "body_styles": ["sedan", "hatchback", "suv", … ] },
{ "id": "motorcycle", "body_styles": ["standard", "sport", "cruiser", … ] },
… the other kinds, each with its body styles … ],
"body_styles": ["sedan", "hatchback", "suv", … all sixty, in the order above …],
"markets": ["us", "europe", "japan", "china", "india", "south-korea"],
"formats": ["webp", "png", "jpg"],
"max_width": 3072 }
make=toyota&model=corolla&angle=front-3q
color=silver 
color=black 
color=white 
color=maroon
Shown here at up to 800 px wide · delivered at 1,536 px by default, up to 3,072 px. Any softness is only this page's display size.
A sample from our library, made for our own pages: our plate and mark on it never appear on pictures you request.
Computer-generated representation. Not supplied by or affiliated with any manufacturer.
Refusal shapes
401 invalid-keyThe key is missing, unknown or revoked, or a secret key arrived in the address, which is then flagged for regeneration.
403 key-not-allowed-hereA publishable key, in the header or in the key option: this address takes a secret key only.
403 account-suspendedThe account is suspended.
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
503 temporarily-unavailableOur own failure; the answer carries Retry-After.
GET
https://api.hykestudio.com/v1/usage
Your own usage this period and what it is costing you, broken down by key, by label and by match.
A secret key in the Authorization: Bearer header only. A secret key sent in the address is refused, and that key is flagged for regeneration.
Options
None. The period is your account's own open period — the calendar month on the free plan, your billing month on a paid plan.
Response headers
Hyke-Request-Idreq_… — this request's id.
Hyke-DisclosureAlways: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
The answer
Your plan and whether you are in full or basic settings; the period; full requests used against what is included; basic requests used; new vehicles used against what is included; whether you pay monthly or yearly; what you have been charged so far; how your requests matched; and the same counts broken down by key and by your own labels. Calling this address moves no counter.
planThe plan's name.
billing_intervalmonth or year — how you pay; null on the free plan.
modefull or basic — the settings requests are answered in right now.
periodThe period, from and to, as UTC dates.
full_requestsFull requests included, used and extra_used this period.
basic_requestsBasic requests used, and included — the free plan's monthly number, null on Starter and Pro, where there is none.
new_vehiclesNew vehicles included, used and extra_used this period.
extra_usageThe extra-usage switches for requests and for vehicles, each with its limit and what it has spent.
charges_this_period_usdWhat you have been charged so far this period, in US dollars: the plan, each extra line and the total.
requests_by_matchHow many requests were served at each match level.
usage_by_keyThe same counts for each of your keys.
requests_by_labelThe same counts for each of your own labels; null for requests that carried none.
A worked example
A Starter account that has used its month's full requests
GET /v1/usage
Authorization: Bearer YOUR_KEY
HTTP/1.1 200 OK
Content-Type: application/json
{ "plan": "starter", "billing_interval": "month", "mode": "basic",
"period": { "from": "2026-09-01", "to": "2026-09-30" },
"full_requests": { "included": 26000, "used": 26000, "extra_used": 0 },
"basic_requests": { "used": 3200, "included": null },
"new_vehicles": { "included": 10, "used": 10, "extra_used": 0 },
"extra_usage": { … both switches off … },
"charges_this_period_usd": {
"plan": 49.00,
"extra_requests": { "quantity": 0, "unit": "per 1,000",
"unit_price": 1.00, "amount": 0.00 },
"extra_vehicles": { "quantity": 0, "unit": "per vehicle",
"unit_price": 2.00, "amount": 0.00 },
"total_so_far": 49.00 },
"requests_by_match": { "exact": 28000, "nearest-years": 600,
"other-body-style": 200, "stand-in-body-shape": 300,
"stand-in-generic": 100 },
"usage_by_key": [
{ "key_id": "key_9f2c…", "name": "live", "kind": "secret",
"full_requests_used": 20000, "basic_requests_used": 0,
"new_vehicles_used": 8 },
{ "key_id": "key_bb31…", "name": "site", "kind": "publishable",
"full_requests_used": 6000, "basic_requests_used": 3200,
"new_vehicles_used": 2 } ],
"requests_by_label": [
{ "label": "homepage-widget", "full_requests_used": 15000,
"basic_requests_used": 1000 },
{ "label": null, "full_requests_used": 11000,
"basic_requests_used": 2200 } ] }
Refusal shapes
401 invalid-keyThe key is missing, unknown or revoked, or a secret key arrived in the address, which is then flagged for regeneration.
403 key-not-allowed-hereA publishable key, in the header or in the key option: this address takes a secret key only.
403 account-suspendedThe account is suspended.
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
503 temporarily-unavailableOur own failure; the answer carries Retry-After.
GET
https://api.hykestudio.com/v1/requests/{request_id}
The full record of one request — copy the id from Hyke-Request-Id, or follow Hyke-Details straight to it.
A secret key on the account that made the request, in the Authorization: Bearer header only. A signed-in dashboard visit is never accepted here — the signed-in way into a record is the dashboard's own "Look up a request", which reads the same record.
Options
request_idrequired, in the addressThe value the request's own Hyke-Request-Id header carried.
Response headers
Hyke-Request-IdThis look-up's own id — not the id you asked about.
Hyke-DisclosureAlways: Computer-generated representation. Not supplied by or affiliated with any manufacturer.
The answer
The same body the facts address returns for that request — what was asked for, what was served, how the two relate difference by difference, whether a picture was being made, and the plan as it stands now. Records are kept for 90 days. The plate text is never kept, so the record shows YOUR_PLATE_TEXT in its place.
request_idreq_… — this request's id.
image_urlThe equivalent picture address for the same options. Its key is the account's oldest active publishable key, or YOUR_KEY when the account holds none.
requestedWhat was asked for; anything not sent is null.
servedWhat was actually served.
matchHow close the served vehicle is to the one asked — level, is_exact, one plain summary sentence and every difference. The five match levels: exact — the vehicle you asked for; nearest-years — the same model and body style, from the closest run of years we hold; other-body-style — the same model in a different body style; stand-in-body-shape — a generic vehicle of the right shape — a generic van, a generic bus; stand-in-generic — a plain generic vehicle.
generationnull when nothing is being made, otherwise the generation object.
planThe plan's name, full or basic, the full requests used and allowed this period, and resets_at — when the allowance next resets.
A worked example
Following Hyke-Details from a picture you served last week
GET /v1/requests/req_01J8ZK3V9Q
Authorization: Bearer YOUR_KEY
HTTP/1.1 200 OK
Content-Type: application/json
{ "request_id": "req_01J8ZK3V9Q",
"image_url": "https://api.hykestudio.com/v1/vehicle?key=YOUR_KEY&make=toyota&model=corolla&year=2020&color=7B1E3C&angle=front-3q",
"requested": { "make": "toyota", "model": "corolla", "year": 2020,
"color": "7B1E3C", "angle": "front-3q" },
"served": { "asset_id": "toyota-corolla-sedan-2019-2022",
"make": "Toyota", "model": "Corolla", "body": "sedan",
"vehicle_type": "car", "years": { "from": 2019, "to": 2022 },
"color": { "code": "7B1E3C", "name": null },
"angle": "front-3q", "width": 1536, "height": 1024, "format": "webp",
"background": "transparent", "flip": false,
"plate_style": "blank", "plate_text": null },
"match": { "level": "exact", "is_exact": true,
"summary": "This is the vehicle you asked for.",
"differences": [] },
"generation": null,
"plan": { "name": "starter", "mode": "full",
"full_requests_used": 4100, "full_requests_allowance": 26000,
"resets_at": "2026-10-01T00:00:00Z" } }
make=toyota&model=corolla&year=2020&color=7B1E3C&angle=front-3q
Shown here at up to 800 px wide · delivered at 1,536 px by default, up to 3,072 px. Any softness is only this page's display size.
A sample from our library, made for our own pages: our plate and mark on it never appear on pictures you request.
Computer-generated representation. Not supplied by or affiliated with any manufacturer.
Refusal shapes
401 invalid-keyNo key, an unknown key, or a secret key sent in the address.
403 key-not-allowed-hereA publishable key, in the header or in the key option: this address takes a secret key only.
403 account-suspendedThe account is suspended.
404 request-record-not-foundAn id that is not this account's, or one never issued: the same answer either way, so nothing can be learned by guessing.
410 request-record-expiredThe record is more than 90 days old and has been deleted.
429 too-fastRequests arriving faster than this key's limits allow; the answer carries Retry-After and retry_after_seconds.
503 temporarily-unavailableOur own failure; the answer carries Retry-After.