{
  "accept_required": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The request has no `Accept` header.",
    "fix": "Send `Accept: application/json`."
  },
  "already_member": {
    "status": 409,
    "type": "invalid_request_error",
    "summary": "This email address already belongs to a member of the organization.",
    "fix": "There is nothing to do."
  },
  "authentication_required": {
    "status": 401,
    "type": "authentication_error",
    "summary": "This operation has no anonymous lane: managing webhook subscriptions needs a key.",
    "fix": "Send `Authorization: Bearer <key>`."
  },
  "bulk_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "No bulk export of this type has been generated.",
    "fix": "Read the available types from `GET /v1/bulk`."
  },
  "card_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "No card has this id.",
    "fix": "Find the id with `GET /v1/cards`. If it stopped working, check `GET /v1/migrations`."
  },
  "catalog_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "No catalog has this name.",
    "fix": "Check the name in the reference for `GET /v1/catalogs/{name}`."
  },
  "cursor_filter_mismatch": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The cursor was issued for a different combination of filters.",
    "fix": "Restart pagination without a cursor, or send the filters of the first page again."
  },
  "cursor_order_mismatch": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The cursor was issued for a different `order`.",
    "fix": "Restart pagination without a cursor, or send the `order` of the first page again."
  },
  "daily_quota_exceeded": {
    "status": 429,
    "type": "rate_limit_error",
    "summary": "The daily allowance is spent. With a key it belongs to the organization, not the key.",
    "fix": "Wait for the time in `Retry-After`. Slowing down does not help, and neither does a new key. Without a key, a free one raises the allowance; with one, `upgrade_url` leads to the plans. A 304 never costs a request."
  },
  "email_not_verified": {
    "status": 403,
    "type": "invalid_request_error",
    "summary": "The account's email address is not verified, so it cannot manage an organization.",
    "fix": "Open the link in the verification email, then try again."
  },
  "endpoint_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "No endpoint exists at this path.",
    "fix": "Check the path in the reference. Every path starts with `/v1`."
  },
  "game_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "No game has this code.",
    "fix": "Use one of the game codes listed in the reference."
  },
  "image_not_available": {
    "status": 404,
    "type": "not_found_error",
    "summary": "This card has no image.",
    "fix": "Ask for the JSON representation, which is what `format=json` returns."
  },
  "internal_error": {
    "status": 500,
    "type": "api_error",
    "summary": "Something failed on our side.",
    "fix": "Retry later. If it persists, write to api@rarity.dev with the `request_id`."
  },
  "invalid_api_key": {
    "status": 401,
    "type": "authentication_error",
    "summary": "The key is not valid: it was revoked, it expired or it was never issued.",
    "fix": "Use a key that is still active, or send no `Authorization` header to stay in the anonymous lane."
  },
  "invalid_authorization_header": {
    "status": 401,
    "type": "authentication_error",
    "summary": "The `Authorization` header is not `Bearer <key>` with a key issued by Rarity. An empty `Bearer` counts.",
    "fix": "Fix the header, or send no header at all to stay in the anonymous lane."
  },
  "invalid_bulk_type": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The bulk type starts with something other than a letter or has characters other than lowercase letters, digits and underscores.",
    "fix": "Read the available types from `GET /v1/bulk`."
  },
  "invalid_card_id": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The card id is longer than an id can be.",
    "fix": "Check the id. Find a card with `GET /v1/cards`."
  },
  "invalid_content_type": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The request body is not declared as JSON.",
    "fix": "Send `Content-Type: application/json`."
  },
  "invalid_cursor": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The cursor is too long, or it cannot be decoded.",
    "fix": "Send `next_cursor` from the previous page exactly as it came. Cursors are opaque."
  },
  "invalid_filter_value": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "A filter has an empty value, a value that is too long, or control characters.",
    "fix": "Check the value in `value`, or omit the parameter. `param` names it."
  },
  "invalid_format": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "`format` is neither `json` nor `image`.",
    "fix": "Send `json` or `image`."
  },
  "invalid_json": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The request body is not valid JSON.",
    "fix": "Check the body against the schema of the operation."
  },
  "invalid_invitation": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "An invitation needs a valid email address and the role `owner` or `member`.",
    "fix": "Send `email` and `role`."
  },
  "invalid_key_name": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "A key needs a name of 1 to 64 characters.",
    "fix": "Give the key a name of that length."
  },
  "invalid_limit": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "`limit` is not an integer.",
    "fix": "Send an integer. Out-of-range values are clamped, not rejected."
  },
  "invalid_order": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "`order` is not one of the published orderings.",
    "fix": "Use a value listed in the reference for the operation."
  },
  "invalid_query": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "`q` could not be read.",
    "fix": "Check the query against the search syntax. `message` says what is wrong and `value` shows the term."
  },
  "invalid_request_body": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The request body does not match the published schema.",
    "fix": "Check the body against the schema of the operation. `param` names the field when there is one."
  },
  "invalid_since": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The `since` cursor is too long.",
    "fix": "Send the cursor from the previous response exactly as it came."
  },
  "invalid_role": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "A member's role is `owner` or `member`.",
    "fix": "Send one of the two."
  },
  "invalid_terms_version": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "This is not the current version of the terms.",
    "fix": "Reload the page and accept the terms it shows."
  },
  "invalid_webhook_url": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The webhook URL is not an absolute `https` URL on a public host.",
    "fix": "Register an `https` URL that resolves to a public address."
  },
  "invitation_limit_reached": {
    "status": 429,
    "type": "rate_limit_error",
    "summary": "The organization has sent too many invitations.",
    "fix": "Wait an hour. Past 100 pending invitations, cancel some as well."
  },
  "invitation_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "There is no pending invitation with this id for this email address.",
    "fix": "Sign in with the address that was invited. An invitation expires after 48 hours."
  },
  "key_limit_reached": {
    "status": 409,
    "type": "invalid_request_error",
    "summary": "The organization already has the maximum number of active live keys.",
    "fix": "Revoke a key, then create the new one."
  },
  "key_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "This organization has no such key.",
    "fix": "Check the key in the dashboard. It may already have been revoked."
  },
  "key_not_rotatable": {
    "status": 409,
    "type": "invalid_request_error",
    "summary": "Only an active live key with no expiry can be rotated.",
    "fix": "Rotate a key that is not already expiring, or create a new one."
  },
  "last_owner": {
    "status": 409,
    "type": "invalid_request_error",
    "summary": "An organization cannot be left without an owner.",
    "fix": "Make another member an owner first."
  },
  "member_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "This organization has no such member.",
    "fix": "Reload the members in the dashboard."
  },
  "method_not_allowed": {
    "status": 405,
    "type": "invalid_request_error",
    "summary": "This endpoint exists but does not serve this method.",
    "fix": "Use a method listed in the `Allow` header of the response."
  },
  "missing_parameter": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "A required query parameter is missing.",
    "fix": "Send the parameter named in `param`."
  },
  "not_signed_in": {
    "status": 401,
    "type": "authentication_error",
    "summary": "The dashboard needs a session.",
    "fix": "Sign in and try again."
  },
  "organization_disabled": {
    "status": 403,
    "type": "invalid_request_error",
    "summary": "This organization is disabled, so it cannot be changed.",
    "fix": "Write to api@rarity.dev."
  },
  "organization_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "You are not a member of an organization with this id.",
    "fix": "Pick an organization from the dashboard."
  },
  "origin_not_allowed": {
    "status": 403,
    "type": "invalid_request_error",
    "summary": "The dashboard accepts writes only from the site.",
    "fix": "Use the dashboard on rarity.dev."
  },
  "owner_required": {
    "status": 403,
    "type": "invalid_request_error",
    "summary": "Only an owner can do this.",
    "fix": "Ask an owner of the organization."
  },
  "rate_limit_exceeded": {
    "status": 429,
    "type": "rate_limit_error",
    "summary": "The per-minute allowance is spent.",
    "fix": "Wait for the time in `Retry-After`. Send `If-None-Match`: a 304 never costs a request. With a key, `upgrade_url` leads to the plans."
  },
  "repeated_parameter": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "A parameter that takes one value was sent more than once.",
    "fix": "Send it once. `param` names it and `value` says how many times it arrived."
  },
  "terms_not_accepted": {
    "status": 403,
    "type": "invalid_request_error",
    "summary": "The current terms have not been accepted, so keys cannot be managed yet.",
    "fix": "Accept the terms in the dashboard."
  },
  "too_many_values": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "A repeatable parameter has more values than the maximum.",
    "fix": "Send fewer values, and split the request if you need all of them."
  },
  "unknown_event_type": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "Rarity does not emit this event.",
    "fix": "Use an event type listed in the reference for the webhook operations."
  },
  "unknown_parameter": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "This endpoint does not take this query parameter.",
    "fix": "Remove it, or check its name in the reference. `param` names it."
  },
  "user_agent_not_allowed": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The `User-Agent` is a library's default, such as `curl/8.5.0`.",
    "fix": "Send an application name and a contact, like `my-app/1.0 (you@example.com)`."
  },
  "user_agent_required": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The request has no `User-Agent` header.",
    "fix": "Send an application name and a contact, like `my-app/1.0 (you@example.com)`."
  },
  "webhook_backend_unavailable": {
    "status": 503,
    "type": "api_error",
    "summary": "The webhook backend cannot be reached. Nothing was changed.",
    "fix": "Retry later."
  },
  "webhook_limit_reached": {
    "status": 400,
    "type": "invalid_request_error",
    "summary": "The account holds the maximum number of webhook endpoints.",
    "fix": "Delete an endpoint before registering another."
  },
  "webhook_not_found": {
    "status": 404,
    "type": "not_found_error",
    "summary": "This account has no webhook with this id.",
    "fix": "List your webhooks with `GET /v1/webhooks`."
  }
}
