Troubleshooting

Troubleshooting

Start with the exception or workflow outcome, then narrow the problem to client configuration, admission, page access, structural extraction, or durable run state.

The client constructs but every call is unauthorized

The SDK can construct with a development placeholder when no API key is set. The hosted API rejects it. Confirm that the process environment contains MAKRA_API_KEY or pass the key explicitly. Do not print the value while diagnosing.

Catch MakraAuthenticationError separately from MakraPermissionError. The first means the credential is absent or invalid. The second means it is valid but lacks permission.

The request fails before network I/O

ValueError indicates local validation. Common causes include an empty URL list, an empty schema, an invalid execution mode, a negative pagination count, an invalid country code, or a removed public config key.

Fix the call before adding retries. Local validation failures are deterministic.

The API rejects the URL

Inspect MakraInvalidRequestError.field, reason, and index. Verify that the URL is public, has a valid domain, uses an accepted port, and contains no credentials or control characters.

An accepted URL can still fail during navigation because the remote page blocks access, requires a CAPTCHA, returns an error page, or never reaches readiness.

A convenient workflow call times out

Pagination and sequential multi-URL work may need more wall time. Version 0.0.4 keeps the server run durable even when extract() or schema() stops waiting.

Read MakraTimeoutError.run_id and reconcile it with get_run() before retrying. A client timeout does not stop the server run. Use submit_extract() directly when your application needs to persist the run ID before waiting.

A stream ends early

The SDK resumes streams after disconnection once it knows the run ID. MakraStreamError means it could not reach a terminal event within the retry budget. Use the attached run_id with get_run() or stream_run_events().

A run completed but data is missing

Inspect status, the URL-keyed data, errors, and warnings. Check whether the missing field was optional on the page, whether only one URL failed, or whether warnings report no matches, fallbacks, schema truncation, alignment degradation, or unavailable validation evidence.

Improve ambiguous descriptions before enlarging the schema. Test the same field against several pages in the class.

Every page behaves like a cold page

The URL shapes may not collapse to one class, the site's layouts may differ within the apparent class, stored knowledge may be expiring, or a storage version may have invalidated it. Preserve telemetry_run_id and compare runs.

A deferred result is unavailable

Call get_run() first. Results are available only after the run is terminal and storage has completed. MakraResultError covers malformed or failed result download contracts. MakraNotFoundError can mean the run does not exist or belongs to another principal.

Capture useful evidence

Store your application job ID, Makra run ID, telemetry_run_id, target URL, SDK version, terminal state, warning codes, exception type, API error code, request ID, and timestamps. Never store the API key or presigned result URL.

For exact method and exception fields, use the reference section.