Cancel or reject an e-Way Bill

Two distinct actions, two distinct windows.

ActionWho calls itWindow
CancelThe party who generated the EWB24 hours from generation, only if movement hasn't begun
RejectThe party against whose GSTIN someone else generated an EWB72 hours from generation

Cancel

Use this when you generated the EWB and need to take it back — duplicate, order cancelled, wrong vehicle, etc.

POST /v1/ewaybills/{id}/cancel HTTP/1.1
Host: api.in.onefinops.com
Authorization: Bearer ...
{
  "reasonCode": 2,
  "remark": "Order cancelled — buyer did not confirm dispatch"
}

reasonCode:

ValueReason
1Duplicate
2Order Cancelled
3Data Entry Mistake
4Others

remark is free text, max 100 characters.

Failure modes:

CodeHTTPMeaning
ewaybill.not_cancellable409Past 24h, or movement has begun (NIC-side condition).
not_found404Id doesn't belong to your tenant.

Successful response returns the updated record with status: "cancelled" and cancelledAt set.

Reject

Use this when someone else generated an EWB against your GSTIN — you didn't order the goods, the bill has wrong details, etc. NIC's reject window is 72 hours from generation.

POST /v1/ewaybills/{id}/reject HTTP/1.1
Host: api.in.onefinops.com
Authorization: Bearer ...
Content-Type: application/json
{}

(The body is optional; pass an empty object for explicit POST.)

Successful response returns the updated record with status: "rejected".

Reject is irreversible — once you reject an EWB, the originator must regenerate from scratch. Reach out before rejecting if there's a chance the issue is fixable on the originator's side.

Audit trail

Both cancellation and rejection write a permanent record on NIC's side; the EWB itself remains visible. We mirror this on our side: cancelledAt, cancellationReason, and the rejected/cancelled status are visible in GET /v1/ewaybills/{id} indefinitely.