Koble nettsiden og systemene dine til vbeslag
For deg som eier verkstedet, og for den som lager nettsiden eller et system for dere.
Adressen: https://vbeslag.com/api/v1 · Versjon: v1
Hva er dette?
En kobling lar andre systemer snakke med vbeslag. Nettsiden din kan sende ordre og forespørsler rett inn i ordrelisten. Et system du bruker, kan få beskjed når en ordre er klar.
Hva kan du gjøre?
Ta imot ordre og forespørsler fra nettsiden din, med bilde av skissen.
VirkerLa et annet system se ordrene og sette dem i arbeid, klar og levert.
VirkerFå beskjed i et annet system når noe skjer med en ordre.
VirkerHente og oppdatere kunderegisteret.
VirkerHente beslagene i butikken og regne ut priser.
VirkerLa en fast kunde sende avrop fra sitt eget system.
VirkerHente fakturaer til regnskapet eller rapporter.
VirkerRegnearket vårt henter månedstallene: bare summer, aldri kundenavn.
Virker
Hva skjer med kundene dine?
Ingenting endres for dem. De kan fortsatt ringe, sende bilde eller komme med lappen. Det som kommer fra nettsiden, havner i den samme listen, får neste nummer og en SMS når det er klart.
Hva trenger du?
- Koblinger (API) slått på under Abonnement.
- Databehandleravtalen godtatt, også under Abonnement.
- En nøkkel fra Innstillinger › Koblinger (API).
- Den som lager nettsiden din, eller den som har systemet dere bruker.
Er det trygt?
- Nøkkelen gir bare tilgang til ditt verksted. Et annet verksted ser aldri noe av ditt.
- Du kan slå en nøkkel av når som helst. Den slutter å virke innen 1 minutt.
- Påslaget og innkjøpsprisene dine vises aldri.
- En testnøkkel lager testordre med egne nummer (T-…), sender aldri SMS eller e-post, og testordrene slettes etter 30 dager.
Send denne siden til den som lager nettsiden
Alt utvikleren trenger, står under. Kopier lenken og send den.
https://vbeslag.com/utviklere#utviklerFor den som lager nettsiden
Her er alt du trenger for å koble en nettside eller et system til verkstedets vbeslag: en nøkkel per verksted, JSON over HTTPS, og ordre som havner i samme liste som lappene på verkstedet.
Kom i gang i fem steg
Lag en testnøkkel
Verkstedet lager den under Innstillinger › Koblinger (API) og velger «Test». Den begynner med
vb_test_. Hold den på serveren, aldri i nettleseren.Sjekk at nøkkelen virker
GET /meviser verkstedet, nøkkelen og hva den har lov til.GET /mecurl https://vbeslag.com/api/v1/me \ -H "Authorization: Bearer $VBESLAG_KEY"Svaret du får{ "organization": { "name": "Nordvik Blikk AS", "shopSlug": "nordvik" }, "key": { "name": "Prøve", "environment": "test", "purpose": "nettside", … }, "features": { "api": true, "webhooks": true, … }, "apiVersion": "v1" }Send din første forespørsel
Med en testnøkkel får den nummer T-000001 og vises ikke i verkstedets lister.
Idempotency-Keygjør det trygt å prøve igjen: samme nøkkel og samme innhold gir samme svar, aldri to ordre.POST /orderscurl https://vbeslag.com/api/v1/orders \ -H "Authorization: Bearer $VBESLAG_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: 6f1c2e9a-0d5b-4a7e-9f31-2b8c4d7e1a90" \ -d '{ "intent": "request", "contact": { "name": "Kari Nordmann", "email": "kari@example.no", "mobile": "+4791234567" }, "title": "Pipebeslag", "note": "Se bilde av skissen", "lines": [{ "kind": "text", "description": "Pipebeslag 600x600, stål sort", "quantity": 1, "unit": "stk" }], "externalRef": "skjema-1042" }'Svaret du fårHTTP/1.1 201 Created Location: /api/v1/orders/T-000001 { "number": 1, "numberDisplay": "T-000001", "isTest": true, "status": "forespurt", "statusLabel": "Forespørsel", "lines": [{ "lineNo": 1, "kind": "text", "priceStatus": "pending", … }], "totals": { "netOre": null, "currency": "NOK", "priceStatus": "partial" }, "version": 1, … }Det samme fra din egen server, med fetch
fetch// På serveren din (aldri i nettleseren: nøkkelen er hemmelig) const res = await fetch('https://vbeslag.com/api/v1/orders', { method: 'POST', headers: { Authorization: `Bearer ${process.env.VBESLAG_KEY}`, 'Content-Type': 'application/json', 'Idempotency-Key': crypto.randomUUID(), }, body: JSON.stringify({ intent: 'request', contact: { name: form.name, email: form.email, mobile: form.mobile }, note: form.message, lines: [{ kind: 'text', description: form.what, quantity: 1, unit: 'stk' }], }), }) const order = await res.json() // order.numberDisplay: «004712»Legg ved et bilde av skissen
JPEG, PNG, WebP, HEIC eller PDF, høyst 15 MB per fil og 10 filer per ordre.
POST /orders/{number}/attachmentscurl https://vbeslag.com/api/v1/orders/T-000001/attachments \ -H "Authorization: Bearer $VBESLAG_KEY" \ -F fil=@skisse.jpg \ -F type=fotoFå beskjed når noe skjer
Verkstedet legger inn adressen din under Koblinger (API) › Webhooks og trykker «Send testhendelse». Sjekk signaturen som vist under.
Hendelser (webhooks)POST /din-adresse HTTP/1.1 Content-Type: application/json User-Agent: vbeslag-webhooks/1 Vbeslag-Event-Id: evt_01JEX4Q7R2M9T5V8W0Y3Z6A1B4 Vbeslag-Event-Type: order.ready Vbeslag-Delivery-Attempt: 1 Vbeslag-Signature: t=1797590527,v1=5f2b…c9e1
Begreper
Ordre og nummer
Alt er en ordre: en lapp fra verkstedet, en ordre fra disken, en forespørsel fra nettbutikken eller fra deg. Hver ordre får neste nummer i verkstedets serie, vist som «004711». Testordre har egen serie, «T-000012».
Stigen
Forespørsel → Mottatt → I arbeid → Klar → Levert → Fakturert → Betalt. Avbrutt kan skje underveis. Fakturert og Betalt settes bare av faktura og betaling, aldri med API-et. status er den lagrede verdien (forespurt, mottatt …), statusLabel ordet appen viser.
Penger i øre
Beløp er hele øre med «Ore» til slutt (unitPriceOre: 61200 er 612 kr). Moms er basispunkter: vatBp: 2500 er 25 %. En linje uten pris har priceStatus: "pending": Pris kommer.
Test og ekte
En testnøkkel (vb_test_) lager testordre som ikke vises i listene, sender aldri SMS eller e-post, teller ikke på regningen og slettes etter 30 dager. Den leser de ekte kundene, men kan ikke endre kunderegisteret.
Verkstedsnøkkel og kundenøkkel
En verkstedsnøkkel ser hele verkstedet. En kundenøkkel hører til en kunde: den ser bare den kundens ordre, avtaler og sendte fakturaer, sender forespørsler og avrop på kundens godtatte avtaler, og kan trekke tilbake sine egne forespørsler. Et annet verksteds eller en annen kundes ordre eller faktura svarer 404, aldri 403.
Tid
Tidspunkter er ISO 8601 i UTC. Datoer (requestedDate, deliveryDate) er dager på Oslo-kalenderen, ÅÅÅÅ-MM-DD.
Regler
- Nøkkelen sendes i
Authorization: Bearer <nøkkel>, aldri i adressen. POST /ordersogPOST /customerskreverIdempotency-Key. Bruk en ny UUID per handling, og den samme når du prøver igjen.PATCHkreverIf-Matchmed versjonen du så ("v3"). En gammel versjon svarer 409stale_version.- Felt vi ikke kjenner i det du sender, gir 400
invalid_requestmed feltet. Svarene kan få nye felt: les bare de du kjenner. - Lister svarer
{ data, nextCursor }. Synkroniser medsort=updatedAt,updatedSinceogcursor, eller bruk webhooks ogGET /events. - v1 endres ikke uten varsel. Nye felt, operasjoner og hendelser kan komme; noe som fjernes eller endres, kommer først i v2.
Grenser
| Lesing per nøkkel | 120 i minuttet |
|---|---|
| Skriving per nøkkel | 30 i minuttet |
| Filer per nøkkel | 10 i minuttet |
| Alle kall per nøkkel | 5 000 i døgnet |
| Nye ordre per nøkkel | 500 i døgnet (kundenøkkel 100) |
| Alle kall per verksted | 20 000 i døgnet |
| Feil nøkkel fra samme adresse | 20 på 10 minutter |
Hvert svar har X-RateLimit-Limit, X-RateLimit-Remaining og X-RateLimit-Reset. Over grensen svarer vi 429 rate_limited med Retry-After.
Feil
Alle feil har samme form. Velg handling etter code, aldri etter message: teksten kan endres. requestId står også i X-Request-Id; oppgi den hvis du spør om hjelp.
HTTP/1.1 422 Unprocessable Entity
X-Request-Id: req_8f2KQx7Lp0aZtR4mWc1V
{
"error": {
"code": "customer_required",
"message": "Ordren må ha en kunde. …",
"requestId": "req_8f2KQx7Lp0aZtR4mWc1V",
"docs": "https://vbeslag.com/utviklere/referanse#feil-customer_required"
}
}Alle feilkodene
| HTTP | Kode | Forklaring |
|---|---|---|
| 400 | invalid_cursor | Markøren (cursor) er ikke en vi har gitt ut. |
| 400 | invalid_json | Innholdet er ikke gyldig JSON. |
| 400 | invalid_request | Noe i forespørselen er feil eller ukjent. fields sier hva. |
| 401 | unauthorized | Nøkkelen mangler, er feil, er slått av eller har gått ut. En nøkkel som slås av, slutter å virke innen 1 minutt. |
| 403 | account_closed | Verkstedet er stengt. |
| 403 | customer_key_not_allowed | En kundenøkkel kan ikke gjøre dette. |
| 403 | dpa_required | Verkstedet må godta databehandleravtalen før koblinger kan brukes. |
| 403 | feature_not_in_plan | Verkstedet har ikke slått på delen dette trenger. feature sier hvilken. |
| 403 | insufficient_scope | Nøkkelen har ikke lov til dette. requiredScope sier hvilken rett som mangler. |
| 403 | test_key_not_allowed | En testnøkkel kan ikke dette: den endrer aldri kunderegisteret, og et avrop er alltid en ekte ordre. |
| 404 | not_found | Fant ikke dette. |
| 405 | method_not_allowed | Denne adressen tar ikke imot denne metoden. |
| 409 | already_invoiced | Ordren er fakturert og kan ikke endres. |
| 409 | cancel_not_allowed | Ordren kan ikke avbrytes nå. Ring verkstedet: arbeidet kan være i gang. |
| 409 | customer_exists | En kunde med dette org.nr. finnes allerede. id er kunden. |
| 409 | duplicate_external_ref | Du har allerede sendt en ordre med denne externalRef. existingNumber er ordrenummeret. |
| 409 | erp_owned_field | Navn og org.nr. eies av regnskapet for denne kunden. Endre dem der. |
| 409 | idempotency_in_progress | En forespørsel med samme Idempotency-Key holder på. Prøv igjen om litt. |
| 409 | key_owner_missing | Brukeren som laget nøkkelen finnes ikke lenger. Lag en ny nøkkel. |
| 409 | not_ready | Ordren er ikke klar. |
| 409 | stale_version | Ordren er endret siden du leste den. Hent den på nytt og send med ny versjon. |
| 409 | status_conflict | Ordren kan ikke flyttes dit fra statusen den har nå. reason sier hvorfor. |
| 413 | payload_too_large | Filen er for stor. |
| 415 | unsupported_media_type | Filtypen tas ikke imot. Send JPEG, PNG, WebP, HEIC eller PDF. |
| 422 | agreement_not_active | Avtalen tar ikke imot avrop: den er ikke godtatt, er utløpt eller erstattet, eller finnes ikke for denne nøkkelen. reason sier hvorfor. |
| 422 | contact_invalid | Kontakten trenger et navn og en e-post eller et norsk mobilnummer. |
| 422 | content_required | Ordren må ha minst en linje eller en merknad (note) på minst 3 tegn. |
| 422 | customer_fixed_by_key | Denne nøkkelen hører til en kunde, og ordren må være for den kunden. |
| 422 | customer_invalid | Noe i kundefeltene er feil. fields sier hva. |
| 422 | customer_required | Ordren må ha en kunde. Send customer, eller contact med createCustomer: true. |
| 422 | date_invalid | Datoen er ikke en gyldig dag (ÅÅÅÅ-MM-DD). |
| 422 | delivery_date_not_allowed | Avtalen leverer ikke den dagen. nextPossibleDate er den første dagen som går. |
| 422 | idempotency_key_reused | Denne Idempotency-Key ble brukt på en annen forespørsel. Bruk en ny nøkkel for ny handling. |
| 422 | intent_not_allowed | En kundenøkkel sender forespørsler ("intent": "request"), eller avrop på en godtatt avtale (agreementNumber). |
| 422 | length_over_max | Lengden er over det avtalen tillater (maxLengthMm). fields sier hvilken linje. |
| 422 | material_not_offered | Beslaget selges ikke i dette materialet. Materialene står på beslaget (GET /catalog/products/{id}). |
| 422 | orderer_required | Denne kunden krever bestiller (orderer). |
| 422 | params_impossible | Beslaget kan ikke lages med disse målene. fields sier hvilken linje. |
| 422 | params_invalid | Et mål mangler eller er utenfor det beslaget tillater. fields sier hvilken linje. |
| 422 | position_not_in_agreement | Posisjonen hører ikke til denne avtalen. Hent posisjonene med GET /agreements/{number}. fields sier hvilken linje. |
| 422 | price_unavailable | Linjen har ingen pris nå, for eksempel fordi avtalen ikke er godtatt eller har gått ut. fields sier hvilken linje. |
| 422 | project_no_required | Denne kunden krever prosjektnummer (projectNo). |
| 422 | quantity_invalid | Antallet må være mellom 1 og 500. |
| 422 | too_many_attachments | Ordren har allerede så mange filer som den kan ha. |
| 422 | too_many_lines | Ordren kan ha høyst 100 linjer. |
| 428 | idempotency_key_required | Send Idempotency-Key med denne forespørselen. |
| 428 | precondition_required | Send If-Match med versjonen du så, for eksempel "v3". |
| 429 | rate_limited | For mange kall. Vent retryAfterSeconds sekunder. |
| 500 | internal | Noe gikk galt hos oss. Feilen er meldt. Oppgi requestId hvis du spør. |
| 503 | unavailable | Tjenesten er midlertidig nede. Prøv igjen senere. |
Hendelser (webhooks)
Verkstedet legger inn en adresse (https) og velger hva den skal få beskjed om. Hver beskjed er en POST med hele objektet slik det var da, og med version, så du ser om du allerede har noe nyere: rekkefølgen er ikke garantert.
Hendelsene
order.requested· Ny forespørselVirkerorder.received· Ordre mottattVirkerorder.declined· Forespørsel avvistVirkerorder.cancelled· Ordre avbruttVirkerorder.in_work· I arbeidVirkerorder.ready· Ordre klarVirkerorder.ready_undone· Klar angretVirkerorder.delivered· Levert eller hentetVirkerorder.updated· Ordre endretVirkerorder.invoiced· FakturertVirkerorder.invoice_undone· Faktura angretVirkerorder.paid· BetaltVirkerorder.sms_failed· SMS ikke sendtVirkerorder.rework_marked· Merket som omarbeidVirkerorder.forwarded· Sendt videreVirkerorder.prepaid· Betalt på nettVirkerorder.refunded· RefundertVirkeragreement.sent· Avtale sendtVirkeragreement.accepted· Avtale godtattVirkeragreement.rejected· Avtale avslåttVirkerinvoice.issued· Faktura sendtVirkerinvoice.paid· Faktura betaltVirkercustomer.created· Ny kundeVirkercustomer.updated· Kunde endretVirkerbending_sheet.sent_for_approval· Bøyeark sendt til kundenVirkerbending_sheet.approved· Godkjent for bukkVirkerbending_sheet.change_requested· Kunden vil endreVirkerbending_sheet.bent· BøydVirker
POST /din-adresse HTTP/1.1
Content-Type: application/json
User-Agent: vbeslag-webhooks/1
Vbeslag-Event-Id: evt_01JEX4Q7R2M9T5V8W0Y3Z6A1B4
Vbeslag-Event-Type: order.ready
Vbeslag-Delivery-Attempt: 1
Vbeslag-Signature: t=1797590527,v1=5f2b…c9e1Sjekk signaturen
Vbeslag-Signature er t=<unix-tid>,v1=<hex HMAC-SHA256 av "t.rå-body" med hemmeligheten>. Avvis beskjeder som er eldre enn 5 minutter. Når verkstedet bytter hemmelighet, kommer to v1 i 24 timer: godta den som stemmer.
import crypto from 'node:crypto'
export function verifyVbeslag(rawBody, header, secret, toleranceSec = 300) {
const parts = header.split(',').map((p) => p.trim().split('='))
const t = Number(parts.find(([k]) => k === 't')?.[1])
if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false
const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex')
return parts.some(([k, v]) => k === 'v1' && v.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(v), Buffer.from(expected)))
}function vbeslag_verify(string $rawBody, string $header, string $secret, int $tolerance = 300): bool {
$t = 0; $sigs = [];
foreach (explode(',', $header) as $part) {
[$k, $v] = array_pad(explode('=', trim($part), 2), 2, '');
if ($k === 't') { $t = (int) $v; }
if ($k === 'v1') { $sigs[] = $v; }
}
if ($t === 0 || abs(time() - $t) > $tolerance) { return false; }
$expected = hash_hmac('sha256', $t . '.' . $rawBody, $secret);
foreach ($sigs as $s) { if (hash_equals($expected, $s)) { return true; } }
return false;
}Nye forsøk
Svar med en 2xx innen 10 sekunder. Ellers prøver vi igjen i omtrent 45 timer, med lengre pauser for hver gang. 410 Gone slår adressen av med en gang; 50 feil på rad gjør det samme, og verkstedet får beskjed. Vi følger aldri en omdirigering, og vi sender bare til offentlige adresser.
Gikk du glipp av noe?
GET /events gir de samme beskjedene 30 dager tilbake, eldste først etter den siste id-en du har.
GET /eventscurl "https://vbeslag.com/api/v1/events?after=evt_01JEX4Q7R2M9T5V8W0Y3Z6A1B4&types=order.ready" \
-H "Authorization: Bearer $VBESLAG_KEY"Det modulene legger til
Noen moduler gir API-et mer. Hver har sin egen del under, og den virker når verkstedet har modulen slått på.
Betaling og levering
Bygger dere en egen butikk? Send bestillingen som en forespørsel med POST /orders. Når dere har bekreftet den, lager dere en betalingslenke og sender kunden dit. Betalingssiden er vår, så vilkårene og knappen alltid er riktige.
Leveringen regnes av den samme regelen som kassen i butikken, så prisen blir den samme.
Hent butikken: adressen, måtene å bestille på, leveringsvalgene og vilkårene
VirkerRegn ut leveringen til et postnummer
VirkerBetal etter bekreftelse: en betalingslenke for en mottatt ordre
VirkerSe betalingene på en ordre: betalt, venter på betaling, refundert
VirkerVipps på betalingssiden
Kommer
Produksjon
Har dere en kantbenk med eget program, eller et planleggingsprogram? Lag en nøkkel med formålet «Maskinen eller planleggingsprogrammet henter dagens bøyeliste». Den kan lese bøyearkene og dagens liste, og merke et ark som bøyd.
Bare verkstedets egne nøkler, og bare når Produksjon er slått på. En kundenøkkel får aldri se bøyearkene.
Dagens bøyeliste kommer som CSV med Accept: text/csv, så den åpnes som kolonner i Excel.
Dagens bøyeliste, for alle kantbenker eller en, som JSON eller CSV
VirkerKantbenkene i verkstedet
VirkerEtt bøyeark: mål, vinkler, utbrett og fradrag
VirkerAlle bøyearkene på en ordre
VirkerBøyearket som PDF, med QR-koden pressen leser
VirkerDen flate platen som DXF, for klippebord og kappemaskiner
VirkerMerk et bøyeark som bøyd
VirkerFiler i maskinprodusentenes egne formater
Kommer
Eksempel: WooCommerce
En betalt ordre i WooCommerce blir en forespørsel i vbeslag. Hver vare blir en linje i ord, externalRef er woo-<nummer>, og samme ordre to ganger blir aldri to.
functions.phpadd_action('woocommerce_order_status_processing', function ($order_id) {
$o = wc_get_order($order_id);
$lines = [];
foreach ($o->get_items() as $item) {
$lines[] = ['kind' => 'text', 'description' => $item->get_name(), 'quantity' => (int) $item->get_quantity(), 'unit' => 'stk'];
}
wp_remote_post('https://vbeslag.com/api/v1/orders', [
'headers' => [
'Authorization' => 'Bearer ' . VBESLAG_API_KEY, // i wp-config.php, aldri i en temafil
'Content-Type' => 'application/json',
'Idempotency-Key' => sha1('woo-' . $order_id),
],
'body' => wp_json_encode([
'intent' => 'request',
'contact' => ['name' => $o->get_formatted_billing_full_name(), 'email' => $o->get_billing_email(), 'mobile' => $o->get_billing_phone()],
'note' => $o->get_customer_note() ?: 'Fra nettbutikken',
'lines' => $lines,
'externalRef' => 'woo-' . $order_id,
]),
'timeout' => 15,
]);
});Versjoner og endringer
Endringslisten under er den samme som i OpenAPI-dokumentet. v1 lever i minst tolv måneder etter at v2 kommer.
- 2026-10-05: Første versjon: nøkler, GET /me, ordre (lese, sende inn, endre, bekrefte, avbryte, status, filer, tidslinje), kunder og prosjekter, GET /events og webhooks med signatur.
- 2026-10-06: Webhooks for avtaler (sendt, godtatt, avslått), fakturaer (sendt, betalt), kunder (ny, endret) og «Merk som omarbeid». Hendelsene har avtalen, fakturaen eller kunden slik den var da hendelsen ble sendt.
- 2026-10-06: Nye tilganger for verkstedets nøkler:
production:read,production:statusogreports:read. Nye formål på nøkkelen:maskin,regnearkogleverandor. En kundenøkkel kan nå hainvoices:read.GET /mekan vise modulene som er slått på og avdelingene. - 2026-10-06: En ordre kan nå komme fra Min side (source «portal») og fra Beslagsnettet (source «nettverk»). Feltet source kan derfor ha to nye verdier i listOrders og getOrder.
- 2026-10-06: Sju nye webhooks (28 i alt):
order.prepaid(betalt på nett, medpayment) ogorder.refunded(medrefund) fra Nettbutikk,order.forwardedfra Beslagsnettet, ogbending_sheet.sent_for_approval,bending_sheet.approved,bending_sheet.change_requestedogbending_sheet.bentfra Produksjon, med gruppenbending_sheet.*. Et bøyeark i en hendelse erWebhookBendingSheet; hele arket får du medGET /bending-sheets/{id}. En kundenøkkels adresse får betalingen, refusjonen og bøyearkene til godkjenning for sin egen kunde, aldri «Bøyd». - 2026-10-06: Webhooks for avtaler og fakturaer sender nå det samme objektet som
GET /agreements/{number}ogGET /invoices/{id}(AgreementogInvoice;WebhookAgreementogWebhookInvoiceer borte): en avslått avtale har statusavvist, en utløptutlopt, ogvalidUntilogleadDayskan værenull; et utkast og «Fakturert i regnskapet» har ingen forfallsdag eller KID,currencyer alltidNOK, og en fakturalinjesuniter alltidnull. - 2026-10-06: «Send videre»: en ordre verkstedet sender videre til et annet verksted i Beslagsnettet, får hendelsen
order.forwarded, ikkeorder.cancelled. Lytter du etterorder.cancelledfor å se at en ordre går ut av listen, lytt også etterorder.forwarded. - 2026-10-06: En kundenøkkel med
invoices:readkan nå lese sin egen kundes sendte fakturaer:GET /invoices,GET /invoices/{id}og PDF-en. Aldri et utkast, og en annen kundes faktura svarer 404. - 2026-10-06: Avrop med
POST /orders:agreementNumberog linjer av typenposition(positionId,lengthMm,quantity) gir en ordre som er Mottatt, med avtalens priser ogsource: "avrop". Nye feilkoder:agreement_not_active,position_not_in_agreement,length_over_maxogdelivery_date_not_allowed(mednextPossibleDate).GET /orders?agreementNumber=lister avropene på en avtale.GET /agreementsogGET /invoicestarlimitogcursorsom alle lister. - 2026-10-06: Katalog og priser er åpne: GET /catalog/library (beslagsbiblioteket verkstedet kan selge), GET /catalog/products og GET /catalog/products/{id} (beslagene i nettbutikken, med ETag) og POST /prices (pris fra den samme prismotoren som butikken og kalkylen, opptil 50 linjer, ingenting lagres).
- 2026-10-06:
POST /pricestardiscountCodeogdeliveryOptionIdog regner rabatten og frakten som kassen i nettbutikken:shippingOreer frakten, den nyediscountOreer rabatten, oggrossOreblir det samme som en bestilling i butikken. En linje som ikke kan prises, svarer med sin egen kode:params_invalid,params_impossible,material_not_offeredogprice_unavailable(422) ogprices_hidden(403).ProductogProductListhar fått navn i dokumentet.drawingUrlog 3D-modellen imediakommer. - 2026-10-06: Avtaler i API-et: GET /agreements og GET /agreements/{number} viser avtalene med posisjoner, leveringsdager og pristabell (pris per stykk ved hver platelengde). Aldri et utkast. En kundenøkkel ser bare sin egen kundes avtaler. Et avrop er en ordre.
- 2026-10-06: Fakturaer:
GET /invoices(sendte fakturaer, kreditnotaer og «Fakturert i regnskapet»; utkast bare medincludeDrafts=true),GET /invoices/{id}med linjer, KID og ordrene den dekker, ogGET /invoices/{id}/pdf, laget på serveren av den utstedte fakturaen. Kreverinvoices:readog Kontor. Status på bokmål; beløp i hele øre. - 2026-10-06: Nytt: GET /reports/months/{month} gir tallene for en måned (ordrer, fakturert, betalt og utestående) som summer, aldri kundenavn. Krever reports:read og en nøkkel for verkstedet, ikke en kundenøkkel. GET /me viser nå modulene som er slått på, og avdelingene når verkstedet har to eller flere.
- 2026-10-06: Nettbutikken i API-et:
GET /shop(adresse, kassen, leveringsvalg og vilkår),POST /delivery-quotes(leveringen regnet som i kassen),POST /orders/{number}/payment-link(betalingslenke for en mottatt ordre, bare verkstedets nøkler) ogGET /orders/{number}/payments(betalingene, aldri en id hos Stripe). Ingen nye tilganger. - 2026-10-06: De fire operasjonene for nettbutikken står nå under «Nettbutikk» i referansen.
POST /delivery-quotestarsubtotalOre, summen av handlekurven i øre, så prisen blir den samme som i kassen når et leveringsvalg er gratis over en sum; uten den regnes leveringen som før.POST /orders/{number}/payment-linkkrever at kortbetaling er slått på i tillegg til nettbutikken: ellers svarer den 403feature_not_in_planmedfeature: "shop_payments". - 2026-10-06: Produksjon i API-et: hent et bøyeark med profil, utbrett og godkjenning, som PDF eller som DXF av platen; dagens bøyeliste som JSON eller CSV, for alle kantbenker eller en; kantbenkene; og «Bøyd» fra maskinen eller planleggingsprogrammet. For verkstedets nøkler med production:read og production:status, når Produksjon er slått på.
- 2026-10-06:
GET /orders/{number}/bending-sheetsgir gjeldende versjon av hvert bøyeark på en ordre, etter arknummer. Alle sju operasjonene for Produksjon står nå under «Produksjon» i referansen. Et verksted uten Produksjon får 403feature_not_in_planmedfeature: "produksjon"før noe leses. - 2026-10-06: En ordre har nå
production: hvor mange bøyeark den har (bendingSheets), hvor mange som er bøyd (bent) og hvor mange som venter på at kunden godkjenner (waitingForCustomer). Feltet ernullnår verkstedet ikke har Produksjon, og for en kundenøkkel. Det følger ordren i svarene fra ordreoperasjonene, ikke i webhooks ellerGET /events.
Full referanse
Hver operasjon med rettigheter, felt, svar, feilkoder og eksempel.
OpenAPI-dokumentet kan importeres i Postman, Insomnia eller Swagger UI.
Trenger du hjelp?
Skriv til oss, og ta med requestId fra svaret.