Skip to content

Errors

Reference
For:
Developers

Every failed call to the ReputeCast REST API answers with an RFC 9457 problem document: the API errors below share one JSON shape, served as application/problem+json, with a stable code your program can branch on. The format is defined in RFC 9457 (Checked October 2026).

Field Type Meaning
status integer The HTTP status code, the same as the response’s.
title string The HTTP status text, such as Forbidden.
detail string A sentence a person can act on. It can change between releases and can be in Vietnamese, so show it, don’t parse it.
code string The stable machine-readable code, such as permission_denied. See error codes.
permission string The missing permission key, on permission_denied and on escalation_denied when one permission is missing.
helpers string[] Up to two members who hold the missing permission, so a person knows whom to ask.
errors object[] For invalid requests: one entry per problem, with message, location (such as body.email or query.pageSize) and value.
meta object Extra details for some codes, for example lockedUntil and failures on locked, attemptsLeft on sign-in errors, retryAfter on store rate limits, rules on approval_required.

type and instance belong to the RFC 9457 model but ReputeCast leaves them out. Without type, the problem type is about:blank, which means the HTTP status says it all. A few errors the framework produces itself, such as a server error, carry no code: use status for those.

Unknown paths under /api/ answer 404 with the code not_found and the detail “No such API endpoint.”

A key or member without the permission an operation needs gets 403. The permission and up to two members who hold it are in the body:

403 Forbidden
{
"title": "Forbidden",
"status": 403,
"detail": "Sending needs the campaigns:send permission. Ask Marcus Chen or Linh Nguyen.",
"code": "permission_denied",
"permission": "campaigns:send",
"helpers": ["Marcus Chen", "Linh Nguyen"]
}

Create a key that holds the permission, or ask one of the helpers. A key never has more permissions than the member who created it (see authentication and API keys).

A parameter or body field that breaks the schema answers 422 with one entry per problem in errors. Malformed requests, such as JSON that doesn’t parse, answer 400 with the same code.

422 Unprocessable Entity
{
"title": "Unprocessable Entity",
"status": 422,
"detail": "validation failed",
"errors": [{ "message": "expected number <= 100", "location": "query.pageSize", "value": 500 }],
"code": "validation_failed"
}

Checks that ReputeCast makes itself put the sentence in detail and the field in errors, for example "detail": "Use a work email." with "location": "body.email".

Over the per-key request rate, the API answers 429 with a Retry-After header:

429 Too Many Requests
{
"code": "rate_limited",
"detail": "Rate limit reached. Requests resume within a minute; batch endpoints accept up to 1,000 items per call.",
"status": 429,
"title": "Too Many Requests"
}

The “1,000 items” in this message holds for adding suppressions; the transactional batch operation takes up to 100 messages. Wait for the number of seconds in Retry-After, then send again. Rate limits lists every limit.

The sentences ReputeCast writes in detail (such as missing permissions, sign-in problems, things not found and its own validation checks) are in the request’s language when ReputeCast has it (en or vi): the language the Accept-Language header asks for, else the signed-in member’s own app language, else English. API keys get English unless you send the header. What the framework writes stays English, such as validation failed and errors messages like expected number <= 100. With Accept-Language: vi, a missing campaign’s detail reads Không tìm thấy chiến dịch., and the missing-permission detail reads, for example:

403 Forbidden, Accept-Language: vi
{
"title": "Forbidden",
"status": 403,
"detail": "Để quản lý khóa API, bạn cần quyền apikeys:manage. Hãy hỏi Marcus Chen hoặc Linh Nguyen.",
"code": "permission_denied",
"permission": "apikeys:manage",
"helpers": ["Marcus Chen", "Linh Nguyen"]
}

code, permission and the other fields never change with the language.

  • Branch on status and code. Treat detail as text for a person.
  • 401: the key is missing, unknown, revoked or expired. Fix the key; retrying doesn’t help.
  • 403: a permission is missing (permission_denied), the operation needs a signed-in person (humans_only), or an integration key called something its integration doesn’t use (integration_operation_denied).
  • 404, 409, 410, 422: fix the request. 409 codes such as version_conflict and idempotency_key_reused say what changed.
  • 429: wait for Retry-After. For transactional sends, retry with the same Idempotency-Key so a message is sent once (see send transactional email with the API).
  • 502 and 503: an outside service or a part of the server didn’t answer. Retry with a growing delay.

Codes are grouped by area. A code can answer with a different HTTP status in some operations; the table gives the usual one.

CodeHTTP statusMeaning
unauthenticated401No valid session or API key: you aren't signed in, or the key is unknown, revoked or expired (an expired key's detail names the date). 401 answers carry WWW-Authenticate: Bearer realm="reputecast".
session_expired401The session timed out or ended. Sign in again; unsaved work in the tab is kept.
CodeHTTP statusMeaning
permission_denied403The caller lacks a permission. permission names the missing key and helpers lists up to two members who hold it. Also returned for a key used in another workspace and for operations only integration keys may call.
escalation_denied403You can't grant a permission you don't hold, for example on a role, an API key or an agent. permission names the key when only one is missing.
humans_only403Only a signed-in person can take this action, not an API key or an MCP agent.
forbidden403Filtering contacts by paid status needs earn:view.
CodeHTTP statusMeaning
workspace_not_found404The workspace in the path doesn't exist or the caller isn't a member of it.
not_found404The resource in the path doesn't exist in this workspace. The detail names what is missing, such as "Campaign not found."
conflict409The request conflicts with the resource's current state. The detail says what to change.
validation_failed422The request body or parameters are invalid. errors[] lists each problem with its location, such as body.email. Malformed requests answer 400 with the same code.
rate_limited429Too many requests: over the rate limit of the IP or the API key, a key's own transactional or conversions rate, or a reminder sent again within the hour. Wait for the Retry-After header.
idempotency_key_reused409The same Idempotency-Key came with a different request: within 24 hours for transactional sends, or for another conversion. Use a new key for a new request.
slug_taken409The address (slug) is used by another post, tag, page or product, now or before. Pick another address.
version_conflict409Someone saved a newer version since you opened it (a campaign, text, email, language version, page or transactional draft). Reload to see their changes, then save again.
CodeHTTP statusMeaning
provider_unavailable502A sending provider or another outside service didn't accept the change or couldn't be reached. The detail has the provider's answer; nothing else was changed. Some actions answer 409 or 503 with this code.
unavailable503A part of the server can't answer right now, for example the sign-in policy check. Try again in a moment. A feature missing from this build answers 501.
CodeHTTP statusMeaning
password_change_required403The account still has its temporary password. Replace it to continue.
two_factor_setup_required403The instance requires two-factor authentication. Add a passkey or an authenticator app to continue.
locked429Too many failed sign-ins: the account is locked until the time in the detail. meta carries lockedUntil and failures.
invalid_credentials401The email or password is wrong (the detail says how many attempts are left). Connecting a sending provider answers 422 with this code when the provider rejects the credentials.
account_deactivated403The account is deactivated. An instance admin can reactivate it; nothing was deleted.
challenge_expired401The sign-in or passkey request expired, or there were too many wrong codes. Start again. Passkey requests answer 400.
email_change_expired410The email change confirmation link expired, was already used or belongs to another account. Change the email again from Account & security.
identity_managed409Single sign-on is enforced for the email domain, so the sign-in identity is managed by the organization and can't be unlinked.
invalid_code401The two-factor code is wrong. meta.attemptsLeft says how many tries are left.
invite_accepted410The invitation was already used. Sign in to continue.
invite_expired410The invitation expired. Ask the person who invited you for a new one.
invite_not_found404The invitation link isn't valid. Check that the whole link was copied, or ask for a new invitation.
invite_revoked410The invitation was revoked, so the link no longer works.
invite_sign_in409The invited email already has an account. Sign in to accept the invitation.
invite_wrong_account409The invitation is for another email than the account you are signed in with. Sign out and continue, or ask for an invitation for this account.
last_method409This is the account's only way to sign in. Add a passkey or a password before removing or unlinking it.
last_second_factor409Two-factor is required for the account, and this is its last second factor. Set up an authenticator app or another passkey first.
method_disabled403This sign-in method (password or passkey) is turned off on the instance. Use another one, such as single sign-on.
passkey_failed401The passkey didn't work for this account. Try again, or sign in with email and password.
passkey_rejected422The passkey couldn't be verified. Try again, or use another device or security key.
public_url_invalid409Passkeys need the instance's public URL, with a domain name rather than an IP address. An instance admin sets it in Instance admin.
reset_expired410The password reset link is older than 15 minutes or was already used. Request a new one; the current password keeps working.
setup_incomplete409An earlier setup step is not done: replace the temporary password, add a passkey or authenticator app and confirm the instance basics first.
sso_required403The email's domain signs in with single sign-on, so password and passkey sign-in are turned off for it.
CodeHTTP statusMeaning
agency_off403Agency mode is off on this instance. An instance admin turns it on in Instance admin › Instance & updates.
last_admin409The user is the last instance admin. Make someone else an instance admin first.
lockout_risk409The sign-in policy change would leave you no way to sign in. Add a passkey or link a sign-in that stays on, then save again.
reauth_required403Sign in again first: with your identity provider before transferring ownership (within 10 minutes), or with two-factor before resetting someone's two-factor.
restore_expired410The workspace was deleted more than 7 days ago and can't be restored.
CodeHTTP statusMeaning
sso_incomplete409The SSO connection is missing settings needed for a test sign-in or to enable it. The detail lists them.
sso_unreachable502The identity provider couldn't be reached for a test sign-in. The detail has the error.
CodeHTTP statusMeaning
last_owner409The member is the last Owner: a workspace always keeps at least one Owner, so their role can't be changed and they can't be removed or deactivated. Transfer ownership first.
CodeHTTP statusMeaning
bulk_terms409The provider's terms don't allow bulk or marketing mail on this route. Choose another provider, or keep it and acknowledge the terms. meta.issues lists the routes.
no_route422The route tester found no provider for this mail: the route has no primary provider yet, or it points at a provider that is no longer connected.
CodeHTTP statusMeaning
accessibility_unchecked422The email's accessibility couldn't be checked because the MJML doesn't compile. Edits are saved.
readiness_blocked409Send Readiness still blocks the send (a campaign, digest issue, text, push or WhatsApp campaign). Fix every blocking check first.
readiness_changed409Send Readiness ran again since you looked. Review the new results and confirm again.
readiness_incomplete409Some checks couldn't run. Retry them, or continue with provider data only.
readiness_running409Send Readiness is already running. Try again when it finishes.
readiness_stale409The campaign changed since the checks ran. Run them again before sending.
readiness_unavailable503Send Readiness isn't available in this server process. Try again on a process that runs it.
sending_unavailable503The sending engine isn't running in this installation, so nothing was scheduled. The checks, the schedule and the approval are kept.
CodeHTTP statusMeaning
approval_invalidated409The approval no longer covers the campaign because something changed since it was approved. Ask for approval again.
approval_not_required409No approval rule matches this send, so you can schedule it yourself.
approval_required409The send or publish needs an approval first. The detail names the rule; ask for approval, then try again. Also returned when publishing a post, a landing page or a transactional template that an approval rule covers.
no_approvers409The send needs more approvals from other people than the workspace has approvers. An Owner can give campaigns:approve to another role.
no_client_approver409The send needs client sign-off, and nobody in the client workspace holds the Client approver role yet. Invite the client's approver in Settings › Team.
restore_incomplete409The campaign still differs from the approved version. Ask for approval again.
CodeHTTP statusMeaning
no_system_provider409No sending provider is connected to the System stream, so opt-in confirmation emails can't go out yet. Connect one in Sending providers.
CodeHTTP statusMeaning
file_columns422Some rows of the file don't match its columns. The detail lists them; fix the file or skip those rows.
file_unreadable422The uploaded CSV or XLSX file can't be read. The detail says why.
source_auth_failed422The platform you import from (contacts or transactional templates) rejected the API key or credentials. meta.sourceStatus has its HTTP status.
source_bad_response502The platform you import from answered with something ReputeCast can't read. The detail has what it answered.
source_not_found422The transactional template platform has no such template or version, or the account has nothing to import.
source_rate_limited429The platform you import from is limiting requests. The import slows down; try again later. meta.sourceStatus has its HTTP status.
source_unavailable502The platform you import from didn't answer. Try again in a few minutes.
CodeHTTP statusMeaning
count_timeout504Counting the segment took longer than 10 seconds. The segment still works at send time.
sql_disabled409SQL segments are turned off on this database. Create the reputecast_segments role and grant it to the app user, then run reputecast migrate up.
sql_error422The SQL segment's query is invalid. The detail has the database message and, when known, the position of the error.
CodeHTTP statusMeaning
no_verification_service409No address verification service is connected. Connect one in Settings › Integrations.
nothing_to_check409There is nothing to verify: every selected address was checked in the last 90 days, or the selection is empty.
CodeHTTP statusMeaning
accessibility_blocked409The workspace accessibility policy is set to Block and an email in the flow has serious accessibility issues. The detail names the email; fix it, then publish.
CodeHTTP statusMeaning
template_not_found422The template ID doesn't exist in this workspace. Check the ID on Templates.
template_not_published422The template has a draft but no live version. Publish it first.
missing_variables422A required variable isn't in data. The answer lists which ones.
invalid_recipient422The address isn't a valid email address. Validate it in your app.
recipient_suppressed422The address bounced, complained or is a spam trap. The answer gives the reason and date.
sender_not_verified422The from address isn't a verified Transactional sender. Verify it in Settings › Senders.
attachments_too_large422The message, attachments included, is over the route's size limit: the smallest limit of the route's sending providers.
no_healthy_route503Every sending provider in the route is down. Retry with the same idempotency key.
template_not_allowed403The key can't send this template or category. Use a key that can, or widen the key's scope.
agents_never_send403MCP agents never send transactional mail. Send from your app with a send-only key.
content_removed410The message's rendered content is no longer kept (content retention), or it was never rendered. The summary and events stay until metadata retention ends.
resend_unavailable409The message can't be sent again from ReputeCast: sensitive variables or attachments weren't stored, or it arrived by SMTP. Send it again from your app.
CodeHTTP statusMeaning
breaking_change409The draft changes variables in a way that would break calls made in the last 7 days. Make the variable optional with a default, update your app first, or publish anyway. meta.breaking lists the changes.
template_does_not_render422The template doesn't render with the given data, or the draft can't be published yet. The detail says what fails. Publishing and asking for approval answer 409.
CodeHTTP statusMeaning
key_revoked401The integration's key was revoked. Reconnect the integration in Settings › Integrations to get a new key.
key_expired401The integration's key expired. Reconnect the integration in Settings › Integrations to get a new key.
owner_deactivated403The member who owns the integration's key left the workspace, so the key lost its permissions. Someone with integrations:manage can take it over in Settings › Integrations; the key stays the same.
integration_operation_denied403The key belongs to an integration and works only for that integration's turned-on triggers and actions. Change what it can do in Settings › Integrations.
instance_unreachable409The integration can't reach the instance's public URL. Give the instance a public address, or run the tool on your own network.
managed_by_integration409The API key or webhook endpoint belongs to an integration (Zapier, Make, n8n, WordPress). Change it in Settings › Integrations or in the workflow.
CodeHTTP statusMeaning
unsubscribed409The contact left the list, and ReputeCast doesn't add people back to a list they left.
suppressed409The address is on the suppression list, and ReputeCast doesn't add suppressed addresses. The detail gives the date and reason.
private_address422The webhook address points to a private network. It stays blocked until an instance admin allows private addresses (webhooks.allow_private_networks).
CodeHTTP statusMeaning
certificate_failing409The custom domain's certificate is failing, so the website can't go live there. Fix it in Branding & domain first.
header_full409The website header holds up to 6 links. Remove one first.
CodeHTTP statusMeaning
nothing_to_publish409Nothing changed since the live version, so there's nothing to publish.
reminders_exist409The reminder automation for this page already exists.
CodeHTTP statusMeaning
checks_failed409A publish check still blocks the page or product. The checks list what is missing.
CodeHTTP statusMeaning
file_mismatch422The file's extension doesn't match its content, so buyers would get a file their computer can't open. Upload the right file, or rename it.
file_program422The file is a program. Programs can't be sold or offered as downloads.
price_change409Publishing changes the price. Confirm it: existing buyers keep their access and nobody is charged again.
stripe_key_rejected409Stripe refused the key. Replace it in Earn › Settings › Payments, then publish again.
stripe_not_connected409Stripe is not connected. Connect it in Earn › Settings › Payments first: nothing can be bought, and Stripe coupon rewards can't be given, without it.
stripe_permission409The Stripe key can't create products and prices. Give it those permissions in Stripe, then publish again.
stripe_unavailable503Stripe didn't answer, so nothing was published or no checkout started and no payment was taken. Try again in a minute.
upload_gone404The upload stopped and nothing was kept. Choose the file again.
upload_incomplete409The upload isn't finished: only part of the file arrived.
upload_offset409Part of the upload arrived twice. The upload continues from the offset in the detail.
CodeHTTP statusMeaning
already_complimentary409The contact already has complimentary access. Change it instead.
import_not_matched409Match the import rows with Stripe first.
import_started409The paid members import has already started.
key_format422The value doesn't look like a Stripe key. Restricted keys start with rk_live_ or rk_test_.
key_rejected422Stripe says the key isn't valid: it may have been rolled, deleted or copied only in part.
missing_permissions422The Stripe key is missing permissions ReputeCast needs. Edit the key in Stripe, then try again.
mode_connected409A live or test key is already connected. Replace it from Earn › Settings › Payments.
no_email_column422No email column was found in the paid members file. Pick the column that holds addresses.
not_cancelable409The subscription can't be canceled here: it already ended, or it isn't billed through Stripe.
not_connected409Stripe isn't connected, so paid members can't be imported or subscriptions canceled from ReputeCast.
other_account422The key belongs to another Stripe account than the one connected. Use a key from that account, or disconnect first.
provider_not_available422This payment provider isn't available yet. Stripe is the supported provider.
public_url_unreachable409Stripe can't reach the instance's public URL to register the webhook. Set REPUTECAST_PUBLIC_URL to an address on the internet, or add the webhook by hand.
secret_key422Stripe secret keys are refused because they give full access to the Stripe account. Create a restricted key instead; nothing was sent to Stripe or stored.
tier_has_members409Members have this tier, so it can't be deleted. Archive it instead: they keep access and nobody new can buy it.
unmapped_price422A Stripe price in the import isn't mapped to a tier yet. Map it, or keep it as a legacy price.
unsettled_conflict422A row matches more than one Stripe customer. Pick the customer the person pays with, or skip the row.
webhook_first409Set up the Stripe webhook first. Without it, paid status can't stay in step with Stripe.
CodeHTTP statusMeaning
invalid_currency422Send an ISO 4217 currency code, such as USD, EUR or GBP.
invalid_value422Send the value as a decimal string, such as "29.00", with no more decimals than its currency allows.
missing_identity422The conversion names nobody: send the reader's email, the click token (rc_click), or both.
occurred_at_out_of_range422occurred_at must be within the last 30 days and not in the future.
CodeHTTP statusMeaning
checks_failing409Fix the failing checks to turn the referral program on.
last_milestone409The program needs at least one milestone while it is on. Add another one first, or turn the program off.
list_fixed409A program's list can't change once the program has been on.
not_codes409The milestone's reward isn't a code from a list.
not_held409Some of the referrals aren't held for review any more. Reload the queue.
program_exists409The list already has a referral program. Each list has one.
program_on409Turn the referral program off before deleting it.
stale_settings409Someone saved the program settings since you opened them. Reload to see their changes, then save yours.
undo_late409Undo is no longer possible: the decision was made more than 10 seconds ago, or a reward has gone out.
CodeHTTP statusMeaning
code_expired422The partner code expired. Partner codes work for 7 days; ask the newsletter for a new one.
code_revoked422The newsletter revoked the partner code. Ask them for a new one.
code_unknown422The partner instance doesn't know the code. Check that all of it was copied.
code_used422The partner code was already used. Each code connects once; ask for a new one.
no_public_url409Partner links need the instance's public URL. An instance admin sets it.
not_a_code422The value isn't a partner code (it may be a link to a subscribe page). Partner codes look like https://reputecast.example/p/XXXX-XXXX-XXXX.
not_recommending_you409Only partners that recommend you have a daily limit you set.
partner_private422The partner address is private. Partner instances must answer at a public HTTPS address.
partner_unreachable422The partner instance didn't answer over HTTPS. Check the address, or try again in a few minutes. Answers 502 for an existing link.
partner_unsupported422The partner instance runs a ReputeCast version without partner links. Ask them to update, or recommend their subscribe page as a link.
paused_by_partner409The partner paused this link. Only they can resume it.
CodeHTTP statusMeaning
not_a_push_site409The prompt's site isn't a push site yet. Add it in Push setup; readers can't subscribe until it is.
push_off409Turn push on in Sending providers › Push first: prompts subscribe readers with the workspace's keys.
CodeHTTP statusMeaning
stale_version409The campaign changed since you opened or reviewed it. Reload or review it again.
CodeHTTP statusMeaning
credentials_rejected422The SMS provider rejected the credentials. Check them and try again.
no_sender409No sender can text the country of this number yet. Add a route for it in Routing & rules.
opted_out_by_text409The number opted out by text. Only the person can come back, by texting START.
provider_unreachable502The SMS provider didn't answer. Try again in a minute.
review_changed409The text, audience, routes or costs changed since you reviewed them. Look again and confirm.
CodeHTTP statusMeaning
meta_error502Meta answered with an error. The detail has its message.
meta_unavailable502Meta's Graph API didn't answer. Try again in a moment.
token_rejected502Meta rejected the access token. Replace it to sync templates.
window_closed409The 24-hour customer service window is closed, so a free-form reply can't be sent. Send an approved template instead.
CodeHTTP statusMeaning
ai_cap_reached409This month's AI token cap or budget is used up. AI features return on the date in the detail, or someone with integrations:manage can raise the cap.
ai_demo_model409The demo's sample model only answers in development and only translates into Spanish and German. Connect your own model.
ai_feature_off409This AI feature is turned off for the workspace. Someone with integrations:manage can turn it on in Settings › Integrations · AI assistant.
ai_key_rejected409The model provider rejected the workspace's key, so nothing was sent. Someone with integrations:manage can replace it. A key rejected during the call answers 502.
ai_no_image_input409Alt text needs a model that reads images, and the connected model does not.
ai_not_configured409No AI model is connected to the workspace. Connect one in Settings › Integrations · AI assistant.
ai_not_sent409The campaign hasn't sent anything yet, so there are no results to summarize.
ai_one_model409A workspace has one AI model. Disconnect the current provider first to switch.
ai_private_address422The model's address is private and the instance doesn't allow private addresses. An instance admin can allow them. Answers 502 when found during a call.
ai_provider_error502The model provider's answer couldn't be read or it failed, so nothing was changed. A timeout answers 504.
ai_rate_limited503The model provider is limiting requests from the workspace. Try again after the time in the detail; nothing was changed.
ai_source_changed409The email changed since the translation was made. Translate it again.
ai_suggestion_gone409The suggestion isn't yours or is older than a day. Ask for a new one.
ai_test_failed422The test call to the model failed, so the settings were not saved. meta.test has the result.
CodeHTTP statusMeaning
hostrepute_error502HostRepute answered with an error. Nothing was saved.
hostrepute_reconnect409HostRepute rejected the token. Reconnect HostRepute, then try again.
hostrepute_required409Delisting requests go through HostRepute, which isn't connected. Request delisting on the blocklist's own page instead (meta.delistUrl).
hostrepute_scope409The HostRepute connection lacks the assets:write scope, so assets can't be added to monitoring. Reconnect HostRepute and approve it.
hostrepute_unavailable503HostRepute couldn't be reached. Nothing was saved.
monitor_limit_reached409The HostRepute team's plan monitors no more assets. This is a HostRepute limit, not a ReputeCast one.
CodeHTTP statusMeaning
oauth_not_set_up409The provider's sign-in app isn't set up for seed mailboxes. An instance admin adds its client ID and secret in Instance admin › Authentication.
placement_copies_gone409The copies were already deleted from the seed mailboxes.
placement_not_ready409The placement test can't start yet. The detail and meta.problems say what is missing.
placement_not_waiting409The test isn't waiting for copies any more.
CodeHTTP statusMeaning
digest_feed_unread409The digest's feed hasn't been read yet. Read it once before turning the digest on.
digest_needs_audience409Pick an audience before turning the digest on.
tests_unavailable503Test sends aren't available in this server process.
CodeHTTP statusMeaning
survey_incomplete422Every survey question must be complete before publishing. The detail lists what is missing.
CodeHTTP statusMeaning
store_not_connected409No WooCommerce store is connected at the address the plugin calls from. Connect it in Settings › Integrations first.
store_rate_limited429Shopify or WooCommerce is limiting requests. The sync slows down and carries on by itself.
store_unavailable503Shopify or WooCommerce didn't answer. Try again in a few minutes.