For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
DocsAPI ReferenceSDKs
DocsAPI ReferenceSDKs
      • Overview
      • Chat Completions
      • Prompt Templates
      • Files & Batches
      • Embeddings
      • Image Generation
      • Responses (Reasoning)
      • Compare (Multi-model)
      • Models
      • Error Handling
LogoLogo
On this page
  • Error Handling
  • Error codes reference
  • Streaming errors
Node.js SDK

Error Handling

||View as Markdown|
Was this page helpful?
Edit this page
Previous

Models

Next

Go SDK

Built with

Error Handling

All API errors throw MeshAPIApiError, a subclass of Error with structured fields:

1import { MeshAPI, MeshAPIApiError } from "meshapi-node-sdk";
2
3try {
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}

Error codes reference

CodeHTTPDescription
unauthorized401Invalid or missing API key
forbidden403Key suspended or access denied
not_found404Resource not found
model_not_found404Model not supported
validation_error422Request body failed validation
unprocessable_entity422Request cannot be processed
rate_limit_exceeded429RPM or RPD limit hit
spend_limit_exceeded402Per-key spend cap reached
upstream_error500Upstream provider error
gateway_timeout500Upstream provider timed out
internal_error500Server error
parse_error—Response body could not be parsed (SDK-level)

Streaming errors

Mid-stream errors (sent as SSE frames before [DONE]) are automatically detected and thrown as MeshAPIApiError within the for await loop:

1try {
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}