AXK Network API
AXK · API · AXK Network API v2.0.0

Verified commodity trade,
programmable.

Verified commodity trade — farm to payment. AXK Network provides transparent, blockchain-anchored traceability for agricultural commodities (coffee, cocoa) from cooperative to buyer. All Lot, Order, and Escrow operations are anchored to the Xahau ledger.

OpenAPI 3.0.3 · v2.0.0 298 operations 57 tags 2 auth schemes Xahau-anchored
Quick start

30 seconds — confirm the API is live. Resolving a did:axk identity is public, no auth.

# 30-second check — no auth needed
curl "https://app.axk.org/api/method/axk_network.did.api.resolve?did=did:axk:xahau:r34qv2ALLNBetUhijFDeWbfYBB7mrt8Bgj"
# => { "didDocument": { ... }, "didResolutionMetadata": { "contentType": "application/did+ld+json" } }

Authenticate

Two paths — a browser session for in-app calls, or a Partner API key for server-to-server. Pick the one that matches your integration.

Session cookie

in-app

Browser-driven sessions. Frappe sets the sid cookie on /api/method/login; send the CSRF token from frappe.csrf_token on POST/PUT/DELETE.

// Same-origin browser session
await fetch("/api/method/login", {
  method:"POST", body:new URLSearchParams({usr, pwd})
})
fetch("/api/method/axk_network.api.verify.lookup_lot", {
  headers:{ "X-Frappe-CSRF-Token": frappe.csrf_token }
})

Partner API key

server

Enterprise tier. Mint a per-partner key at /partners/signup. Sent as Authorization: ApiKey <key_id>:<secret>.

# Server-to-server with a Partner key
curl https://app.axk.org/api/partner/verify/LOT-2026-00001 \
  -H "Authorization: ApiKey <key_id>:<secret>"

verify

Public lot verification — no auth required. Cryptographic verification of Lot anchors using the platform DID.

POST /api/method/axk_network.api.verify.lookup_lot public Lookup lot anchor metadata

Public endpoint — no authentication required. Returns lot commodity, cooperative, XRPL anchor hash, EUDR compliance status, and quality inspections.

Responses
200 Lot anchor metadata
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.verify.lookup_lot"
POST /api/method/axk_network.api.verify.cryptographic_verify public Cryptographic verification of a Lot anchor

Verifies a Lot's payload hash against the platform DID public key. Returns whether the lot is cryptographically attested on-chain. No authentication required.

Responses
200 Cryptographic verification result
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.verify.cryptographic_verify"
GET /api/partner/verify/{lot_ref} auth Partner: verify lot (authenticated)

Partner-authenticated endpoint. Returns the same payload as cryptographic_verify but requires a valid Partner API Key. Header: `Authorization: ApiKey :`

Parameters
lot_ref · path · required
Responses
200 Cryptographic verification result401 Invalid or missing API key429 Rate limit exceeded
Request
curl "https://app.axk.org/api/partner/verify/{lot_ref}" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.verify.stats public Public counters — totals visible on the verify landing page.

Public counters — totals visible on the verify landing page.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.verify.stats"

did

W3C DID Core 1.0 — did:axk method resolution and management.

GET /api/method/axk_network.did.api.resolve public Resolve a did:axk DID Document

W3C DID Resolution 1.0. Returns the DID Document JSON-LD with public key and verification methods. Response content-type: application/did+ld+json. No auth required.

Parameters
did · query · required
Responses
200 DID Document resolution response400 Invalid DID format404 DID not found
Request
curl "https://app.axk.org/api/method/axk_network.did.api.resolve"
POST /api/method/axk_network.api.did.get_did_document public Resolve the platform issuer DID document.

Resolve the platform issuer DID document.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.did.get_did_document"
POST /api/method/axk_network.did.api.create auth Create
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.did.api.create" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.did.api.deactivate auth Deactivate
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.did.api.deactivate" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.did.api.update auth Update
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.did.api.update" \
  -H "Authorization: ApiKey <key_id>:<secret>"

events

Verification Event CRUD and confirmation flow.

POST /api/method/axk_network.api.events.confirm_event auth Two-party confirmation. Called by exporter linked to the lot.

Accepts quantity, grade, and GPS for independent dual-entry comparison.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.events.confirm_event" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.events.create_harvest_record auth Append a harvest entry to a Farm Plot from the field-agent app.

The Farm Plot `harvest_history` child table (Farm Plot Harvest Row) is read-only in the desk and is an `istable` doctype, so it cannot be inserted standalone via /api/resource. This whitelisted method is the supported write path for offline field captures. Caller must be able to write the Farm Plot (AXK Farmer / AXK Cooperative / AXK Inspector / admin per the doctype perms). GPS + notes are stashed on a document comment since the child row has no geo fields.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.events.create_harvest_record" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.events.get_lot_timeline auth Get verification timeline for a lot. Respects row-level permissions

and blind-entry rules — the actor's pre-confirmation submission is only revealed to the actor themselves and to privileged roles.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.events.get_lot_timeline" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.events.trigger_anhur_manual auth Manual AXK AI trigger — restricted to System Manager and AXK Admin.

Manual AXK AI trigger — restricted to System Manager and AXK Admin.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.events.trigger_anhur_manual" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.events.trigger_xrpl_manual auth Manual XRPL trigger — restricted to System Manager and AXK Admin.

Manual XRPL trigger — restricted to System Manager and AXK Admin.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.events.trigger_xrpl_manual" \
  -H "Authorization: ApiKey <key_id>:<secret>"

finance

Finance Eligibility Profile and scoring.

POST /api/method/axk_network.api.finance.get_exporter_profile public Get exporter's finance eligibility profile — public, restricted fields.

Get exporter's finance eligibility profile — public, restricted fields.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.finance.get_exporter_profile"
POST /api/method/axk_network.api.finance.get_public_lot_verification public Public API for lot verification — restricted fields, no emails.

Public API for lot verification — restricted fields, no emails.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.finance.get_public_lot_verification"
POST /api/method/axk_network.api.finance.get_workspace_stats auth Get dashboard statistics scoped to the calling user's own data.

`role` was historically honoured from the request payload as a "filter to this role's view" hint. That allowed any authenticated caller to request the stats of a higher-privilege role (e.g. AXK Bank) because the response builder trusted the string rather than re-deriving from the session. The parameter is kept in the signature for backwards compatibility but is now treated as an optional narrowing filter: it can only restrict to a role the caller already holds; any other value is ignored.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.finance.get_workspace_stats" \
  -H "Authorization: ApiKey <key_id>:<secret>"

insurance

Insurance policy, claims, and premium operations.

POST /api/method/axk_network.insurance.api.apply_for_policy auth Create a new Insurance Policy in Applied status. Risk score

and quoted premium are auto-filled by the policy controller's before_insert hook.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.apply_for_policy" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.bind_policy auth Move a quoted policy from Applied / Under Review → Active.

Admin-only. The premium must be collected separately via collect_premium for the policy to remain in good standing.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.bind_policy" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.collect_premium auth Collect Premium
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.collect_premium" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.get_quote auth Public read-only quote — pure function, never mutates DB.

Available to any signed-in user; the underwriter can't expose private claim history because compute_risk only counts rows the caller already has read access to via the existing perm hooks.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.get_quote" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.ingest_oracle_reading auth Webhook for external feeds. Restricted to AXK Admin / System

Manager — providers should authenticate via a service-account user with that role, then POST to this endpoint.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.ingest_oracle_reading" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.pay_claim auth Pay Claim
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.pay_claim" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.query_claim_history auth Paginated list of claims under a policy.

Paginated list of claims under a policy.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.query_claim_history" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.query_policy_status auth Public read — policy perm hook enforces company scoping.

Public read — policy perm hook enforces company scoping.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.query_policy_status" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.submit_claim auth Submit Claim
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.submit_claim" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.insurance.api.transition_claim auth Transition Claim
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.insurance.api.transition_claim" \
  -H "Authorization: ApiKey <key_id>:<secret>"

admin_console

Admin Console endpoints.

POST /api/method/axk_network.api.admin_console.snapshot auth Single payload for /app/axk-admin-console.

Single payload for /app/axk-admin-console.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_console.snapshot" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_console.tenant_drilldown auth Per-tenant detail panel for the Admin Console drill-down.

Returns the full Tenant doc + this month's SLA report + recent activity (anchor events, KYC submissions, payment events scoped to this tenant if linkages exist).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_console.tenant_drilldown" \
  -H "Authorization: ApiKey <key_id>:<secret>"

admin_portal

Admin Portal endpoints.

POST /api/method/axk_network.api.admin_portal.backups_view auth Backup state for /admin/backups: recent files + GCS posture.

Backup state for /admin/backups: recent files + GCS posture.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.backups_view" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_portal.compliance_view auth Controls grid + roadmap + residency map. Used by /admin/compliance.

Controls grid + roadmap + residency map. Used by /admin/compliance.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.compliance_view" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_portal.incidents_view auth Recent incidents + anchor/email failure rollups for /admin/incidents.

Recent incidents + anchor/email failure rollups for /admin/incidents.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.incidents_view" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_portal.schema_diagram auth Return Mermaid ER-diagram source for the AXK schema.

Mermaid v11 erDiagram syntax — auto-generated from doctype meta. The /admin/schema page hydrates this into an SVG.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.schema_diagram" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_portal.schema_tables auth Return structured doctype metadata for the AXK schema.

`modules` is a comma-separated allowlist; defaults to AXK Network + AXK Mobility. Used by the ERD page's table panels.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.schema_tables" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_portal.setup_view auth Setup-health checklist driven by admin_console snapshot. Used by /admin/setup.

Setup-health checklist driven by admin_console snapshot. Used by /admin/setup.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.setup_view" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_portal.sla_view auth SLA tiers + tenant list for /admin/sla picker.

SLA tiers + tenant list for /admin/sla picker.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.sla_view" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_portal.snapshot auth Snapshot
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.snapshot" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.admin_portal.tenants_view auth List tenants with optional filters. Used by /admin/tenants.

List tenants with optional filters. Used by /admin/tenants.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.admin_portal.tenants_view" \
  -H "Authorization: ApiKey <key_id>:<secret>"

ai

Ai endpoints.

POST /api/method/axk_network.api.ai.chat auth Send a chat message to AXK AI and return the response.

Creates or appends to a persistent thread. dict with content, suggested_actions, metadata, thread_id

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai.chat" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai.delete_thread auth Delete a thread and all its messages.

Delete a thread and all its messages.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai.delete_thread" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai.extract_document auth Extract structured data from an uploaded document using AXK AI vision.

Optionally cross-references against the linked Frappe record.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai.extract_document" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai.get_thread_messages auth Get all messages for a specific thread.

Get all messages for a specific thread.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai.get_thread_messages" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai.get_threads auth Get the current user's chat threads, most recent first.

Get the current user's chat threads, most recent first.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai.get_threads" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai.new_thread auth Create a new empty thread.

Create a new empty thread.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai.new_thread" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai.rename_thread auth Rename a thread.

Rename a thread.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai.rename_thread" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai.toggle_pin auth Toggle the pinned status of a thread.

Toggle the pinned status of a thread.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai.toggle_pin" \
  -H "Authorization: ApiKey <key_id>:<secret>"

ai_compliance

Ai Compliance endpoints.

POST /api/method/axk_network.api.ai_compliance.list_decisions_for auth Return AXK AI Decision rows for a given subject — drives the

'Compliance' tab on the subject's form.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai_compliance.list_decisions_for" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai_compliance.run_compliance_check auth Run an AI compliance check against a subject record.

Returns the saved AXK AI Decision name + the parsed decision so the caller can show it inline. Failed AI calls are still recorded as Decision rows with `decision='Error'` so the audit trail is complete.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai_compliance.run_compliance_check" \
  -H "Authorization: ApiKey <key_id>:<secret>"

ai_test

Ai Test endpoints.

POST /api/method/axk_network.api.ai_test.catalogue auth Return provider → models[] for the picker UI.

Return provider → models[] for the picker UI.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai_test.catalogue" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai_test.run_compare auth Fan out the same prompt across N (provider, model) combos in parallel.

`combos` is a JSON string like: [{"provider": "gemini", "model": "gemini-2.5-flash"}, {"provider": "anthropic", "model": "claude-haiku-4-5"}]

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai_test.run_compare" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ai_test.run_once auth Run a single (provider, model) call. Returns text + latency + cost.

Run a single (provider, model) call. Returns text + latency + cost.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ai_test.run_once" \
  -H "Authorization: ApiKey <key_id>:<secret>"

announcements

Announcements endpoints.

POST /api/method/axk_network.api.announcements.delete_comment auth Soft-delete (sets is_deleted, blanks body). Author or admin only.

Soft-delete (sets is_deleted, blanks body). Author or admin only.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.announcements.delete_comment" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.announcements.get auth Detail view of a single announcement; respects DocType perms.

Detail view of a single announcement; respects DocType perms.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.announcements.get" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.announcements.list_active auth Active (Published, not expired) announcements visible to the

caller's audience. Sorted newest first. Each row carries comment_count + reaction_counts + my_reactions (the kinds the caller has placed on it) so the client can render the social affordances without a follow-up call per row.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.announcements.list_active" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.announcements.list_comments auth List comments under an announcement, oldest first. Pinned

comments float to the top regardless of creation order. Replies nest under their parent_comment via the ``replies`` key.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.announcements.list_comments" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.announcements.post_comment auth Append a comment to an announcement. Reply by setting

parent_comment. One-level threading only.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.announcements.post_comment" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.announcements.react auth Add or refresh a reaction for the calling user. Idempotent on

(announcement, user, kind) via the doctype's expression-based name — re-reacting is a no-op.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.announcements.react" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.announcements.unreact auth Remove the caller's reaction of the given kind. No-op if absent.

Remove the caller's reaction of the given kind. No-op if absent.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.announcements.unreact" \
  -H "Authorization: ApiKey <key_id>:<secret>"

atlas

Atlas endpoints.

POST /api/method/axk_network.api.atlas.concept_detail auth Single concept + its aliases (platform + tenant + ai-learned).

Single concept + its aliases (platform + tenant + ai-learned).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.atlas.concept_detail" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.atlas.list_concepts auth Filtered concept list for the browser.

Filtered concept list for the browser.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.atlas.list_concepts" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.atlas.overview auth Top-level counts + per-bundle + per-domain stats for the landing view.

Top-level counts + per-bundle + per-domain stats for the landing view.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.atlas.overview" \
  -H "Authorization: ApiKey <key_id>:<secret>"

authority

Authority endpoints.

POST /api/method/axk_network.api.authority.authority_summary auth KPI hero strip for /app/authority-home.

Returns: flagged lot count, verified this month, anomalies rate (flagged / total), active exporters (distinct on non- Draft lots), volume this month, anchor events last 24h (anchor pipeline health).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.authority.authority_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.authority.export_flagged_lots_csv auth Download the flagged-lots queue as CSV. Same scope as

list_flagged_lots; capped at 5000 rows.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.authority.export_flagged_lots_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.authority.list_flagged_lots auth Paginated list of Lots in 'Flagged' status — the authority

triage queue. The Flagged status is set by event handlers when an anomaly is detected (anchor mismatch, GPS divergence, AI score drop, dispute escalation). Authority reviews and resolves with either Resolved (back to previous status) or Cancelled.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.authority.list_flagged_lots" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.authority.resolve_flagged_lot auth Authority resolves a Flagged lot.

decision = "verified" → lot.status = 'Verified' (clear) decision = "cancelled" → lot.status = 'Cancelled' (kill) Note is recorded as a Frappe comment so the audit trail is preserved. State precondition: lot must be Flagged.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.authority.resolve_flagged_lot" \
  -H "Authorization: ApiKey <key_id>:<secret>"

backup_admin

Backup Admin endpoints.

POST /api/method/axk_network.api.backup_admin.force_backup auth Run `bench --site backup` synchronously. Captures

stdout/stderr so the operator sees what happened.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.backup_admin.force_backup" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.backup_admin.gcs_status auth Where do off-site copies live + when was the last successful upload?

Where do off-site copies live + when was the last successful upload?

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.backup_admin.gcs_status" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.backup_admin.list_recent_backups auth List Recent Backups
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.backup_admin.list_recent_backups" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.backup_admin.run_restore_drill auth Restore the latest backup into a temporary tenant, validate

record counts, tear down. Reports actual RTO. Steps: 1. Take a fresh backup of the source site (so the drill exercises the most recent state). 2. Create the temp tenant via the standard provisioning path. 3. Restore the backup files into the new site. 4. Compare record counts between source + restored across a representative set of doctypes. 5. Drop the drill site (always, even if validation fails). 6. Return RTO + validation result. Drill itself is best-effort: a partial-restore failure surfaces in the response, doesn't crash the running site.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.backup_admin.run_restore_drill" \
  -H "Authorization: ApiKey <key_id>:<secret>"

bank

Bank endpoints.

POST /api/method/axk_network.api.bank.bank_summary auth KPI hero strip for the bank dashboard.

Returns portfolio-level numbers the bank cares about: total profiles, mean score, prime count, recent updates, total volume, total verified shipments.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.bank.bank_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.bank.export_finance_profiles_csv auth Download the FEP portfolio as CSV.

Same band + entity + corridor + search filters as list_finance_profiles. Capped at 5000 rows.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.bank.export_finance_profiles_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.bank.list_finance_profiles auth Paginated FEP list for the bank dashboard.

Paginated FEP list for the bank dashboard.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.bank.list_finance_profiles" \
  -H "Authorization: ApiKey <key_id>:<secret>"

buyer

Buyer endpoints.

POST /api/method/axk_network.api.buyer.buyer_onboard_options auth Bundle of dropdowns + the caller's existing membership status.

Returned in one round-trip so the wizard renders all steps without per-step fetches.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.buyer.buyer_onboard_options" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.buyer.create_buyer_org auth Create a Buyer org from the wizard payload.

Payload shape (all string-coerced through Frappe's whitelist): { "buyer_name": str (required, 2–140 chars) "business_type": str (required, one of _VALID_BUSINESS_TYPES) "country": str (required, must exist in tabCountry) "preferred_commodities": list[str] (optional) "preferred_grades": list[str] (optional) } Side effects: - Insert Buyer doc. - Append the caller as a Buyer Member with role=Owner so they get full visibility + management rights immediately. - Grant the AXK Buyer role on their User doc if missing. Refuses to create a second Buyer org if the user already has a Buyer Member row anywhere — admin bypass for support cases.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.buyer.create_buyer_org" \
  -H "Authorization: ApiKey <key_id>:<secret>"

cart

Cart endpoints.

POST /api/method/axk_network.api.cart.cart_add auth Cart Add
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cart.cart_add" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cart.cart_checkout auth Convert the Active cart into N AXK Orders (one per cart item),

then mark the cart Checked Out. Atomicity: a SELECT ... FOR UPDATE lock on the cart row serialises concurrent checkout attempts (double-click, two tabs, two devices). All AXK Order inserts and the cart status flip happen in the same transaction, so a failure mid-loop rolls everything back — there is no path that leaves some AXK Orders created with the cart still Active. Multi-org buyers: a user in multiple Buyer organisations must pass `buyer` explicitly. If they belong to only one, it is inferred. The previous behaviour silently filed every order under the first Buyer Member row, which was wrong for users with multiple affiliations. `delivery` / `payment` arrive as JSON strings from the JS layer.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cart.cart_checkout" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cart.cart_clear auth Cart Clear
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cart.cart_clear" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cart.cart_get auth Cart Get
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cart.cart_get" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cart.cart_remove auth Cart Remove
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cart.cart_remove" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cart.cart_update_price auth Cart Update Price
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cart.cart_update_price" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cart.cart_update_qty auth Cart Update Qty
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cart.cart_update_qty" \
  -H "Authorization: ApiKey <key_id>:<secret>"

checkout

Checkout endpoints.

POST /api/method/axk_network.api.checkout.create_order_checkout auth Create a Stripe Checkout Session for direct-fiat payment of an order.

On Stripe success the order webhook (``stripe_order_webhook``) marks the order Paid and funds the linked escrow. Returns ``{ok, checkout_url, session_id}`` or an error dict.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.checkout.create_order_checkout" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.checkout.get_checkout_options auth Return everything the checkout modal needs to render.

Shape:: { "ok": True, "order": {name, total_amount, currency, lot, exporter_name, ...}, "wallet": {balance_axkt, can_pay_with_wallet, axkt_required}, "fiat": {stripe_available, currency, total_amount}, "topup_tiers": [1, 5, 10, 25, 50, 100], "rate": {axkt_per_usd, usd_per_order_currency}, }

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.checkout.get_checkout_options" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.checkout.pay_with_wallet auth Burn AXKT from the buyer's wallet to settle the order.

Side effects: - AXKT debited from buyer wallet via burn_for_action(action_code="order_settle") - AXK Order.status: Draft → Escrow Created - AXK Order.payment_rail: forced to ``crypto_direct`` (for audit clarity) - Linked Escrow Contract.status: Pending → Funded (if escrow exists) Idempotent — a second call on a non-Draft order returns the already- settled state.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.checkout.pay_with_wallet" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.checkout.topup_and_pay auth Top up the wallet just enough to cover the order, then return the

Stripe Checkout URL. After the buyer completes the top-up Stripe redirects to ``/app/axk-order/?topup=success`` where the form auto-fires ``pay_with_wallet``. The actual top-up flow is the existing ``onboarding.topup.create_topup_checkout``; this endpoint just sizes the top-up correctly and tags the redirect so the form knows to retry.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.checkout.topup_and_pay" \
  -H "Authorization: ApiKey <key_id>:<secret>"

cooperative

Cooperative endpoints.

POST /api/method/axk_network.api.cooperative.accept_invite auth Accept a Cooperative Invite token.

The acceptor must be logged in (Guest throws) and the email on the invite must match their account email — we will not let a different user redeem a token addressed to someone else, even if they happen to share access to the inbox. Side effects: appends a Cooperative Member row for the user, grants the AXK Cooperative role, marks the invite Accepted + stamps accepted_at + created_user. Idempotent: already-Accepted invite returns success without re-adding the member row.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.accept_invite" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.cooperative_summary auth Aggregate stats for the dashboard hero strip.

- status-group counts (on-marketplace / in-flight / settled / other) - settled revenue per currency (from linked AXK Orders that reached Settled status against this co-op's lots — that's the actual money landed) - pipeline value per currency (sum of asking_price for marketplace-visible lots — the supply value sitting in the showroom waiting for a buyer)

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.cooperative_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.create_lot auth Create a Lot from the wizard payload.

Payload shape (everything as strings — Frappe whitelist coerces): { "cooperative": str (required for admin; auto-resolved otherwise), "commodity_type": str (required), "corridor": str (required), "quantity": float (required, > 0), "unit": "kg" | "MT" (default kg), "grade": str (optional), "processing_method": "Washed"|"Natural"|"Honey" (optional), "exporter": str (optional), "lot_reference": str (optional) } Validation ---------- - Auth: caller must be a Cooperative Member (admin bypass). - Cooperative resolution: - Non-admin with exactly 1 membership → that coop is forced. - Non-admin with multiple memberships → caller must specify a value matching one of their memberships. - Admin must specify a cooperative explicitly. - All linked records (commodity, corridor, exporter, grade) validated by `frappe.db.exists` before doc creation so a typo from a hand-rolled call produces a clear 400. - Quantity must be a positive number. Returns the new Lot doc name so the wizard can route to the listing page or admin form.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.create_lot" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.export_incoming_orders_csv auth Download the cooperative-side incoming-orders list as CSV.

Same filter semantics as list_incoming_orders. Capped at 5000.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.export_incoming_orders_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.export_lots_csv auth Download the cooperative's lot list as CSV.

Respects the active filter + search term, same as list_lots. Capped at 5000 rows.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.export_lots_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.invite_member auth Send an invite to join `cooperative` as a member.

Auth: caller must be an Owner of the target cooperative, or an admin (System Manager / AXK Admin). Owner is enforced via a direct SQL probe on the Cooperative Member table so a Manager cannot escalate by adding more Owners. Idempotency ----------- If a Pending invite for (cooperative, invitee_email) already exists, we resend the email + bump expires_at instead of creating a duplicate row. Accepted / Revoked rows do not block a new invite — sometimes you really do want to re-invite. Returns the invite name + status so the front-end can render a confirmation toast.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.invite_member" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.list_incoming_orders auth Page of AXK Orders against this cooperative's lots.

Producers care about "who is buying my stuff" — this is the demand side of the cooperative dashboard. Mirrors the my-orders / exporter-home envelope shape so the front-end is consistent.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.list_incoming_orders" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.list_invites auth Return Pending invites for the cooperative.

Visible to Owners + admins. Pending only — Accepted/Revoked/ Expired live on the doctype list view for audit.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.list_invites" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.list_lot auth Flip a Draft Lot to Listed so buyers can see it on the

marketplace. The Lot doctype controller enforces the forward-only status progression (Draft → Listed → Notarized → ...) so we just call `db.set_value` after the membership + state checks. The Xahau anchor lifecycle is handled by the existing retry_checkpoint_proof scheduler once the lot is Listed, so this RPC does NOT trigger an inline anchor — that would block the user on a slow ledger round-trip. Auth: caller must be a Cooperative Member of the lot's cooperative (admin bypass). Idempotent: re-listing a Listed lot returns success without an extra DB write.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.list_lot" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.list_lots auth Page of Lots the session user can see as a cooperative.

Mirrors the buyer / exporter envelope shape so the front-end pattern is the same across all three dashboards.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.list_lots" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.lot_wizard_options auth Pre-flight bundle for the Lot creation wizard.

Returns the dropdown sets and the caller's cooperative membership in a single round-trip so the wizard renders all steps without per-step fetches. Admins see ALL cooperatives so they can create lots on behalf of any producer.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.lot_wizard_options" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.recent_settlements auth Return the cooperative's most recently settled orders.

Used on /app/cooperative-home as a "money in" feed at the top of the page — what the producer cares about most. Returns just the last `limit` settled orders (default 5), newest first, with the lot reference + buyer + commodity + amount + currency + settled date so the cooperative can recognise each payout at a glance. Tap-through opens the order detail page via the existing card click handler on the front-end.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.recent_settlements" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.revoke_invite auth Flip a Pending invite to Revoked.

Auth: Owner of the parent cooperative, or admin. Idempotent — revoking an already-Revoked or Accepted invite returns success without an extra write.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.revoke_invite" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.settled_revenue_trend auth Daily settled revenue for this cooperative over the last N days.

Powers the sparkline in the Settled revenue summary card. Returns one series per currency so a co-op trading USD + EUR sees two sparklines instead of a mixed line that loses meaning. Shape: { "days": int, "series": { "USD": [{"day": "2026-05-01", "value": 12345.67}, ...], "EUR": [...] } } Each series has exactly N entries (oldest first, today last), zero-filled for days with no settlements so the front-end can render a continuous line without gap detection. Window clamped [7, 90] so a malicious caller cannot make us aggregate years.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.settled_revenue_trend" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.cooperative.settlement_detail auth Payout details for a single settled order.

Used by the Recent settlements row drawer on cooperative-home — surfaces the rail (XRPL / SWIFT / etc.), the release tx hash, the AXKT mint hash, and the settlement timestamp so the producer can confirm money arrived without opening a separate page. Scope: same Cooperative Member filter as the rest of the cooperative APIs. Returns {} if the user cannot see the order.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.cooperative.settlement_detail" \
  -H "Authorization: ApiKey <key_id>:<secret>"

dns_admin

Dns Admin endpoints.

POST /api/method/axk_network.api.dns_admin.add_tenant_a_record auth Per-tenant A record (alternative to wildcard if you want

per-name records, e.g. to enable Let's Encrypt per subdomain).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.dns_admin.add_tenant_a_record" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.dns_admin.ensure_wildcard_a_record auth Add `*.axk.org A ` if not already present. Defaults

to the AXK prod LB IP. Idempotent.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.dns_admin.ensure_wildcard_a_record" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.dns_admin.status auth Diagnostic — does cPanel accept our token, is wildcard already set?

Diagnostic — does cPanel accept our token, is wildcard already set?

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.dns_admin.status" \
  -H "Authorization: ApiKey <key_id>:<secret>"

documents

Documents endpoints.

POST /api/method/axk_network.api.documents.compose auth AI-compose a new document; optionally ground in a Mesh ConceptQuery.

AI-compose a new document; optionally ground in a Mesh ConceptQuery.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.documents.compose" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.documents.generate auth Render a Print Format against a record into a PDF.

Render a Print Format against a record into a PDF.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.documents.generate" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.documents.share auth Mint a public share token without anchoring.

Mint a public share token without anchoring.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.documents.share" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.documents.sign auth Anchor an existing AXK Document on Xahau + mint share token.

Anchor an existing AXK Document on Xahau + mint share token.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.documents.sign" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.documents.status auth Lightweight status poll for the compose page.

Lightweight status poll for the compose page.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.documents.status" \
  -H "Authorization: ApiKey <key_id>:<secret>"

erp

Erp endpoints.

POST /api/method/axk_network.api.erp.ingest_po public Single inbound endpoint.

The request body is whatever the ERP sent — XML or JSON. We read `frappe.request` directly so the raw bytes are intact for HMAC verification (Frappe's argument parsing would normalise + drop the signature surface). 200 OK : {ok: True, mandate_name, mandate_status, idempotent_replay} 4xx : PermissionError / ValidationError raised → frappe renders an exception JSON 5xx : genuine infra failure — corporate ESB will retry

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.erp.ingest_po"

erp_intake

Erp Intake endpoints.

POST /api/method/axk_network.api.erp_intake.submit_order public Public POST entry — auth via HMAC headers, never via session.

Reads the raw request body so the HMAC signature can be recomputed against the exact bytes the partner sent. Verifies integration + signature + timestamp, validates the payload, short-circuits on duplicate external_ref, then creates the AXK Order and submits it (which fires the escrow-creation hook). Returns the order + escrow + funding instructions.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.erp_intake.submit_order"

exporter

Exporter endpoints.

POST /api/method/axk_network.api.exporter.accept_order auth Exporter clicks Accept → order moves Draft → Escrow Created.

Mechanics: AXK Order is a submittable doctype. `events.order.on_submit` auto-creates the Escrow Contract from the order's totals + the corridor's fee config, flips the order's status to 'Escrow Created', marks the lot as Sold, and enqueues the escrow-service mirror. So "accepting" the order is just submitting it — every downstream side effect already lives in that hook. Permission posture ------------------ Auth: caller must be an Exporter Member of the order's exporter org (admin / System Manager bypass). The membership check runs BEFORE we touch the order so a wrong-buyer attempt never produces a Frappe audit-log entry under the attacker's name. Inside the lock we re-verify status to defend against a double-tap (two browser tabs both clicking Accept on the same Draft). Concurrency ----------- SELECT ... FOR UPDATE on the order row inside the transaction. If two exporters race the same Draft, the second one waits for the first to commit, then sees status='Escrow Created' and exits with a clean already-accepted message rather than creating a second Escrow Contract or double-firing the on_submit hook. { "name": "ORD-...", "status": "Escrow Created", "escrow": "ESC-..." | None, "message": user-friendly summary string, }

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.accept_order" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter.decline_order auth Exporter declines a Draft order they do not want to fulfil.

Without this RPC, an exporter who reviews an inbound Draft and decides they cannot ship it has no clean exit — they either leave it sitting in Draft forever or wait for the buyer to cancel. Decline flips the order to Cancelled and surfaces the reason back to the buyer so they can retry with another exporter. Auth: caller must be an Exporter Member of the order's exporter org (admin / System Manager bypass). Membership SQL runs FIRST so a wrong-exporter attempt never produces an audit-log entry under the attacker's name. Safety: - order.status MUST be 'Draft'. Once the escrow has opened ('Escrow Created') the exporter cannot decline — they must either ship or go through the dispute path. - Idempotent: if the order is already Cancelled, return success with the existing state rather than fighting the state machine.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.decline_order" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter.export_csv auth Download the exporter's order list as CSV.

Respects the current status_filter + search term. Honours the same Exporter Member visibility filter as list_orders. Capped at 5000 rows so a single click cannot accidentally pull a multi-GB dump.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.export_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter.exporter_summary auth Aggregate stats for the dashboard header.

Returns status counts + total pipeline value per currency. Used by the front-end to render the hero strip (awaiting action / in escrow / settled / total pipeline) in a single round-trip.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.exporter_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter.list_orders auth Page of AXK Orders the session user can see as an exporter.

Returns the same envelope shape as axk_network.api.orders.list_orders.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.list_orders" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter.mark_shipped auth Exporter marks the order shipped → creates AXK Shipment in

`In Transit` state and stamps the order with the shipment link. This unlocks the "In Transit" step on the order timeline that until now was always blank — the buyer can finally see WHERE their goods are. Auth: caller must be an Exporter Member of the order's exporter org (admin / System Manager bypass). Membership SQL FIRST. Safety: - Order must be in 'Escrow Created' (escrow has been funded). Marking shipped before escrow is funded would mean the exporter is shipping uncovered goods — we block that with a clear error. - If a shipment already exists on the order, return idempotent success with the existing shipment name. Stops a double-tap from creating two shipments. - All fields except order_name are optional. Carrier + tracking are strongly recommended in the UI but technically not required (some exporters use unbranded carriers).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.mark_shipped" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter.recent_settlements auth The exporter's most recently settled orders.

Same money-in lens the cooperative dashboard ships. Scoped through Exporter Member (admin bypass), 1–20 clamp, newest first. Returns the columns needed to render a tap-through row on /app/exporter-home.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.recent_settlements" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter.release_order_escrow auth Exporter clicks Release → escrow flips Funded → Released, funds

settle, AXK Order moves to Settled via the existing release pipeline in axk_network.escrow. Auth: caller must be an Exporter Member of the order's exporter org (admin / System Manager bypass). Membership check runs BEFORE we touch the escrow so a wrong-exporter attempt never produces audit-log noise under the attacker's name. Safety ------ - Escrow status MUST be 'Funded'. Released / Disputed / Cancelled return an idempotent message instead of fighting the state machine. Pending = "not yet funded by buyer", which is a genuine error worth surfacing. - The actual release goes through axk_network.escrow.release — same code path the existing buyer-side release_escrow uses. That means atomic state mutation, audit log entry, settlement event chain (AXKT burn, corridor node earning, exporter payout). We never touch the money directly here. - ignore_permissions on the inner release because the exporter membership check above is the auth boundary. The release function still validates the from/to state transition.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.release_order_escrow" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter.settled_revenue_trend auth Daily settled revenue per currency over the last N days.

Mirrors `cooperative.settled_revenue_trend` for the exporter side. Scope = Exporter Member (admin bypass). Window clamped [7, 90]. Zero-fills missing days so the front-end can render a continuous polyline without gap logic.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter.settled_revenue_trend" \
  -H "Authorization: ApiKey <key_id>:<secret>"

exporter_onboard

Exporter Onboard endpoints.

POST /api/method/axk_network.api.exporter_onboard.create_exporter_org auth Create an Exporter org from the wizard payload.

Payload shape: { "exporter_name": str (required, 2–140 chars) "country": str (required, must exist in tabCountry) "registration_number": str (optional) "customs_code": str (optional) } Side effects: - Insert Exporter doc. - Append the caller as an Exporter Member with role=Owner. - Grant the AXK Exporter role on their User doc if missing. Refuses to create a second Exporter org if the user already has any Exporter Member row — admin bypass for support cases.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter_onboard.create_exporter_org" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.exporter_onboard.exporter_onboard_options auth Bundle of dropdowns + the caller's existing membership status.

Bundle of dropdowns + the caller's existing membership status.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.exporter_onboard.exporter_onboard_options" \
  -H "Authorization: ApiKey <key_id>:<secret>"

farmer

Farmer endpoints.

POST /api/method/axk_network.api.farmer.export_my_lots_csv auth Download the farmer's lot list as CSV. Same scope as

list_my_lots.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.farmer.export_my_lots_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.farmer.farmer_summary auth KPI hero strip for /app/farmer-home.

Returns: active plots, total area, lots produced (lifetime), total volume kg, FEP score if the farmer has a profile.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.farmer.farmer_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.farmer.list_my_lots auth Paginated Lot list scoped to the caller's farm plots.

Paginated Lot list scoped to the caller's farm plots.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.farmer.list_my_lots" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.farmer.list_my_plots auth Paginated Farm Plot list for the calling farmer.

Paginated Farm Plot list for the calling farmer.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.farmer.list_my_plots" \
  -H "Authorization: ApiKey <key_id>:<secret>"

fep

Fep endpoints.

POST /api/method/axk_network.api.fep.get_by_token public Return a Finance Eligibility Profile by its opaque shareable token.

The token is a UUID4 hex string generated when the FEP is first issued (or rotated via ``regenerate_shareable_link``). It is the only secret that distinguishes a lender who has been granted a view from a stranger; FEPs are not enumerable by URL otherwise. Tokens honour ``shareable_link_expires_at`` (post-expiry → reject) and ``shareable_link_revoked`` (manual revocation → reject). Both rejections still log to the audit trail for forensic purposes. The response is watermarked per caller and the watermark is HMAC- bound to the platform key so a stripped or forged watermark fails verification. ``{ok, profile, watermark, watermark_hmac, verification, …}`` on success; ``{ok: False, error, code}`` on miss / expiry / revocation.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.fep.get_by_token"
POST /api/method/axk_network.api.fep.get_by_token_vc public Return a W3C VC 2.0 credential for a FEP by its shareable token.

Same access semantics as ``get_by_token`` (revocation + expiry + rate limit + access log), but the payload is a standards-compliant Verifiable Credential 2.0 with an Ed25519Signature2020 proof. Lenders using off-the-shelf VC verifiers (SpruceID, Trinsic, Microsoft Entra Verified ID) can validate this without writing AXK Network-specific code: 1. Resolve issuer DID (did:web:) → /.well-known/did.json 2. Pick verificationMethod by kid in proof 3. Run Ed25519Signature2020 verification

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.fep.get_by_token_vc"
POST /api/method/axk_network.api.fep.get_my_advice auth Return concrete actions the owner of this FEP can take to raise

their eligibility score. Surfaces the FEP as a behavioural lever, not a black box: each suggestion comes with the points it would unlock and the underlying record the owner needs to add (a verified shipment, an inspection, a new buyer, a dispute resolution, etc.).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.fep.get_my_advice" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.fep.get_status public Lightweight credential-status endpoint per the VC's

credentialStatus.id. Returns ``{revoked: bool, expires_at?}``.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.fep.get_status"
POST /api/method/axk_network.api.fep.verify public Verify an ED25519 signature on a FEP score JSON or release manifest.

Pure offline verification — no DB read of FEP rows. The caller posts the canonical ``score_json`` (or release manifest JSON) and the hex signature. The server walks **current + retired platform keys** looking for one that validates — so signatures from a previously-active key continue to verify after rotation. The caller can override which key to try via ``public_key_hex``; otherwise we try the kid embedded in the canonical payload first, then fall back to walking every known key. Returns ``{verified, computed_hash, signer, kid, error?}``.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.fep.verify"
POST /api/method/axk_network.api.fep.verify_artefact public Verify a recipient artefact.

The artefact embeds (canonical_score_json, watermark, watermark_hmac, profile, token, issued_at, kid) under a single ED25519 signature. Tampering with any field — including stripping the watermark — breaks verification. Returns ``{verified, kid, computed_hash, embedded: {...}, error?}``.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.fep.verify_artefact"
POST /api/method/axk_network.api.fep.verify_vc public Verify a W3C VC 2.0 credential issued by AXK Network.

Accepts the credential as either a JSON string (POST body) or a dict (when called from Python). Returns the standard ``{verified, kid, signer, computed_digest, ...}`` shape.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.fep.verify_vc"
POST /api/method/axk_network.api.fep.verify_watermark public Verify a watermark / hmac pair was issued by AXK Network.

Useful in litigation: "this artefact was received by lender X on date Y" — recompute the HMAC and confirm it matches. Returns ``{verified, expected_hmac, error?}``.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.fep.verify_watermark"

health

Health endpoints.

POST /api/method/axk_network.api.health.system_health auth Standardised system health check for AXK Network (Platform Admin-gated).

dict: { "status": "healthy" | "degraded", "timestamp": str, "checks": { "database": str, "cache": str, "ai_provider": str, "workers": str, "xahau_chain": str, "axk_ai_provider": str, "recent_ai_call_log_error_rate": str, } } frappe.PermissionError: When caller lacks Platform Admin role.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.health.system_health" \
  -H "Authorization: ApiKey <key_id>:<secret>"

inspector

Inspector endpoints.

POST /api/method/axk_network.api.inspector.admin_approve_inspection auth Admin approves a Submitted inspection → Approved.

Optional note recorded as a Frappe comment on the inspection doc so the audit trail is preserved. Refuses to act on anything other than Submitted — admins cannot accidentally "approve" a Draft or re-approve an already-approved record.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.inspector.admin_approve_inspection" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.inspector.admin_reject_inspection auth Admin rejects a Submitted inspection → Rejected.

Reason is required — a rejection without a written reason is unhelpful and leaves the inspector no way to fix the issue. Same state precondition as approve.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.inspector.admin_reject_inspection" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.inspector.export_my_inspections_csv auth Download the inspector's inspection list as CSV.

Honours the same visibility filter as list_my_inspections — inspectors see their own work, admin sees all. Capped at 5000 rows.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.inspector.export_my_inspections_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.inspector.list_my_inspections auth Paginated AXK Quality Inspection list for the calling inspector.

Envelope shape mirrors list_orders / list_my_disputes so the same prev/next pill component habits apply. JOINs Lot so the UI can show the commodity + cooperative without an extra round-trip.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.inspector.list_my_inspections" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.inspector.submit_inspection auth Inspector flips their own Draft inspection → Submitted.

Auth: caller must be the inspector on record (admin / System Manager bypass). Once Submitted the row is read-only for the inspector; only an admin can Approve or Reject. Idempotent on already-Submitted/Approved/Rejected — returns success with the current status rather than fighting the state machine.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.inspector.submit_inspection" \
  -H "Authorization: ApiKey <key_id>:<secret>"

insurance_dashboard

Insurance Dashboard endpoints.

POST /api/method/axk_network.api.insurance_dashboard.agent_approve_claim auth Insurance Agent approves a Filed / Under Review claim.

Records `approved_amount` and transitions the claim to Approved (the payout itself happens via a subsequent pay_claim call from the insurance api). Auth: caller must be an Insurance Agent on the policy's insurer company (or admin). State precondition: Filed or Under Review only.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.insurance_dashboard.agent_approve_claim" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.insurance_dashboard.agent_reject_claim auth Insurance Agent rejects a Filed / Under Review claim.

Reason is required — a rejection without a written reason leaves the insured no path to dispute or refile.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.insurance_dashboard.agent_reject_claim" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.insurance_dashboard.export_my_policies_csv auth Download the insurance agent's policy portfolio as CSV.

Download the insurance agent's policy portfolio as CSV.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.insurance_dashboard.export_my_policies_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.insurance_dashboard.insurance_summary auth KPI hero strip for /app/insurance-home.

Returns: active policies, total coverage, premium collected, claims pending count, claims paid total, loss ratio (paid / premium).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.insurance_dashboard.insurance_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.insurance_dashboard.list_my_policies auth Paginated Insurance Policy list scoped to the agent's

insurer company.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.insurance_dashboard.list_my_policies" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.insurance_dashboard.list_pending_claims auth Claims in Filed / Under Review state on policies the agent

insures. Ordered oldest-first so the longest-waiting claim rises to the top.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.insurance_dashboard.list_pending_claims" \
  -H "Authorization: ApiKey <key_id>:<secret>"

integration

Integration endpoints.

POST /api/method/axk_network.api.integration.check_all_services auth Trigger immediate health check on all services.

Trigger immediate health check on all services.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.integration.check_all_services" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.integration.get_hub_data auth Get all data needed to render the Integration Hub dashboard.

Get all data needed to render the Integration Hub dashboard.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.integration.get_hub_data" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.integration.get_service_logs auth Get recent logs for a specific service.

Get recent logs for a specific service.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.integration.get_service_logs" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.integration.retry_log auth Re-queue a failed integration log entry.

Re-queue a failed integration log entry.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.integration.retry_log" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.integration.rotate_service_credential auth Rotate API/JWT/Webhook/OAuth credentials and verify health.

Rotate API/JWT/Webhook/OAuth credentials and verify health.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.integration.rotate_service_credential" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.integration.test_service auth Test connectivity to a single service. Returns status and response time.

Test connectivity to a single service. Returns status and response time.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.integration.test_service" \
  -H "Authorization: ApiKey <key_id>:<secret>"

iot

Iot endpoints.

POST /api/method/axk_network.api.iot.device_status auth Device Status
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.device_status" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.iot.force_cross_ref auth Re-run cross-reference for one Reading.

Re-run cross-reference for one Reading.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.force_cross_ref" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.iot.ingest public Single-reading ingest. Authenticates via X-AXK-Device-* headers.

Single-reading ingest. Authenticates via X-AXK-Device-* headers.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.ingest"
POST /api/method/axk_network.api.iot.ingest_bulk public Batch ingest. `readings` may be a JSON list or a list of dicts.

Batch ingest. `readings` may be a JSON list or a list of dicts.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.ingest_bulk"
POST /api/method/axk_network.api.iot.list_readings auth List Readings
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.list_readings" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.iot.overview auth Summary for the /admin/iot page.

Summary for the /admin/iot page.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.overview" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.iot.register auth Register a new IoT Device. Returns the device_token (shown ONCE).

Register a new IoT Device. Returns the device_token (shown ONCE).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.register" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.iot.rotate_device_token auth Rotate a device's token. The plaintext is returned ONCE.

Rotate a device's token. The plaintext is returned ONCE.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.rotate_device_token" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.iot.run_anchor_sweep auth Force a Merkle-checkpoint anchor of pending readings.

Force a Merkle-checkpoint anchor of pending readings.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.iot.run_anchor_sweep" \
  -H "Authorization: ApiKey <key_id>:<secret>"

lead_intake

Lead Intake endpoints.

POST /api/method/axk_network.api.lead_intake.send_invite_for_lead auth Send an Onboarding Invitation email for an existing AXK Lead.

Reads the Lead, derives the entity_type, creates an Onboarding Invitation, generates a token, fires the branded invite email, and posts a Comment back on the Lead with the invitation reference. Returns the new invitation name + the kyc URL. Whitelisted, requires a real session (not allow_guest). Used by the Lead client script "Send Onboarding Invite" button.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.lead_intake.send_invite_for_lead" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.lead_intake.submit public Receive onboarding form submission. Creates a Lead with type-aware

naming, attaches a structured comment, and emails confirmation + admin notification. Backward compatible with the legacy `/enterprise` payload (which didn't include `client_type`) — defaults to `other` in that case.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.lead_intake.submit"

mandates

Mandates endpoints.

POST /api/method/axk_network.api.mandates.create_mandate auth Create a Purchase Mandate from the buyer wizard payload.

Payload shape: { "buyer_org": str (required; admin must specify, non-admin must be Owner of it) "kind": "Open" | "Bounded" (required) "title": str (optional, defaults to "Mandate · ") "currency": "USD"|"EUR"|"GBP" (required for Bounded) "budget_ceiling": float (required for Bounded, > 0) "approved_quantity": float (optional, > 0 if present) "quantity_uom": "kg" | "MT" (optional) "commodity_scope": str (optional, must exist in tabCommodity) "valid_from": "YYYY-MM-DD" (optional) "valid_to": "YYYY-MM-DD" (optional, must be after valid_from) } Mandate created in Active status with holder_user = the caller so all spend under this mandate is attributable. source set to Manual.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mandates.create_mandate" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.mandates.export_csv auth Download the buyer's mandate list as CSV.

Respects the current status_filter + search term. Honours the same Buyer Member visibility filter as list_mandates. Capped at 5000 rows.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mandates.export_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.mandates.list_mandates auth Page of Purchase Mandates the session user can see.

Returns the same envelope shape as axk_network.api.orders.list_orders so the page client code can be a near-clone of /my-orders. Envelope: { "rows": [, ...], "total_count": int, "limit_start": int, "limit_page_length": int, "has_more": bool, "status_filter": str, }

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mandates.list_mandates" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.mandates.mandate_summary auth Aggregate stats for the dashboard header.

Returns total counts split by kind + status, total remaining budget across all Active Bounded mandates (per currency, since mandates can be denominated in different currencies and summing naively across them is wrong).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mandates.mandate_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.mandates.mandate_wizard_options auth Pre-flight bundle for /app/mandate-new.

Returns the caller's buyer-orgs they own, currency allow-list, commodity dropdown, and the is_admin flag in a single round-trip so the wizard renders all steps without per-step fetches.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mandates.mandate_wizard_options" \
  -H "Authorization: ApiKey <key_id>:<secret>"

mesh_explorer

Mesh Explorer endpoints.

POST /api/method/axk_network.api.mesh_explorer.explore_concept auth Resolve ONE concept into a readable kernel view.

{ concept, is_a: [, , ...] (classes_of chain), attributes: [, ...] (has_attribute, inherited), attestations:[, ...] (requires_attestation, inherited), direct_relations: [{predicate, object, object_text, tenant}, ...], states: [, ...], transitions: [{from, to, from_full, to_full, guard, on_enter}, ...], found: bool } The state machine is resolved by reading every in-force `(., transitions_to, .)` triple, then looking up the matching guard triple `(._to_, guard, ...)` and any on_enter action on the target state. This is the automated transitions_to resolution that the raw Concept Relation list view cannot give an operator.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mesh_explorer.explore_concept" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.mesh_explorer.list_concepts auth Paginated, searchable, sortable list of distinct subjects in the

Concept Relation table — the explorable concepts. Each row is one distinct in-force `subject_concept` decorated with its in-force relation count and a flag for whether it declares an is_a edge (i.e. it is a class node rather than a state / guard node). only_classes=1 hides the synthetic `.` and `._to_` rows so the operator sees just the class catalogue. Search matches the subject id. Returns the standard envelope: {rows, total_count, limit_start, limit_page_length, has_more, q, sort, only_classes}

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mesh_explorer.list_concepts" \
  -H "Authorization: ApiKey <key_id>:<secret>"

mesh_import

Mesh Import endpoints.

POST /api/method/axk_network.api.mesh_import.analyse_file auth Parse + match headers. Returns proposed mapping for the user to confirm.

Parse + match headers. Returns proposed mapping for the user to confirm.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mesh_import.analyse_file" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.mesh_import.commit_mapping auth Run the import. `mappings` is a JSON string of [{header, concept}].

Returns {created, updated, skipped, errors[]}.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mesh_import.commit_mapping" \
  -H "Authorization: ApiKey <key_id>:<secret>"

mesh_oversight

Mesh Oversight endpoints.

POST /api/method/axk_network.api.mesh_oversight.list_mesh_activity auth Paginated, searchable, sortable list of recent mesh fact

entities — the regulator activity feed. Each row is a Fact Entity decorated with: its tenant region (jurisdiction), count of current fact values, count of those that are anchored (attested), and whether it has been projected to a native doctype. Filters by sector (entity_type), jurisdiction (tenant region) and commodity (current agri.commodity fact value). Search matches entity name / external id / DID / entity_type. Returns the standard envelope: {rows, total_count, limit_start, limit_page_length, has_more, q, sort, sector, jurisdiction, commodity}

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mesh_oversight.list_mesh_activity" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.mesh_oversight.mesh_facets auth Distinct filter values for the toolbar dropdowns.

sectors — distinct Fact Entity.entity_type jurisdictions— distinct AXK Tenant.region across entities commodities — distinct current agri.commodity Fact Value.value_text Each facet is capped so a pathological mesh cannot blow up the response. Used only to populate the UI selects; the actual filtering is enforced server-side in list_mesh_activity.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mesh_oversight.mesh_facets" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.mesh_oversight.mesh_summary auth KPI hero strip for /app/mesh-oversight.

Returns network-wide mesh counts: total fact entities, total current fact values, in-force concept relations, anchored attestations (fact values + verified answers that carry a cryptographic anchor), entities seen in the last 24h (indexing pipeline liveness) and the anchored-attestation coverage rate.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.mesh_oversight.mesh_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"

notification_prefs

Notification Prefs endpoints.

POST /api/method/axk_network.api.notification_prefs.get_my_preferences auth Return the caller's bell + email preference flags.

Return the caller's bell + email preference flags.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.notification_prefs.get_my_preferences" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.notification_prefs.set_my_preferences auth Update the caller's preference flags.

Payload accepts any subset of the eight known keys (four bell + four email). Missing keys keep their current value. Values are normalised to 0/1 so the client can pass booleans, "true"/"false", or "0"/"1".

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.notification_prefs.set_my_preferences" \
  -H "Authorization: ApiKey <key_id>:<secret>"

onboarding

Onboarding endpoints.

POST /api/method/axk_network.api.onboarding.admin_otp_recovery auth System-Manager lever to unblock a user stuck on OTP delivery —

without the old practice of writing live OTPs to the Error Log. Default (reveal falsy): re-trigger normal OTP delivery for the invitation and report which channel handled it (admin-initiated resend). reveal truthy: break-glass for when no phone channel is configured / reachable — mint a fresh OTP, store only its hash, and return the code ONLY in this authenticated System-Manager response (it is never written to any log). The reveal is recorded as a security event (admin + invitation + time; the code itself is NOT stored), so every break-glass use is traceable. The admin relays the code out-of-band.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.admin_otp_recovery" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.onboarding.approve_invitation auth Admin approves a KYC-reviewed invitation: create User + send welcome email.

dict: {success, user_email, message}

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.approve_invitation" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.onboarding.bulk_invite auth Create invitations from a list of dicts (CSV upload).

Create invitations from a list of dicts (CSV upload).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.bulk_invite" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.onboarding.check_progress public Poll for onboarding completion status.

Poll for onboarding completion status.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.check_progress"
POST /api/method/axk_network.api.onboarding.cold_register public Self-serve registration without an invitation.

Self-serve registration without an invitation.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.cold_register"
POST /api/method/axk_network.api.onboarding.create_invitation auth Create an onboarding invitation and return the token URL.

Create an onboarding invitation and return the token URL.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.create_invitation" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.onboarding.reject_invitation auth Mark an invitation Rejected and email the applicant the reason.

Called from the Onboarding Invitation form Reject button. Doesn't create or modify a User row.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.reject_invitation" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.onboarding.resend_invitation auth Re-send the original invitation email (e.g. after a delivery

failure or applicant losing the link). Same token, same URL — so we don't invalidate prior submissions in flight.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.resend_invitation" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.onboarding.search_institutions public Search for institutions by name (for cold cooperative registration).

Search for institutions by name (for cold cooperative registration).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.search_institutions"
POST /api/method/axk_network.api.onboarding.send_otp public Send OTP via WhatsApp, then SMS fallback (dev-log only in dev mode).

Send OTP via WhatsApp, then SMS fallback (dev-log only in dev mode).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.send_otp"
POST /api/method/axk_network.api.onboarding.submit_invitation public Public form submission: create Onboarding Invitation + send branded email with token link.

This is the unauthenticated public form at /onboarding-invite. Anyone can request an invitation; the AXK team reviews and sends the KYC link. dict: {success, message}

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.submit_invitation"
POST /api/method/axk_network.api.onboarding.submit_kyc public Token-gated KYC submission: upload document for manual review.

Called from /onboarding-invite?token=... after the user clicks their link. Stores the document as a Frappe File attachment and queues the invitation for manual review (status → 'Opened', review queue picks it up). The user does NOT set a password here. After the admin approves the application, an email lands with a single-use Frappe password reset link so they can set their own. This matches how regulated platforms onboard (no plaintext password in transit before vetting + Frappe's own password-reset cryptography). The legacy `password` kwarg is accepted but ignored for back-compat with old form versions still cached on devices. dict: {success, message}

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.submit_kyc"
POST /api/method/axk_network.api.onboarding.validate_token public Validate an invitation token. Returns pre-fill data.

Validate an invitation token. Returns pre-fill data.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.validate_token"
POST /api/method/axk_network.api.onboarding.verify_and_complete public Verify OTP and trigger complete onboarding.

API-002 guard: after _OTP_FAIL_LIMIT wrong OTPs within _OTP_FAIL_WINDOW_SECONDS, the invitation is locked for _OTP_LOCKOUT_SECONDS. A valid OTP verification clears both the failure counter and the lockout flag.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.onboarding.verify_and_complete"

ops_dashboard

Ops Dashboard endpoints.

POST /api/method/axk_network.api.ops_dashboard.snapshot auth One call — everything the dashboard needs.

One call — everything the dashboard needs.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ops_dashboard.snapshot" \
  -H "Authorization: ApiKey <key_id>:<secret>"

orders

Orders endpoints.

POST /api/method/axk_network.api.orders.admin_resolve_dispute_refund auth Admin closes the dispute in favour of the buyer — escrow

flips Disputed → Cancelled and the buyer's funds refund. Same shape as release. The transition runs through `escrow.cancel` so the refund hits the same atomic state mutation + audit + settlement-event pipeline.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.admin_resolve_dispute_refund" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.admin_resolve_dispute_release auth Admin closes the dispute in favour of the exporter — escrow

flips Disputed → Released and the buyer's funds settle. The note is required and persists in the Escrow Audit Log so we have a written justification for the resolution. See `_resolve_escrow_for_order` for the safety guarantees: the escrow must already be Disputed and the order/escrow must exist. The actual transition runs through `escrow.release` which handles tx_hash recording, settlement events, and audit log.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.admin_resolve_dispute_release" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.buyer_cancel_draft_order auth Buyer cancels their own Draft order before the exporter accepts.

A Draft order has no escrow yet — accept() is what opens the escrow contract — so there is no money to claw back. The lot is still on the marketplace, the exporter has not committed to the deal. Cancelling here is a clean state flip with no settlement side-effects. Auth: caller must be a Buyer Member of the order's buyer org (admin / System Manager bypass). Membership SQL runs FIRST so a wrong-buyer attempt never produces an audit-log entry under the attacker's name. Safety: - order.status == 'Draft' → flip to 'Cancelled' - order.status == 'Cancelled' → idempotent success - any other status → refuse (escrow already opened; buyer must dispute instead)

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.buyer_cancel_draft_order" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.buyer_summary auth Compact KPI bundle for the /app/my-orders header.

- counts: orders by status (Draft / Escrow Created / Settled) - committed_by_currency: SUM(total_amount) on orders whose escrow is currently Funded — the buyer's money locked in escrow right now, awaiting exporter delivery + release. This is the buyer-side mirror of the exporter open-exposure KPI. Distinct from "spent" (Settled) and "draft" (un-funded). - settled_by_currency: SUM on Settled orders (money already released to the exporter on the buyer's behalf). Scoped through the same Buyer Member filter as list_orders; admin bypasses.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.buyer_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.dispute_order auth Buyer-side wrapper around the canonical escrow.dispute path.

The buyer hits "Dispute order" on the order detail page when goods have not arrived, or arrived in a state they cannot accept. The escrow flips Funded → Disputed which freezes the funds pending AXK support resolution. No money moves automatically — disputed escrows wait on a human. Auth: caller must be a Buyer Member of the order's buyer org (admin / System Manager bypass). Membership SQL runs BEFORE any escrow lookup so an outsider attempt never leaks existence info. Safety state machine: - escrow.status == 'Disputed' → idempotent success "already disputed" - escrow.status == 'Pending' → "cannot dispute, not yet funded" - escrow.status in 'Released', 'Settled' → "already released, contact support to raise a post-release dispute" - escrow.status == 'Cancelled' → "cannot dispute a cancelled escrow" - escrow.status == 'Funded' → delegate to escrow.dispute reason is REQUIRED and stripped — the canonical dispute path enforces it but we surface a friendlier error sooner.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.dispute_order" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.dispute_timeline auth Dispute audit rows for an order, newest-first.

Used by the Dispute panel on /app/order/ when the escrow is in Disputed state. Reads every Escrow Audit Log row whose to_state is 'Disputed' OR from_state is 'Disputed' so the panel can render the open → resolution sequence. Visibility uses the shared order-party filter: buyer, exporter, cooperative-via-lot, or admin. Each row carries actor (who did it), ts (when), reason (free-text), and the state transition.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.dispute_timeline" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.export_csv auth Download the buyer's order list as CSV.

Respects the current status_filter + search term. Honours the same Buyer Member visibility filter as list_orders. Capped at 5000 rows — wider scope is an admin Frappe report concern, not an in-app export.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.export_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.export_my_disputes_csv auth Download the caller's dispute list as CSV.

Same visibility filter as list_my_disputes — buyers see their own disputes, exporters see disputes against them, admin sees everything. Capped at 5000 rows for the same reason as the other CSV exports: wider scope belongs to a Frappe report, not an in-app download.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.export_my_disputes_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.list_my_disputes auth Paginated cross-order dispute list for buyers and exporters.

Each row is an escrow currently or formerly in `Disputed`, joined with its order so the page can show the parties, the amount, and the dispute's open/resolved state at a glance. Visibility runs through `_dispute_party_filter_sql` — buyers see disputes they raised, exporters see disputes raised against them. Admin sees all. status_filter: - "all" → every dispute the user can see - "open" → escrow.status = 'Disputed' - "resolved" → escrow has a Disputed audit-log row but is no longer in Disputed state (i.e. an admin moved it to Released or Cancelled) sort: one of _DISPUTE_SORT_MAP keys. Unknown falls back to newest. Envelope shape mirrors list_orders so the client uses the same prev/next pill component.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.list_my_disputes" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.list_orders auth Page of AXK Orders the session user can see, newest first.

Returns a paginated envelope so the client can render a list without loading every order in one shot. Production users hit hundreds of orders; the previous unbounded variant would have pushed a 5MB+ DOM and a 4s render on a 200-order account. Envelope shape: { "rows": [, ...], "total_count": int, "limit_start": int, # echoed for the client "limit_page_length": int, # echoed for the client "has_more": bool, "status_filter": str, # echoed (normalised) } status_filter: "all" | "draft" | "escrow" | "settled". Unknown values fall back to "all" rather than erroring — the UI may add new pills before the backend knows about them.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.list_orders" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.order_detail auth Single AXK Order projection for /app/order/.

Includes lot snapshot, parties, terms, delivery destination, and a derived stage so the buyer page can render a status pill + progress indicator without touching internal escrow fields.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.order_detail" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.purchase_detail auth Payout detail for a single buyer-settled order.

Mirrors cooperative.settlement_detail — same Escrow + Lot join, same explorer-URL handling (strip path → append /tx/HASH) — but scoped through Buyer Member instead of Cooperative Member. Used by the inline drawer on /app/my-orders. Returns {} when the buyer cannot see the order so the client renders a clean error rather than leaking a 403.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.purchase_detail" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.orders.recent_purchases auth The buyer's most recently settled orders.

Mirrors cooperative.recent_settlements + exporter.recent_settlements for the buyer side — the money-out feed on /app/my-orders. Scoped through Buyer Member (admin bypass). Returns the last N (clamped 1-20) settled orders, newest first, with the lot snapshot needed for the row preview.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.orders.recent_purchases" \
  -H "Authorization: ApiKey <key_id>:<secret>"

oversight

Oversight endpoints.

POST /api/method/axk_network.api.oversight.oversight_disputes auth Open disputed escrows — the lead's "must-action" list.

Open disputed escrows — the lead's "must-action" list.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_disputes" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.oversight.oversight_notification_health auth Per-event opt-out + 7-day order-notification volume.

Two operational signals for the lead: (1) Per-event muted count — if many users have muted `notify_order_disputed`, dispute volume is too high or the bell is too noisy. (2) 7-day Notification Log volume scoped to `document_type = 'AXK Order'` — proves the gate from #427 is still firing for everything that is not muted.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_notification_health" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.oversight.oversight_nudge_exporter auth Admin-only nudge sent to every Exporter Member of a stalled

order. Use case: a Funded escrow has gone N days without a shipment and the lead wants to prod the exporter without bouncing to a separate email tool. The nudge writes a bell entry per recipient and sends an email using the same plumbing as dispute notifications. Idempotent in spirit — there is no per-day dedup because admins intentionally re-nudge, but we cap the note at 280 chars to keep emails sensible. Why admin-only: a nudge from a buyer would conflict with the dispute path. Buyers express grievance via dispute, admins nudge via this endpoint.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_nudge_exporter" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.oversight.oversight_pending_claims auth Insurance Claims sitting in Filed / Under Review across the

whole platform — the admin queue for triage. Same shape as the other oversight panels: admin-only, oldest- first ordering, limit clamped to [1, 50].

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_pending_claims" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.oversight.oversight_pending_inspections auth Submitted inspections waiting on admin review.

These are the inspections an admin is supposed to land on /app/my-inspections and approve or reject. Surfacing them on /app/oversight gives the lead the same single-screen view they get for disputes + stalled escrows.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_pending_inspections" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.oversight.oversight_recent_orders auth Most recently created / modified AXK Orders across the platform.

Most recently created / modified AXK Orders across the platform.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_recent_orders" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.oversight.oversight_stalled_escrows auth Funded escrows with no shipment after `days` days.

These are the escrows that are most likely to convert into disputes. Surfacing them on the oversight dashboard lets the lead nudge the exporter (or the buyer) before the situation deteriorates. Caller-supplied `days` is clamped to [1, 30] — never trust incoming numerics, and a 0-day window would flood the panel on every freshly-funded escrow.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_stalled_escrows" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.oversight.oversight_stalled_shipments auth Shipments in Preparing / Delayed past N days. Same trigger

as the daily digest section so admins clicking through from the email see consistent data. days clamped to [1, 30]. limit clamped to [1, 50].

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_stalled_shipments" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.oversight.oversight_summary auth One-shot bundle for the oversight hero strip.

Returns counts that the lead engineer asks for at a glance: - escrows by status (Pending / Funded / Released / Disputed) - orders by status (Draft / Escrow Created / Settled / Cancelled) - lots by status group (marketplace / inflight / settled / other) - actor counts (cooperatives, buyers, exporters, total users) - total pipeline + total settled value per currency

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.oversight.oversight_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"

profile

Profile endpoints.

POST /api/method/axk_network.api.profile.email_finance_profile auth Email a Finance Eligibility Profile shareable link to a lender/bank.

Email a Finance Eligibility Profile shareable link to a lender/bank.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.profile.email_finance_profile" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.profile.get_axk_profile auth Get Axk Profile
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.profile.get_axk_profile" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.profile.get_feature_flags auth Return enabled feature flags for the current user's company.

Return enabled feature flags for the current user's company.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.profile.get_feature_flags" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.profile.revoke_finance_profile_share auth Revoke Finance Profile Share
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.profile.revoke_finance_profile_share" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.profile.share_finance_profile auth Share Finance Profile
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.profile.share_finance_profile" \
  -H "Authorization: ApiKey <key_id>:<secret>"

readiness

Readiness endpoints.

POST /api/method/axk_network.api.readiness.production_readiness auth Run every readiness check. Admin-gated — exposes AXK Settings

posture (env, payment mode, AI key presence, wallet balance) which a Website User shouldn't be able to enumerate. { "summary": "ok" | "warn" | "bad", "ok": int, "warn": int, "bad": int, "items": [ ... per-check rows ... ], }

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.readiness.production_readiness" \
  -H "Authorization: ApiKey <key_id>:<secret>"

receivables

Receivables endpoints.

POST /api/method/axk_network.api.receivables.assign_receivable auth Assign the receivable on an order to a financier (factoring).

On success: {ok: True, event: "", content_hash, obligor_did, payload: {...}, already_assigned: False} If the receivable is already assigned (idempotent no-op): {ok: True, event, already_assigned: True, ...} On failure: {ok: False, code, error} Auth: the caller must own the receivable (member of the lot's cooperative or the order's exporter) or hold an admin role. The assignor is derived from the order — never trusted from the client.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.receivables.assign_receivable" \
  -H "Authorization: ApiKey <key_id>:<secret>"

release

Release endpoints.

POST /api/method/axk_network.api.release.get_by_token public Public read of an AXK Release by its shareable token.

Public read of an AXK Release by its shareable token.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.release.get_by_token"
POST /api/method/axk_network.api.release.list_recent public List the N most recent published releases.

Returns lightweight metadata only (no canonical JSON / signature) so an enumeration pull stays cheap; full detail comes from ``get_by_token``.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.release.list_recent"

settlement_charges

Settlement Charges endpoints.

POST /api/method/axk_network.api.settlement_charges.compute_statutory_charges auth Compute statutory royalty + withholding tax on an order's value.

Read-only. Returns the charge amounts, the rates + their source, and a net-to-seller figure. ``royalty_pct`` / ``withholding_pct`` override the configured rate card when supplied (operator override). Returns {ok, order, base_amount, currency, royalty:{pct, amount, source}, withholding:{pct, amount, source}, total_charges, net_to_seller, rate_configured} or {ok: False, code, error}.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.settlement_charges.compute_statutory_charges" \
  -H "Authorization: ApiKey <key_id>:<secret>"

sla_report

Sla Report endpoints.

POST /api/method/axk_network.api.sla_report.monthly_sla_report auth Compute the monthly SLA report.

`tenant_name` is optional — when omitted, reports against the platform-level SLA (uses the default tier as the binding).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.sla_report.monthly_sla_report" \
  -H "Authorization: ApiKey <key_id>:<secret>"

status_subscribe

Status Subscribe endpoints.

POST /api/method/axk_network.api.status_subscribe.subscribe public Add an email to the AXK Status Updates list.

Add an email to the AXK Status Updates list.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.status_subscribe.subscribe"

tenant

Tenant endpoints.

POST /api/method/axk_network.api.tenant.add_custom_domain auth Append a custom domain to the tenant + queue the cert expansion.

The actual nginx + certbot work runs as a follow-up task on the box (admin runs `bin/expand-cert ` once DNS resolves) — we don't expand certs synchronously because it requires sudo + waits for the Let's Encrypt challenge.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.tenant.add_custom_domain" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.tenant.enqueue_provision auth Schedule provisioning on the long-worker queue.

Schedule provisioning on the long-worker queue.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.tenant.enqueue_provision" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.tenant.resume auth Resume
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.tenant.resume" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.tenant.suspend auth Flip tenant to Suspended — bench-level maintenance mode prevents

new logins and most writes. Existing sessions get bumped on next request. Reverse with `resume`.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.tenant.suspend" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.tenant.terminate auth Mark Terminated. Does NOT drop the site automatically — that's

a one-shot ops action so an accident doesn't cost data.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.tenant.terminate" \
  -H "Authorization: ApiKey <key_id>:<secret>"

token

Token endpoints.

POST /api/method/axk_network.api.token.get_metrics public Return live AXKT token metrics. Public, no auth.

Return live AXKT token metrics. Public, no auth.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.token.get_metrics"

transport

Transport endpoints.

POST /api/method/axk_network.api.transport.accept_bid auth Exporter accepts a transport bid. Caller must be the exporter who posted the request.

Exporter accepts a transport bid. Caller must be the exporter who posted the request.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.accept_bid" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.confirm_delivery auth Confirm delivery. Caller must be the logistics provider or the buyer.

Confirm delivery. Caller must be the logistics provider or the buyer.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.confirm_delivery" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.find_shipment auth Resolve a user-typed reference (shipment ref/name, or a lot ref) to

a shipment the caller can track. Returns {shipment} or {error}.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.find_shipment" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.get_available_loads auth Get transport requests available for bidding.

Get transport requests available for bidding.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.get_available_loads" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.get_eta auth Return current ETA snapshot for a Shipment.

Return current ETA snapshot for a Shipment.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.get_eta" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.get_shipment_tracking_snapshot auth One-shot tracking payload for the shipment tracker UI: header,

derived status timeline, GPS breadcrumb trail, current position, route, and the dual delivery confirmation. Read-only.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.get_shipment_tracking_snapshot" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.list_scored_bids auth Full list of Pending bids with scores — for the exporter

review screen.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.list_scored_bids" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.mark_arrived auth Driver marks arrival at destination — In Transit → Arrived.

Buyer still needs to confirm via confirm_delivery for full Delivery Confirmed state.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.mark_arrived" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.mark_exception auth Driver flags an exception — sets status to Delayed / Lost / Damaged.

Triggers the insurance parametric handler via Shipment.on_update.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.mark_exception" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.recommend_bid auth Return the top-scored Pending bid + breakdown. Exporter UI

surfaces this as the suggested accept; the exporter still has to call accept_bid manually.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.recommend_bid" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.start_trip auth Driver marks departure — Preparing → In Transit. Records

departure_time. Idempotent if already In Transit.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.start_trip" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transport.submit_bid auth Submit a bid for a transport request. Caller must have AXK Logistics role.

Submit a bid for a transport request. Caller must have AXK Logistics role.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transport.submit_bid" \
  -H "Authorization: ApiKey <key_id>:<secret>"

transporter

Transporter endpoints.

POST /api/method/axk_network.api.transporter.export_my_shipments_csv auth Download the transporter's shipment list as CSV.

Same visibility filter as list_my_shipments. Capped at 5000 rows.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transporter.export_my_shipments_csv" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transporter.list_my_shipments auth Paginated AXK Shipment list for the calling transporter.

Paginated AXK Shipment list for the calling transporter.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transporter.list_my_shipments" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.transporter.transporter_summary auth KPI hero strip for /app/my-shipments.

Counts the caller's shipments grouped by status_filter so the dashboard can render four big-number cards without an extra round-trip.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.transporter.transporter_summary" \
  -H "Authorization: ApiKey <key_id>:<secret>"

ussd

Ussd endpoints.

POST /api/method/axk_network.api.ussd.request_signature auth Mint a USSD signing challenge for ``phone`` against ``action_ref``.

Authenticated: only an operator / business flow may request a signature (a guest cannot mint challenges for arbitrary phones).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ussd.request_signature" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.ussd.ussd_callback public Africa's Talking USSD webhook.

Register this as the USSD callback URL in the Africa's Talking dashboard:: https://app.axk.org/api/method/axk_network.api.ussd.ussd_callback Africa's Talking POSTs form-encoded ``sessionId``, ``phoneNumber``, ``text`` and ``serviceCode`` and expects a plain-text body that begins with ``CON`` (keep the session open) or ``END`` (close it). We always return such a string and never raise — a failure closes the session with a generic ``END`` so the user is never stuck mid-session.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ussd.ussd_callback"
POST /api/method/axk_network.api.ussd.verify auth Return whether ``action_ref`` has been USSD-authorized + by whom.

Return whether ``action_ref`` has been USSD-authorized + by whom.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.ussd.verify" \
  -H "Authorization: ApiKey <key_id>:<secret>"

verification

Verification endpoints.

POST /api/method/axk_network.api.verification.anchor_to_xrpl auth Manually trigger XRPL anchoring. Restricted to System Manager and AXK Admin.

Manually trigger XRPL anchoring. Restricted to System Manager and AXK Admin.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.verification.anchor_to_xrpl" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.verification.check_revocation public Public endpoint: check if a VC has been revoked.

Queries the local Anchor Event journal for a VC_REVOKED event whose payload contains the vc_hash. Revocation is anchored in-process via axk_network.tasks.credentials.revoke_vc which writes an Anchor Event row and submits to Xahau.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.verification.check_revocation"
POST /api/method/axk_network.api.verification.trigger_anhur auth Manually trigger AXK AI analysis. Restricted to System Manager and AXK Admin.

Manually trigger AXK AI analysis. Restricted to System Manager and AXK Admin.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.verification.trigger_anhur" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.verification.verify_credential public Public endpoint: verify a credential by hash or lot reference.

Third parties can verify at verify.axk.org without trusting AXK — the proof chain goes: VC hash → XRPL Ledger event → Xahau L1 anchor.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.verification.verify_credential"

workspace_dashboards

Workspace Dashboards endpoints.

POST /api/method/axk_network.api.workspace_dashboards.ai_platform auth AI Platform / AXK AI Intelligence — call telemetry, cost, latency.

AI Platform / AXK AI Intelligence — call telemetry, cost, latency.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.ai_platform" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.axk_ai_knowledge_pillar auth Axk Ai Knowledge Pillar
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.axk_ai_knowledge_pillar" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.axk_operations auth Platform-ops dashboard — drives the silky AXK Operations workspace.

Hero: last-24h anchored events + spark KPIs: anchor idle min, batch backlog, KYC awaiting, error log 24h Chart: anchor events daily 28d (current 14 vs prior 14 cumulative) Breakdown: tenants by status Feed: last failed events + ageing KYC + recent tenant lifecycle Actions: Open Ops Dashboard, Production Readiness, AXK Tenants

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.axk_operations" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.buyer_marketplace auth Buyer view — verified lots, open bids, price trends.

Buyer view — verified lots, open bids, price trends.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.buyer_marketplace" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.commodity_trade auth Commodity Trade
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.commodity_trade" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.compliance_and_verification auth Compliance And Verification
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.compliance_and_verification" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.content_and_knowledge auth Content And Knowledge
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.content_and_knowledge" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.cooperative_manager auth Cooperative network health — members, plots, forecast, approvals.

Cooperative network health — members, plots, forecast, approvals.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.cooperative_manager" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.corridor_authority auth Border / corridor clearance dashboard.

Border / corridor clearance dashboard.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.corridor_authority" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.exporter_portal auth Exporter view — orders, shipments, margins.

Exporter view — orders, shipments, margins.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.exporter_portal" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.farm_pillar auth Farm Pillar
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.farm_pillar" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.farmer_dashboard auth Farmer's view of their plots, forecasts, and recent payouts.

Farmer's view of their plots, forecasts, and recent payouts.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.farmer_dashboard" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.finance_and_credit auth Finance And Credit
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.finance_and_credit" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.finance_intelligence auth Finance Intelligence
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.finance_intelligence" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.home auth Network-wide pulse. Total users, live value, recent throughput.

Network-wide pulse. Total users, live value, recent throughput.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.home" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.home_overview auth Home — platform jump-off.

Light, welcoming shape — no deep stats. The page is: - hero : date + greeting + AI-flavoured one-liner + status pill - quick_actions : chips beside the primary Ask AXK AI CTA - pillars : eight pillar shortcut tiles (nav, not metrics) - pulse : live cross-platform stream + needs-you action list - ledger : recent Xahau anchor pills - footer_status : uptime / Xahau / AI / anchor queue

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.home_overview" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.identity_compliance_pillar auth Identity Compliance Pillar
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.identity_compliance_pillar" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.inspections auth Inspections
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.inspections" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.inspector_dashboard auth Quality Inspector workload — assigned inspections + SLA.

Quality Inspector workload — assigned inspections + SLA.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.inspector_dashboard" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.insurance auth Insurance
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.insurance" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.kyc_dashboard auth KYC Reviews — submission queue, decision throughput, doc-type mix.

All queries are guarded by _table_exists so this endpoint is safe on sites that haven't migrated the KYC module yet.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.kyc_dashboard" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.logistics_marketplace auth Fleet pulse — Transport Requests, Bids, Shipments in motion.

Fleet pulse — Transport Requests, Bids, Shipments in motion.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.logistics_marketplace" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.logistics_pillar auth Logistics Pillar
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.logistics_pillar" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.marketing auth Marketing / CRM pulse — leads, campaigns, deals.

Marketing / CRM pulse — leads, campaigns, deals.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.marketing" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.member_harvests auth Member Harvests
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.member_harvests" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.mobility_dashboard auth Mobility (rideshare) pulse — bookings, drivers, vehicles, trips.

Mobility (rideshare) pulse — bookings, drivers, vehicles, trips.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.mobility_dashboard" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.my_farm_season auth My Farm Season
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.my_farm_season" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.my_farms auth My Farms
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.my_farms" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.my_harvests auth My Harvests
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.my_harvests" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.network_pillar auth Network Pillar
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.network_pillar" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.operations_pillar auth Operations Pillar
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.operations_pillar" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.orders_and_escrow auth Orders + Escrow joint view — trade + capital flow.

Orders + Escrow joint view — trade + capital flow.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.orders_and_escrow" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.platform_administration auth Admin-only platform pulse — users, live escrow, AI spend.

Admin-only platform pulse — users, live escrow, AI spend.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.platform_administration" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.pre_finance_pipeline auth Pre-finance pipeline — eligibility profiles + coverage.

Pre-finance pipeline — eligibility profiles + coverage.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.pre_finance_pipeline" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.pre_harvest_marketplace auth Pre-harvest order flow — open pre-orders, matched, forecasts.

Pre-harvest order flow — open pre-orders, matched, forecasts.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.pre_harvest_marketplace" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.shipments_and_logistics auth Shipments And Logistics
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.shipments_and_logistics" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.tokens auth Tokens dashboard — issuance volume, holders, market activity.

Tokens dashboard — issuance volume, holders, market activity.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.tokens" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.tokens_forge auth Data shape for the Tokens workspace dashboard block.

Function name is preserved (tokens_forge) so the Custom HTML Block wired to it via tier1 stays valid; user-facing copy uses plain English (mint / token / concept) — no internal jargon.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.tokens_forge" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.trade_settlement_pillar auth Trade Settlement Pillar
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.trade_settlement_pillar" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.user_support auth User Support — issues, tickets, response times.

User Support — issues, tickets, response times.

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.user_support" \
  -H "Authorization: ApiKey <key_id>:<secret>"
POST /api/method/axk_network.api.workspace_dashboards.verification_ledger auth Verification Ledger
Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_dashboards.verification_ledger" \
  -H "Authorization: ApiKey <key_id>:<secret>"

workspace_guide

Workspace Guide endpoints.

POST /api/method/axk_network.api.workspace_guide.build auth Return the Guide launchpad for `workspace` (its display name).

Return the Guide launchpad for `workspace` (its display name).

Responses
200 Successful response403 Forbidden — insufficient permissions429 Rate limit exceeded (Partner API only)
Request
curl -X POST "https://app.axk.org/api/method/axk_network.api.workspace_guide.build" \
  -H "Authorization: ApiKey <key_id>:<secret>"

No operations match your search.

Planned coverage

api