{
  "version": 1,
  "problems": [
    {
      "code": "free_project_limit",
      "type": "https://screenrig.ai/problems/free-project-limit",
      "title": "Owner free-project limit reached",
      "status": 409,
      "hint": "Create the project in an organization holding a plan, or reduce the owner's free Standard projects. Deleted projects count until the next UTC month."
    },
    {
      "code": "project_name_conflict",
      "type": "https://screenrig.ai/problems/project-name-conflict",
      "title": "Project name already used in the organization",
      "status": 409,
      "hint": "Choose a different project name in this organization."
    },
    {
      "code": "project_delete_blocked",
      "type": "https://screenrig.ai/problems/project-delete-blocked",
      "title": "Project cannot be deleted in its current state",
      "status": 409,
      "hint": "Use the project's own Standard plan, archive its screens, resolve wallet obligations and stop live advertising, then read the deletion preview again. Automatic cleanup also requires an empty Screens project."
    },
    {
      "code": "owner_required",
      "type": "https://screenrig.ai/problems/owner-required",
      "title": "A responsible person is required",
      "status": 409,
      "hint": "The agent's invitation or first connection approval establishes its responsible person. Its existing project remains usable."
    },
    {
      "code": "internal_error",
      "type": "https://screenrig.ai/problems/internal-error",
      "title": "Internal server error",
      "status": 500,
      "retryable": false,
      "action": "retry_backoff",
      "hint": "The server failed unexpectedly and the request may not have taken effect. Read the resource back before retrying, and report the request_id if the failure repeats."
    },
    {
      "code": "invalid_request",
      "type": "https://screenrig.ai/problems/invalid-request",
      "title": "Request is invalid",
      "status": 400,
      "action": "hold_lkg",
      "hint": "Correct the request using detail and errors[], which name the field or header that was rejected, then send it again. Do not retry it unchanged."
    },
    {
      "code": "unauthorized",
      "type": "https://screenrig.ai/problems/unauthorized",
      "title": "Authentication is required",
      "status": 401,
      "action": "remint",
      "hint": "The credential is missing, expired, or revoked, so retrying with it fails again. If a stored agent credential was rejected, clear it (screenrig agent disconnect --yes) and enroll a new project; use screenrig agent connect only when the user asked to join an existing project."
    },
    {
      "code": "forbidden",
      "type": "https://screenrig.ai/problems/forbidden",
      "title": "Request is not allowed",
      "status": 403,
      "action": "hold_lkg",
      "hint": "This credential or project may not do this. Check what it may do (screenrig project capabilities), then use a permitted operation or reconnect the agent with the capability it needs (screenrig agent connect --capability NAME)."
    },
    {
      "code": "not_found",
      "type": "https://screenrig.ai/problems/not-found",
      "title": "Resource was not found",
      "status": 404,
      "action": "hold_lkg",
      "hint": "Check the identifier in the request path; it is missing, archived, or belongs to another project. List the resource to find a current identifier."
    },
    {
      "code": "method_not_allowed",
      "type": "https://screenrig.ai/problems/method-not-allowed",
      "title": "Method is not allowed",
      "status": 405,
      "action": "hold_lkg",
      "hint": "This path does not accept this method; the Allow header lists the ones it does. If a screenrig CLI sent it, update the CLI."
    },
    {
      "code": "idempotency_mismatch",
      "type": "https://screenrig.ai/problems/idempotency-mismatch",
      "title": "Idempotency key does not match the original request",
      "status": 409,
      "action": "retry_backoff",
      "hint": "This idempotency key was already used for a different request. Retry the original request unchanged, or send the new request with a new key (Idempotency-Key / --idempotency-key)."
    },
    {
      "code": "credential_issuance_expired",
      "type": "https://screenrig.ai/problems/credential-issuance-expired",
      "title": "Credential issuance expired",
      "status": 410,
      "hint": "The one-time credential delivery for this installation cannot be recovered. Do not retry; report it and start a new enrollment or connection only with explicit approval."
    },
    {
      "code": "user_email_conflict",
      "type": "https://screenrig.ai/problems/user-email-conflict",
      "title": "Email address belongs to another person",
      "status": 409,
      "hint": "This email address already belongs to another person. Use a different address, or have that person sign in with it."
    },
    {
      "code": "provisioning_invalid",
      "type": "https://screenrig.ai/problems/provisioning-invalid",
      "title": "Browser provisioning invalid",
      "status": 404,
      "hint": "This browser provisioning is not recognized. Start browser setup again to get fresh provisioning."
    },
    {
      "code": "provisioning_expired",
      "type": "https://screenrig.ai/problems/provisioning-expired",
      "title": "Browser provisioning expired",
      "status": 410,
      "hint": "This browser provisioning expired. Start browser setup again to get fresh provisioning."
    },
    {
      "code": "provisioning_consumed",
      "type": "https://screenrig.ai/problems/provisioning-consumed",
      "title": "Browser provisioning consumed",
      "status": 409,
      "hint": "This browser provisioning was already used. If the browser is showing content it is paired; otherwise start browser setup again."
    },
    {
      "code": "provisioning_exchange_mismatch",
      "type": "https://screenrig.ai/problems/provisioning-exchange-mismatch",
      "title": "Browser provisioning exchange mismatch",
      "status": 409,
      "hint": "The provisioning exchange does not match the one issued. Start browser setup again from the same browser."
    },
    {
      "code": "browser_already_paired",
      "type": "https://screenrig.ai/problems/browser-already-paired",
      "title": "Browser already paired",
      "status": 409,
      "hint": "Treat the browser as already connected; do not pair it again."
    },
    {
      "code": "handoff_code_invalid",
      "type": "https://screenrig.ai/problems/handoff-code-invalid",
      "title": "Browser handoff code invalid",
      "status": 404,
      "hint": "Ask the user to open ScreenRig on the display and copy a fresh setup instruction, then claim that code."
    },
    {
      "code": "handoff_code_expired",
      "type": "https://screenrig.ai/problems/handoff-code-expired",
      "title": "Browser handoff code expired",
      "status": 410,
      "hint": "Ask the user to open ScreenRig on the display and copy a fresh setup instruction, then claim that code."
    },
    {
      "code": "handoff_session_rate_limited",
      "type": "https://screenrig.ai/problems/handoff-session-rate-limited",
      "title": "Browser handoff session rate limited",
      "status": 429,
      "hint": "Wait for the retry interval the response gives before starting another browser handoff; do not reload or retry in a loop."
    },
    {
      "code": "handoff_session_conflict",
      "type": "https://screenrig.ai/problems/handoff-session-conflict",
      "title": "Browser handoff session conflict",
      "status": 409,
      "hint": "This project cannot use first-screen handoff. Open the Player on the display and pair its six-character code (screenrig screen pair CODE)."
    },
    {
      "code": "browser_link_not_claimed",
      "type": "https://screenrig.ai/problems/browser-link-not-claimed",
      "title": "Browser link not claimed",
      "status": 409,
      "hint": "Claim the setup code first (screenrig browser setup), then let the browser continue."
    },
    {
      "code": "browser_link_project_mismatch",
      "type": "https://screenrig.ai/problems/browser-link-project-mismatch",
      "title": "Browser link project mismatch",
      "status": 403,
      "hint": "This setup code belongs to another project. Ask for a fresh code and claim it from the intended agent environment."
    },
    {
      "code": "origin_not_allowed",
      "type": "https://screenrig.ai/problems/origin-not-allowed",
      "title": "Origin is not allowed",
      "status": 403,
      "action": "hold_lkg",
      "hint": "Send this request from the ScreenRig origin that owns it; this request's Origin is not accepted for this route."
    },
    {
      "code": "resource_conflict",
      "type": "https://screenrig.ai/problems/resource-conflict",
      "title": "Resource state conflicts with the request",
      "status": 409,
      "action": "retry_backoff",
      "hint": "The resource is not in a state that allows this request; detail says which state. Read the resource, resolve that state, then retry."
    },
    {
      "code": "revision_conflict",
      "type": "https://screenrig.ai/problems/revision-conflict",
      "title": "Resource revision does not match",
      "status": 412,
      "action": "hold_lkg",
      "hint": "The resource changed since you read it. Read it again, reapply your change, and retry with its current revision (current_revision when present) as the expected revision (If-Match / --expect-rev)."
    },
    {
      "code": "invalid_range",
      "type": "https://screenrig.ai/problems/invalid-range",
      "title": "Requested byte range is not satisfiable",
      "status": 416,
      "action": "retry_backoff",
      "hint": "The requested byte range starts past the end of the content. Request a range within the content length, or read the whole object."
    },
    {
      "code": "quota_exceeded",
      "type": "https://screenrig.ai/problems/quota-exceeded",
      "title": "Project content quota is exceeded",
      "status": 413,
      "action": "hold_lkg",
      "hint": "The project is at a content or screen limit. Delete or archive items it no longer needs, then retry."
    },
    {
      "code": "payment_required",
      "type": "https://screenrig.ai/problems/payment-required",
      "title": "Prepaid credit is required",
      "status": 402,
      "action": "hold_lkg",
      "hint": "The project's credit is below the allowed floor, so metered operations are refused. Check the balance (screenrig billing balance). Reading the project and disconnecting the agent still work."
    },
    {
      "code": "rate_limited",
      "type": "https://screenrig.ai/problems/rate-limited",
      "title": "Request rate is too high",
      "status": 429,
      "action": "retry_backoff",
      "hint": "Wait for the retry interval the response gives (Retry-After, retry_after_seconds in the CLI), then retry the same request. Do not retry sooner."
    },
    {
      "code": "dependency_unavailable",
      "type": "https://screenrig.ai/problems/dependency-unavailable",
      "title": "Required dependency is unavailable",
      "status": 500,
      "retryable": true,
      "action": "retry_backoff",
      "retry_after": 5,
      "hint": "A service this request needs is briefly unavailable. Retry the same request after a short wait (Retry-After when present)."
    },
    {
      "code": "dependency_timeout",
      "type": "https://screenrig.ai/problems/dependency-timeout",
      "title": "Required dependency did not answer in time",
      "status": 500,
      "retryable": true,
      "action": "retry_backoff",
      "hint": "A service this request needs did not answer in time. Retry the same request after a short backoff; the unfinished attempt was not charged."
    },
    {
      "code": "schema_incompatible",
      "type": "https://screenrig.ai/problems/schema-incompatible",
      "title": "Database schema is incompatible",
      "status": 500,
      "retryable": false,
      "action": "retry_backoff",
      "hint": "The service is mid-upgrade and cannot serve this request. Retry later; the request cannot succeed until the upgrade completes."
    },
    {
      "code": "not_ready",
      "type": "https://screenrig.ai/problems/not-ready",
      "title": "Service is not ready",
      "status": 500,
      "retryable": true,
      "action": "retry_backoff",
      "retry_after": 5,
      "hint": "The service is starting or a component it needs is not ready. Retry the same request after a short wait (Retry-After when present)."
    },
    {
      "code": "server_draining",
      "type": "https://screenrig.ai/problems/server-draining",
      "title": "Service is draining",
      "status": 421,
      "action": "retry_backoff",
      "hint": "This host is shutting down. Retry the same request shortly; it will reach a host that is serving."
    },
    {
      "code": "manifest_degraded",
      "type": "https://screenrig.ai/problems/manifest-degraded",
      "title": "Runtime manifest projection is degraded",
      "status": 500,
      "retryable": true,
      "action": "hold_lkg",
      "retry_after": 60,
      "hint": "The screen's manifest could not be built right now. Keep showing current content and retry after a short wait."
    },
    {
      "code": "screenshot_unavailable",
      "type": "https://screenrig.ai/problems/screenshot-unavailable",
      "title": "Screenshot is not available",
      "status": 409,
      "action": "hold_lkg",
      "hint": "The screen's Player could not provide a screenshot. Check the screen is online (screenrig screen show ID) and request a new screenshot later."
    },
    {
      "code": "identity_invalid",
      "type": "https://screenrig.ai/problems/identity-invalid",
      "title": "Player public key is invalid",
      "status": 400,
      "action": "hold_lkg",
      "hint": "The Player public key is malformed. Generate a valid key and start pairing again."
    },
    {
      "code": "identity_conflict",
      "type": "https://screenrig.ai/problems/identity-conflict",
      "title": "Player public key does not match the enrollment",
      "status": 409,
      "hint": "The public key does not match the one this pairing or screen is bound to. Pair again with the key the device holds."
    },
    {
      "code": "enrollment_bound",
      "type": "https://screenrig.ai/problems/enrollment-bound",
      "title": "Player public key is already bound to a project",
      "status": 409,
      "hint": "This Player key is already bound to a project. Use that screen as it is, or archive it and move the screen to new hardware with screen recover."
    },
    {
      "code": "proof_invalid",
      "type": "https://screenrig.ai/problems/proof-invalid",
      "title": "Player identity proof is invalid",
      "status": 401,
      "action": "retry_backoff",
      "hint": "The signed proof did not verify. Re-sign the request with the Player key over the exact request, then retry."
    },
    {
      "code": "screen_archived",
      "type": "https://screenrig.ai/problems/screen-archived",
      "title": "Screen is archived",
      "status": 409,
      "action": "clear_lkg",
      "hint": "The screen is archived. Unarchive it first (screenrig screen unarchive ID) if you mean to use it."
    },
    {
      "code": "screen_archive_required",
      "type": "https://screenrig.ai/problems/screen-archive-required",
      "title": "Archive the screen instead of deleting or unbinding it",
      "status": 409,
      "action": "hold_lkg",
      "hint": "Archive the screen (screenrig screen archive ID) instead of deleting or unbinding it."
    },
    {
      "code": "passkey_invalid",
      "type": "https://screenrig.ai/problems/passkey-invalid",
      "title": "Passkey ceremony is invalid",
      "status": 401,
      "hint": "The passkey ceremony failed or expired. Start a new passkey sign-in and complete it once."
    },
    {
      "code": "passkeys_disabled",
      "type": "https://screenrig.ai/problems/passkeys-disabled",
      "title": "Passkeys are disabled on this server",
      "status": 403,
      "hint": "This server does not accept passkeys. Sign in another way."
    },
    {
      "code": "application_in_use",
      "type": "https://screenrig.ai/problems/application-in-use",
      "title": "A live manifest still references an application release",
      "status": 409,
      "hint": "A playlist on a live screen still references this application release. Remove it from those playlists or reassign the screens, then retry."
    },
    {
      "code": "agent_connection_invalid",
      "type": "https://screenrig.ai/problems/agent-connection-invalid",
      "title": "Agent connection is invalid",
      "status": 404,
      "hint": "This agent connection is not recognized. Start a new connection (screenrig agent connect)."
    },
    {
      "code": "agent_connection_expired",
      "type": "https://screenrig.ai/problems/agent-connection-expired",
      "title": "Agent connection is expired",
      "status": 410,
      "hint": "This agent connection expired before it was approved. Start a new connection (screenrig agent connect) and approve it in the dashboard."
    },
    {
      "code": "agent_connection_conflict",
      "type": "https://screenrig.ai/problems/agent-connection-conflict",
      "title": "Agent connection is already resolved",
      "status": 409,
      "hint": "This connection was already approved or denied. Read its status (screenrig agent status) instead of resolving it again."
    },
    {
      "code": "agent_connection_not_approved",
      "type": "https://screenrig.ai/problems/agent-connection-not-approved",
      "title": "Agent connection is not approved",
      "status": 409,
      "hint": "The connection is still waiting for approval. Ask the user to approve it in the dashboard, then poll its status again."
    },
    {
      "code": "agent_connection_cancelled",
      "type": "https://screenrig.ai/problems/agent-connection-cancelled",
      "title": "Agent connection was cancelled",
      "status": 410,
      "hint": "This connection was cancelled. Start a new connection (screenrig agent connect) if one is still wanted."
    },
    {
      "code": "agent_limit_exceeded",
      "type": "https://screenrig.ai/problems/agent-limit-exceeded",
      "title": "Agent limit is exceeded",
      "status": 409,
      "hint": "The project has the maximum number of live agents. Disconnect an agent it no longer uses, then connect again."
    },
    {
      "code": "agent_lockout_risk",
      "type": "https://screenrig.ai/problems/agent-lockout-risk",
      "title": "Disconnecting the last active agent risks lockout",
      "status": 409,
      "hint": "This is the project's last active agent. Disconnect only if the user confirms, with the explicit override (screenrig agent disconnect --yes --allow-lockout)."
    },
    {
      "code": "recovery_ambiguous",
      "type": "https://screenrig.ai/problems/recovery-ambiguous",
      "title": "Device identifier is attached to more than one screen",
      "status": 409,
      "hint": "The device is attached to more than one screen, so recovery cannot pick one. List the screens (screenrig screen list), report the conflict, and do not retry."
    },
    {
      "code": "recovery_expired",
      "type": "https://screenrig.ai/problems/recovery-expired",
      "title": "Screen recovery offer has expired",
      "status": 410,
      "hint": "The recovery offer lapsed. Pair the device again so the screen receives a new recovery offer, then run screen recover."
    },
    {
      "code": "recovery_not_offered",
      "type": "https://screenrig.ai/problems/recovery-not-offered",
      "title": "No screen recovery is pending",
      "status": 404,
      "hint": "No new device is waiting to take over this screen. Pair the new device first, then run screen recover."
    },
    {
      "code": "invitation_limit_reached",
      "type": "https://screenrig.ai/problems/invitation-limit-reached",
      "title": "Project has the maximum outstanding invitations",
      "status": 409,
      "hint": "The project has the maximum outstanding invitations. Revoke an unused invitation (screenrig invitations revoke), then create the new one."
    },
    {
      "code": "version_required",
      "type": "https://screenrig.ai/problems/version-required",
      "title": "Playlist requires a newer API version",
      "status": 409,
      "hint": "This playlist has ad pages, which only the playlists API (/api/playlists) accepts. Write it there, or remove the ad pages to keep using this API."
    },
    {
      "code": "price_change_pending",
      "type": "https://screenrig.ai/problems/price-change-pending",
      "title": "Campaign is paused until new rates are accepted",
      "status": 409,
      "hint": "The seller changed rates and the campaign is paused. Preview the campaign for a fresh quote and accept it (screenrig ads campaigns accept-rates) only with the buyer's consent."
    },
    {
      "code": "quote_stale",
      "type": "https://screenrig.ai/problems/quote-stale",
      "title": "Advertising quote is stale or expired",
      "status": 409,
      "hint": "The quote expired or no longer matches the campaign. Preview the campaign again (screenrig ads campaigns preview) and use the new quote."
    },
    {
      "code": "insufficient_credits",
      "type": "https://screenrig.ai/problems/insufficient-credits",
      "title": "Eligible credits are insufficient",
      "status": 402,
      "hint": "The project's eligible credit does not cover this spend. Check the balance and source eligibility (screenrig billing balance), then reduce the spend."
    },
    {
      "code": "self_deal",
      "type": "https://screenrig.ai/problems/self-deal",
      "title": "A project cannot buy advertising in its own network",
      "status": 409,
      "hint": "A project cannot buy ads in its own network. Target another network's inventory."
    },
    {
      "code": "invitation_invalid",
      "type": "https://screenrig.ai/problems/invitation-invalid",
      "title": "Invitation is invalid",
      "status": 404,
      "hint": "This invitation link is not recognized. Ask a project member for a new invitation."
    },
    {
      "code": "invitation_expired",
      "type": "https://screenrig.ai/problems/invitation-expired",
      "title": "Invitation is expired",
      "status": 410,
      "hint": "This invitation expired. Ask a project member for a new invitation."
    },
    {
      "code": "invitation_consumed",
      "type": "https://screenrig.ai/problems/invitation-consumed",
      "title": "Invitation is already accepted",
      "status": 409,
      "hint": "This invitation was already accepted. Sign in instead."
    },
    {
      "code": "invitation_email_mismatch",
      "type": "https://screenrig.ai/problems/invitation-email-mismatch",
      "title": "Invitation belongs to a different email address",
      "status": 403,
      "hint": "The invitation was sent to a different email address. Sign in with that address or ask for an invitation to this one."
    },
    {
      "code": "reauthentication_required",
      "type": "https://screenrig.ai/problems/reauthentication-required",
      "title": "Fresh sign-in proof is required",
      "status": 401,
      "hint": "This action needs a fresh sign-in. Sign in again, then retry within a few minutes."
    },
    {
      "code": "member_limit_reached",
      "type": "https://screenrig.ai/problems/member-limit-reached",
      "title": "Project has the maximum members",
      "status": 409,
      "hint": "The project has the maximum members. Remove a member it no longer needs, then retry."
    },
    {
      "code": "last_credential",
      "type": "https://screenrig.ai/problems/last-credential",
      "title": "Last sign-in method cannot be removed",
      "status": 409,
      "hint": "Add another sign-in method before removing this one."
    },
    {
      "code": "no_project",
      "type": "https://screenrig.ai/problems/no-project",
      "title": "No current project is selected",
      "status": 409,
      "hint": "Select a project first, then retry."
    },
    {
      "code": "billing_unavailable",
      "type": "https://screenrig.ai/problems/billing-unavailable",
      "title": "This billing action is not available",
      "status": 404,
      "action": "hold_lkg",
      "hint": "Payment and payout rails are not configured for this route. Read the balance and statement (screenrig billing balance) instead, and do not retry this action."
    },
    {
      "code": "feature_unavailable",
      "type": "https://screenrig.ai/problems/feature-unavailable",
      "title": "This feature is not available on this server",
      "status": 404,
      "action": "hold_lkg",
      "hint": "This feature is not enabled on this server; detail says what to use instead. Do not retry."
    },
    {
      "code": "user_binding_stale",
      "type": "https://screenrig.ai/problems/user-binding-stale",
      "title": "Claiming user email binding is stale",
      "status": 409,
      "hint": "The verified email changed during sign-in. Start the sign-in again."
    },
    {
      "code": "session_expired",
      "type": "https://screenrig.ai/problems/session-expired",
      "title": "Runtime session is expired or no longer current",
      "status": 401,
      "action": "remint",
      "hint": "Mint a new runtime session, then retry."
    },
    {
      "code": "credential_revoked",
      "type": "https://screenrig.ai/problems/credential-revoked",
      "title": "Device credential no longer binds this device to a screen",
      "status": 401,
      "action": "repair",
      "hint": "This device key no longer binds a screen. Pair the device again with this key."
    },
    {
      "code": "proof_clock_skew",
      "type": "https://screenrig.ai/problems/proof-clock-skew",
      "title": "Player identity proof is outside the accepted time window",
      "status": 401,
      "action": "retry_backoff",
      "hint": "Re-sign the proof using a clock offset from server_time, then retry."
    },
    {
      "code": "key_retired",
      "type": "https://screenrig.ai/problems/key-retired",
      "title": "Player key was replaced and its grace window has closed",
      "status": 401,
      "action": "repair",
      "hint": "This key was replaced. Pair the device again with its current key."
    },
    {
      "code": "assignment_not_found",
      "type": "https://screenrig.ai/problems/assignment-not-found",
      "title": "Screen has no playlist assignment",
      "status": 404,
      "action": "clear_lkg",
      "hint": "Assign a playlist to the screen (screenrig screen assign), then the Player will load it."
    },
    {
      "code": "upgrade_required",
      "type": "https://screenrig.ai/problems/upgrade-required",
      "title": "Player version is below the supported minimum",
      "status": 403,
      "action": "upgrade_required",
      "hint": "Keep showing current content and update the Player to at least min_supported."
    },
    {
      "code": "reboot_unsupported",
      "type": "https://screenrig.ai/problems/reboot-unsupported",
      "title": "Screen cannot reboot remotely",
      "status": 409,
      "hint": "This screen's Player cannot reboot remotely. Use screen reload to refresh content, or restart the device by hand."
    },
    {
      "code": "webhook_limit_reached",
      "type": "https://screenrig.ai/problems/webhook-limit-reached",
      "title": "Project has the maximum webhooks",
      "status": 409,
      "hint": "The project has the maximum of 10 webhooks. Delete one it no longer needs (screenrig webhooks delete), then create the new one."
    },
    {
      "code": "webhook_url_rejected",
      "type": "https://screenrig.ai/problems/webhook-url-rejected",
      "title": "Webhook URL must be HTTPS on a public Internet host",
      "status": 400,
      "hint": "Use an https:// URL on a public Internet host; private, loopback, and non-HTTPS addresses are refused."
    },
    {
      "code": "support_conversation_closed",
      "type": "https://screenrig.ai/problems/support-conversation-closed",
      "title": "Support conversation is closed",
      "status": 409,
      "hint": "Read the conversation history or start a new conversation with screenrig support submit."
    },
    {
      "code": "demo_slot_unavailable",
      "type": "https://screenrig.ai/problems/demo-slot-unavailable",
      "title": "Demo time is no longer available",
      "status": 409,
      "hint": "Refresh the available demo times and choose another time. Your saved request is retained."
    },
    {
      "code": "agentid_claim_invalid",
      "type": "https://screenrig.ai/problems/agentid-claim-invalid",
      "title": "AgentID claim is invalid or expired",
      "status": 400,
      "hint": "The AgentID claim code is missing, expired, or already redeemed. Sign in with AgentID again for a fresh claim code, or enroll with screenrig agent enroll --email ADDRESS."
    },
    {
      "code": "agentid_already_enrolled",
      "type": "https://screenrig.ai/problems/agentid-already-enrolled",
      "title": "AgentID is already enrolled",
      "status": 409,
      "hint": "An installation already holds this AgentID. Run screenrig agent connect from that enrolled installation to attach a project."
    }
  ]
}
