OpenBB-finance/OpenBB · error · UnauthorizedError

{error.get('code', '')} -> {error.get('message', '')}

Error message

{error.get('code', '')} -> {error.get('message', '')}

What it means

UnauthorizedError from the amendments listing fetcher when the congress.gov response error code contains 'API_KEY' — credentials missing/invalid/exhausted. Same credential semantics as other congress.gov endpoints; raised inside a try block that re-raises OpenBBError subclasses untouched and wraps only unexpected exceptions.

Source

Thrown at openbb_platform/providers/congress_gov/openbb_congress_gov/models/congress_amendments.py:264

        url += f"?limit={query.limit if query.limit is not None else 100}"
        url += f"&offset={query.offset if query.offset else 0}"
        url += f"&sort=updateDate+{query.sort_by}"

        if query.start_date:
            url += f"&fromDateTime={query.start_date}T00:00:00Z"

        if query.end_date:
            url += f"&toDateTime={query.end_date}T23:59:59Z"

        url += f"&format=json&api_key={api_key}"

        try:
            response = await amake_request(url=url)

            if isinstance(response, dict) and (error := response.get("error", {})):
                if "API_KEY" in error.get("code", ""):
                    raise UnauthorizedError(
                        f"{error.get('code', '')} -> {error.get('message', '')}"
                    )
                raise OpenBBError(  # noqa: TRY301
                    f"{error.get('code', '')} -> {error.get('message', '')}"
                )
        except OpenBBError:
            raise
        except Exception as e:
            raise OpenBBError(e) from e

        amendments = response.get("amendments", [])  # type: ignore

        if not amendments:
            return []

        detail_urls = [
            a["url"].split("?")[0] + f"?format=json&api_key={api_key}"
            for a in amendments

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Set congress_gov_api_key in OpenBB credentials.
  2. Validate the key directly against api.congress.gov.
  3. Reduce request volume or request a higher quota.

Example fix

# before
obb.congress.amendments(congress=119)

# after
obb.account.credentials.set('congress_gov_api_key', KEY)
obb.congress.amendments(congress=119)
Defensive patterns

Strategy: validation

Validate before calling

if not obb.account.credentials.get('congress_gov_api_key'):
    raise RuntimeError('congress_gov_api_key not set')

Try / catch

from openbb_core.provider.utils.errors import UnauthorizedError

try:
    res = obb.congress.amendments(congress=119)
except UnauthorizedError:
    raise SystemExit('configure congress_gov_api_key') from None

Prevention

When it happens

Trigger: Calling obb.congress.amendments(...) without a valid congress_gov_api_key; key suspended after exceeding 5,000 requests/hour; key stored under a misnamed credential.

Common situations: Unconfigured environments; batch jobs sharing one key across many workers; expired keys after congress.gov rotations.

Related errors


AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14). Data as JSON: /api/errors/ed107427fdf49b57. Report an issue: GitHub.