Read-only åtkomst till er Asstio-data — för era egna appar, dashboards, automatiseringar och AI-assistenter. REST för servrar och script, MCP för Claude, Cursor och custom agents. Samma data. Samma auth. v1 är stabil.
Samma underliggande data, samma versioneringskontrakt, samma authmodell. Skillnaden är vem som anropar.
GET och POST mot versionerade endpoints under /api/v1/*. Bygg dashboards, exportera till Power BI, mata Slack-bots eller köra nattliga jobb mot er Asstio-data.
# Hämta öppna säljordrar curl https://din-tenant.asstio.com/api/v1/sales-orders \ -H "Authorization: Bearer $TOKEN"
v1 är stabil)
Cursor-paginering
ISO 8601 + UTF-8
Inga rate-limits idagSamma data exponerad som 10 verktyg en AI-assistent kan anropa. Implementerar Model Context Protocol över streamable-HTTP. Claude Desktop, Cline och Cursor sköter OAuth själva.
// claude_desktop_config.json { "mcpServers": { "asstio": { "url": "https://din-tenant-mcp.asstio.com/mcp" } } }
Gå till Inställningar → Användare → App-lösenord i Asstio. Skapa ett nytt, ge det ett namn (t.ex. "Power BI"), kopiera lösenordet.
Skicka app-lösenordet till Zitadels token-endpoint för att få en kortlivad Bearer-token. Cacha tills strax innan den löper ut.
Lägg Authorization: Bearer <token> på en GET mot /api/v1/customers?q=Acme. Tenanten härleds från tokens InstanceId-claim — ni passar aldrig tenant-id manuellt.
/api/v1/customers?q=Acme# Sök efter en kund curl -G "$ASSTIO/api/v1/customers" \ --data-urlencode "q=Acme" \ -H "Authorization: Bearer $TOKEN"
// Response { "items": [{ "id": 412, "name": "Acme Ltd", "orgno": "556677-8899", "openOrderCount": 3 }], "nextCursor": null }
/api/v1/sales-invoice-lines# Vad sålde vi till Acme i april? curl -X POST "$ASSTIO/api/v1/sales-invoice-lines" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "from": "2026-04-01", "to": "2026-04-30", "customerId": 412, "pageSize": 100 }'
// Response (1 av 23 rader) { "productNumber": "WID-12", "quantity": 4.0, "sumExVat": 12000.00, "currencyIsoCode": "SEK" }
tools/call// Be Claude i en chatt: "Visa öppna leverans-rader till Kraft Group" // Claude anropar: { "method": "tools/call", "params": { "name": "list_open_order_lines", "arguments": { "customerId": 412 } } }
// Claude svarar i naturligt språk "Kraft Group har 6 orderrader öppna, totalt 18 enheter kvar att leverera — främst Widget WID-12 och Skruv M8."
Allt v1 erbjuder är read-only — säkert att exponera för LLMs och tredjeparts-dashboards. Skrivande endpoints kommer i v2. Klicka på en endpoint för att se request- och response-exempel.
/api/v1/sales-orders
list_sales_ordersIsOrderIntake=1.curl -G "$ASSTIO/api/v1/sales-orders" \ --data-urlencode "customerId=412" \ --data-urlencode "orderDateFrom=2026-05-01" \ -H "Authorization: Bearer $TOKEN"
// 200 OK · X-Asstio-Api-Version: v1 { "items": [{ "id": 18743, "name": "Webshop order 2026-05", "customerId": 412, "customerName": "Acme Ltd", "statusId": 31, "statusName": "Bekräftad", "dateOrder": "2026-05-12T00:00:00Z", "dateDelivery": "2026-05-25T00:00:00Z", "totalExVat": 18250.00, "totalIncVat": 22812.50, "openAmount": 22812.50, "isLate": false, "currencyIsoCode": "SEK" }], "nextCursor": "AQABBBgAAAA=", "pageSizeApplied": 50, "truncated": true }
/api/v1/purchase-orders
list_purchase_ordersIsPurchase=1.curl -G "$ASSTIO/api/v1/purchase-orders" \ --data-urlencode "vendorId=78" \ -H "Authorization: Bearer $TOKEN"
{
"items": [{
"id": 92044,
"purchaseNumber": 2026131,
"vendorId": 78,
"vendorName": "Northwind Components AB",
"statusName": "Beställd",
"dateOrder": "2026-05-02T00:00:00Z",
"dateDelivery": "2026-05-30T00:00:00Z",
"orderTotalExVat": 42500.00,
"receivedValueExVat": 12700.00,
"invoicedValueExVat": 0.00,
"openToInvoiceExVat": 12700.00,
"currencyIsoCode": "SEK"
}],
"nextCursor": null
}/api/v1/sales-invoices
list_sales_invoicesdocumentType=credit). Defaultar till IsSales=1.curl -G "$ASSTIO/api/v1/sales-invoices" \ --data-urlencode "customerId=412" \ --data-urlencode "dueDateTo=2026-05-20" \ -H "Authorization: Bearer $TOKEN"
{
"items": [{
"id": 88312,
"invoiceNumber": 2026301,
"customerName": "Acme Ltd",
"statusName": "Skickad",
"dateInvoice": "2026-05-01T00:00:00Z",
"dateDue": "2026-05-31T00:00:00Z",
"totalExVat": 12000.00,
"totalIncVat": 15000.00,
"openAmount": 15000.00,
"paidAmount": 0.00,
"isLate": false,
"isFullyPaid": false,
"currencyIsoCode": "SEK",
"documentType": "invoice"
}]
}/api/v1/sales-invoice-lines
list_sales_invoice_lines{
"from": "2026-01-01T00:00:00Z",
"to": "2026-05-20T00:00:00Z",
"customerId": 412,
"productId": null,
"includeNonSales": false,
"pageSize": 100
}
{
"items": [{
"invoiceId": 88312,
"invoiceNumber": 2026301,
"lineId": 410551,
"productNumber": "WID-12",
"description": "Widget, large",
"quantity": 4.0,
"qtyDelivered": 4.0,
"price": 3000.00,
"discount": 0.0,
"sumExVat": 12000.00,
"sumIncVat": 15000.00,
"customerName": "Acme Ltd",
"currencyIsoCode": "SEK"
}]
}/api/v1/open-order-lines
list_open_order_linesqtyLeftToDeliver på servern. Filter per kund, produkt eller lager.curl -G "$ASSTIO/api/v1/open-order-lines" \ --data-urlencode "customerId=412" \ -H "Authorization: Bearer $TOKEN"
{
"items": [{
"orderId": 18743,
"orderName": "Webshop order 2026-05",
"productNumber": "WID-12",
"description": "Widget, large",
"qtyOrdered": 10.0,
"qtyDelivered": 4.0,
"qtyLeftToDeliver": 6.0,
"dateDelivery": "2026-05-25T00:00:00Z",
"customerName": "Acme Ltd",
"statusName": "Bekräftad"
}]
}/api/v1/warehouse-stock
get_warehouse_stockqtyDistributable färdigräknad så ni slipper.curl -G "$ASSTIO/api/v1/warehouse-stock" \ --data-urlencode "productId=9921" \ -H "Authorization: Bearer $TOKEN"
{
"items": [{
"productNumber": "WID-12",
"productDescription": "Widget, large",
"warehouseName": "Main",
"locationName": "A-12-3",
"qtyInStock": 47.0,
"qtyIncoming": 20.0,
"qtyOutgoing": 6.0,
"qtyDistributable": 61.0
// qtyInStock - qtyOutgoing + qtyIncoming
}]
}/api/v1/vendor-prices
get_vendor_prices_for_productcurl -G "$ASSTIO/api/v1/vendor-prices" \ --data-urlencode "productId=9921" \ -H "Authorization: Bearer $TOKEN"
{
"items": [{
"productNumber": "WID-12",
"supplierId": 78,
"supplierName": "Northwind Components AB",
"supplierProductNumber": "NW-W-LRG",
"price": 850.00,
"currencyIsoCode": "SEK",
"leadTimeDays": null,
"validFrom": null,
"validTo": null
}]
}/api/v1/products/find
find_productcurl -G "$ASSTIO/api/v1/products/find" \ --data-urlencode "q=WID" \ --data-urlencode "limit=10" \ -H "Authorization: Bearer $TOKEN"
// Array (inte PageResponse) [ { "productId": 9921, "productNumber": "WID-12", "description": "Widget, large", "barcode": null, "isActive": true } ]
/api/v1/customers
list_customerscurl -G "$ASSTIO/api/v1/customers" \ --data-urlencode "q=Acme" \ -H "Authorization: Bearer $TOKEN"
{
"items": [{
"id": 412,
"contactNumber": 10042,
"name": "Acme Ltd",
"orgno": "556677-8899",
"currencyIsoCode": null,
"inactive": false,
"openOrderCount": 3
}],
"nextCursor": null
}/api/v1/customers/{id}
get_customercurl "$ASSTIO/api/v1/customers/412" \ -H "Authorization: Bearer $TOKEN"
{
"id": 412,
"contactNumber": 10042,
"name": "Acme Ltd",
"orgno": "556677-8899",
"creditLimit": 250000.00,
"overdueOrderSum": 4200.00,
"creditStop": false,
"paymentTermName": "30 dagar netto",
"deliveryTermName": "Fritt vårt lager",
"priceListName": "Standard",
"orderCount": 84
}
// 404 om kunden inte finns / tillhör annan tenant { "code": "not_found", "message": "Customer 99999 not found" }
Hämta säljorder, fakturarader och lagerstatus direkt — ingen export, ingen ETL, alltid färsk data.
"Visa mig de tre största kunderna med förfallna fakturor över 10 000 kr" — Claude anropar list_customers + list_sales_invoices och svarar direkt.
Pollera open-order-lines nattligt och posta i Slack om något ligger över 30 dagar utan delleverans.
Kör vendor-prices för varje aktiv artikel — flagga när bästa pris ligger hos en leverantör ni inte använt på 6 månader.
Be Cursor / Claude generera personliga uppföljningsmejl baserat på kundens specifika orderhistorik från sales-invoice-lines.
Bygg er egen koppling mellan Asstio och whatever — CRM, BI, e-postmarketing, supportverktyg. Inga konsulttimmar krävs.
Varje request bär en Zitadel JWT i Authorization: Bearer-headern. Tenanten härleds från tokens InstanceId-claim.
Användare i Asstios egna webbgränssnitt har redan en token i sessionen. Er in-browser-kod kan läsa den och göra API-anrop direkt.
Skapa ett app-lösenord i Asstio (under användarinställningar). Växla mot Zitadel för en token. Cacha tills den löper ut.
Claude Desktop, Cline och liknande sköter OAuth själva via vår RFC 9728-discovery-endpoint. Pasta-baserad fallback för enklare klienter.
Inuti v1 gör vi bara additiva ändringar — nya endpoints, nya valbara fält, nya query-parametrar. Existerande fältnamn, typer och default-beteenden ändras inte. Breaking changes landar i v2 på en separat URL-prefix. v1 fortsätter köra tills sista integratorn flyttat över.
Varje response under /api/v1/* bär headern X-Asstio-Api-Version: v1 — pin emot den om ni vill ha försvar mot oavsiktliga uppgraderingar.
Kontakta oss för ett app-lösenord och URL till er tenant — och säg gärna vad ni vill bygga, så pekar vi mot rätt endpoints.