Error Handling
HTTP Status Codes
| Code | Meaning |
|---|---|
200 | Request processed (check status field for business result) |
400 | Bad request — validation error, missing fields |
401 | Unauthorised — missing or expired JWT |
403 | Forbidden — insufficient permissions |
404 | Resource not found |
409 | Conflict — duplicate request (same X-Request-Id) |
500 | Internal server error |
Business Status Codes
Returned in the status field of the response body:
| Status | Meaning |
|---|---|
00 | Success |
01 | Pending / In-progress |
03 | Failed / Rejected |
For DMT account verification (NSDL), the data.status field uses a different scale:
| NSDL Status | Meaning | Action |
|---|---|---|
1 | Success — account verified | Proceed |
0 | Failure — account invalid | Notify customer |
-1 | Ambiguous | Requery in 30 s |
91 | Unknown / timeout | Requery in 30 s |
Error Response Shape
{
"status": "error",
"message": "Invalid IFSC code",
"errors": [
{ "field": "receiverIfscCode", "message": "Must be 11 characters" }
]
}
SDK Error Handling
The SDK surfaces Axios errors with the server response attached:
try {
const result = await client.dmt.instantTransfer({ ... });
} catch (err) {
if (err.response) {
// Server replied with a non-2xx
console.error(err.response.status, err.response.data);
} else {
// Network error or timeout
console.error(err.message);
}
}