Edara API v3

Edara API v3: Guide

Read this page before any reference page. It covers how to call the API and the behaviours that most often cause wrong results. Last verified against the live API on 2026-09-28.

Hosts

URL
API https://edara-api.edara.io/v3/... (HTTPS only)
Interactive docs https://edara-api.edara.io/swagger/ui/index
OpenAPI spec (Swagger 2.0) https://edara-api.edara.io/swagger/docs/v3

https://api.edara.io is the separate v2 API (/v2.0/...). It has a different response format. Do not mix the two.

Authentication

Send the token in the Authorization header. Two kinds of token work:

GET /v3/customers?offset=0&limit=100 HTTP/1.1
Host: edara-api.edara.io
Authorization: Bearer <token>
TenantId: <organization id>      # only with a user JWT
Accept-Language: ar              # optional: localizes error detail text
Content-Type: application/json

Each endpoint requires one permission, shown on its reference entry (for example read:customer). A 403 response names the missing permission in detail.

Request and response format

Paging

{ "items": [], "totalCount": 142, "page": 2, "pageSize": 100, "totalPages": 2 }

Errors

Errors use application/problem+json:

{ "title": "Conflict", "status": 409, "detail": "localized text",
  "instance": "/v3/brands", "traceId": "...", "errorCode": "DupplicatedName",
  "errors": { "name": ["..."] } }
Status Meaning What to do
400 Validation failed (errors lists each field), or a referenced id does not exist Fix the input
401 Missing or invalid token, or a user JWT without TenantId Sign in again or add the header
403 The token lacks the permission named in detail Use a token that has it
404 Record not found, or the route does not exist Check the path spelling first
409 A business rule refused the request Match on errorCode, listed per endpoint
429 Rate limit reached Wait for Retry-After seconds
500 Unexpected error Report it with the traceId

Rate limits

Behaviours that cause wrong results

Filters that are on by default

Send these explicitly. If you omit them, results shrink without any error.

Matching differs per endpoint

Never assume items[0] is the record you asked for.

An empty list can mean missing data permissions

Lists of warehouses, customers, stock items and sales orders are filtered by the calling user's data permissions in Edara. A user without them gets an empty 200, not a 403. If a list is unexpectedly empty, check that user's data permissions first.

Date range filters

Most ...To filters compare a full date and time. dateTo=2026-09-22 means midnight at the start of that day, so the whole day is left out. Send 2026-09-22T23:59:59.997.

Slow calls

Writing data

Known response issues

Shared shapes