Errors and limits
One error shape for MCP and REST, every code the API answers with, and the limits on how often you may call.
Every error has the same shape over MCP and REST. error is a stable code your agent can act on, message is a sentence for people, and some codes carry more fields.
{
"error": "rate_limited",
"message": "Too many requests. Try again in 41 seconds.",
"retry_after": 41
}Over REST the HTTP status matches the table below. Over MCP the tool result has isError: true and the same body in structuredContent.
Proving who you are
auth_required
- HTTP
- 401
- Meaning and what to do
- No proof came with the call. The answer carries a fresh challenge and how. Sign it and call again
signature_invalid
- HTTP
- 401
- Meaning and what to do
- The signature or the message is not valid. Sign the message exactly as you got it
nonce_expired
- HTTP
- 401
- Meaning and what to do
- The challenge is older than five minutes. Ask for a new one
nonce_used
- HTTP
- 401
- Meaning and what to do
- The challenge or the signature was used before. Ask for a new one
statement_mismatch
- HTTP
- 401
- Meaning and what to do
- The message was made for another purpose. Use the challenge of this call
domain_mismatch
- HTTP
- 401
- Meaning and what to do
- The message was made for another site
wallet_mismatch
- HTTP
- 401
- Meaning and what to do
- A different wallet signed than the one the challenge is for
session_expired
- HTTP
- 401
- Meaning and what to do
- The token is unknown or older than 90 days. Make a new one with lounge.session
session_revoked
- HTTP
- 401
- Meaning and what to do
- The token was revoked
payment_invalid
- HTTP
- 402
- Meaning and what to do
- The x402 payment could not be settled
The state of your account
not_found
- HTTP
- 404
- Meaning and what to do
- No account has this wallet yet, or the thing you asked for does not exist. Sign up first with lounge.signup
wallet_unassigned
- HTTP
- 403
- Meaning and what to do
- The wallet belongs to a company, but no agent operates it. An admin assigns it with company.wallet.assign
agent_suspended
- HTTP
- 403
- Meaning and what to do
- The agent is suspended. Read the notice with lounge.notices and write to hello@402lounge.com to appeal
deletion_pending
- HTTP
- 409
- Meaning and what to do
- The agent's deletion is scheduled. Cancel it with lounge.account.delete {cancel: true} first
company_closing
- HTTP
- 409
- Meaning and what to do
- The company closes on the date in closing.due_at. Reading and the export still work. An admin or the owner cancels with company.close {cancel: true}
terms_outdated
- HTTP
- 409
- Meaning and what to do
- The terms changed. Accept the version in current with lounge.terms {accept: true}. People accept in the app (POST /v1/me/terms)
no_company
- HTTP
- 404
- Meaning and what to do
- A login of the app without a company. Create one with POST /v1/companies, or ask the owner of your company to add your email
not_a_member
- HTTP
- 403
- Meaning and what to do
- X-Company-Id names a company this login is not in. GET /v1/me lists yours under memberships
sso_not_available
- HTTP
- 501
- Meaning and what to do
- Sign-in with SSO is not switched on yet. Use the email link or Google
sso_not_found
- HTTP
- 404
- Meaning and what to do
- No company signs in with SSO at the domain of this address
domain_taken
- HTTP
- 409
- Meaning and what to do
- Another company signs in with SSO at this domain. One domain belongs to one company
email_unconfirmed
- HTTP
- 403
- Meaning and what to do
- Creating a company needs a login with a confirmed email address, by email link or Google
Rights in the company
agent_required
- HTTP
- 403
- Meaning and what to do
- Only an agent can do this. People read and manage, agents pay
not_allowed
- HTTP
- 403
- Meaning and what to do
- Your role may not do this. The answer names your_role
last_admin
- HTTP
- 409
- Meaning and what to do
- The company needs an admin agent or an owner. Make someone else admin or owner first
Input
validation_failed
- HTTP
- 400
- Meaning and what to do
- A field is missing or wrong. issues lists each one
address_invalid
- HTTP
- 400
- Meaning and what to do
- An address is 0x plus 40 hex characters
tx_hash_invalid
- HTTP
- 400
- Meaning and what to do
- A transaction hash is 0x plus 64 hex characters
name_invalid
- HTTP
- 400
- Meaning and what to do
- An agent name needs 1 to 40 characters
email_invalid
- HTTP
- 400
- Meaning and what to do
- The email address cannot be used. Use a real inbox
Wallets
wallet_taken
- HTTP
- 409
- Meaning and what to do
- The wallet already belongs to an account
last_wallet
- HTTP
- 409
- Meaning and what to do
- This is the agent's only wallet. Add another one first
wallet_is_primary
- HTTP
- 409
- Meaning and what to do
- The agent signs in with this wallet. Pick another one with lounge.wallet.primary first
wallet_not_assigned
- HTTP
- 409
- Meaning and what to do
- The wallet is not assigned to you. An admin can assign it
wallet_not_found
- HTTP
- 404
- Meaning and what to do
- The wallet does not belong to this company
wallet_proof_invalid
- HTTP
- 409
- Meaning and what to do
- The wallet has not proved itself yet
Plans and billing
plan_limit
- HTTP
- 409
- Meaning and what to do
- The plan covers no more agents or wallets. what says which (agents, wallets, wallets_per_agent), limit how many. A bigger plan covers more: billing.checkout
month_locked
- HTTP
- 409
- Meaning and what to do
- The company made more transactions in that month than its plan covers. Every receipt is there, the month's document and export wait for a plan that fits
plan_required
- HTTP
- 403
- Meaning and what to do
- The CSV and DATEV export come with Books. The ZIP of GET /v1/company/export stays open on every plan
already_subscribed
- HTTP
- 409
- Meaning and what to do
- The company has a plan or the archive running at Polar. Change or end it in the portal (billing.portal)
archive_subscribed
- HTTP
- 409
- Meaning and what to do
- The company pays the archive through Polar. Switch it to the plan in the portal (billing.portal), Polar credits the rest
archive_with_plan
- HTTP
- 409
- Meaning and what to do
- Books and Books for teams keep receipts and documents already. The archive is for companies without a paid plan
archive_running
- HTTP
- 409
- Meaning and what to do
- The archive paid in USDC or by agreement runs until until. Pay the next period in USDC, or book it through Polar once it ended
plan_by_agreement
- HTTP
- 409
- Meaning and what to do
- The company has a plan by agreement. Write to hello@402lounge.com to change it
no_customer
- HTTP
- 404
- Meaning and what to do
- The company has bought nothing at Polar yet, so there is no portal. Choose a plan first
billing_not_configured
- HTTP
- 503
- Meaning and what to do
- Buying is not open yet. Write to hello@402lounge.com
sponsor_taken
- HTTP
- 409
- Meaning and what to do
- Another sponsor has the place right now. sponsor.get says when it is free
sponsor_busy
- HTTP
- 409
- Meaning and what to do
- The sponsored place changed this moment. Try again
listing_not_yours
- HTTP
- 403
- Meaning and what to do
- Only the company the listing belongs to can sponsor it. Claim the listing first
not_open
- HTTP
- 503
- Meaning and what to do
- Paying in USDC is not open yet, or not for this item. Pay through Polar instead (billing.checkout)
company_data_missing
- HTTP
- 409
- Meaning and what to do
- An invoice needs the company's name, address, country and confirmed email. missing lists what is not there. Add it with company.update
plan_running
- HTTP
- 409
- Meaning and what to do
- Another plan paid in USDC runs until until. Ask for the new plan from that day on, or write to hello@402lounge.com to switch now
quote_expired
- HTTP
- 410
- Meaning and what to do
- The offer ran out after 30 minutes. Ask for a new one, do not send money for the old one
payment_used
- HTTP
- 409
- Meaning and what to do
- That transaction already paid another offer
Directory and listings
listing_not_found
- HTTP
- 404
- Meaning and what to do
- No listing with that slug in the directory
listing_claimed
- HTTP
- 409
- Meaning and what to do
- Another company holds the listing. If the service is yours, write to hello@402lounge.com
wallet_not_listed
- HTTP
- 409
- Meaning and what to do
- The wallet is not one of the listing's wallets. Claim with one it names
already_listed
- HTTP
- 409
- Meaning and what to do
- The host or the payTo wallet is in the directory already. listing names it, claim it instead
slug_taken
- HTTP
- 409
- Meaning and what to do
- A listing with that name was added a moment ago. Try again
url_invalid
- HTTP
- 400
- Meaning and what to do
- Use the full public https address of one paid call
url_unreachable
- HTTP
- 422
- Meaning and what to do
- We could not reach the URL in ten seconds. Check that it is public
not_402
- HTTP
- 422
- Meaning and what to do
- The URL answered something else than 402. status says what. Use the URL of a call that costs money
payment_unreadable
- HTTP
- 422
- Meaning and what to do
- A 402 came back without payment details we can read
no_base_offer
- HTTP
- 422
- Meaning and what to do
- The 402 answer offers no payment on Base. Receipts cover Base, so the directory lists services that take USDC there
Seller levels
level_1_required
- HTTP
- 409
- Meaning and what to do
- The company check builds on level 1. Prove a wallet of the listing first with directory.claim
listing_without_domain
- HTTP
- 409
- Meaning and what to do
- The listing has no https address whose domain could be confirmed. Write to hello@402lounge.com
email_domain_mismatch
- HTTP
- 400
- Meaning and what to do
- The address for the domain check is not at the domain of the listing. domains lists where it may be, empty for a host on a hosting platform, which uses the DNS record
check_running
- HTTP
- 409
- Meaning and what to do
- A check of this listing was started a moment ago. seller.get shows it
check_valid
- HTTP
- 409
- Meaning and what to do
- The listing is on level 2 already. valid_until says until when, the yearly check opens 60 days before
check_closed
- HTTP
- 409
- Meaning and what to do
- The check is approved, rejected, expired or withdrawn. Start a new one with seller.check {action: "start"}
check_incomplete
- HTTP
- 409
- Meaning and what to do
- Not every step of the check passed. failed names them
check_included
- HTTP
- 409
- Meaning and what to do
- The plan includes the check, there is nothing to pay
check_paid
- HTTP
- 409
- Meaning and what to do
- The check is paid already
buyer_records_gone
- HTTP
- 409
- Meaning and what to do
- The buyer no longer keeps its records of the document at 402lounge, so a cancellation would not reach it. Write to hello@402lounge.com
level_2_required
- HTTP
- 409
- Meaning and what to do
- The invoicing mandate and self-billing need a listing on level 2 first
vat_status_required
- HTTP
- 409
- Meaning and what to do
- State the VAT status of the company first with company.update {vat_status}. Invoices in your name need it
agent_must_sign
- HTTP
- 400
- Meaning and what to do
- An agent signs the statement with its wallet: call again with agreement_proof {message, signature}
no_einvoice
- HTTP
- 404
- Meaning and what to do
- The document has no e-invoice. Invoices and credit notes have one, vouchers and overviews do not
einvoice_invalid
- HTTP
- 500
- Meaning and what to do
- The e-invoice of a document did not pass our check, so the document was not issued. We look into it, the next run issues it
sanctions_unreadable
- HTTP
- 502
- Meaning and what to do
- The EU sanctions list came in a form we cannot read. Our side
Company, agents and people
name_taken
- HTTP
- 409
- Meaning and what to do
- An agent with that name already works for this company. Pick another name
invite_invalid
- HTTP
- 404
- Meaning and what to do
- The invite code is unknown, used or expired
company_exists
- HTTP
- 409
- Meaning and what to do
- The agent belongs to a company with its own data and cannot join another one. An agent's dashboard login cannot create a company
shell_has_documents
- HTTP
- 409
- Meaning and what to do
- The account has vouchers already and cannot fold into another company
shell_has_agents
- HTTP
- 409
- Meaning and what to do
- Other agents work for the account, so it cannot fold into another company
shell_has_members
- HTTP
- 409
- Meaning and what to do
- People are members of the account, so it cannot fold into another company
email_required
- HTTP
- 409
- Meaning and what to do
- A company with its data needs an email. Change it instead of removing it
code_invalid
- HTTP
- 400
- Meaning and what to do
- The email code (company email or domain check) is not right. The answer says how many tries are left
code_expired
- HTTP
- 400
- Meaning and what to do
- The email code is older than 15 minutes. Start again
too_many_attempts
- HTTP
- 429
- Meaning and what to do
- Five wrong codes. Start again for a new one
member_exists
- HTTP
- 409
- Meaning and what to do
- That address is a member already
member_not_found
- HTTP
- 404
- Meaning and what to do
- No member with that id in this company
agent_not_found
- HTTP
- 404
- Meaning and what to do
- No agent with that id works for this company
role_not_found
- HTTP
- 404
- Meaning and what to do
- No role with that id in this company
role_name
- HTTP
- 400
- Meaning and what to do
- A role name has 2 to 40 characters and is not the name of a fixed role
role_areas
- HTTP
- 400
- Meaning and what to do
- Every area needs a level, and the role reads at least one
role_exists
- HTTP
- 409
- Meaning and what to do
- The company has a role with that name already
role_in_use
- HTTP
- 409
- Meaning and what to do
- People have this role. Give them another one first
request_not_found
- HTTP
- 404
- Meaning and what to do
- No request with that id on the board of this company
ad_title
- HTTP
- 400
- Meaning and what to do
- The title of the sponsored tile needs 3 to 60 characters
ad_title_name
- HTTP
- 400
- Meaning and what to do
- The title keeps the listing's name. The answer names it
ad_body
- HTTP
- 400
- Meaning and what to do
- The text of the tile has at most 140 characters
ad_url
- HTTP
- 400
- Meaning and what to do
- The link of the tile starts with https://
ad_url_domain
- HTTP
- 400
- Meaning and what to do
- The link goes to the listing's domain or a subdomain of it. allowed lists them
logo_too_large
- HTTP
- 413
- Meaning and what to do
- The logo has more than 256 KB. Save it smaller
logo_type
- HTTP
- 415
- Meaning and what to do
- A logo is a PNG, JPEG or WebP image
app_not_found
- HTTP
- 404
- Meaning and what to do
- No app with that client name is connected
confirmation_mismatch
- HTTP
- 400
- Meaning and what to do
- To close the company, send its name exactly as company.get shows it
currency_unknown
- HTTP
- 400
- Meaning and what to do
- The ECB publishes no reference rate for that currency. GET /v1/currencies lists the ones that work
export_not_confirmed
- HTTP
- 400
- Meaning and what to do
- Closing at once deletes the records. Download the export and send export_kept: true
close_not_scheduled
- HTTP
- 409
- Meaning and what to do
- The company is not closing, so there is nothing to cancel
Receipts and documents
report_duplicate
- HTTP
- 409
- Meaning and what to do
- Your company reported this transaction already. receipts.list shows its state
receipt_not_found
- HTTP
- 404
- Meaning and what to do
- No receipt with that id or hash in this company
month_open
- HTTP
- 400
- Meaning and what to do
- The month is not over yet in Europe/Berlin. Documents are issued for finished months, invoices.draft shows the month so far
document_not_cancellable
- HTTP
- 409
- Meaning and what to do
- The document is already cancelled, or it is a cancellation itself. To correct a month, issue it again
Our side
rate_limited
- HTTP
- 429
- Meaning and what to do
- Too many calls. Wait retry_after seconds
internal
- HTTP
- 500
- Meaning and what to do
- Something broke on our side. Try again later, and write to us if it stays
Rate limits
Limits stop runaway scripts, they are not a quota for normal use. A call over the limit answers rate_limited with retry_after.
register.lookup, GET /v1/register/{address}
- Limit
- 120 a minute
- Counted per
- IP address
receipts.record, POST /v1/receipts
- Limit
- 600 an hour
- Counted per
- Agent
POST /v1/signup
- Limit
- 5 an hour and 20 a day
- Counted per
- IP address
POST /v1/session
- Limit
- 20 an hour
- Counted per
- IP address
POST /v1/wallets
- Limit
- 10 a day
- Counted per
- Agent
POST /v1/dashboard-link
- Limit
- 10 an hour
- Counted per
- Agent
company.update
- Limit
- 30 an hour
- Counted per
- Caller
company.vat_check
- Limit
- 10 an hour
- Counted per
- Caller
company.email with start
- Limit
- 5 an hour
- Counted per
- Caller
company.invite
- Limit
- 20 a day
- Counted per
- Caller
company.join
- Limit
- 10 an hour
- Counted per
- Agent
company.members with invite
- Limit
- 20 a day
- Counted per
- Caller
company.requests with ask, POST /v1/requests
- Limit
- 30 an hour
- Counted per
- Caller
company.requests with answer, POST /v1/requests/{id}/replies
- Limit
- 120 an hour
- Counted per
- Caller
invoices.issue
- Limit
- 10 an hour
- Counted per
- Caller
invoices.cancel
- Limit
- 20 an hour
- Counted per
- Caller
seller.check
- Limit
- 20 an hour
- Counted per
- Caller
seller.profile
- Limit
- 30 an hour
- Counted per
- Caller
seller.mandate, seller.self_billing with sign or revoke
- Limit
- 20 an hour
- Counted per
- Caller
Dashboard sign-in, challenge and verify
- Limit
- 30 a minute each
- Counted per
- IP address
Email sign-in link
- Limit
- 5 an hour
- Counted per
- IP address
POST /v1/reports
- Limit
- 5 an hour
- Counted per
- IP address
Other limits
Agents and wallets
- Limit
- By plan, see below
Session tokens
- Limit
- 10 per agent, 90 days each
Challenges
- Limit
- Five minutes, once
Invite codes
- Limit
- Seven days
Email codes
- Limit
- 15 minutes, five tries
Dashboard links
- Limit
- Ten minutes, once
Agent names
- Limit
- 1 to 40 characters, unique in the company, case ignored
Pages
- Limit
- limit up to 200 for receipts.list and invoices.list
Deletion
- Limit
- Takes effect after 7 days, until then it can be cancelled
Plans and their limits
Free
- Agents
- 1
- Wallets
- 1
- Transactions a month
- 500
Books
- Agents
- 3
- Wallets
- 5 per agent, 15 in all
- Transactions a month
- 30,000
Books for teams
- Agents
- No limit
- Wallets
- No limit
- Transactions a month
- 500,000
Enterprise
- Agents
- By agreement
- Wallets
- By agreement
- Transactions a month
- By agreement
Transactions are the company's receipts in a calendar month, Europe/Berlin. A new agent (company.invite, a sign-up with invite_code, company.join) and a new wallet (lounge.wallet.add, company.wallet.assign) past the plan answer plan_limit.
Over the transaction limit nothing is lost: every receipt is written. The first time a company goes over, 20 % more are covered until the end of that month, once. Past that, the month's document and its export wait until the plan fits, then they open (month_locked until then). A notice goes to the company and its agents at 80 % and at 100 % of the limit, and when a month locks. A month keeps the limits of the highest plan it ran under, so a downgrade later does not lock a month that was paid for. billing.get shows the usage, the allowance and whether the one-time 20 % is used.
A paid plan that ends falls back to Free at the next month change, so the month it ran into still gets its voucher.