{ "aid": "ninjavan.co:main-4.1.0", "name": "Ninja Van API", "type": "Index", "description": "\n# Introduction\nNinja Van is a tech-enabled express delivery company providing hassle-free delivery services for businesses of all sizes across Southeast Asia. \nThis portal provides technical guidance on how to get started with and use Ninja Van APIs for your business scenarios.\n\nThe portal provides documentation for the following APIs and services:\n* [Order API](#tag/Order-API). Create delivery orders, generate waybills, and cancel orders.\n* [Tariff API](#tag/Tariff-API). Get a delivery fee estimate for an order.\n* [PUDO API](#tag/PUDO-API). Embed address selection information for Ninja Points into your e-commerce website.\n* [PUDO partners API](#tag/PUDO-partners-API). As a PUDO partner, use this API to trigger parcel collection and drop-off, and receive updates on the success of operational processes at your Ninja Points.\n* [Tracking API](#tag/Tracking-API). Retrieve tracking statuses for a list of parcels or for a single parcel.\n* [Webhooks](#tag/Webhooks). Receive updates on successful changes in the lifespan of an order.\n\nAll Ninja Van APIs are RESTful APIs.\n\n## Integration process\n1. You (shipper) inform us (Ninja Van) that you would like to integrate with our APIs.\n2. You and your Account Manager settle the commercial agreements.\n3. Your Account Manager creates your Ninja Dashboard account in the sandbox environment, and sends you an on-boarding email.\n4. To access the production APIs, you need to build an integration on your end, and submit three order creation requests in sandbox for our [developer support team](#section/Introduction/Contact-information) to review.\n5. You generate client credentials—Client ID and Client Key—in your sandbox Ninja Dashboard account.\n6. Using the sandbox client credentials, you generate an access token for the sandbox environment by calling the OAuth API.\n7. You create an order in the sandbox environment to verify that the integration works.\n8. If the order is created successfully, you make three order creation requests in sandbox, and submit the tracking IDs (TIDs) to our developer support team.\n9. Our developer support team reviews the requests. If the payload meets the requirements, then you're granted access to the order creation endpoint in production.\n10. You generate a new Client ID and Client Key in your production Ninja Dashboard account.\n11. You generate an access token for the production environment.\n12. You start using the APIs for delivery by making real-life order creation requests in production.\n\nFor account-related issues, please contact your Account Manager. \nFor technical issues related to API integration, send an email to [developer support](#section/Introduction/Contact-information).\n\n### Shippers operating in multiple countries\nFor shippers operating in multiple countries, the audit process needs to be initiated by the Account Manager and has to be done separately for each country of operation.\n\n### Shippers with multiple accounts for the same shipper\nFor shippers who plan to have multiple accounts for the same shipper in the Ninja Van platform, we advise you to enroll as a marketplace shipper. \nOtherwise, your request to access production APIs with several accounts of the same shipper may be rejected after submission.\n\n## Authentication\nNinja Van APIs use the OAuth 2.0 protocol for authentication and authorization.\n\nTo begin, obtain OAuth 2.0 client credentials from the developer settings in your Ninja Dashboard account. \nThen use your client app to request an access token, extract the token from the response, and send it to a Ninja Van API that you want to access.\n\nHowever, Ninja Van APIs in the sandbox environment and production environment require different access tokens. \nThe reason for is that the Ninja Dashboard accounts in the two environments are different, and they use different credentials.\n\nThis means that you need to use the sandbox access token for testing your API requests and submitting sample orders for an integration audit. \nOnce we grant you access to production, you'll need to generate a new access token in your production Dashboard account.\n\n### Client credentials\nThe credentials are available in your Ninja Dashboard account, under **Settings > IT Settings**.\nFor more information, see [Get access to sandbox](#section/Get-started/Get-access-to-sandbox) and [Get access to production](#section/Get-started/Get-access-to-production).\n\n### Access token lifetime\nAccess tokens have limited lifetimes. Five minutes before your access token expires, or if a request to a Ninja Van API returns an HTTP `401` status code, generate a new access token. \n\n## Integration requirements\n\n### OAuth API\n[OAuth 2.0 token](#tag/OAuth-API/paths/~1{countryCode}~12.0~1oauth~1access_token/post) endpoint:\n* You MUST cache the access token and its expiration timestamp.\n\n### Order API\n[Order creation](#tag/Order-API/paths/~1{countryCode}~14.1~1orders/post) and [order cancellation](#tag/Order-API/paths/~1{countryCode}~12.2~1orders~1{trackingNo}/delete) endpoints:\n* If the API returns an HTTP `5xx` status code, you SHOULD retry an order creation request.\n* If the API returns an HTTP `4xx` status code, you SHOULD log the response for debugging.\n* You SHOULD NOT retry the same order creation request without fixing the error specified in the response.\n\n[Waybill generation](#tag/Order-API/paths/~1{countryCode}~12.0~1reports~1waybill/get) endpoint:\n\nYou MUST cache the waybill upon generation and avoid excessive calls to this endpoint.\n\n### Tracking API\n[Get events for single parcel](#tag/Tracking-API/paths/~1{countryCode}~11.0~1orders~1tracking-events~1{trackingNumber}/get) \nand \n[Get events for list of parcels](#tag/Tracking-API/paths/~1{countryCode}~11.0~1orders~1tracking-events/get) endpoints.\n* You SHOULD NOT use these endpoints as a primary mechanism to get parcel status updates.\n* You SHOULD subscribe to our webhook for parcel status updates and only use these endpoints when there is a failure to receive webhooks.\n* In order for us to review your use case, please provide a system flow diagram that shows how the APIs will be integrated with your systems. The trigger points for which the APIs are being called should be clearly shown in the diagram.\n\n## Base URL by environment\n### Production base URL\n* URL: `https://api.ninjavan.co`\n* URL with country code: `https://api.ninjavan.co/{countryCode}`\n\n### Sandbox base URL\n* URL: `https://api-sandbox.ninjavan.co`\n* URL with country code: `https://api-sandbox.ninjavan.co/sg`\n\n**Note:** Always send your sandbox requests to the Singapore sandbox API. However, you can send localized addresses for the countries that you are testing for. In other words, you can craft the API request as you would for the production environment. The only difference is the URL.\n\n## Rate limits\nIn order to provide a high quality of service for all customers, our API is rate-limited. \nIf you exceed the rate limit, the API responds with an HTTP `429 API rate limit exceeded` status code, and you get temporarily blocked from accessing the API.\nIn this case, retry your request after a few hours.\n\nThe following endpoints are rate-limited:\n\n* OAuth API: [Request access token](#tag/OAuth-API/paths/~1{countryCode}~12.0~1oauth~1access_token/post)\n* Order API: [Generate waybill](#tag/Order-API/paths/~1{countryCode}~12.0~1reports~1waybill/get)\n* Tariff API: [Get price estimate](#tag/Tariff-API/paths/~1{countryCode}~11.0~1public~1price/post). The limit is 20 calls per minute.\n* Tracking API:\n * [Get events for single parcel](#tag/Tracking-API/paths/~1{countryCode}~11.0~1orders~1tracking-events~1{trackingNumber}/get)\n * [Get events for list of parcels](#tag/Tracking-API/paths/~1{countryCode}~11.0~1orders~1tracking-events/get)\n\n## Contact information\nTo contact the developer support team, send an email to the address that corresponds to your country:\n\n* Indonesia: [id-devsupport@ninjavan.co](mailto:id-devsupport@ninjavan.co)\n* Malaysia: [my-devsupport@ninjavan.co](mailto:my-devsupport@ninjavan.co)\n* Philippines: [ph-devsupport@ninjavan.co](mailto:ph-devsupport@ninjavan.co)\n* Singapore: [sg-devsupport@ninjavan.co](mailto:sg-devsupport@ninjavan.co)\n* Thailand: [th-devsupport@ninjavan.co](mailto:th-devsupport@ninjavan.co)\n* Vietnam: [vn-devsupport@ninjavan.co](mailto:vn-devsupport@ninjavan.co)\n* China office: [cn-devsupport@ninjavan.co](mailto:cn-devsupport@ninjavan.co)\n\n# Get started\n\n## Get access to sandbox\nTo build your workflow and test our APIs, you need to have access to the sandbox environment.\n\n**Note:** All sandbox requests must be sent to the Singapore sandbox API: `https://api-sandbox.ninjavan.co/sg`.\n\n### Prerequisites\n* Ninja Van Postpaid Pro account.\n* Access to Ninja Dashboard.\n\n### Steps\n1. Open [Ninja Dashboard](https://dashboard-sandbox.ninjavan.co/login-v2) in sandbox.\n2. Enter your email and password, and click **Login**.\n3. Go to **Settings > IT Settings**.\n4. Click **REGENERATE CLIENT ID & KEY**. Your credentials appear under **Client ID** and **Client Key**, respectively.\n5. Pass the credentials to the [OAuth API](#tag/OAuth-API/paths/~1{countryCode}~12.0~1oauth~1access_token/post) to get your access token.\n\nUse this token for testing your requests to Ninja Van APIs in the sandbox environment. This guide provides [sample parameters and payloads](#section/Sample-order-creation-requests) for various business scenarios.\n\n## Review your integration\nBefore granting you access to production, Ninja Van needs to do an audit of your integration. Take these steps to get started:\n1. In the sandbox environment, submit three different order creation requests reflective of the type of orders that you'll be sending in production, with accurate address and other information. \nThese requests must be sent via the integration that you built, and not via Postman or any other API testing tool.\n2. Send an email to [developer support](#section/Introduction/Contact-information) with the tracking numbers of the orders, and the business requirements.\n\nThe Ninja Van developer support team will review your requests, and if they meet our requirements, then you'll be granted access to the Order API in production. \n\n**Note:** Successful completion of the integration audit doesn't automatically grant you the permission to use the waybill generation endpoint. To request access to this endpoint, see [How to request access](#tag/Order-API/paths/~1{countryCode}~12.0~1reports~1waybill/get).\n\n### Shippers operating in multiple countries\nFor shippers operating in multiple countries, the audit process needs to be initiated by the Account Manager and has to be done separately for each country of operation.\n\n## Get access to production\nThe access token that you used before you were granted access to production, will not work. This is why you need to generate a new token to access the production APIs.\n\n### Prerequisites\n* Ninja Van Postpaid Pro account.\n* Access to Ninja Dashboard.\n\n### Steps\n1. Open [Ninja Dashboard](https://dashboard.ninjavan.co/login-v2) in production.\n2. Enter your email and password, and click **Login**.\n3. Go to **Settings > IT Settings**.\n4. Click **REGENERATE CLIENT ID & KEY**. Your credentials appear under **Client ID** and **Client Key**, respectively.\n5. Pass the credentials to the [OAuth API](#tag/OAuth-API/paths/~1{countryCode}~12.0~1oauth~1access_token/post) to get your access token.\n\nUse this token to authenticate your requests to our APIs in the production environment.\n\n", "url": "https://raw.githubusercontent.com/jentic/jentic-public-apis/refs/heads/main/apis/openapi/ninjavan.co/main/4.1.0/apis.json", "tags": [ "ninjavan.co", "main" ], "created": "2026-04-11", "modified": "2026-04-11", "specificationVersion": "0.19", "access": "3rd-Party", "maintainers": [ { "FN": "Jentic", "X-github": "jentic", "url": "https://github.com/jentic" } ], "apis": [ { "aid": "ninjavan.co:main-4.1.0", "name": "Ninja Van API", "description": "\n# Introduction\nNinja Van is a tech-enabled express delivery company providing hassle-free delivery services for businesses of all sizes across Southeast Asia. \nThis portal provides technical guidance on how to get started with and use Ninja Van APIs for your business scenarios.\n\nThe portal provides documentation for the following APIs and services:\n* [Order API](#tag/Order-API). Create delivery orders, generate waybills, and cancel orders.\n* [Tariff API](#tag/Tariff-API). Get a delivery fee estimate for an order.\n* [PUDO API](#tag/PUDO-API). Embed address selection information for Ninja Points into your e-commerce website.\n* [PUDO partners API](#tag/PUDO-partners-API). As a PUDO partner, use this API to trigger parcel collection and drop-off, and receive updates on the success of operational processes at your Ninja Points.\n* [Tracking API](#tag/Tracking-API). Retrieve tracking statuses for a list of parcels or for a single parcel.\n* [Webhooks](#tag/Webhooks). Receive updates on successful changes in the lifespan of an order.\n\nAll Ninja Van APIs are RESTful APIs.\n\n## Integration process\n1. You (shipper) inform us (Ninja Van) that you would like to integrate with our APIs.\n2. You and your Account Manager settle the commercial agreements.\n3. Your Account Manager creates your Ninja Dashboard account in the sandbox environment, and sends you an on-boarding email.\n4. To access the production APIs, you need to build an integration on your end, and submit three order creation requests in sandbox for our [developer support team](#section/Introduction/Contact-information) to review.\n5. You generate client credentials—Client ID and Client Key—in your sandbox Ninja Dashboard account.\n6. Using the sandbox client credentials, you generate an access token for the sandbox environment by calling the OAuth API.\n7. You create an order in the sandbox environment to verify that the integration works.\n8. If the order is created successfully, you make three order creation requests in sandbox, and submit the tracking IDs (TIDs) to our developer support team.\n9. Our developer support team reviews the requests. If the payload meets the requirements, then you're granted access to the order creation endpoint in production.\n10. You generate a new Client ID and Client Key in your production Ninja Dashboard account.\n11. You generate an access token for the production environment.\n12. You start using the APIs for delivery by making real-life order creation requests in production.\n\nFor account-related issues, please contact your Account Manager. \nFor technical issues related to API integration, send an email to [developer support](#section/Introduction/Contact-information).\n\n### Shippers operating in multiple countries\nFor shippers operating in multiple countries, the audit process needs to be initiated by the Account Manager and has to be done separately for each country of operation.\n\n### Shippers with multiple accounts for the same shipper\nFor shippers who plan to have multiple accounts for the same shipper in the Ninja Van platform, we advise you to enroll as a marketplace shipper. \nOtherwise, your request to access production APIs with several accounts of the same shipper may be rejected after submission.\n\n## Authentication\nNinja Van APIs use the OAuth 2.0 protocol for authentication and authorization.\n\nTo begin, obtain OAuth 2.0 client credentials from the developer settings in your Ninja Dashboard account. \nThen use your client app to request an access token, extract the token from the response, and send it to a Ninja Van API that you want to access.\n\nHowever, Ninja Van APIs in the sandbox environment and production environment require different access tokens. \nThe reason for is that the Ninja Dashboard accounts in the two environments are different, and they use different credentials.\n\nThis means that you need to use the sandbox access token for testing your API requests and submitting sample orders for an integration audit. \nOnce we grant you access to production, you'll need to generate a new access token in your production Dashboard account.\n\n### Client credentials\nThe credentials are available in your Ninja Dashboard account, under **Settings > IT Settings**.\nFor more information, see [Get access to sandbox](#section/Get-started/Get-access-to-sandbox) and [Get access to production](#section/Get-started/Get-access-to-production).\n\n### Access token lifetime\nAccess tokens have limited lifetimes. Five minutes before your access token expires, or if a request to a Ninja Van API returns an HTTP `401` status code, generate a new access token. \n\n## Integration requirements\n\n### OAuth API\n[OAuth 2.0 token](#tag/OAuth-API/paths/~1{countryCode}~12.0~1oauth~1access_token/post) endpoint:\n* You MUST cache the access token and its expiration timestamp.\n\n### Order API\n[Order creation](#tag/Order-API/paths/~1{countryCode}~14.1~1orders/post) and [order cancellation](#tag/Order-API/paths/~1{countryCode}~12.2~1orders~1{trackingNo}/delete) endpoints:\n* If the API returns an HTTP `5xx` status code, you SHOULD retry an order creation request.\n* If the API returns an HTTP `4xx` status code, you SHOULD log the response for debugging.\n* You SHOULD NOT retry the same order creation request without fixing the error specified in the response.\n\n[Waybill generation](#tag/Order-API/paths/~1{countryCode}~12.0~1reports~1waybill/get) endpoint:\n\nYou MUST cache the waybill upon generation and avoid excessive calls to this endpoint.\n\n### Tracking API\n[Get events for single parcel](#tag/Tracking-API/paths/~1{countryCode}~11.0~1orders~1tracking-events~1{trackingNumber}/get) \nand \n[Get events for list of parcels](#tag/Tracking-API/paths/~1{countryCode}~11.0~1orders~1tracking-events/get) endpoints.\n* You SHOULD NOT use these endpoints as a primary mechanism to get parcel status updates.\n* You SHOULD subscribe to our webhook for parcel status updates and only use these endpoints when there is a failure to receive webhooks.\n* In order for us to review your use case, please provide a system flow diagram that shows how the APIs will be integrated with your systems. The trigger points for which the APIs are being called should be clearly shown in the diagram.\n\n## Base URL by environment\n### Production base URL\n* URL: `https://api.ninjavan.co`\n* URL with country code: `https://api.ninjavan.co/{countryCode}`\n\n### Sandbox base URL\n* URL: `https://api-sandbox.ninjavan.co`\n* URL with country code: `https://api-sandbox.ninjavan.co/sg`\n\n**Note:** Always send your sandbox requests to the Singapore sandbox API. However, you can send localized addresses for the countries that you are testing for. In other words, you can craft the API request as you would for the production environment. The only difference is the URL.\n\n## Rate limits\nIn order to provide a high quality of service for all customers, our API is rate-limited. \nIf you exceed the rate limit, the API responds with an HTTP `429 API rate limit exceeded` status code, and you get temporarily blocked from accessing the API.\nIn this case, retry your request after a few hours.\n\nThe following endpoints are rate-limited:\n\n* OAuth API: [Request access token](#tag/OAuth-API/paths/~1{countryCode}~12.0~1oauth~1access_token/post)\n* Order API: [Generate waybill](#tag/Order-API/paths/~1{countryCode}~12.0~1reports~1waybill/get)\n* Tariff API: [Get price estimate](#tag/Tariff-API/paths/~1{countryCode}~11.0~1public~1price/post). The limit is 20 calls per minute.\n* Tracking API:\n * [Get events for single parcel](#tag/Tracking-API/paths/~1{countryCode}~11.0~1orders~1tracking-events~1{trackingNumber}/get)\n * [Get events for list of parcels](#tag/Tracking-API/paths/~1{countryCode}~11.0~1orders~1tracking-events/get)\n\n## Contact information\nTo contact the developer support team, send an email to the address that corresponds to your country:\n\n* Indonesia: [id-devsupport@ninjavan.co](mailto:id-devsupport@ninjavan.co)\n* Malaysia: [my-devsupport@ninjavan.co](mailto:my-devsupport@ninjavan.co)\n* Philippines: [ph-devsupport@ninjavan.co](mailto:ph-devsupport@ninjavan.co)\n* Singapore: [sg-devsupport@ninjavan.co](mailto:sg-devsupport@ninjavan.co)\n* Thailand: [th-devsupport@ninjavan.co](mailto:th-devsupport@ninjavan.co)\n* Vietnam: [vn-devsupport@ninjavan.co](mailto:vn-devsupport@ninjavan.co)\n* China office: [cn-devsupport@ninjavan.co](mailto:cn-devsupport@ninjavan.co)\n\n# Get started\n\n## Get access to sandbox\nTo build your workflow and test our APIs, you need to have access to the sandbox environment.\n\n**Note:** All sandbox requests must be sent to the Singapore sandbox API: `https://api-sandbox.ninjavan.co/sg`.\n\n### Prerequisites\n* Ninja Van Postpaid Pro account.\n* Access to Ninja Dashboard.\n\n### Steps\n1. Open [Ninja Dashboard](https://dashboard-sandbox.ninjavan.co/login-v2) in sandbox.\n2. Enter your email and password, and click **Login**.\n3. Go to **Settings > IT Settings**.\n4. Click **REGENERATE CLIENT ID & KEY**. Your credentials appear under **Client ID** and **Client Key**, respectively.\n5. Pass the credentials to the [OAuth API](#tag/OAuth-API/paths/~1{countryCode}~12.0~1oauth~1access_token/post) to get your access token.\n\nUse this token for testing your requests to Ninja Van APIs in the sandbox environment. This guide provides [sample parameters and payloads](#section/Sample-order-creation-requests) for various business scenarios.\n\n## Review your integration\nBefore granting you access to production, Ninja Van needs to do an audit of your integration. Take these steps to get started:\n1. In the sandbox environment, submit three different order creation requests reflective of the type of orders that you'll be sending in production, with accurate address and other information. \nThese requests must be sent via the integration that you built, and not via Postman or any other API testing tool.\n2. Send an email to [developer support](#section/Introduction/Contact-information) with the tracking numbers of the orders, and the business requirements.\n\nThe Ninja Van developer support team will review your requests, and if they meet our requirements, then you'll be granted access to the Order API in production. \n\n**Note:** Successful completion of the integration audit doesn't automatically grant you the permission to use the waybill generation endpoint. To request access to this endpoint, see [How to request access](#tag/Order-API/paths/~1{countryCode}~12.0~1reports~1waybill/get).\n\n### Shippers operating in multiple countries\nFor shippers operating in multiple countries, the audit process needs to be initiated by the Account Manager and has to be done separately for each country of operation.\n\n## Get access to production\nThe access token that you used before you were granted access to production, will not work. This is why you need to generate a new token to access the production APIs.\n\n### Prerequisites\n* Ninja Van Postpaid Pro account.\n* Access to Ninja Dashboard.\n\n### Steps\n1. Open [Ninja Dashboard](https://dashboard.ninjavan.co/login-v2) in production.\n2. Enter your email and password, and click **Login**.\n3. Go to **Settings > IT Settings**.\n4. Click **REGENERATE CLIENT ID & KEY**. Your credentials appear under **Client ID** and **Client Key**, respectively.\n5. Pass the credentials to the [OAuth API](#tag/OAuth-API/paths/~1{countryCode}~12.0~1oauth~1access_token/post) to get your access token.\n\nUse this token to authenticate your requests to our APIs in the production environment.\n\n", "image": "https://images.ctfassets.net/iu7xhxelvu8m/6LC1QNfA1NyDGfp8sBN0gK/ef728c17096218198e06e1a3d990804b/nv-logo-top-sg.svg", "baseURL": "https://api-sandbox.ninjavan.co", "humanURL": "https://github.com/jentic/jentic-public-apis/tree/main/apis/openapi/ninjavan.co/main/4.1.0", "version": "4.1.0", "tags": [ "ninjavan.co", "main" ], "properties": [ { "type": "OpenAPI", "name": "OpenAPI definition", "url": "https://raw.githubusercontent.com/jentic/jentic-public-apis/refs/heads/main/apis/openapi/ninjavan.co/main/4.1.0/openapi.json", "mediaType": "application/openapi+json" }, { "type": "GitHubRepo", "url": "https://github.com/jentic/jentic-public-apis/tree/main/apis/openapi/ninjavan.co/main/4.1.0" } ] } ] }