Direct naar inhoud

API-referentie

Offertes

Conceptoffertes maken, versturen, laten accepteren of afwijzen en omzetten naar een factuur.

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

Overzicht

Pakketfeature quotes. Velden en regels werken als bij facturen, met quote_date en valid_until (beide verplicht, valid_until op of na quote_date) in plaats van factuur- en vervaldatum.

StatusBetekenis
draftConcept; wijzigbaar en verwijderbaar
sentVerzonden
expiredVerlopen. Filter status=expired geeft ook verzonden offertes waarvan valid_until verstreken is
acceptedGeaccepteerd
rejectedAfgewezen

Endpoints

GET/quotes

Offertes opvragen

Gepagineerde lijst zonder regels; standaard nieuwste offertedatum eerst.

Pakketfeature
quotes
Recht (app-login)
quotes.view

Queryparameters

  • statusstring

    draft, sent, expired, accepted of rejected

  • customer_iduuid

    Alleen offertes van deze klant

  • sortstring

    quote_date, valid_until, quote_number, total_amount, status of created_at; - voor aflopend

  • per_pageinteger

    1–100, standaard 50

curl "https://factora.one/api/v1/quotes?status=sent" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "data": {
    "current_page": 1,
    "data": [
      {
        "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
        "quote_number": "OFF-2026-0031",
        "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
        "customer": {
          "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
          "name": "Jansen Bouw",
          "email": "info@jansenbouw.nl"
        },
        "quote_date": "2026-11-12",
        "valid_until": "2026-12-12",
        "status": "sent",
        "is_expired": false,
        "subtotal": 125000,
        "tax_amount": 26250,
        "total_amount": 151250,
        "notes": "Deze offerte is 30 dagen geldig.",
        "sent_at": "2026-11-12T10:05:00+01:00",
        "accepted_at": null,
        "rejected_at": null,
        "converted_invoice_id": null,
        "created_at": "2026-11-12T09:31:40+01:00",
        "updated_at": "2026-11-12T09:31:40+01:00"
      }
    ],
    "first_page_url": "https://factora.one/api/v1/quotes?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://factora.one/api/v1/quotes?page=1",
    "next_page_url": null,
    "path": "https://factora.one/api/v1/quotes",
    "per_page": 50,
    "prev_page_url": null,
    "to": 1,
    "total": 1
  }
}
GET/quotes/{id}

Offerte tonen

Offerte met alle regels.

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

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
    "quote_number": "OFF-2026-0031",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-12",
    "status": "draft",
    "is_expired": false,
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "notes": "Deze offerte is 30 dagen geldig.",
    "sent_at": null,
    "accepted_at": null,
    "rejected_at": null,
    "converted_invoice_id": null,
    "created_at": "2026-11-12T09:31:40+01:00",
    "updated_at": "2026-11-12T09:31:40+01:00",
    "lines": [
      {
        "id": "9d3cbe60-7fd3-4264-d0b7-83c4e132af76",
        "description": "Projectimplementatie",
        "quantity": 1,
        "unit_price": 125000,
        "tax_rate": 21,
        "subtotal": 125000,
        "tax_amount": 26250,
        "total_amount": 151250
      }
    ]
  }
}
POST/quotes

Conceptofferte aanmaken

Maakt een concept met regels en het volgende offertenummer.

Pakketfeature
quotes
Recht (app-login)
quotes.manage

Body

  • customer_iduuidverplicht

    Klant van dezelfde organisatie

  • quote_datedateverplicht

    Offertedatum

  • valid_untildateverplicht

    Geldig tot, op of na quote_date

  • notesstring

    Max. 1000 tekens

  • linesarrayverplicht

    Minimaal één regel. Bij PATCH vervangt deze lijst alle regels.

  • lines[].iduuid

    Alleen bij PATCH: bestaande regel behouden en bijwerken

  • lines[].descriptionstringverplicht

    Max. 5000 tekens; meerdere regels toegestaan

  • lines[].quantitynumberverplicht

    Minimaal 0.01

  • lines[].unit_priceintegerverplicht

    Prijs per eenheid in centen exclusief btw, minimaal 0

  • lines[].tax_ratenumberverplicht

    Btw-percentage, 0–100

curl -X POST "https://factora.one/api/v1/quotes" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-12",
    "notes": "Deze offerte is 30 dagen geldig.",
    "lines": [
      {
        "description": "Projectimplementatie",
        "quantity": 1,
        "unit_price": 125000,
        "tax_rate": 21
      }
    ]
  }'

201 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
    "quote_number": "OFF-2026-0031",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-12",
    "status": "draft",
    "is_expired": false,
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "notes": "Deze offerte is 30 dagen geldig.",
    "sent_at": null,
    "accepted_at": null,
    "rejected_at": null,
    "converted_invoice_id": null,
    "created_at": "2026-11-12T09:31:40+01:00",
    "updated_at": "2026-11-12T09:31:40+01:00",
    "lines": [
      {
        "id": "9d3cbe60-7fd3-4264-d0b7-83c4e132af76",
        "description": "Projectimplementatie",
        "quantity": 1,
        "unit_price": 125000,
        "tax_rate": 21,
        "subtotal": 125000,
        "tax_amount": 26250,
        "total_amount": 151250
      }
    ]
  }
}
PATCH/quotes/{id}

Conceptofferte bijwerken

Alleen concepten. lines vervangt alle regels.

Pakketfeature
quotes
Recht (app-login)
quotes.manage

Mogelijke fouten

  • 422Alleen conceptoffertes kunnen bewerkt worden.
curl -X PATCH "https://factora.one/api/v1/quotes/<id>" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "valid_until": "2026-12-31"
  }'

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
    "quote_number": "OFF-2026-0031",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-31",
    "status": "draft",
    "is_expired": false,
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "notes": "Deze offerte is 30 dagen geldig.",
    "sent_at": null,
    "accepted_at": null,
    "rejected_at": null,
    "converted_invoice_id": null,
    "created_at": "2026-11-12T09:31:40+01:00",
    "updated_at": "2026-11-12T09:31:40+01:00",
    "lines": [
      {
        "id": "9d3cbe60-7fd3-4264-d0b7-83c4e132af76",
        "description": "Projectimplementatie",
        "quantity": 1,
        "unit_price": 125000,
        "tax_rate": 21,
        "subtotal": 125000,
        "tax_amount": 26250,
        "total_amount": 151250
      }
    ]
  }
}
DELETE/quotes/{id}

Conceptofferte verwijderen

Alleen concepten.

Pakketfeature
quotes
Recht (app-login)
quotes.manage
curl -X DELETE "https://factora.one/api/v1/quotes/<id>" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "message": "Offerte verwijderd."
}
POST/quotes/{id}/send

Offerte versturen per e-mail

Verstuurt de offerte naar de klant en zet de status op sent.

Pakketfeature
quotes + automatic_emails
Recht (app-login)
quotes.send
curl -X POST "https://factora.one/api/v1/quotes/<id>/send" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
    "quote_number": "OFF-2026-0031",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-12",
    "status": "sent",
    "is_expired": false,
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "notes": "Deze offerte is 30 dagen geldig.",
    "sent_at": "2026-11-12T10:05:00+01:00",
    "accepted_at": null,
    "rejected_at": null,
    "converted_invoice_id": null,
    "created_at": "2026-11-12T09:31:40+01:00",
    "updated_at": "2026-11-12T09:31:40+01:00",
    "lines": [
      {
        "id": "9d3cbe60-7fd3-4264-d0b7-83c4e132af76",
        "description": "Projectimplementatie",
        "quantity": 1,
        "unit_price": 125000,
        "tax_rate": 21,
        "subtotal": 125000,
        "tax_amount": 26250,
        "total_amount": 151250
      }
    ]
  }
}
POST/quotes/{id}/reminder

Herinnering versturen

Stuurt de klant een herinnering voor een openstaande offerte.

Pakketfeature
quotes + automatic_emails
Recht (app-login)
quotes.send
curl -X POST "https://factora.one/api/v1/quotes/<id>/reminder" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
    "quote_number": "OFF-2026-0031",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-12",
    "status": "sent",
    "is_expired": false,
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "notes": "Deze offerte is 30 dagen geldig.",
    "sent_at": "2026-11-12T10:05:00+01:00",
    "accepted_at": null,
    "rejected_at": null,
    "converted_invoice_id": null,
    "created_at": "2026-11-12T09:31:40+01:00",
    "updated_at": "2026-11-12T09:31:40+01:00",
    "lines": [
      {
        "id": "9d3cbe60-7fd3-4264-d0b7-83c4e132af76",
        "description": "Projectimplementatie",
        "quantity": 1,
        "unit_price": 125000,
        "tax_rate": 21,
        "subtotal": 125000,
        "tax_amount": 26250,
        "total_amount": 151250
      }
    ]
  }
}
POST/quotes/{id}/mark-as-sent

Markeren als verzonden

Zet een concept op sent zonder e-mail.

Pakketfeature
quotes
Recht (app-login)
quotes.manage
curl -X POST "https://factora.one/api/v1/quotes/<id>/mark-as-sent" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
    "quote_number": "OFF-2026-0031",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-12",
    "status": "sent",
    "is_expired": false,
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "notes": "Deze offerte is 30 dagen geldig.",
    "sent_at": "2026-11-12T10:05:00+01:00",
    "accepted_at": null,
    "rejected_at": null,
    "converted_invoice_id": null,
    "created_at": "2026-11-12T09:31:40+01:00",
    "updated_at": "2026-11-12T09:31:40+01:00",
    "lines": [
      {
        "id": "9d3cbe60-7fd3-4264-d0b7-83c4e132af76",
        "description": "Projectimplementatie",
        "quantity": 1,
        "unit_price": 125000,
        "tax_rate": 21,
        "subtotal": 125000,
        "tax_amount": 26250,
        "total_amount": 151250
      }
    ]
  }
}
POST/quotes/{id}/accept

Offerte accepteren

Alleen voor verzonden of verlopen offertes.

Pakketfeature
quotes
Recht (app-login)
quotes.manage

Mogelijke fouten

  • 422Alleen verzonden of verlopen offertes kunnen geaccepteerd worden.
curl -X POST "https://factora.one/api/v1/quotes/<id>/accept" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
    "quote_number": "OFF-2026-0031",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-12",
    "status": "accepted",
    "is_expired": false,
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "notes": "Deze offerte is 30 dagen geldig.",
    "sent_at": "2026-11-12T10:05:00+01:00",
    "accepted_at": "2026-11-13T11:00:00+01:00",
    "rejected_at": null,
    "converted_invoice_id": null,
    "created_at": "2026-11-12T09:31:40+01:00",
    "updated_at": "2026-11-12T09:31:40+01:00"
  }
}
POST/quotes/{id}/reject

Offerte afwijzen

Alleen voor verzonden of verlopen offertes.

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

200 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c8b3d-4ca0-4f31-ad84-5091be0f7c43",
    "quote_number": "OFF-2026-0031",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "quote_date": "2026-11-12",
    "valid_until": "2026-12-12",
    "status": "rejected",
    "is_expired": false,
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "notes": "Deze offerte is 30 dagen geldig.",
    "sent_at": "2026-11-12T10:05:00+01:00",
    "accepted_at": null,
    "rejected_at": "2026-11-13T11:00:00+01:00",
    "converted_invoice_id": null,
    "created_at": "2026-11-12T09:31:40+01:00",
    "updated_at": "2026-11-12T09:31:40+01:00"
  }
}
POST/quotes/{id}/convert

Omzetten naar factuur

Maakt een conceptfactuur met de regels van de offerte. Vereist ook de factuurfeature en het recht invoices.manage.

Pakketfeature
quotes + invoices
Recht (app-login)
quotes.manage + invoices.manage
curl -X POST "https://factora.one/api/v1/quotes/<id>/convert" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -H "Accept: application/json"

201 Voorbeeldantwoord

{
  "data": {
    "id": "9d3c7a2c-3b9f-4e20-9c73-4f80ad9e6b32",
    "invoice_number": "2026-0142",
    "customer_id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
    "customer": {
      "id": "9d3c6f1b-2a8e-4d1f-8b62-3e7f9c8d5a21",
      "name": "Jansen Bouw",
      "email": "info@jansenbouw.nl"
    },
    "invoice_date": "2026-11-12",
    "due_date": "2026-11-26",
    "status": "draft",
    "is_overdue": false,
    "invoice_type": "regular",
    "is_credit_note": false,
    "credited_invoice_id": null,
    "credit_note_id": null,
    "currency": "EUR",
    "subtotal": 125000,
    "tax_amount": 26250,
    "total_amount": 151250,
    "paid_amount": 0,
    "outstanding_amount": 151250,
    "notes": null,
    "labels": [],
    "sent_at": null,
    "paid_at": null,
    "cancelled_at": null,
    "cancellation_reason": null,
    "public_pay_url": null,
    "created_at": "2026-11-12T09:20:11+01:00",
    "updated_at": "2026-11-12T09:20:11+01:00",
    "lines": [
      {
        "id": "9d3cbe60-7fd3-4264-d0b7-83c4e132af76",
        "description": "Website onderhoud",
        "quantity": 2,
        "unit_price": 7500,
        "tax_rate": 21,
        "subtotal": 15000,
        "tax_amount": 3150,
        "total_amount": 18150
      }
    ]
  }
}
GET/quotes/{id}/pdf

PDF downloaden

Geeft de offerte als PDF.

Pakketfeature
quotes + pdf_export
Recht (app-login)
quotes.view
curl "https://factora.one/api/v1/quotes/<id>/pdf" \
  -H "Authorization: Bearer $FACTORA_API_KEY" \
  -o document.pdf

Antwoord: het PDF-bestand met Content-Type: application/pdf.