Skip to content

Public API v1 — reference

Goal

Use a narrative reference for every shipped Public API v1 read endpoint.

Who it is for

Integrators implementing clients against AD-003 (read-only v1, scoped tokens, rate limits). No write endpoints.

Machine-readable spec

Download public-api-v1-openapi.yaml.

Base URL

{origin}/api/v1

Version uses the {version} route segment (v1). Deprecation headers may appear via api.version middleware.

Authentication

RequirementDetail
SchemeAuthorization: Bearer {sanctum_token}
Tenant scopeAbility tenant:{uuid}
Resource scopeAdditional api:* ability per group
CRM routesTenant must have crm module; else 422

Abilities (App\Integration\Api\ApiAbilities)

AbilityRoutes
(tenant only)GET /meta
api:parties.read/parties, /parties/{party}
api:items.read/items, /items/{item}
api:inventory.read/inventory/availability
api:sales.read/sales-invoices, /sales-invoices/{id}
api:purchases.read/purchase-bills, /purchase-bills/{id}
api:crm.read/crm/leads, /crm/opportunities (+ show)

Example token creation

php
$user->createToken('integration', [
    'tenant:'.$tenantId,
    'api:parties.read',
    'api:items.read',
])->plainTextToken;

Missing ability → 403.

Rate limiting

throttle:120,1120 requests per minute per token/IP.

Tenant isolation

Tenant comes from the token — never from query/body. Operational data is RLS-scoped. Cross-tenant UUIDs → 404.

Pagination

ParamDefaultMax
page1
per_page25100

Laravel-style data / links / meta envelope.

Endpoints

GET /meta

Returns api_version and resolved tenant_id.

Parties (api:parties.read)

  • GET /parties — active parties; optional ?q=
  • GET /parties/{party} — archived → 404

Catalog (api:items.read)

  • GET /items — active items; optional ?q=
  • GET /items/{item}

Inventory (api:inventory.read)

  • GET /inventory/availability?item_id={uuid}&warehouse_id={uuid?}on_hand decimal string

Sales (api:sales.read)

  • GET /sales-invoicesposted invoices and credit notes
  • GET /sales-invoices/{id} — includes lines

Purchasing (api:purchases.read)

  • GET /purchase-billsposted bills and debit notes
  • GET /purchase-bills/{id} — includes lines

CRM (api:crm.read + module)

  • GET /crm/leads, GET /crm/leads/{id}
  • GET /crm/opportunities, GET /crm/opportunities/{id}
  • Module disabled → 422

Not in v1

Write APIs; staff /api/* SPA routes; /api/portal/*; POS internal routes; webhooks/connectors (integration module UI).

BlueMatrix Help — product documentation for tenants