Developer platform
A resource-oriented REST API, an MCP endpoint that exposes the platform as agent tools, and signed webhooks. Authenticate with a bearer API key from the console.
Getting started
curl https://actionablelogistics.com/api/v1/shipments \ -H "Authorization: Bearer act_live_..." \ -H "Content-Type: application/json"
- Idempotency. Send Idempotency-Key on every mutation. A retried booking returns the first booking, not a second truck.
- Pagination. Cursor, not offset. Pass the cursor from the previous page.
- Money. Minor units and an ISO 4217 code, always. Never a float, and never a bare number whose currency you have to infer.
MCP tools
POST /mcp speaks the Model Context Protocol. These are the same tools the platform's own agents use, subject to the same permission and budget checks — an MCP caller cannot do anything an agent could not.
| Tool | What it does | Requires |
|---|---|---|
| search_shipments | Find shipments by status, mode, lane or reference. | shipments.shipment.view |
| get_shipment | Full detail of one shipment, including parties and stops. | shipments.shipment.view |
| get_tracking | Tracking events for a shipment, newest first. | tracking.event.view |
| list_exceptions | Open exceptions across the organization, most severe first. | tracking.exception.view |
| search_capacity | Find published capacity: trucks, warehouse space, drivers. | marketplace.listing.view |
| find_facilities | Facilities within a radius of a point, with capability filters. | locations.facility.view |
| check_inventory | Stock of a SKU, by facility. | inventory.item.view |
| search_knowledge | Search the knowledge base — tariffs, SOPs, carrier guides, contract terms. Returns passages with citations. | brain.search |
| calculate_landed_cost | Goods plus freight plus duty plus tax, itemised. The result says whether it is complete; an incomplete one has no total and names what is missing. | tariffs.landed_cost.calculate |
| classify_hs_code | Suggest HS codes for a product description. Advisory — the importer of record is legally responsible for the code declared. | tariffs.classification.create |
| prospect_search | Search Actionable Sales' Data Silos company registry for potential shippers (new clients). Each call is metered by Actionable Sales. Refuses with not_configured, not_subscribed (names the silo) or ambiguous_area (lists the places). | data_silos.company.view |
| prospect_list | The organization's saved prospects (potential shippers) and their pipeline status. | data_silos.prospect.view |
| geocode_address | Find where an address is (latitude, longitude) with GuiderMaps. Returns the best matches, best first. Give the country when you know it. | locations.location.view |
| reverse_geocode | The street address at a coordinate (street, city, region, postcode, country), from GuiderMaps — e.g. where a vehicle or a proof-of-delivery photo is. | locations.location.view |
| road_route | Road distance (metres) and driving time (seconds) through an ordered list of points, leg by leg, from GuiderMaps' routing. Real road distance, never straight-line. Geocode addresses first. | locations.location.view |
| find_nearby_places | Points of interest near a coordinate, nearest first, matched by name: fuel, truck_stop, rest_area, weigh_station, customs, parking, or any words. | locations.location.view |
| authpermit_verification_status | Authpermit identity verification of a member of this organization: Authpermit's session (status, outcome, assurance level, per-check results) beside the decision this platform stored. Refuses with not_found for anyone outside the organization and no_verification for a member who never started one. | trust.authpermit.view |
| authpermit_person_get | A member's Authpermit person record as Authpermit shows it to this organization: assurance, latest name check, linked accounts. Never another organization's data. | trust.authpermit.view |
| authpermit_organization_verify | Know-your-business check on a company through Authpermit: company registries and sanctions lists. Use before onboarding a carrier or extending credit to a shipper. Authpermit may hold it for a human's approval there, in which case there is no result yet. | trust.authpermit.check |
| authpermit_credential_verify | Verify an Authpermit-issued credential (compact JWS): signature, issuer and whether it is still live or has been revoked. | trust.authpermit.check |
| prospect_save | Save a registry company as a prospect. Its name, country and website are read from the live profile, not supplied. Saving one already in the pipeline refuses. | data_silos.prospect.create |
| prospect_advance | Move a prospect along the pipeline: new → contacted → qualified → quoted → won, or lost. Illegal moves refuse with the allowed ones implied by the status. | data_silos.prospect.update |
| quote_shipment | Rate shop a shipment across every capable provider. | rating.quote.create |
| book_shipment | Book a shipment against a quote option. Consequential and usually requires approval. The price is the quote option's; it is looked up, not supplied. | booking.booking.create |
| raise_exception | Flag a problem with a shipment for a human to work. | tracking.exception.create |
| notify | Raise a notification for a person or the whole organization. | notifications.notification.create |
Webhook events
Every delivery carries X-Actionable-Signature: t=<unix>,v1=<hmac> over "<timestamp>.<body>". The timestamp is inside the signed string, so a captured request cannot be replayed with a fresh one — verify both.
Sibling platform operations
Payments, telephony, identity, maps, translation and tariffs are provided by sibling platforms and reachable through the same key.
| Platform | Operations | Status |
|---|---|---|
| Malaleem | 6 | Not configured |
| Alertmattic | 6 | Not configured |
| Telenaas | 11 | Not configured |
| Authpermit | 7 | Live |
| GuiderMaps | 9 | Not configured |
| Langaat | 5 | Not configured |
| TariffAPIs | 6 | Not configured |
| Actionable Sales | 9 | Not configured |