All API errors throw MeshAPIApiError, a subclass of Error with structured fields:
1 import { MeshAPI, MeshAPIApiError } from "meshapi-node-sdk"; 2 3 try { 4 const response = await client.chat.completions.create({ 5 model: "openai/gpt-4o-mini", 6 messages: [{ role: "user", content: "Hello" }], 7 }); 8 console.log(response.choices[0]?.message.content); 9 10 } catch (err) { 11 if (err instanceof MeshAPIApiError) { 12 console.error(`[${err.status}] ${err.errorCode}: ${err.message}`); 13 console.error("Request ID:", err.requestId); 14 15 switch (err.errorCode) { 16 case "rate_limit_exceeded": 17 console.log(`Retry after ${err.retryAfterSeconds}s`); 18 break; 19 20 case "spend_limit_exceeded": 21 console.log("Spend cap reached ā add credits."); 22 break; 23 24 case "unauthorized": 25 console.log("Invalid or missing API key."); 26 break; 27 28 case "model_not_found": 29 console.log("Model not supported by the gateway."); 30 break; 31 32 case "upstream_error": 33 console.log("Upstream provider error:", err.providerError); 34 break; 35 36 case "validation_error": 37 console.log("Validation details:", err.details); 38 break; 39 } 40 } else { 41 // Network error, AbortError, etc. 42 throw err; 43 } 44 }
| Code | HTTP | Description |
|---|---|---|
unauthorized | 401 | Invalid or missing API key |
forbidden | 403 | Key suspended or access denied |
not_found | 404 | Resource not found |
model_not_found | 404 | Model not supported |
validation_error | 422 | Request body failed validation |
unprocessable_entity | 422 | Request cannot be processed |
rate_limit_exceeded | 429 | RPM or RPD limit hit |
spend_limit_exceeded | 402 | Per-key spend cap reached |
upstream_error | 500 | Upstream provider error |
gateway_timeout | 500 | Upstream provider timed out |
internal_error | 500 | Server error |
parse_error | ā | Response body could not be parsed (SDK-level) |
Mid-stream errors (sent as SSE frames before [DONE]) are automatically detected and thrown as MeshAPIApiError within the for await loop:
1 try { 2 for await (const chunk of stream) { 3 process.stdout.write(chunk.choices[0]?.delta.content ?? ""); 4 } 5 } catch (err) { 6 if (err instanceof MeshAPIApiError) { 7 // e.g. errorCode: "upstream_error", status: 0 (headers already sent) 8 console.error("Stream error:", err.errorCode, err.message); 9 } 10 }