Check your key
/ping
Returns the mode (test or live) of the key you sent.
Response 200
{
"ok": true,
"mode": "test",
"company_id": 12
}Request
curl https://fieldnova.in/api/v1/ping \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"Base URL https://fieldnova.in/api/v1. Every request needs Authorization: Bearer <key>. Test keys see sandbox data only; live keys see live data only.
/ping
Returns the mode (test or live) of the key you sent.
{
"ok": true,
"mode": "test",
"company_id": 12
}curl https://fieldnova.in/api/v1/ping \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/quotes
Price for each drop before booking. Uses your company rate card when one is set. Sandbox prices are simulated.
| Field | Type | Description |
|---|---|---|
service_idrequired | integer | Parcel / delivery, ride, rental or outstation service of the zone |
service_category_id | integer | |
vehicle_type_idrequired | integer | |
pickuprequired | object | |
pickup.addressrequired | string | max 500 chars |
pickup.latrequired | number | |
pickup.lngrequired | number | |
pickup.contact_name | string | |
pickup.contact_phone | string | |
dropsrequired | array of object | max 20 items |
drops[].addressrequired | string | max 500 chars |
drops[].latrequired | number | |
drops[].lngrequired | number | |
drops[].name | string | Recipient name |
drops[].phone | string | Recipient phone (gets the delivery PIN by SMS) |
drops[].country_code | string | |
drops[].note | string | |
for | object | Who the order is for (as your company settings allow) |
pay | "wallet" | "credit" | "cash" | |
start_time | string | Schedule for later (India time). Omit = now. |
hourly_package_id | integer | Rental (hourly) package |
weight | number | kg |
description | string | |
cost_centre_id | integer | |
branch_id | integer | |
reference | string | Your own reference (searchable) · max 60 chars |
{
"mode": "test",
"sandbox": true,
"legs": [
{
"drop_index": 0,
"distance_km": 2.4,
"duration": "7 mins",
"amount": "69.00",
"rate_card": false
}
],
"total": "69.00",
"rate_card": false,
"available": "100000.00",
"shortfall": "0.00"
}curl -X POST https://fieldnova.in/api/v1/quotes \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"service_id": 1,
"service_category_id": 1,
"vehicle_type_id": 1,
"pickup": {
"address": "MG Road, Vijayawada",
"lat": 16.5089,
"lng": 80.6717,
"contact_name": "Front desk",
"contact_phone": "9876543210"
},
"drops": [
{
"address": "Benz Circle, Vijayawada",
"lat": 16.4994,
"lng": 80.6566,
"name": "Ravi Kumar",
"phone": "9123456780"
}
],
"reference": "INV-1042",
"pay": "wallet"
}'/orders
Books one order per drop. Several drops = linked orders sharing route_id (one pickup, many drops). Live orders are paid from your wallet / credit (or cash if allowed) and dispatched to Partners. Test orders never reach a Partner and never move money.
| Name | In | Description |
|---|---|---|
Idempotency-Key | header | Any unique string (e.g. a UUID). Retrying with the same key returns the first answer and never books twice. Kept 24 hours. |
| Field | Type | Description |
|---|---|---|
service_idrequired | integer | Parcel / delivery, ride, rental or outstation service of the zone |
service_category_id | integer | |
vehicle_type_idrequired | integer | |
pickuprequired | object | |
pickup.addressrequired | string | max 500 chars |
pickup.latrequired | number | |
pickup.lngrequired | number | |
pickup.contact_name | string | |
pickup.contact_phone | string | |
dropsrequired | array of object | max 20 items |
drops[].addressrequired | string | max 500 chars |
drops[].latrequired | number | |
drops[].lngrequired | number | |
drops[].name | string | Recipient name |
drops[].phone | string | Recipient phone (gets the delivery PIN by SMS) |
drops[].country_code | string | |
drops[].note | string | |
for | object | Who the order is for (as your company settings allow) |
pay | "wallet" | "credit" | "cash" | |
start_time | string | Schedule for later (India time). Omit = now. |
hourly_package_id | integer | Rental (hourly) package |
weight | number | kg |
description | string | |
cost_centre_id | integer | |
branch_id | integer | |
reference | string | Your own reference (searchable) · max 60 chars |
{
"orders": [
{
"id": "string",
"mode": "test",
"reference": "string",
"ride_number": "string",
"status": "searching",
"route_id": "string",
"batch_id": "string",
"amount": "69.00",
"pay_mode": "string",
"pickup": null,
"drop": null,
"recipient": {},
"partner": {
"name": "string",
"phone": "string",
"vehicle_no": "string"
},
"partner_location": {
"lat": 1.5,
"lng": 1.5,
"at": "string"
},
"eta_minutes": 1,
"eta_to": "pickup",
"created_at": "string"
}
],
"route_id": "string",
"total": "string"
}curl -X POST https://fieldnova.in/api/v1/orders \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"service_id": 1,
"service_category_id": 1,
"vehicle_type_id": 1,
"pickup": {
"address": "MG Road, Vijayawada",
"lat": 16.5089,
"lng": 80.6717,
"contact_name": "Front desk",
"contact_phone": "9876543210"
},
"drops": [
{
"address": "Benz Circle, Vijayawada",
"lat": 16.4994,
"lng": 80.6566,
"name": "Ravi Kumar",
"phone": "9123456780"
}
],
"reference": "INV-1042",
"pay": "wallet"
}'/orders
Newest first. A test key lists test orders, a live key live orders.
| Name | In | Description |
|---|---|---|
status | query | One of active, searching, accepted, arrived, started, completed, cancelled |
reference | query | string |
batch_id | query | string |
from | query | string |
to | query | string |
page | query | integer |
per_page | query | integer |
{
"data": [
{
"id": "string",
"mode": "test",
"reference": "string",
"ride_number": "string",
"status": "searching",
"route_id": "string",
"batch_id": "string",
"amount": "69.00",
"pay_mode": "string",
"pickup": null,
"drop": null,
"recipient": {},
"partner": {
"name": "string",
"phone": "string",
"vehicle_no": "string"
},
"partner_location": {
"lat": 1.5,
"lng": 1.5,
"at": "string"
},
"eta_minutes": 1,
"eta_to": "pickup",
"created_at": "string"
}
],
"total": 1,
"page": 1,
"per_page": 1
}curl https://fieldnova.in/api/v1/orders \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/orders/batch
Up to 100 orders. Every order is checked first: any invalid order = nothing is booked (422 batch_invalid). Live: if the wallet cannot pay for the whole batch nothing is booked (422 business_wallet_low with the shortfall).
| Name | In | Description |
|---|---|---|
Idempotency-Key | header | Any unique string (e.g. a UUID). Retrying with the same key returns the first answer and never books twice. Kept 24 hours. |
| Field | Type | Description |
|---|---|---|
ordersrequired | array of object | max 100 items |
orders[].service_idrequired | integer | Parcel / delivery, ride, rental or outstation service of the zone |
orders[].service_category_id | integer | |
orders[].vehicle_type_idrequired | integer | |
orders[].pickuprequired | object | |
orders[].dropsrequired | array of object | max 20 items |
orders[].for | object | Who the order is for (as your company settings allow) |
orders[].pay | "wallet" | "credit" | "cash" | |
orders[].start_time | string | Schedule for later (India time). Omit = now. |
orders[].hourly_package_id | integer | Rental (hourly) package |
orders[].weight | number | kg |
orders[].description | string | |
orders[].cost_centre_id | integer | |
orders[].branch_id | integer | |
orders[].reference | string | Your own reference (searchable) · max 60 chars |
{
"batch_id": "string",
"orders": [
{
"id": "string",
"mode": "test",
"reference": "string",
"ride_number": "string",
"status": "searching",
"route_id": "string",
"batch_id": "string",
"amount": "69.00",
"pay_mode": "string",
"pickup": null,
"drop": null,
"recipient": {},
"partner": {
"name": "string",
"phone": "string",
"vehicle_no": "string"
},
"partner_location": {
"lat": 1.5,
"lng": 1.5,
"at": "string"
},
"eta_minutes": 1,
"eta_to": "pickup",
"created_at": "string"
}
],
"failed": [
{
"index": 1,
"code": "string",
"message": "string"
}
]
}curl -X POST https://fieldnova.in/api/v1/orders/batch \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"orders": [
{
"service_id": 1,
"service_category_id": 1,
"vehicle_type_id": 1,
"pickup": {
"address": "MG Road, Vijayawada",
"lat": 16.5089,
"lng": 80.6717,
"contact_name": "Front desk",
"contact_phone": "9876543210"
},
"drops": [
{
"address": "Benz Circle, Vijayawada",
"lat": 16.4994,
"lng": 80.6566,
"name": "Ravi Kumar",
"phone": "9123456780"
}
],
"reference": "INV-1042",
"pay": "wallet"
},
{
"service_id": 1,
"service_category_id": 1,
"vehicle_type_id": 1,
"pickup": {
"address": "MG Road, Vijayawada",
"lat": 16.5089,
"lng": 80.6717,
"contact_name": "Front desk",
"contact_phone": "9876543210"
},
"drops": [
{
"address": "Benz Circle, Vijayawada",
"lat": 16.4994,
"lng": 80.6566,
"name": "Ravi Kumar",
"phone": "9123456780"
}
],
"reference": "INV-1043",
"pay": "wallet"
}
]
}'/orders/{id}
Status, Partner, live Partner location and ETA.
| Name | In | Description |
|---|---|---|
idrequired | path | Order id from create (ord_test_... or ord_live_...) |
{
"id": "string",
"mode": "test",
"reference": "string",
"ride_number": "string",
"status": "searching",
"route_id": "string",
"batch_id": "string",
"amount": "69.00",
"pay_mode": "string",
"pickup": null,
"drop": null,
"recipient": {},
"partner": {
"name": "string",
"phone": "string",
"vehicle_no": "string"
},
"partner_location": {
"lat": 1.5,
"lng": 1.5,
"at": "string"
},
"eta_minutes": 1,
"eta_to": "pickup",
"created_at": "string"
}curl https://fieldnova.in/api/v1/orders/ord_test_8fK2mQ9xLp3RtV7aB1cD \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/orders/{id}/tracking
Light-weight; poll every 10-15 seconds while the order is active.
| Name | In | Description |
|---|---|---|
idrequired | path | Order id from create (ord_test_... or ord_live_...) |
{
"id": "ord_test_8fK2mQ9xLp3RtV7aB1cD",
"status": "accepted",
"partner": {
"name": "Test Partner",
"phone": "9000000000",
"vehicle_no": "TEST 0000"
},
"partner_location": {
"lat": 16.5109,
"lng": 80.6737,
"at": "2026-10-07T10:15:02.000Z"
},
"eta_minutes": 4,
"eta_to": "pickup"
}curl https://fieldnova.in/api/v1/orders/ord_test_8fK2mQ9xLp3RtV7aB1cD/tracking \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/orders/{id}/cancel
A cancellation fee may apply after the Partner has arrived (returned as fee).
| Name | In | Description |
|---|---|---|
idrequired | path | Order id from create (ord_test_... or ord_live_...) |
Idempotency-Key | header | Any unique string (e.g. a UUID). Retrying with the same key returns the first answer and never books twice. Kept 24 hours. |
| Field | Type | Description |
|---|---|---|
reason | string | max 191 chars |
{
"id": "string",
"status": "string",
"fee": "0.00"
}curl -X POST https://fieldnova.in/api/v1/orders/ord_test_8fK2mQ9xLp3RtV7aB1cD/cancel \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"reason": "Customer not available"
}'/sandbox/orders/{id}/advance
Test keys only. searching -> accepted -> arrived -> started -> completed (each step also sends its webhook). Test orders also move by themselves within about 2 minutes.
| Name | In | Description |
|---|---|---|
idrequired | path | Order id from create (ord_test_... or ord_live_...) |
{
"id": "string",
"mode": "test",
"reference": "string",
"ride_number": "string",
"status": "searching",
"route_id": "string",
"batch_id": "string",
"amount": "69.00",
"pay_mode": "string",
"pickup": null,
"drop": null,
"recipient": {},
"partner": {
"name": "string",
"phone": "string",
"vehicle_no": "string"
},
"partner_location": {
"lat": 1.5,
"lng": 1.5,
"at": "string"
},
"eta_minutes": 1,
"eta_to": "pickup",
"created_at": "string"
}curl -X POST https://fieldnova.in/api/v1/sandbox/orders/ord_test_8fK2mQ9xLp3RtV7aB1cD/advance \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY" \
-H "Content-Type: application/json" \
-d '{}'/wallet
available = balance - amounts held for orders in progress. Sandbox shows a fixed test balance.
{
"mode": "live",
"balance": "25000.00",
"held": "420.00",
"available": "24580.00",
"low_balance_alert": "5000.00",
"currency": "INR"
}curl https://fieldnova.in/api/v1/wallet \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/wallet/statements
Every money step: top-ups, order charges, refunds, cancellation fees, adjustments.
| Name | In | Description |
|---|---|---|
month | query | string |
page | query | integer |
per_page | query | integer |
{
"data": [
{
"id": 1,
"type": "topup",
"amount": "string",
"balance_after": "string",
"ride_number": "string",
"note": "string",
"at": "string"
}
],
"total": 1,
"page": 1,
"per_page": 1
}curl https://fieldnova.in/api/v1/wallet/statements \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/invoices
{
"data": [
{
"month": "string",
"orders": 1,
"amount": "string",
"pdf": "string"
}
]
}curl https://fieldnova.in/api/v1/invoices \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/invoices/{month}
| Name | In | Description |
|---|---|---|
monthrequired | path | string |
"(PDF file)"curl https://fieldnova.in/api/v1/invoices/2026-09 \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/employees
People you can book for (for.type = "employee").
{
"data": [
{
"id": 1,
"name": "string",
"phone": "string",
"email": "string",
"cost_centre_id": 1,
"status": "string"
}
]
}curl https://fieldnova.in/api/v1/employees \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"/cost-centres
{
"data": [
{
"id": 1,
"code": "string",
"name": "string",
"status": 1
}
]
}curl https://fieldnova.in/api/v1/cost-centres \
-H "Authorization: Bearer fn_test_YOUR_TEST_KEY"