Skip to main content

Error codes

This reference is scoped to external API-key workflows.

HTTP statuses​

StatusMeaning
400bad request
401missing/invalid API key
403forbidden
404resource not found
409conflict
410resource gone
422validation failure
429rate limited
500internal error

Billing and plan codes​

HTTP statusCodeMeaning
402insufficient_creditsWorkspace balance cannot cover requested operation.
403plan_restrictionOperation is not allowed on current plan.
410goneEndpoint/resource is removed and no longer available.

Analyze migration snippet​

/v1/analyze/* has been removed and now returns 410 with code: "gone".

Use this replacement path:

  1. POST /v1/files
  2. POST /v1/reports/jobs
  3. GET /v1/jobs/:jobId and GET /v1/reports/by-job/:jobId

SDK error classes​

ClassTypical trigger
ConduitErrorbase SDK error
ApiErrornon-2xx API response
AuthError401/403 responses
ValidationError422 responses
RateLimitError429 responses
InsufficientCreditsErrorinsufficient_credits response
JobFailedErrorasync job terminal failure
JobCanceledErrorasync job canceled
StreamErrorSSE stream retries exhausted

Minimal handling pattern​

import {
Conduit,
isInsufficientCreditsError,
isConduitError,
isStreamError,
} from "@mappa-ai/conduit";

try {
const conduit = new Conduit({ apiKey: process.env.CONDUIT_API_KEY! })
const receipt = await conduit.reports.create({
source: { mediaId: "media_123" },
output: { template: "general_report" },
target: { strategy: "dominant" },
webhook: { url: "https://your-app.com/webhooks/conduit" },
});
await receipt.handle?.wait();
} catch (err) {
if (isInsufficientCreditsError(err)) {
console.error(err.required, err.available);
} else if (isStreamError(err)) {
console.error(err.jobId, err.retryCount);
} else if (isConduitError(err)) {
console.error(err.code, err.requestId, err.message);
}
}