Errors, events, and run states

Errors, events, and run states

Catch MakraError for any SDK exception. Catch narrower classes when the application has a specific recovery action.

Exception hierarchy

Exception Condition Useful fields
MakraAPIError Any HTTP API error status_code, body, method, path, code, request_id
MakraAuthenticationError Missing, invalid, revoked, or expired credential API error fields
MakraPermissionError Valid credential lacks permission API error fields
MakraNotFoundError Run or result absent or inaccessible API error fields
MakraInvalidRequestError Contract or URL admission rejection field, reason, index
MakraInsufficientCreditsError Balance cannot cover admission required_credits, available_credits
MakraRateLimitError Request or active-run limit retry_after, concurrency
MakraServerError API or upstream service failure API error fields
MakraConnectionError Transport could not reach API method, path
MakraTimeoutError Request or stream timeout Connection error fields
MakraStreamError Stream ended before terminal recovery run_id
MakraResultError Stored result redirect or download contract failed run_id, sanitized location
MakraRunFailedError Waited run ended outside completed run_id, state, run

Local argument validation raises ValueError, not MakraError.

from makra import Makra, MakraAPIError, MakraConnectionError

try:
    with Makra() as client:
        client.extract(
            ["https://shop.example/products/atlas-lamp"],
            {"price": "The current selling price"},
        )
except MakraAPIError as error:
    print(error.status_code, error.code, error.request_id)
    raise
except MakraConnectionError as error:
    print(error.method, error.path)
    raise

Run states

Non-terminal states are queued, running, and cancel_requested. Terminal states are completed, failed, cancelled, and budget_exhausted.

run_is_terminal(run) checks state membership. run_succeeded(run) requires completed and rejects an explicit domain success value of false.

Public event types

The event stream can emit run started, heartbeat, step started, step progress, step completed, partial result, diagnostic, run completed, run failed, run cancelled, and run budget exhausted events. Compare event.type with constants on EventTypes.

event.detail_type exposes finer internal progress names through StreamDetailTypes, including stage, activity, message, result, diagnostic, and title events. Treat unknown future detail types as observable events, not fatal parser errors.

Structured API error codes

Known gateway codes include insufficient credits, too many concurrent runs, idempotency key reuse, invalid workflow URL, invalid request contract, streaming unavailable, run not terminal, result not available, result temporarily unavailable, and not found.

Branch on exception class first. Use error.code when two conditions within one HTTP status need different recovery.

Return to What Makra is.