Direct naar inhoud

API-referentie

Boekhouding

Grootboek, memoriaalboekingen, crediteuren, inkoopfacturen, bankimport en -matching, documenten en btw.

Basis-URL: https://factora.one/api/v1

Overzicht

Alle paden beginnen met /accounting en vereisen recht administration.view. De boekhouding moet eerst in de webapp zijn ingericht; anders geeft elk endpoint 409. Rapportages gebruiken alleen definitieve journaalregels.

Bedragen zijn gehele eurocenten. Een UUID uit een andere organisatie wordt nooit geaccepteerd en geeft 404 of 422.

Van bankafschrift tot boeking

  1. 1Upload een afschrift (CSV, CAMT.053 of MT940) met POST /accounting/bank-imports. Er wordt nog niets geboekt.
  2. 2Factora stelt per transactie een match voor met een verkoop- of inkoopfactuur.
  3. 3Bevestig een voorstel met POST /accounting/bank-transactions/{id}/confirm; pas dan ontstaat een definitieve bankboeking.
  4. 4Of wijs het voorstel af met …/reject; er wordt niets geboekt.
  5. 5Een deelbetaling verhoogt paid_amount; pas bij het volledige bedrag wordt de verkoopfactuur paid.

Endpoints

GET/accounting/overview

Financieel overzicht

Financiële KPI’s en maandreeksen uit het grootboek.

Recht (app-login)
bookkeeping.view
curl "https://factora.one/api/v1/accounting/overview" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"
GET/accounting/accounts

Rekeningschema

Alle grootboekrekeningen, gesorteerd op code (niet gepagineerd).

Recht (app-login)
bookkeeping.view
curl "https://factora.one/api/v1/accounting/accounts" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "data": [
    {
      "id": "9d3d0101-…",
      "code": "1100",
      "name": "Bank",
      "type": "asset"
    },
    {
      "id": "9d3d0201-…",
      "code": "8000",
      "name": "Omzet hoog tarief",
      "type": "revenue"
    }
  ]
}
GET/accounting/journal-entries

Journaalposten

Gepagineerd met regels, nieuwste boekdatum eerst.

Recht (app-login)
bookkeeping.view

Queryparameters

  • per_pageinteger

    1–100, standaard 25

curl "https://factora.one/api/v1/accounting/journal-entries" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "current_page": 1,
  "data": [
    {
      "id": "9d3d13b5-c428-47b9-250c-d81936807b4c",
      "entry_number": "MEM-2026-0012",
      "entry_date": "2026-11-10",
      "description": "Correctie beginsaldo",
      "journal": {
        "id": "9d3d0001-…",
        "code": "MEM",
        "name": "Memoriaal",
        "type": "general"
      },
      "lines": [
        {
          "account_id": "9d3d0101-…",
          "debit": 10000,
          "credit": 0,
          "account": {
            "code": "1100",
            "name": "Bank"
          }
        },
        {
          "account_id": "9d3d0102-…",
          "debit": 0,
          "credit": 10000,
          "account": {
            "code": "0900",
            "name": "Eigen vermogen"
          }
        }
      ]
    }
  ],
  "last_page": 1,
  "next_page_url": null,
  "per_page": 25,
  "prev_page_url": null,
  "total": 1
}
GET/accounting/journal-entries/{id}

Journaalpost tonen

Met dagboek, boekjaar, periode, regels, rekeningen en btw-codes.

Recht (app-login)
bookkeeping.view
curl "https://factora.one/api/v1/accounting/journal-entries/<id>" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3d13b5-c428-47b9-250c-d81936807b4c",
    "entry_number": "MEM-2026-0012",
    "entry_date": "2026-11-10",
    "description": "Correctie beginsaldo",
    "journal": {
      "id": "9d3d0001-…",
      "code": "MEM",
      "name": "Memoriaal",
      "type": "general"
    },
    "lines": [
      {
        "account_id": "9d3d0101-…",
        "debit": 10000,
        "credit": 0,
        "account": {
          "code": "1100",
          "name": "Bank"
        }
      },
      {
        "account_id": "9d3d0102-…",
        "debit": 0,
        "credit": 10000,
        "account": {
          "code": "0900",
          "name": "Eigen vermogen"
        }
      }
    ]
  }
}
POST/accounting/journal-entries

Memoriaalboeking maken

Minimaal twee regels; elke regel heeft precies één positief debit of credit, en de sommen zijn exact gelijk. Met idempotency_key kun je veilig herhalen.

Recht (app-login)
bookkeeping.create

Body

  • journalstringverplicht

    Dagboek, bijv. general

  • entry_datedateverplicht

    Boekdatum

  • descriptionstringverplicht

    Max. 255

  • idempotency_keystring

    Max. 120; dezelfde sleutel maakt geen tweede boeking

  • linesarrayverplicht

    Minimaal 2 regels

  • lines[].account_iduuidverplicht

    Grootboekrekening

  • lines[].debit / lines[].creditintegerverplicht

    Precies één van beide, in centen

  • lines[].descriptionstring

    Max. 255

  • lines[].vat_code_id, customer_id, supplier_id, cost_center_iduuid

    Optionele koppelingen

curl -X POST "https://factora.one/api/v1/accounting/journal-entries" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "journal": "general",
    "entry_date": "2026-11-10",
    "description": "Correctie beginsaldo",
    "idempotency_key": "external-correction-1042",
    "lines": [
      {
        "account_id": "9d3d0101-…",
        "debit": 10000
      },
      {
        "account_id": "9d3d0102-…",
        "credit": 10000
      }
    ]
  }'

201 Voorbeeldantwoord

{
  "data": {
    "id": "9d3d13b5-c428-47b9-250c-d81936807b4c",
    "entry_number": "MEM-2026-0012",
    "entry_date": "2026-11-10",
    "description": "Correctie beginsaldo",
    "journal": {
      "id": "9d3d0001-…",
      "code": "MEM",
      "name": "Memoriaal",
      "type": "general"
    },
    "lines": [
      {
        "account_id": "9d3d0101-…",
        "debit": 10000,
        "credit": 0,
        "account": {
          "code": "1100",
          "name": "Bank"
        }
      },
      {
        "account_id": "9d3d0102-…",
        "debit": 0,
        "credit": 10000,
        "account": {
          "code": "0900",
          "name": "Eigen vermogen"
        }
      }
    ]
  }
}
GET/accounting/suppliers

Crediteuren

Gepagineerde lijst van leveranciers.

Recht (app-login)
bookkeeping.view
curl "https://factora.one/api/v1/accounting/suppliers" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "current_page": 1,
  "data": [
    {
      "id": "9d3d24c6-…",
      "name": "Hosting BV",
      "email": "facturen@hosting.nl",
      "iban": "NL02RABO0123456789",
      "payment_terms_days": 30
    }
  ],
  "last_page": 1,
  "next_page_url": null,
  "per_page": 25,
  "prev_page_url": null,
  "total": 1
}
POST/accounting/suppliers

Crediteur aanmaken

Naam is uniek binnen de organisatie.

Recht (app-login)
bookkeeping.create

Body

  • namestringverplicht

    Max. 255, uniek

  • emailstring

    E-mailadres

  • phone, address, zipcode, citystring

    Contactgegevens

  • countrystring

    Landcode van 2 letters

  • coc_numberstring

    Max. 32

  • vat_numberstring

    Max. 40

  • ibanstring

    Max. 50

  • payment_terms_daysinteger

    0–365

  • default_account_id, default_vat_code_iduuid

    Standaard rekening en btw-code

curl -X POST "https://factora.one/api/v1/accounting/suppliers" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Hosting BV",
    "email": "facturen@hosting.nl",
    "country": "NL",
    "iban": "NL02RABO0123456789",
    "payment_terms_days": 30
  }'

Antwoord: 201 Created met het nieuwe object onder data.

GET/accounting/purchase-invoices

Inkoopfacturen

Gepagineerde lijst.

Recht (app-login)
bookkeeping.view
curl "https://factora.one/api/v1/accounting/purchase-invoices" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"
POST/accounting/purchase-invoices

Inkoopfactuur aanmaken

Factora berekent regel-, btw- en totaalbedragen opnieuw. Met post: true wordt de factuur direct geboekt; anders blijft hij concept.

Recht (app-login)
bookkeeping.create

Body

  • supplier_iduuidverplicht

    Crediteur

  • invoice_numberstringverplicht

    Factuurnummer van de leverancier, max. 100

  • invoice_datedateverplicht

    Factuurdatum

  • due_datedate

    Op of na invoice_date

  • currencystring

    3 letters, bijv. EUR

  • descriptionstring

    Max. 255

  • postboolean

    Direct definitief boeken

  • lines[].account_iduuidverplicht

    Kostenrekening

  • lines[].descriptionstringverplicht

    Max. 255

  • lines[].quantitynumberverplicht

    Aantal

  • lines[].unit_priceintegerverplicht

    Centen

  • lines[].vat_code_iduuid

    Btw-code

  • lines[].tax_ratenumber

    0–100

curl -X POST "https://factora.one/api/v1/accounting/purchase-invoices" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "supplier_id": "9d3d24c6-…",
    "invoice_number": "INK-2026-88",
    "invoice_date": "2026-11-05",
    "post": true,
    "lines": [
      {
        "account_id": "9d3d0301-…",
        "vat_code_id": "9d3d0401-…",
        "description": "Software-abonnement",
        "quantity": "1",
        "unit_price": 10000,
        "tax_rate": 21
      }
    ]
  }'

Antwoord: 201 Created met het nieuwe object onder data.

GET/accounting/health

Controles op de administratie

Signalen die aandacht vragen, zoals onverwerkte documenten of onbevestigde transacties.

Recht (app-login)
bookkeeping.view
curl "https://factora.one/api/v1/accounting/health" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"
GET/accounting/bank-accounts

Bankrekeningen

Alle bankrekeningen met het aantal transacties (niet gepagineerd).

Recht (app-login)
bank.view
curl "https://factora.one/api/v1/accounting/bank-accounts" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"
GET/accounting/bank-transactions

Banktransacties

Gepagineerd, nieuwste transactiedatum eerst.

Recht (app-login)
bank.view

Queryparameters

  • per_pageinteger

    1–100, standaard 25

curl "https://factora.one/api/v1/accounting/bank-transactions" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"
POST/accounting/bank-imports

Bankafschrift importeren

Upload als multipart/form-data. Toegestane extensies: csv, txt, xml, camt, sta, mt940; max. 20 MB. Maakt matchvoorstellen, boekt nog niets.

Recht (app-login)
bank.manage

Formuliervelden

  • bank_account_iduuidverplicht

    Bankrekening van de organisatie

  • statementfileverplicht

    CSV-, CAMT.053- of MT940-bestand

curl -X POST "https://factora.one/api/v1/accounting/bank-imports" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json" \
  -F "bank_account_id=9d3d3501-…" \
  -F "statement=@./bankmutaties.camt053.xml"

Antwoord: 201 Created met het nieuwe object onder data.

POST/accounting/bank-transactions/{id}/confirm

Match bevestigen

Bevestigt de voorgestelde match en maakt de bankboeking. Antwoord bevat transaction en journal_entry.

Recht (app-login)
bank.manage

Mogelijke fouten

  • 422Geen geldige match om te bevestigen
curl -X POST "https://factora.one/api/v1/accounting/bank-transactions/<id>/confirm" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"
POST/accounting/bank-transactions/{id}/reject

Match afwijzen

Wijst het voorstel af zonder boeking.

Recht (app-login)
bank.manage
curl -X POST "https://factora.one/api/v1/accounting/bank-transactions/<id>/reject" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"
GET/accounting/documents

Documenten

Gepagineerde inbox van bonnen en facturen, nieuwste eerst.

Recht (app-login)
bookkeeping.view | documents.upload | documents.process

Queryparameters

  • statusstring

    Filter op verwerkingsstatus

  • per_pageinteger

    1–100, standaard 25

curl "https://factora.one/api/v1/accounting/documents" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"
GET/accounting/documents/{id}

Document tonen

Eén document met herkende gegevens.

Recht (app-login)
bookkeeping.view | documents.upload | documents.process
curl "https://factora.one/api/v1/accounting/documents/<id>" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3d46e8-…",
    "name": "bon-tankstation.jpg",
    "type": "receipt",
    "source": "api",
    "status": "open",
    "recognition_status": "completed",
    "supplier": "Tankstation De Brug",
    "supplier_id": null,
    "document_number": null,
    "document_date": "2026-11-11",
    "due_date": null,
    "subtotal": 6198,
    "tax_amount": 1302,
    "total_amount": 7500,
    "currency": "EUR",
    "payment_status": "paid",
    "purchase_invoice_id": null,
    "journal_entry_id": null,
    "warnings": [],
    "created_at": "2026-11-12T09:40:00+01:00",
    "processed_at": null
  }
}
POST/accounting/documents

Document uploaden

Upload een bon of factuur (pdf, jpg, jpeg, png, webp, heic, heif; max. 20 MB). Maximaal 30 uploads per minuut.

Recht (app-login)
documents.upload

Formuliervelden

  • filefileverplicht

    Het document

  • typestring

    purchase_invoice (standaard), receipt, credit_invoice, declaration, bank_document of other

curl -X POST "https://factora.one/api/v1/accounting/documents" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json" \
  -F "file=@./bon.jpg" \
  -F "type=receipt"

Antwoord: 201 Created met het nieuwe object onder data.

GET/accounting/vat/{period}

Btw-aangifte per periode

Rubrieken, te betalen en terug te vragen btw en controles voor één aangifteperiode. De periodesleutel hangt af van de aangiftefrequentie: 2026-Q3 (kwartaal), 2026-09 (maand) of 2026 (jaar).

Recht (app-login)
vat.view

Mogelijke fouten

  • 404Onbekende periode
curl "https://factora.one/api/v1/accounting/vat/2026-Q3" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"