Developers

Asstio API + MCP

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.

Asstio API + MCP

REST eller MCP — välj per use case

Samma underliggande data, samma versioneringskontrakt, samma authmodell. Skillnaden är vem som anropar.

REST

För servrar, script och webbappar

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"
Versionerad (v1 är stabil) Cursor-paginering ISO 8601 + UTF-8 Inga rate-limits idag
MCP

För Claude, Cursor och AI-agenter

Samma 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"
    }
  }
}
10 tools, en per endpoint OAuth via discovery (RFC 9728) 60 tool-calls/min/användare Streamable-HTTP

Från noll till första API-anropet — på 5 minuter

1. Skapa ett app-lösenord

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.

2. Växla in mot en JWT

Skicka app-lösenordet till Zitadels token-endpoint för att få en kortlivad Bearer-token. Cacha tills strax innan den löper ut.

3. Ring en endpoint

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.

Allt ni behöver för första anropet

GET /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
}
POST /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"
}
MCP 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 order­rader öppna,
 totalt 18 enheter kvar att leverera —
 främst Widget WID-12 och Skruv M8."

10 endpoints. 10 MCP-tools. Samma data.

Allt v1 erbjuder är read-only — säkert att exponera för LLMs och tredjeparts-dashboards. Skrivande endpoints kommer i v2.

GET /api/v1/sales-orders
list_sales_orders

Säljorderhuvuden — orderboken. Filter på kund, status, leveransdatum, valuta. Defaultar till IsOrderIntake=1.

GET /api/v1/purchase-orders
list_purchase_orders

Aktiva inköpsorder mot leverantörer. Filter på vendor, datum, valuta. Defaultar till IsPurchase=1.

GET /api/v1/sales-invoices
list_sales_invoices

Säljfakturahuvuden (och valbart kreditfakturor via documentType=credit). Defaultar till IsSales=1.

POST /api/v1/sales-invoice-lines
list_sales_invoice_lines

Sålda artikelrader. POST eftersom filterytan är bred — datumintervall, kund, produkt, status.

GET /api/v1/open-order-lines
list_open_order_lines

Orderrader med kvar att leverera. Räknat qtyLeftToDeliver på servern. Filter per kund, produkt eller lager.

GET /api/v1/warehouse-stock
get_warehouse_stock

Saldo per produkt per lagerplats. Levererar qtyDistributable färdig­räknad så ni slipper.

GET /api/v1/vendor-prices
get_vendor_prices_for_product

Vilka leverantörer har vilka priser på en specifik produkt. Filter på valuta.

GET /api/v1/products/find
find_product

Slå upp produkt på namn, artikelnummer eller streckkod. Returnerar topp 1–20 kandidater för disambiguering.

GET /api/v1/customers
list_customers

Sök eller lista kunder. Fritextsök mot id, namn eller org.nr.

GET /api/v1/customers/{id}
get_customer

Full kunddetalj: kreditlimit, förfallna ordrar, kreditstopp, betalnings- och leveransvillkor.

Use cases redan i drift hos våra kunder

Realtids­dashboards i Power BI

Hämta säljorder, fakturarader och lagerstatus direkt — ingen export, ingen ETL, alltid färsk data.

Claude som affärsanalytiker

"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.

Slack-notifieringar

Pollera open-order-lines nattligt och posta i Slack om något ligger över 30 dagar utan delleverans.

Prisjämförelse mellan leverantörer

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.

AI-driven kundbrev

Be Cursor / Claude generera personliga uppföljnings­mejl baserat på kundens specifika orderhistorik från sales-invoice-lines.

Custom integrationer

Bygg er egen koppling mellan Asstio och whatever — CRM, BI, e-postmarketing, supportverktyg. Inga konsulttimmar krävs.

En auth-modell. Funkar för båda.

Varje request bär en Zitadel JWT i Authorization: Bearer-headern. Tenanten härleds från tokens InstanceId-claim.

Webb-användare

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.

Backend / cron-jobb

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.

AI-assistenter via MCP

Claude Desktop, Cline och liknande sköter OAuth själva via vår RFC 9728-discovery-endpoint. Pasta-baserad fallback för enklare klienter.

v1 · STABILT

Versions­kontrakt

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.

Få access

Redo att börja bygga?

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.

Kontakta oss Boka demo →