Nexxio — Integration Docs Public API reference for organisation integrations
v1 Beta
Nexxio Public API · v1

Integration Documentation

A versioned API surface for organisation integrations to ingest masters and transactions into Nexxio, manage EC sales data (contacts, leads, salesmen), push sales invoices, outstandings, ledger transactions (credit notes, payments, receipts), and stock-on-hand balances, and pull sales invoices, outstandings, ledger transactions, sales orders, and quotations. All data endpoints live under /v1/public-api and authenticate with an organisation API key (x-api-key).

API keys are issued per organisation with the required endpoint scopes. Contact Nexxio support if your team needs to create, rotate, or revoke keys.

How to connect

Three steps to go live:

  1. Register your organisation with Nexxio and request public API access.
  2. Receive an x-api-key with the scopes appropriate to your integration (for example products:write, categories:read, dealers:write, contacts:read, leads:write, salesmen:read, sales_invoices:write, sales_invoices:read, outstandings:write, outstandings:read, ledger_transactions:write, ledger_transactions:read, stock:write, orders:read, quotations:read).
  3. Use the staging base URL for development and integration testing (see Live API testing below).

Base URLs

EnvironmentBase URLNotes
Staging (Dev)https://api.integration-service.appnow.inUse for integration testing and the public playground.
ProductionProvided at go-liveNot available in the public playground — contact Nexxio support when you are ready for production.

The staging host is the default for all examples and live try-it requests on this page. Production credentials and URLs are issued during onboarding for go-live only.

Authentication

Every request must carry the x-api-key header with your API key string — not the server base URL.

x-api-key: your-api-key-from-onboarding
HeaderRequiredPurpose
x-api-keyRequiredOrganisation API key issued by Nexxio.
Idempotency-KeyRequired for writesUUID per logical batch. Replays return the original outcome.
Content-TypeRequired with bodyapplication/json for POST/PUT payloads.
Do not include internal tenant identifiers in payloads. The server derives your organisation scope from the API key and rejects requests that try to override it.

Integration takeaways

TopicRequired integration behaviour
Base endpointCall /v1/public-api/* on integration-service URLs only.
Auth headerSend x-api-key on every request. Never send bearer auth for this API.
Write safetySend Idempotency-Key for write requests (POST/PUT/PATCH/DELETE) to prevent duplicate processing.
Body formatSet Content-Type: application/json whenever a request body is present.
Operational flowTreat write responses as async acknowledgements and poll the jobs endpoint until completion.

Conventions

Async by default

Write endpoints accept the payload, return HTTP 200 with { job_id, status: "accepted" } in response, and process records in the background. Poll GET /v1/public-api/jobs/<jobId> for completion.

Batch sizes

Each write endpoint accepts a single object or an array under items. Default soft limit is 50 records per request. Contact Nexxio support if you need a higher limit.

Idempotency semantics

  • Same Idempotency-Key + identical body within the TTL replays the original response.
  • Same key with a different body fingerprint returns 409 IDEMPOTENCY_CONFLICT.
  • Default TTL is 24 hours.

Identifiers

Nexxio uses stable external identifiers on the public API (for example category_code, sku_factory_id, dealer code).

Error model

Errors use the same envelope as success responses:

{
  "error_status": true,
  "error": { "code": 500, "message": "Internal server error" },
  "message": "Invalid or expired API key"
}

Common cases:

message (typical)When
Missing x-api-key headerHeader not sent.
Invalid x-api-key: use your API key here, not a base URLA URL was sent in x-api-key by mistake.
Invalid or expired API keyUnknown or inactive key.
Insufficient scopeKey lacks the scope required by the endpoint.
Idempotency-Key header is requiredWrite without idempotency header.