Ninja Van

Ninja Van is a Southeast Asian last-mile logistics and parcel-delivery company operating across Singapore, Malaysia, Indonesia, Philippines, Vietnam, and Thailand. Its ninjaAPI lets merchants and e-commerce platforms integrate shipping programmatically - create and cancel delivery orders, generate waybills (AWB), estimate tariffs, look up Ninja Point (PUDO) drop-off locations, receive parcel status updates via webhooks, and pull tracking events. The API is country-scoped (the country code is part of the path, e.g. https://api.ninjavan.co/SG/...) and authenticated with OAuth2 client credentials; access is granted per merchant after an onboarding and integration audit.

Ninja Van publishes 6 APIs on the APIs.io network, including OAuth API, Order API, Tracking API, and 3 more. Tagged areas include Logistics, Last-Mile Delivery, Shipping, Southeast Asia, and Parcels.

Ninja Van’s developer surface includes authentication, documentation, engineering blog, and 7 more developer resources.

38.6/100 thin ▬ flat Agent 48/100 agent ready Full breakdown ↓
scored 2026-07-20 · rubric v0.4
6 APIs 0 Features
LogisticsLast-Mile DeliveryShippingSoutheast AsiaParcelsTrackingFulfillmentE-commerce LogisticsWaybillSaaS

API Rating

API Evangelist API Evangelist Rating How this is scored →
scored 2026-07-20 · rubric v0.4
Composite quality — 38.6/100 · thin
Contract Quality 15.5 / 25
Developer Ergonomics 4.3 / 20
Commercial Clarity 7.9 / 20
Operational Transparency 4.1 / 13
Governance 0.0 / 12
Discoverability 6.8 / 10
Agent readiness — 48/100 · agent ready
Machine-Readable Contract 18 / 18
Agentic Access Contract 15 / 15
MCP Server 0 / 12
Machine-Readable Auth 10 / 10
Idempotency 0 / 9
Stable Error Semantics 0 / 8
Request/Response Examples 0 / 7
Rate-Limit Signaling 7 / 7
Typed Event Surface 0 / 6
Agent Skills 0 / 5
Well-Known Catalog 0 / 4
Consent & Bot Identity 0 / 3
Improve this rating by publishing the missing artifacts — every area above can be raised, and the full rubric is at apis.io/rating/. This rating is computed from github.com/api-evangelist/ninjavan: open an issue to ask a question, or submit a pull request to add artifacts. Want it done for you? Prioritized profiling — $2,500 →

APIs

Ninja Van OAuth API

Exchange a client ID and client secret for a short-lived OAuth2 access token using the client-credentials grant (POST /{countryCode}/2.0/oauth/access_token). The returned bearer...

Ninja Van Order API

Create delivery orders (POST /{countryCode}/4.2/orders and the earlier /4.1/orders), cancel an order by tracking number (DELETE /{countryCode}/2.2/orders/{trackingNo}), and gene...

Ninja Van Tracking API

Retrieve tracking events for a single parcel (GET /{countryCode}/1.0/orders/tracking-events/{trackingNumber}) or for a list of parcels (GET /{countryCode}/1.0/orders/tracking-ev...

Ninja Van Webhooks API

Ninja Van issues HTTP POST callbacks to a merchant-registered URL on every order status change - Pending Pickup, In Transit, On Vehicle for Delivery, Delivered, Delivery Excepti...

Ninja Van Tariff API

Estimate the shipping price for a parcel between an origin and destination (POST /{countryCode}/1.0/public/price), given weight and dimensions.

Ninja Van PUDO API

List Ninja Point pick-up/drop-off (PUDO) locations (GET /{countryCode}/2.0/pudos) and drive shipper drop-off flows for parcels (/{countryCode}/1.0/send-orders/drop-off and relat...

Collections

Pricing Plans

Ninjavan Plans Pricing

3 plans

PLANS

Rate Limits

Ninjavan Rate Limits

4 limits

RATE LIMITS

FinOps

Resources

Documentation 1

Reference material describing how the API behaves

Agent Surfaces 1

MCP servers, agent skills, and machine-readable catalogs

Access & Security 2

Authentication, authorization, and security posture

Operate 1

Status, limits, changes, and where to get help

Commercial 2

Pricing, plans, and the legal terms of use

Company 3

The organization behind the API

Source (apis.yml)

apis.yml Raw ↑
opencollection: 1.0.0
info:
  name: Ninja Van API (ninjaAPI)
  version: 4.1.0
request:
  auth:
    type: bearer
    token: '{{accessToken}}'
items:
- info:
    name: OAuth API
    type: folder
  items:
  - info:
      name: Request access token
      type: http
    http:
      method: POST
      url: https://api.ninjavan.co/sg/2.0/oauth/access_token
      auth:
        type: none
      body:
        type: json
        data: "{\n  \"client_id\": \"CLIENT_ID\",\n  \"client_secret\": \"CLIENT_SECRET\",\n  \"grant_type\": \"client_credentials\"\
          \n}"
    docs: Exchange client ID and client secret for a short-lived OAuth2 access token (client-credentials grant). The country
      code (sg here) is the first path segment.
- info:
    name: Order API
    type: folder
  items:
  - info:
      name: Create delivery order (v4.2)
      type: http
    http:
      method: POST
      url: https://api.ninjavan.co/sg/4.2/orders
      body:
        type: json
        data: "{\n  \"service_type\": \"Parcel\",\n  \"service_level\": \"Standard\",\n  \"from\": {},\n  \"to\": {},\n  \"\
          parcel_job\": {}\n}"
    docs: Creates a delivery order (v4.2). The request describes service, from/to parties, and the parcel job.
  - info:
      name: Create delivery order (v4.1)
      type: http
    http:
      method: POST
      url: https://api.ninjavan.co/sg/4.1/orders
      body:
        type: json
        data: "{\n  \"service_type\": \"Parcel\",\n  \"from\": {},\n  \"to\": {},\n  \"parcel_job\": {}\n}"
    docs: Creates a delivery order (v4.1, retained for existing integrations).
  - info:
      name: Cancel order
      type: http
    http:
      method: DELETE
      url: https://api.ninjavan.co/sg/2.2/orders/:trackingNo
      params:
      - name: trackingNo
        value: ''
        type: path
        description: Tracking number of the order to cancel.
    docs: Cancels an order that has not yet been picked up, by tracking number.
  - info:
      name: Generate waybill
      type: http
    http:
      method: GET
      url: https://api.ninjavan.co/sg/2.0/reports/waybill?tid=&hide_shipper_details=false&orientation=portrait
      params:
      - name: tid
        value: ''
        type: query
        description: One or more tracking numbers.
      - name: hide_shipper_details
        value: 'false'
        type: query
        description: Hide shipper details on the waybill.
      - name: orientation
        value: portrait
        type: query
        description: Waybill orientation.
    docs: Generates a waybill PDF for one or more tracking numbers. Requires prior access approval from Ninja Van.
  - info:
      name: Generate international waybill
      type: http
    http:
      method: GET
      url: https://api.ninjavan.co/sg/2.0/reports/international-waybills?tid=
      params:
      - name: tid
        value: ''
        type: query
        description: One or more tracking numbers.
    docs: Generates an international waybill document for cross-border parcels.
- info:
    name: Tracking API
    type: folder
  items:
  - info:
      name: Get events for single parcel
      type: http
    http:
      method: GET
      url: https://api.ninjavan.co/sg/1.0/orders/tracking-events/:trackingNumber
      params:
      - name: trackingNumber
        value: ''
        type: path
        description: The parcel tracking number.
    docs: Returns the tracking events recorded for a single parcel.
  - info:
      name: Get events for list of parcels
      type: http
    http:
      method: GET
      url: https://api.ninjavan.co/sg/1.0/orders/tracking-events?tracking_number=
      params:
      - name: tracking_number
        value: ''
        type: query
        description: Comma-separated or repeated tracking numbers.
    docs: Returns tracking events for a list of parcels.
- info:
    name: Tariff API
    type: folder
  items:
  - info:
      name: Get price estimate
      type: http
    http:
      method: POST
      url: https://api.ninjavan.co/sg/1.0/public/price
      body:
        type: json
        data: "{\n  \"service_type\": \"Parcel\",\n  \"from\": {},\n  \"to\": {},\n  \"weight\": 1.5\n}"
    docs: Returns an estimated shipping price for a parcel between an origin and destination.
- info:
    name: PUDO API
    type: folder
  items:
  - info:
      name: List Ninja Points (PUDO locations)
      type: http
    http:
      method: GET
      url: https://api.ninjavan.co/sg/2.0/pudos?can_customer_collect=true
      params:
      - name: can_customer_collect
        value: 'true'
        type: query
        description: Filter to points that allow customer collection.
    docs: Lists Ninja Point pick-up / drop-off (PUDO) locations and their capabilities.
  - info:
      name: Trigger shipper drop-off for parcel
      type: http
    http:
      method: POST
      url: https://api.ninjavan.co/sg/1.0/send-orders/drop-off
      body:
        type: json
        data: '{}'
    docs: Triggers the shipper drop-off flow for a parcel at a Ninja Point.
  - info:
      name: Scan parcel for shipper drop-off
      type: http
    http:
      method: GET
      url: https://api.ninjavan.co/sg/1.0/send-orders/:trackingId
      params:
      - name: trackingId
        value: ''
        type: path
        description: Tracking ID of the parcel.
    docs: Scans a parcel by tracking ID as part of the shipper drop-off flow.
bundled: true