For utviklere
Integrer med Atlas API på minutter
Opprett og les produkter, varianter, merker og produktgrupper i Atlas — som menneske, eller som KI-agent.
Bruker du Claude, er den korteste veien MCP: Atlas er en MCP-server, og Claude.ai kobler seg til med en innlogging — ingen nøkkel å lime inn. Se oppsettet på /mcp.
Skal du bruke en annen modell — eller Claude Code, som tar en API-nøkkel som header — ligger referansen skrevet som en Claude Code Skill på en offentlig URL, og ingen nøkkel kreves for å lese den.
curl https://atlas.flowretail.com/llms.txt- Claude Code
- Lagre svaret som
.claude/skills/atlas-api/SKILL.md - Annen modell
- Lim innholdet inn i konteksten, eller pek modellen rett til URL-en.
- Har du nøkkel?
- Samme tekst ligger alltid på GET /api/v1/skill.md.
Dokumentasjon
Endepunktene
Alt under https://atlas.flowretail.com/api/v1, med Bearer-nøkkel. HTTP-statusen er den ekte suksess/feil-linjen — 200/201 ved suksess, 400/401/403/404/409/422/429/500 ved feil — og body speiler den samme beskjeden i { ok, data } eller { ok: false, errors }, så en kaller aldri må se på begge for å vite hvilken. Klikk et endepunkt for et eksempel.
{
"ok": false,
"errors": [
{
"path": "products[0].brand",
"code": "unknown_brand",
"message": "Merket «Harío» finnes ikke i registeret.",
"hint": "Mente du «Hario»? Opprett merket først med POST /api/v1/brands, og send så produktet på nytt."
}
]
}Produkter
GET
/api/v1/productsListe produkter, sidevisResponse — HTTP 200 OK{ "ok": true, "data": { "products": [ { "id": "prod_8f2a1c", "name": "Nokia 6110", "sku": "NOK-6110", "sale_price_incl_vat": "699.00" } ], "next_cursor": null } }GET
/api/v1/products/{id}Ett produkt med varianterResponse — HTTP 200 OK{ "ok": true, "data": { "id": "prod_8f2a1c", "name": "Nokia 6110", "sku": "NOK-6110", "variants": [ { "id": "var_44b2", "sku": "NOK-6110-GRA", "axis": { "Farge": "Grå" } } ] } }POST
/api/v1/productsOpprette produkter og varianterRequest{ "products": [{ "name": "Nokia 6110", "sku": "NOK-6110", "brand": "Nokia", "product_group": ["Elektronikk", "Mobiltelefoner"], "sale_price_incl_vat": "699.00", "vat": 25 }] }Response — HTTP 201 Created{ "ok": true, "data": { "products": [ { "id": "prod_8f2a1c", "sku": "NOK-6110", "created": true } ] } }PATCH
/api/v1/products/{id}Oppdatere ett produkt eller én variantRequest{ "version": 0, "sale_price_incl_vat": "649.00" }Response — HTTP 200 OK{ "ok": true, "data": { "id": "prod_8f2a1c", "sku": "NOK-6110", "sale_price_incl_vat": "649.00", "version": 1 } }POST
/api/v1/products/{id}/imagesHente bilder fra URL-er og feste dem til produktetRequest{ "image_urls": ["https://example.com/nokia-6110.jpg"] }Response — HTTP 200 OK{ "ok": true, "data": { "product_id": "prod_8f2a1c", "images": [ { "url": "https://example.com/nokia-6110.jpg", "status": "attached", "asset_id": "asset_1", "position": 0, "is_cover": true } ] } }POST
/api/v1/products/{id}/axis-imagesFeste ett fotosett til én farge — havner på alle variantene med den verdienRequest{ "axis_value": "Rød", "image_urls": ["https://example.com/jeans-rod-1.jpg"] }Response — HTTP 200 OK{ "ok": true, "data": { "attribute_value": "Rød", "attribute": "Farge", "variant_count": 18, "images": [{ "asset_id": "asset_4", "url": "https://ik.…/jeans-rod-1.jpg", "position": 0 }], "variants_touched": 18 } }
Bilder
POST
/api/v1/assetsLaste opp en bildefil (multipart) og få en asset_id — for bilder som ikke ligger på en URLRequestcurl -H "Authorization: Bearer atlas_live_…" \ -F "file=@rider-rod-1.jpg" \ https://<din-atlas>/api/v1/assetsResponse — HTTP 200 OK{ "ok": true, "data": { "asset_id": "asset_4", "url": "https://ik.…/rider-rod-1.jpg", "mime": "image/jpeg", "next": "Fest bildet med POST /api/v1/products/{id}/images (asset_ids)." } }POST
/api/v1/image-generateLage AI-produktbilder — velg selv modellRequest{ "source_image_urls": ["https://example.com/hylle.jpg"], "name": "Stue S – vegghengt, 3 hyller", "hint": "Vis møbelet i en lys, skandinavisk stue.", "model": "gemini" }Response — HTTP 200 OK{ "ok": true, "data": { "model": "gemini", "images": [ { "asset_id": "asset_9", "url": "https://ik.…/generert.jpg", "width": 2048, "height": 1536 } ] } }
Registre
GET
/api/v1/brandsListe merkerResponse — HTTP 200 OK{ "ok": true, "data": { "brands": [{ "id": "brand_91", "name": "Nokia" }] } }POST
/api/v1/brandsOpprette merker (finn-eller-opprett)Request{ "items": [{ "name": "Nokia" }] }Response — HTTP 200 OK{ "ok": true, "data": { "brands": [ { "name": "Nokia", "id": "brand_91", "created": false } ] } }GET
/api/v1/product-groupsProduktgruppetreet, med stiResponse — HTTP 200 OK{ "ok": true, "data": { "product_groups": [ { "id": "pg_12", "name": "Mobiltelefoner", "path": ["Elektronikk", "Mobiltelefoner"] } ] } }POST
/api/v1/product-groupsOpprette produktgrupperRequest{ "items": [{ "path": ["Elektronikk", "Mobiltelefoner"] }] }Response — HTTP 201 Created{ "ok": true, "data": { "product_groups": [ { "path": ["Elektronikk", "Mobiltelefoner"], "id": "pg_12", "created": true } ] } }GET
/api/v1/categoriesKategoritreet, med sti (ingen bladregel)Response — HTTP 200 OK{ "ok": true, "data": { "categories": [ { "id": "cat_3", "name": "Mobiltelefoner", "path": ["Elektronikk", "Mobiltelefoner"] } ] } }POST
/api/v1/categoriesOpprette kategorierRequest{ "items": [{ "path": ["Elektronikk", "Mobiltelefoner"] }] }Response — HTTP 201 Created{ "ok": true, "data": { "categories": [ { "path": ["Elektronikk", "Mobiltelefoner"], "id": "cat_3", "created": true } ] } }GET
/api/v1/attributesListe egenskaperResponse — HTTP 200 OK{ "ok": true, "data": { "attributes": [ { "id": "attr_5", "name": "Farge", "is_variant_axis": true } ] } }POST
/api/v1/attributesOpprette egenskaperRequest{ "items": [{ "name": "Farge", "type": "dropdown", "is_variant_axis": true }] }Response — HTTP 201 Created{ "ok": true, "data": { "attributes": [ { "name": "Farge", "id": "attr_5", "created": true } ] } }GET
/api/v1/attributes/{id}/valuesVerdiene på en egenskapResponse — HTTP 200 OK{ "ok": true, "data": { "values": [{ "id": "val_1", "value": "Grå" }] } }POST
/api/v1/attributes/{id}/valuesLegge til egenskapsverdierRequest{ "items": [{ "value": "Grå" }] }Response — HTTP 201 Created{ "ok": true, "data": { "values": [ { "value": "Grå", "id": "val_1", "created": true } ] } }
Hent produkter
Nøkler lages under Innstillinger → API-nøkler — rollen må være editor eller admin.
curl https://atlas.flowretail.com/api/v1/products \
-H "Authorization: Bearer atlas_live_…"Opprett et produkt
Merke og produktgruppe må finnes fra før — slå opp eller opprett med registerendepunktene over.
curl -X POST https://atlas.flowretail.com/api/v1/products \
-H "Authorization: Bearer atlas_live_…" \
-H "Content-Type: application/json" \
-d '{
"products": [{
"name": "Nokia 6110",
"sku": "NOK-6110",
"brand": "Nokia",
"product_group": ["Elektronikk", "Mobiltelefoner"],
"sale_price_incl_vat": "699.00",
"vat": 25
}]
}'Velg selv hvilken AI-modell
Send inn et vanlig produktfoto, få tilbake et iscenesatt bilde. Du bestemmer hvilken bildemodell som skal brukes — de tre tolker den samme beskrivelsen ulikt, og gir merkbart forskjellig uttrykk på det samme produktet.
| model | Modell | Oppløsning |
|---|---|---|
gemini | Google Nano Banana Prostandard | 2K |
openai | OpenAI gpt-image-2 | 1536 × 1024 |
grok | xAI Grok Imagine | 2K |
Prisen er den samme uansett modell — 10 kr per bilde etter den inkluderte kvoten. Du velger altså på uttrykk og oppløsning, ikke på pris, og kan bytte mellom to kall uten at det merkes på fakturaen. Utelater du feltet, brukes standardmodellen, og svaret sier alltid hvilken som faktisk kjørte.
Bestem utsnittet med «aspect» — 1:1, 3:4 eller 4:3 (standard 4:3), og det virker likt på alle tre modellene. Utsnittet betyr mer enn man tror: et bredt møbel i stående format blir mest tom vegg, mens det samme bildet i 1:1 fyller flaten. Velg format etter produktets fasong, ikke etter webshoppens grid.
Ett tips som endrer resultatet mest: si i hint hvordan produktet skal opptre, ikke bare hvor det står. Et møbel klarer seg med «i en lys stue», men et klesplagg fotografert flatt på hvit bakgrunn blir liggende flatt også i det nye bildet — be om at det bæres av en person, med vekt og fall, så endres resultatet fullstendig. Modellene gjengir dessuten ikke tekst pålitelig, så et logotrykk med skrift kommer sjelden korrekt ut.
curl -X POST https://atlas.flowretail.com/api/v1/image-generate \
-H "Authorization: Bearer atlas_live_…" \
-H "Content-Type: application/json" \
-d '{
"source_image_urls": ["https://example.com/hylle.jpg"],
"name": "Stue S – vegghengt, 3 hyller",
"hint": "Vis møbelet i en lys, skandinavisk stue.",
"model": "grok"
}'Viktig å vite
- Beløp er streng, aldri tall. Inkl. mva, maks to desimaler —
"299.00", ikke299.00. - Feilsvar du kan feilsøke på. En ugyldig forespørsel gir 422 med
pathtil feltet, encodedu kan forgrene på, og hva som var galt — «merket «Acme» finnes ikke», ikke «ugyldig input». Ukjente merker og grupper opprettes aldri stille i bakgrunnen. - Kjør en dry-run først.
{"dry_run":true}kjører hele valideringen og ruller tilbake, så du får nøyaktig samme feilliste som en ekte skriving ville gitt — uten å ha skrevet noe. Verdt det på alt større enn noen få rader. - Trygt å gjenta. Sender du
sku, er varekoden identiteten — en retry lander iskippedi stedet for å lage produktet på nytt. Oppretter du uten varekode, får hvert forsøk en ny kode og ville blitt duplisert: sendIdempotency-Key, så får du det opprinnelige svaret tilbake i 24 timer. - 1000 produkter per kall, 600 kall i minuttet. En import på 100 000 produkter er 100 kall — den bruker en sjettedel av minuttkvoten og går som en lek. Går du likevel over, får du 429 med en
Retry-After-header å vente på, ikke en gjetning.
Full kontroll på alle produkt-data.
Opprett konto, koble til Flow Retail eller Shopware, og publiser det første produktet på minutter.