Het wijzigen van gegevens gebeurt op een vergelijkbare manier als het aanmaken ervan. Het verschil zit voornamelijk in de gebruikte HTTP-methode en het feit dat je bij updates steeds de volledige URI van het bestaande object moet opgeven.


Voorbeeld

Om factuur met ID 1001 te wijzigen, gebruik je: /api/v1/invoices/1001


POST vs. PUT: wat is het verschil?

De keuze tussen POST en PUT bepaalt hoe de wijzigingen worden toegepast:


POST (gedeeltelijke update)

  • Gebruik POST wanneer je enkel specifieke velden wilt bijwerken.
  • Niet opgegeven velden blijven ongewijzigd.

  • Bijvoorbeeld: alleen de description van een factuurregel wijzigen, zonder het bedrag aan te passen.

PUT (volledige vervanging)

  • Bij PUT geef je het volledige object door.
  • Velden die niet vermeld worden, worden verwijderd.

  • Dit geldt ook voor geneste gegevens (zoals factuurlijnen, betalingen, etc.).

Belang van ID’s bij onderliggende elementen

Wanneer je geneste elementen meegeeft (zoals items, payments, enz.), is het belangrijk dat elk onderliggend element zijn ID bevat:

  • Met ID: het element wordt herkend als bestaand en bijgewerkt.

  • Zonder ID: het element wordt beschouwd als nieuw en zal worden aangemaakt.

Dit geldt zowel voor POST als PUT.


Specifiek gedrag bij PUT en lege blokken

Gebruik je PUT en wil je bijvoorbeeld alle betalingen van een factuur verwijderen, dan moet je expliciet een leeg payments-blok (in XML) of een lege array (in JSON) meegeven:

Voorbeeld: "payments": []


Wordt de payments-array expliciet meegegeven als leeg → alle betalingen worden verwijderd.

Laat je het payments-veld volledig weg → bestaande betalingen blijven behouden.


Samengevat: enkel door expliciet een leeg blok mee te geven worden de bijbehorende bestaande gegevens verwijderd. Wordt het veld niet vermeld, dan blijft de bestaande data onaangetast.


Voorbeelden

Voorbeeld invoergegevens in JSON om een factuurlijn te wijzigen:

{
  "description": "Mijn bestelling",
   "amount_with_tax": 25
}

Factuurlijn vervangen in curl:

curl -X PUT "https://eenvoudigfactureren.be/api/v1/invoices/1001/items/2893" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  --data-binary @itemData.json

Factuurlijn vervangen in JavaScript:

const itemJsonData = {
  description: "Mijn bestelling",
  amount_with_tax: 25
};

fetch("https://eenvoudigfactureren.be/api/v1/invoices/1001/items/2893", {
  method: "PUT",
  headers: {
    "X-API-Key": "your_api_key_here",
    "Content-Type": "application/json",
    "Accept": "application/json"
  },
  body: JSON.stringify(itemJsonData)
})
.then(async response => {
  const contentType = response.headers.get("Content-Type");
  const isJson = contentType && contentType.includes("application/json");
  const data = isJson ? await response.json() : await response.text();

  if (!response.ok) {
    throw new Error(data.error || data || `HTTP ${response.status}`);
  }

  console.log("Success:", data);
})
.catch(error => {
  console.error("Error:", error.message);
});

Factuurlijn vervangen in PHP:

$p = curl_init('https://eenvoudigfactureren.be/api/v1/invoices/1001/items/2893');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "X-API-Key: your_api_key_here",
    "Content-Type: application/json",
    "Accept: application/json"
]);
curl_setopt($p, CURLOPT_POSTFIELDS, $itemJsonData);
curl_setopt($p, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($p, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($p);

if (curl_errno($p)) {
    echo 'Error:' . curl_error($p);
} else {
    echo $response;
}

curl_close($p);

  Meer info over de API? Lees onderstaande nuttige artikels