Push up to 500 records in one call
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://api.slflo.com/api/integration/v1/batch/products"), Headers = { { "Idempotency-Key", "example" }, { "Authorization", "Bearer <token>" }, }, Content = new StringContent("{ \"items\": [ { \"body\": { \"base_unit_ref\": \"pcs\", \"name\": { \"en\": \"Cola 330ml\" } }, \"ref\": \"ITEM-1001\" }, { \"body\": { \"base_unit_ref\": \"box\", \"name\": { \"en\": \"Water 1.5l\" } }, \"ref\": \"ITEM-1002\" } ] }") { Headers = { ContentType = new MediaTypeHeaderValue("application/json") } }};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.slflo.com/api/integration/v1/batch/products")) .header("Idempotency-Key", "example") .header("Authorization", "Bearer <token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{ \"items\": [ { \"body\": { \"base_unit_ref\": \"pcs\", \"name\": { \"en\": \"Cola 330ml\" } }, \"ref\": \"ITEM-1001\" }, { \"body\": { \"base_unit_ref\": \"box\", \"name\": { \"en\": \"Water 1.5l\" } }, \"ref\": \"ITEM-1002\" } ] }")) .build();HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());const url = 'https://api.slflo.com/api/integration/v1/batch/products';const options = { method: 'POST', headers: { 'Idempotency-Key': 'example', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"items":[{"body":{"base_unit_ref":"pcs","name":{"en":"Cola 330ml"}},"ref":"ITEM-1001"},{"body":{"base_unit_ref":"box","name":{"en":"Water 1.5l"}},"ref":"ITEM-1002"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.slflo.com/api/integration/v1/batch/products \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: example' \ --data '{ "items": [ { "body": { "base_unit_ref": "pcs", "name": { "en": "Cola 330ml" } }, "ref": "ITEM-1001" }, { "body": { "base_unit_ref": "box", "name": { "en": "Water 1.5l" } }, "ref": "ITEM-1002" } ] }'Entity is products, units or balances; each item is {ref, body} with the PUT’s body and gets its own result. Counts as one request for the rate limit. Send an Idempotency-Key header; a retry with the same key and body answers the first answer again, with Idempotent-Replayed: true.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”What the batch holds: products, units or balances.
Example
productsHeader Parameters
Section titled “Header Parameters”Your key for this write, at most 100 characters (an order id or journal id works well). Required on every write; kept 7 days. Same key and body: the first answer again. Same key, other body: 422 IDEMPOTENCY_KEY_REUSED.
Request Bodyrequired
Section titled “Request Bodyrequired”object
object
object
Example
{ "items": [ { "body": { "base_unit_ref": "pcs", "name": { "en": "Cola 330ml" } }, "ref": "ITEM-1001" }, { "body": { "base_unit_ref": "box", "name": { "en": "Water 1.5l" } }, "ref": "ITEM-1002" } ]}Responses
Section titled “Responses”Push up to 500 records in one call
object
object
object
object
object
object
Example
{ "data": [ { "error": null, "ok": true, "ref": "ITEM-1001", "result": { "entity": "product", "external_ref": "ITEM-1001", "id": "P0000001", "result": "unchanged" } }, { "error": { "code": "UNKNOWN_REFERENCE", "details": [], "message": "Unknown unit box: PUT /units/box first." }, "ok": false, "ref": "ITEM-1002", "result": null } ], "meta": { "applied": 1, "failed": 1 }}default
Section titled “default”An error: the code says what, retryable whether to try again.
object
object
Stable code, e.g. SCOPE_MISSING, UNKNOWN_REFERENCE.
Field-level problems: {field, code}.
object
What happened and how to fix it.
Quote it to support; it finds the server log.
Whether the same call may succeed later.
Example
{ "error": { "code": "SCOPE_MISSING", "details": [], "message": "This client does not hold the invoices:read scope.", "request_id": "req_01J9X4Q7T2M8P3NRT6V5WZ", "retryable": false }}
