---
title: "Error codes and what to do about each one"
url: "https://conecto.chat/docs/errors"
markdown: "https://conecto.chat/docs/errors.md"
description: "Every error code Conecto's API and tools answer, grouped by HTTP status, with what each means and what to do next. A refused call costs nothing."
section: "Reference"
published: 2026-10-19
updated: 2026-10-19
---

# Errors

A refused call costs nothing, and its reply says what went wrong in words an agent can act on. This page lists every code by its HTTP status.

## The shape of a refusal

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "status": "failed",
  "error": "insufficient_balance",
  "message": "This call costs up to $0.10 and the balance is $0.04. Top up to continue; nothing was charged.",
  "cost_usd": "$0.00",
  "details": {
    "price_usd": "$0.10",
    "balance_usd": "$0.04",
    "top_up": "POST /v1/topups {\"amount_usd\": 20} returns a Stripe checkout link; pay it once and turn on auto-reload so the balance never runs dry.",
    "minimum_usd": 5,
    "fee": "7% + $0.35 per top-up, Stripe's fees passed on",
    "first_topup_offer": "Your first top-up is doubled, up to $20 extra."
  }
}
```

- `error` is one of the codes below.
- `message` says what went wrong and what to do, written for an agent to act on.
- `cost_usd` is `$0.00`. A refused call costs nothing.
- `details`, when there is something to add, holds what is needed to fix it, like the amount to top up.
- `call_id` and `status: "failed"` come when the call itself was logged and failed. A refusal before any call, like a wrong key, has neither. An idempotency conflict names the earlier call's `call_id`.

Over MCP the same body comes back as the tool's result, with `isError: true`. A background call that fails shows its code in `error` when you poll it.

Each tool's page in the [tools directory](https://conecto.chat/tools.md) lists the codes that tool can give, with when it gives each one.

## 400 Bad request

| Code | What it means | What to do |
| --- | --- | --- |
| `already_pdf` | The file is a PDF already. | Use it as it is. |
| `columns_needed` | The statement's date and amount columns could not be found. | Name them with columns. |
| `date_format_needed` | The statement's dates are in no known format, or could be read two ways. | Pass `date_format`. |
| `greeting_needs_ai_disclosure` | The phone greeting does not tell callers they reached an automated line or an AI. | Say so in the greeting, like "This is our automated line". |
| `invalid_brief` | The `brief_token` is not a ready brief `prospects_prepare` made for this business, or it is over a day old. | Prepare it again with `prospects_prepare` and use the `brief_token` it returns. |
| `invalid_cursor` | The `next_cursor` is not one this import returned. | Pass back exactly the last `next_cursor`, or leave it out to start again. |
| `invalid_input` | The arguments do not fit the tool: a field is missing, has the wrong type or is out of range, or a value is not one the tool takes. | Fix what the message names. details.`input_schema` has the tool's full schema. |
| `invalid_statement` | The bank statement could not be read: an amount, a date or the file format. | Fix what the message names, like passing decimal: "," for comma decimals. |
| `invalid_url` | The address is not a public https:// link. | Send a public link. |
| `login_failed` | The business's own email service refused the login. | Check the SMTP login and password (often an SMTP key, not the account password) and connect it again. |
| `low_contrast` | The two colours are too close for phones to read. | Use a darker dark or a lighter light. |
| `map_place` | The company id starts with op: a business a longlist found on the map (Overture's places), which has no register record to read. | Find its register record with `companies_search` by name and country, then call again with that id. |
| `no_working_days` | The leave has no working days for the person. | Pick other dates. |
| `not_a_host` | The host named is not one of the meeting type's round-robin hosts, or the type has none. | Leave host out, or name one from the type's hosts in `calendar_list_meeting_types`. |
| `not_a_quote` | The id is an invoice, not a quote. | Use the invoice tools for it. |
| `not_an_invoice` | The id is a quote or a credit note. Payments, reminders and credit notes are for invoices. | Turn a quote into an invoice with `invoices_convert_quote`. |
| `not_audio` | The file is not audio or video. | Upload the recording first. |
| `not_image` | The file is not an image that can be read. | Upload it again as PNG or JPEG. |
| `not_pdf` | The file is not a PDF. | Make one with `documents_convert_to_pdf` first. |
| `not_schedulable` | The tool cannot run on its own: it handles secrets, schedules things itself, buys from a quote that expires, or starts a monthly rental. | Call that tool yourself when it is needed. |
| `not_supported` | The social network connects in a way the tools do not offer. | Pick another network from `social_networks`. |
| `refused` | The posting service refused the request. The message gives its reason. | Fix what the reason names, then call again. |
| `stripe_key_refused` | The Stripe key cannot do what invoice payments need. | Make a key with the permissions the message lists. |
| `timezone_required` | The first setup needs a time zone. | Pass timezone, like "Europe/Berlin". |
| `too_long` | There is too much data for one QR code. | Shorten it. |
| `too_many_pages` | The PDF has more pages than a signature request takes. | Send a shorter PDF. |
| `unbalanced` | Debits and credits of the entry differ. | Make the lines balance. |
| `unsupported_type` | The file is not a kind the tool takes. | Use a file of a kind the message lists. |
| `video_too_long` | The video is longer than the social network lets the account post. | Ask the owner for a shorter video. The message gives the limit. |

## 401 Unauthorized

| Code | What it means | What to do |
| --- | --- | --- |
| `key_expired` | The key has expired. | Make a new key (`POST /v1/keys`) with a key that may, or ask the owner. |
| `unauthorized` | The call has no key, or the key is wrong or revoked. | Send "Authorization: Bearer <key>". No key yet? Sign up with `POST /v1/signup`. |

## 402 Payment required

| Code | What it means | What to do |
| --- | --- | --- |
| `insufficient_balance` | The balance cannot cover the most this call can cost, or the next reads or downloads once the month's free ones are used (a download link answers it to whoever opens it). | Top up with `POST /v1/topups` (details has the amount and the first top-up bonus), then call again. A download link works again once the balance can pay. |
| `payment_required` | The tool needs a paid account, and the balance is still free credit. | Top up once with `POST /v1/topups` (from $5), then call again. |
| `payment_required_for_outbound` | Free credit cannot email, call or send documents to people outside the business. | Top up once with `POST /v1/topups` (from $5). After that it works. |
| `purchased_credit_required` | AI visibility and the phone (calls, minutes and a number's rent) run only on credit bought with a top-up, never on free, beta or bonus credit, and the credit bought left cannot cover the most this call can cost. | Top up with `POST /v1/topups`, then call again. `account_balance` shows how much of the balance was bought (`bought_credit_usd`) and how much is free and bonus credit, which every other tool spends first. |

## 403 Forbidden

| Code | What it means | What to do |
| --- | --- | --- |
| `account_paused` | The owner paused every bot of the account. | Ask the owner to start the account again on their account page. |
| `blocked_by_robots` | The site's robots.txt asks bots not to read the page. | Find the facts elsewhere with `web_search`. |
| `forbidden` | The secret is limited to other bots of the business. | Ask the owner, or the bot that saved it, to let this bot read it. |
| `key_scope` | The key's scope doesn't cover this: another area, a tool it isn't given or is denied, a change by a read-only key, or a setting only a key without limits changes. | Use a key that may, or ask whoever made this key for a wider one. |
| `network_not_allowed` | The key may only be used from the networks it was given. | Call from one of those networks, or use another key. |
| `no_approver` | Nobody but the person asking can approve this call, and nobody approves their own. | Ask the owner to add an approver: a team with managers, an admin, or a rule naming someone else. |
| `not_allowed` | The connected system's call is outside the calls it allows, its address is not a public https host, or the mailbox is not one the agent may act as. | Call inside its allowed calls (`connect_list` shows them), use a listed mailbox, or ask the owner to widen them. |
| `not_yours` | A key revokes itself and the keys made from it. The first key of a line revokes any key of its line. | Revoke it with the key that made it, or ask the owner (their account page revokes any key). |
| `other_team` | The record belongs to another team. Every team reads it. Its own team changes it. | Ask that team (or a key of the company-wide team) to change it, or the owner to open the area to everyone. |
| `owner_required` | Only the owner may raise a spending limit or give a new key more daily budget than the key making it. The account page's own tools, and asking Conecto for a higher limit, take the owner, an admin or a key of the company-wide team without limits. | Ask the owner. `account_owner_link` makes them a sign-in link to their account page. Lowering works at any time. |
| `scope_too_wide` | A new key can't be wider than the key making it: more areas or tools, other networks, or a later expiry. | Ask for a key within this key's scope, or make it with a key that has more. |
| `self_only` | A person's own assistant works in HR for that person only, since none of their teams works in HR. | Ask about your own record, or ask HR. |
| `sending_paused` | Email from the business is paused after bounces, complaints or emails refused as cold outreach. | Tell the owner. Conecto reviews the pause before sending resumes. |
| `sending_unavailable` | The business cannot send newsletters right now. The message says why. | Tell the owner. Nothing was charged. |
| `team_paused` | The key's team is paused, so its keys can't run tools. | Ask the owner to start the team again on their account page. |

## 404 Not found

| Code | What it means | What to do |
| --- | --- | --- |
| `link_expired` | The download link expired, or its file was deleted. | Get a fresh link with `files_get`. |
| `no_legal_notice` | The website has no legal notice that could be read: no page named Impressum, Imprint or Legal notice, and none at the usual addresses. Nothing was charged. | Give the notice's own address if you know it, or find the company with `companies_search` by name. |
| `no_numbers` | The carrier has no numbers of that kind in that country right now. Nothing was charged. | Try another type or area code. |
| `not_found` | The thing named does not exist for this business: a record, a file, a call, a key or a page. | Find it with the area's list or search tool and use the id it returns. The message names what is missing. |
| `not_set_up` | The area is not set up for the business yet: calendar, chat, careers page or the like. | Run the area's setup tool first. The message names it. |
| `unknown_tool` | No tool has that name, or a background call's tool is gone. | Use a name from `GET /v1/tools`. |

## 405 Method not allowed

| Code | What it means | What to do |
| --- | --- | --- |
| `method_not_allowed` | The address does not take that HTTP method. | Use the method the message names: tools take POST, a call's status GET, a key DELETE. |

## 409 Conflict

| Code | What it means | What to do |
| --- | --- | --- |
| `address_taken` | The booking address is another calendar's, was ever another business's, or is kept for Conecto's own pages. | Pick another address, e.g. with the town or the trade added. |
| `ai_review_off` | Applicants are not told yet that AI reviews applications. | Run `hiring_setup_careers` with `ai_review` true first. |
| `alias_taken` | The short link alias is taken. | Pick another alias, or leave it out for a random one. |
| `already_accepted` | The customer accepted the quote already. | Turn it into an invoice with `invoices_convert_quote`. |
| `already_approved` | The leave request was approved already. | To take it back, cancel it. |
| `already_attached` | The file is on the person's record already. | Nothing to do. |
| `already_cancelled` | The purchase order or leave request is cancelled already. | Make a new one. |
| `already_closed` | The purchase order is closed already. | Draft a new order. |
| `already_converted` | The quote became an invoice already. | Work with that invoice. The message gives its `invoice_id`. |
| `already_credited` | An invoice line is credited in full already. | Credit other lines, or an amount. |
| `already_declined` | The quote, or the leave request, was declined already. | Make a new quote, or ask again with `hr_request_leave`. |
| `already_done` | The task is done already. | Nothing to do. |
| `already_hired` | The applicant is in HR already. | Find their record with `hr_list_people`. |
| `already_ignored` | The bank line was ignored. | Unmatch it first. |
| `already_matched` | The bank line, or the entry, is matched already. | Unmatch it first. |
| `already_paid` | The invoice is paid in full. | Nothing is owed. Record a refund if money goes back. |
| `already_ran` | The one-off run ran already. | Set a new one with `schedules_run_later`. |
| `already_read` | The scan was read with OCR already. | Read its text free with `files_read_text`. |
| `already_received` | Everything on the purchase order is received. | Nothing is left to receive. |
| `already_reversed` | The entry is reversed already. | Book a new entry if needed. |
| `already_sent` | Another call sent this a moment ago. | Read it again. It was sent. |
| `already_started` | The person has open tasks from that checklist already. | Finish them, or list them with `hr_tasks`. |
| `already_void` | The invoice or bill is void already. | Nothing to do. |
| `ambiguous` | The name or number fits more than one thing. | Be more exact. The message says how. |
| `amount_mismatch` | The entries, invoices or bills do not add up to the bank line. | Give amounts that add up, or pick other records. |
| `application_limit` | A candidate sent as many applications as the business takes from one person in its time window (`hiring_setup_careers` `application_limit`). | The message says from which day they can apply again. The business can change or lift the limit. |
| `approval_required` | A person must approve this exact call first: an approval rule holds the tool, the key or its team is set to drafts only, or it gives a supplier new bank details. The request went to the approvers, each on a link of their own, and two people approve when the amount is over the rule's second line. Nothing was charged. | Wait for `notify.answered` (or check `notify_get_approval`), then call again with the same arguments and the approval: the X-Conecto-Approval header, or _meta.approvalId over MCP. |
| `archived` | An account, tax, supplier, item, location or leave type named is archived. | Use one that is active, or restore it first. |
| `asset_disposed` | The asset was sold or written off. | Bring it back with `books_dispose_asset` undo first. |
| `before_start` | The date is before the books start. | Use a date on or after the start date (`books_get`). |
| `bill_paid` | The bill is paid, so its due date no longer matters. | Leave the due date. |
| `bill_void` | The bill is void. | Record a new bill if needed. |
| `bot_cannot_post` | The business's own Telegram bot may not post in the chat: not an admin of the channel with the right to post, or not a member of the group who may send messages. | Ask the owner to add the bot with that right, then connect again. |
| `bridge_unavailable` | The connection goes through a bridge that was revoked, or that no longer serves the system. | The owner or an admin makes a new bridge on the account page (Settings, Bridges) and connects the system again. |
| `call_active` | A call on the number is still going on. | Release the number when the call has ended. |
| `campaign_ended` | The outreach campaign was stopped or has finished. It can't change, start or resume. | Save a new campaign with `outreach_save_campaign`. |
| `campaign_running` | The outreach campaign is sending, so it can't change. | Pause it with `outreach_pause`, change it, then resume it with `outreach_resume`. |
| `carrier_refused` | The phone carrier would not sell that number (it may have been taken). Nothing was charged. | Search again with `phone_search_numbers`. |
| `channel_disabled` | The social channel is switched off in the posting service. | Connect it again with `social_connect`. |
| `chat_taken` | The Telegram channel is connected to another Conecto account. | Its owner disconnects it there first. |
| `closed` | The signature request is closed: completed, declined, cancelled or expired. | Send a new request if needed. |
| `code_taken` | Another account in the chart has that code. | Pick another code. |
| `conflict` | What is asked clashes with what is there: a record saved at the same moment, a merged ticket, a page of another kind. | Read the record again and call again. The message says what clashed. |
| `conversation_closed` | The visitor has a newer open conversation. | Reply there. The message gives its id. |
| `conversation_open` | The visitor already has an open conversation. | Use that conversation. |
| `currency_fixed` | The currency stays: entries or orders already use it. | Keep the currency. |
| `currency_mismatch` | Two things in different currencies were matched. | Record the payment with `invoices_record_payment` or `purchasing_pay_bill` instead. |
| `duplicate` | A bill with that reference from that supplier is recorded already. | Use the bill the message names. |
| `duplicate_key` | A key value comes twice, in the rows sent or in the table, so it can't pick out one row. | Send each key once, and merge or delete the table's extra rows first. |
| `email_taken` | Another person has that work email. | Use another email, or update that person. |
| `file_kept` | A bill keeps the PDF it was recorded with: a received invoice is kept as it came. | If it is the wrong file, void the bill and record it again with the right one. |
| `from_assets` | The entry was booked by the asset register: depreciation, or an asset sold or written off. | Undo depreciation with `books_depreciate` `undo_after`, or a sale with `books_dispose_asset` undo. |
| `from_bill` | The entry was posted from a supplier bill. | Void the bill with `purchasing_void_bill` instead. |
| `from_claim` | The entry paid expense claims back, or is an expense claim already paid back, so it stays. | Record money a person returned as a negative expense with `paid_by`. |
| `from_credit` | The entry booked a prepayment or its refund. | Void the prepayment with `invoices_use_credit` or `purchasing_use_credit` (void: true) while none of it is used. |
| `from_invoice` | The entry was posted from an invoice. | Void the invoice with `invoices_void`, or record a refund. |
| `has_balance` | The account still has a balance. | Move it to another account with an entry first. |
| `has_bills` | The purchase order has bills. | Void them with `purchasing_void_bill` first. |
| `has_credit_notes` | The invoice has credit notes, so it cannot be voided. | Credit what is left of it with `invoices_create_credit_note`. |
| `has_deliveries` | The purchase order has deliveries received, so it cannot be cancelled. | Close it instead. What came in stays. |
| `has_depreciation` | The asset's depreciation is booked, so its cost, dates, method and accounts stay and it can't be deleted. | Undo its depreciation with `books_depreciate` `undo_after` and asset first. |
| `has_left` | The person left the business. | Nothing can be planned for them after their end date. |
| `has_payments` | Payments are recorded on the invoice or bill. | Record a refund (a negative payment) first. |
| `has_receipt` | The entry has a receipt already. | Attach the file to another entry, or keep it. |
| `has_role` | The account holds a role the books use. | Give the role to another account first. |
| `has_stock` | The item or location still holds stock. | Move, ship or count it to 0 first. |
| `idempotency_key_reused` | The Idempotency-Key was used before for a different tool or different arguments. | Send a new Idempotency-Key for a new call. Reuse one only to retry the exact same call. |
| `in_progress` | The same work is running right now: a call with this Idempotency-Key, an import, the reading of a scan, or an export of the account. | Wait for it (`account_get_call` shows it), then use its result. |
| `in_use` | The thing is used elsewhere and stays while it is: a file on a record, a tax on an account, a test candidates started. The PDF of a sent invoice, credit note, quote or purchase order always stays. | Take it off there first, as the message says. |
| `inactive` | The meeting type is not taking bookings. | Pick one from `calendar_list_meeting_types`. |
| `invalid_dates` | The due date or valid-until date is before the issue date, or an invoice's issue date is in the future or before the last one numbered in its series. | Change it with `invoices_update`. Without an issue date a document is dated the day it is sent. |
| `invoice_incomplete` | The invoice lacks what the law of the business's country needs on it: an address or VAT ID, the customer's VAT ID for a reverse charge, why a line has no tax. | Add what the message names with `invoices_update` or `invoices_set_profile`, then send again. Nothing was numbered or charged. |
| `is_reversal` | The entry is itself a reversal. | Book the original again instead. |
| `key_taken` | Another project has that key. | Pick another key. |
| `limit_reached` | The business has as many of these as it may: keys, tables, schedules, pages, channels and the like. | Delete or archive one you no longer use. The message gives the limit. A business that needs more asks with `account_request_limit`. |
| `link_used` | The upload link was used already. | Ask for a new one with `files_upload_link`. |
| `manager_cycle` | The manager would end up reporting to the person, directly or through others. | Pick another manager. |
| `manages_others` | The person manages others. | Give them another manager first with `hr_save_people`. |
| `more_than_balance` | The payment is more than what is owed. | Record at most the balance the message gives. |
| `more_than_invoiced` | The credit is more than what is left of the invoice, or of an invoice line, to credit. | Credit at most what the message says is left. |
| `more_than_left` | A credit (a prepayment or an overpayment) has less left than the amount, or nothing. | Use or pay back at most what is left. `invoices_list_credits` or `purchasing_list_credits` shows it. |
| `more_than_ordered` | More would arrive than was ordered. | Receive at most what is left on the line. |
| `more_than_paid` | The refund is more than was paid. | Refund at most what was paid. |
| `name_taken` | Something of that kind has that name already. | Pick another name. |
| `national_system_required` | The business is in a country whose domestic invoices must go through a national system (Italy's SdI, Poland's KSeF, Belgium's Peppol and others), which Conecto doesn't connect to yet. | Send that invoice through the national system. Invoices to customers abroad, quotes and the books still work. |
| `network_off` | The social network is not switched on for Conecto yet. | Pick one that is enabled in `social_networks`. |
| `network_refused` | The social network won't take a post from the account right now: its daily limit, or it stopped the account from posting. | Tell the owner the reason in the message and try again later. |
| `no_account` | A bill line has no expense or asset account to post to. | Give the line an account. |
| `no_books` | The business keeps no books yet. | Set them up with `books_setup`. |
| `no_channels` | The business has no connected social channel yet. | Connect one with `social_connect`. |
| `no_date` | The person has no start or end date, which the checklist counts from. | Set it with `hr_save_people` first. |
| `no_email` | There is no email address to send the document to. | Give one with to, or save it on the customer or supplier. |
| `no_iban` | A SEPA file needs an IBAN for every supplier it pays and for the bank account it pays from. | Add it with `purchasing_save_supplier` (a person approves new bank details) or `books_save_accounts`. |
| `no_items` | The document has no line items. | Add at least one before sending. |
| `no_mailbox` | No mailbox of the outreach campaign can send: none is named, or each one is disconnected, paused or over the business's limit. | Name a mailbox `outreach_mailboxes` shows as ready in `mailbox_ids`, or connect one with `outreach_connect_mailbox`. |
| `no_match` | The bank rule given does not match the bank line. | Pick the rule the line's suggestions name, or book the line to an account. |
| `no_rate` | There is no exchange rate for that currency on that day (for the books, or for an invoice's VAT in the national currency). | Pass the rate yourself (rate, or an invoice's `vat_exchange_rate`). |
| `no_role` | No account has a role the books need. | Give it to one with `books_save_accounts`. |
| `no_sending_service` | The business has not connected its own email service, which its newsletters go out through. | Connect it with `newsletters_connect_service` (its SMTP server, login and from address). |
| `no_subscribers` | Nobody has confirmed a subscription yet. | Invite people with `newsletters_invite` first. |
| `no_support_inbox` | Attachments go out from a support inbox, and the ticket has none. | Connect one with `ticket_connect_inbox`, or pass inbox. |
| `nobody_to_email` | Nobody in the outreach campaign's audience can be emailed: they have no email address, unsubscribed, bounced, said no, replied before or are in another campaign. | Choose another audience with `outreach_save_campaign`. Its reply says who was left out and why. |
| `not_a_channel` | The Telegram code was posted in a group, where any member could have posted it. | Post it in a channel, where only admins post. |
| `not_a_draft` | The document was sent, or is a credit note, so it cannot change. | Correct a sent invoice with `invoices_create_credit_note`, or void a quote and make a new one. |
| `not_accepted` | The quote is not accepted yet. | Let the customer accept it on its page, or record that they accepted. |
| `not_beside` | The tool works in the Beside widget, and this chat runs the classic widget. | Use `chat_reply` for this chat. |
| `not_bookable` | The meeting type is not taking bookings. | Pick one from `calendar_list_meeting_types`. |
| `not_cancellable` | Only a scheduled or sending newsletter issue can be cancelled. | Nothing to cancel. |
| `not_completed` | The test is not completed yet. | Wait until the applicant completes it. |
| `not_connected` | Something the tool needs is not connected yet: the business's Stripe account, a Google or Microsoft calendar, or the company's Microsoft 365 or Google Workspace. | Connect it first. The message names the tool. |
| `not_done` | The task is still open. | Nothing to reopen. |
| `not_draft` | Only a draft can change or be sent, and this is not one. | Make a new draft. |
| `not_enough_days` | The person has fewer days of that leave left than this needs. | Pass `allow_negative`: true to allow it anyway, or ask for fewer days. |
| `not_enough_stock` | A location does not hold enough of the item. | Move or receive stock first, or take less. |
| `not_matched` | The bank line is not matched. | Leave it as it is. |
| `not_movable` | The meeting is not scheduled, or it has started. | Book a new meeting instead. |
| `not_owed` | The invoice or bill isn't owed: a draft, paid or void, so it takes no expected or planned date. | Give the date to an invoice that is sent and not paid, or a bill not paid yet. |
| `not_posted` | The payment was not posted to the books. | Match the bank line another way. |
| `not_posting` | Invoices and bills do not post to the books, so their payments cannot be matched. | Turn `post_invoices` on with `books_setup`. |
| `not_published` | The website is not published. | Publish it first with `website_publish`. |
| `not_refundable` | The top-up can't be refunded: it is more than 24 hours old, part of it was used, it was refunded already, or it was an auto-reload. Nothing was refunded. | Credit doesn't expire, so it stays for later calls. |
| `not_sent` | The quote, invoice or purchase order is still a draft. | Send it first. The message names the tool. |
| `not_set_up` | The page needs something the business has not set up yet, like the website chat. | Set it up first. The message names the tool. |
| `not_started` | The outreach campaign never started, so there is nothing to pause or resume. | Start it with `outreach_start`. |
| `not_tracked` | The leave type is not tracked, so it has no balance. | Nothing to adjust. |
| `not_verified` | The email domain is not proved yet, so nobody can join with it. | Add the TXT record the domain came back with, then verify it. |
| `not_voidable` | A credit note stays once issued. | To charge the customer again, send a new invoice. |
| `not_waiting` | The prospect search is not waiting for an answer: it is running, or it ended. | Read it with `prospects_get`, and answer only while its status is `needs_input`. |
| `not_yet` | Telegram has not seen "/connect <code>" in the channel yet. | Ask the owner to post the code, then call again with code. |
| `nothing_due` | Nothing is owed on the invoice. | No reminder is needed. |
| `nothing_to_bill` | Everything on the purchase order is billed already. | Nothing to do. |
| `nothing_to_credit` | Everything on the invoice is credited already. | To charge the customer again, send a new invoice. |
| `nothing_to_do` | Nobody is waiting to sign right now. | Nothing to send. |
| `nothing_to_read` | Every page of the PDF has text of its own, so OCR has nothing to read. | Read it free with `files_read_text`. |
| `nothing_to_receive` | Nothing is left to receive on the purchase order. | Nothing to do. |
| `nothing_to_repay` | The person's open expense claims come to nothing or less. | Nothing to pay back. `books_list_claims` shows their claims. |
| `number_taken` | The number is in use already: a document number, or a phone number someone else took. | Pick the next free number, or search phone numbers again. |
| `ocr_in_progress` | Another scan of the business is being read. OCR reads one at a time. | Call again once that call is done (`account_get_call` shows it). |
| `order_cancelled` | The purchase order is cancelled. | Draft a new order. |
| `order_closed` | The purchase order is closed. | Draft a new order. |
| `other_customer` | A customer's credit goes only on that customer's invoices. | Use it on one of their invoices. |
| `other_supplier` | A credit with a supplier goes only on that supplier's bills. | Use it on one of their bills. |
| `outside_employment` | The dates fall outside the person's employment. | Pick dates while they work for the business. |
| `overlaps` | The person has leave on those days already. | Pick other dates, or cancel the other request. |
| `period_locked` | The date falls in a locked period of the books. | Use a later date, or unlock the period with `books_lock`. |
| `post_closed` | The post waiting for its owner was answered already, or its time to be answered ran out. | Read how it went with `social_post_check`, and post again if it is still wanted. |
| `price_changed` | The website's rent ended a moment ago, so publishing starts a new month. Nothing was charged. | Publish again. |
| `price_too_high` | The number costs more than bots can rent today. Nothing was charged. | Pick another number. |
| `profile_incomplete` | The business has no name or country for documents yet. | Set them with `invoices_set_profile` `legal_name` and country. |
| `quote_declined` | The customer declined the quote. | Make a new quote or invoice. |
| `quote_expired` | The number's price quote expired or belongs to another account. | Search again with `phone_search_numbers`. |
| `quote_void` | The quote is void. | Make a new quote or invoice. |
| `rate_fixed` | The tax is in use, so its rate stays. | Add a new tax for the new rate. |
| `reached_customer` | The invoice may be in the customer's hands (emailed, opened, or its PDF downloaded), so it is corrected with a document they get, not voided. | Cancel it with `invoices_create_credit_note` for all of it. |
| `rent_lapsed` | The monthly rent lapsed while it was paused. | Remove it and add it again. |
| `request_pending` | A request for a higher limit of that kind is waiting for Conecto's answer. | Wait for the `account.limit_request_answered` event, or withdraw the request on the account page to ask for another amount. |
| `reversed` | The entry is reversed, so nothing is left to match. | Match another entry. |
| `role_needed` | The account holds a role the books need. | Give that role to another account first. |
| `rule_broken` | A bank rule books to an account that was archived or is gone. | Change the rule with `books_save_bank_rule`. |
| `scope_too_wide` | The areas asked for reach past the team's: a join code or the areas people join in. | Pick areas inside the team's, or leave them out for the team's own. |
| `sku_taken` | Another item has that SKU. | Pick another SKU. |
| `slug_taken` | A meeting type or routing form on that calendar already has that address. | Pick another slug. `calendar_list_meeting_types` and `calendar_list_routing_forms` show the ones in use. |
| `stage_in_use` | Applicants are still in a stage that would go. | Move them first. |
| `start_fixed` | Entries are booked, so the books' start date stays. | Keep the start date. |
| `storage_full` | The file store has no room for the file. | Delete files with `files_delete`, or add room with `files_add_storage`. |
| `storage_in_use` | The files would no longer fit in less storage. | Delete files with `files_delete` first. |
| `time_taken` | The time is not free: taken, outside the hours, too soon or too far ahead. | Pick one of the free times `calendar_find_times` gives. |
| `type_fixed` | The account or field is in use, so its type stays. | Make a new one instead. |
| `vat_id_invalid` | VIES, the EU's VAT ID check, says the customer's VAT ID is not valid, so a reverse-charge or intra-Community invoice can't go out. | Check the number with the customer and fix customer.`tax_id` with `invoices_update`. |
| `void` | The invoice or bill is void. | Make a new one if needed. |
| `wrong_account` | Payments of that kind do not land on the bank line's account. | Map a payment method to it with `books_setup` `payment_accounts`. |
| `year_closed` | The date falls in a fiscal year closed for good with `books_close_year`. | Book it, or the correction, in the open year. |

## 410 Gone

| Code | What it means | What to do |
| --- | --- | --- |
| `gone` | The original of a received email is no longer kept (30 days) or could not be read. | Ask the sender for its files again. |
| `link_expired` | The upload link expired. | Ask for a new one with `files_upload_link`. |

## 413 Too large

| Code | What it means | What to do |
| --- | --- | --- |
| `too_large` | The file, page or upload is over its size limit. | Send a smaller file, or fewer at once. The message gives the limit. |
| `too_many_lines` | The statement has more lines than `max_lines`. | Pass the `max_lines` the message names, up to 5,000 a call. |
| `too_many_pages` | The scan has more pages to read than `max_pages`. | Pass the `max_pages` the message names. |
| `too_many_rows` | The CSV has more rows than one call imports. | Pass a higher `max_rows`, or split the file. |

## 422 Could not be done

| Code | What it means | What to do |
| --- | --- | --- |
| `cold_email` | The email looks like cold outreach, a pitch or a request to people who never wrote to the business, so it wasn't sent. The third refused within 7 days pauses the account's email. | Email only people who wrote first or asked to hear from the business. Prospecting goes from the business's own mailbox. |
| `conversion_failed` | The content or file could not be made into a PDF. | Check the HTML, Markdown or file, then try again. |
| `crashed` | Reading the file needed more memory or time than a file may use. | Split the file, or send a smaller one. |
| `credentials_refused` | The other service refused the token or login, or the account name does not exist there. | Check the credentials with the owner. The message says where to find them. |
| `deck_error` | The deck could not be made: the template isn't a PowerPoint file that opens, or a slide could not be drawn (the message names it). | Use a .pptx or .potx template, or change the slide the message names. |
| `deck_too_slow` | Making the deck took over a minute. | Send fewer slides at a time, or use a smaller template and smaller images. |
| `empty` | The page has no readable text. It may need JavaScript to show anything. | Find the facts elsewhere with `web_search`. |
| `fetch_failed` | The link could not be fetched, redirected too often, or answered with an error. | Make sure the link opens without signing in. |
| `found_by_lookup` | A Conecto inbox never writes first to an address found or checked with Conecto's lookups. | Write from the business's own mailbox (`google_mail_send` or `m365_mail_send`). Answering someone who wrote first is fine. |
| `invalid_pdf` | The PDF could not be read: damaged, or built to waste time. | Ask for another copy. |
| `login_failed` | The social network refused the login. | Check the username and app password with the owner. |
| `not_a_page` | The address is a file, not a page. | Keep it with `files_upload` and its url. |
| `ocr_failed` | OCR could not read the scan. | Try a sharper scan. |
| `pdf_locked` | The PDF is password-protected. | Ask for a copy without a password. |
| `refused` | The other service refused: a site would not show the page to a bot, the posting service reported a conflict, or the business's email service will not take mail for an address. | Read the reason in the message. Find the facts elsewhere, read the post again, or use another address. |
| `suppressed` | An address bounced, complained or unsubscribed before. | Leave those addresses out. The message lists them. |
| `template_error` | The Word template has a broken placeholder, or the data does not fit it. | Fix the place the message names. |
| `template_too_slow` | Filling the template took too long. | Simplify its loops. |
| `timeout` | Reading the PDF or scan took too long. Nothing was charged. | Read fewer pages at a time, or send a smaller file. |
| `too_many` | The ticket would hold more tags or custom fields than it may. | Remove some first. |
| `tool_error` | The tool could not do what was asked. The message says why. | Do what the message says, then call again. |
| `unmapped_columns` | No column of the CSV looks like an email, a name or a phone (for companies: a name, domain or website). | Name the columns like Email, Name, Company and send it again. |
| `unreadable` | The speech service could not read the file. | Send a common audio or video format. |
| `writing_check` | An outreach email does not pass Conecto's writing check: a dash, a stock opener or closer, a contrast or slogan, hype, too many words, links or asks, "Re:" on a first email, or a placeholder some people have no value for. | Make each fix the message names with `outreach_save_campaign`, look again with `outreach_preview`, then start it. |

## 429 Too many requests

| Code | What it means | What to do |
| --- | --- | --- |
| `daily_budget_reached` | The key reached its daily budget. Keys made from one key share that key's budget. | Wait until midnight UTC, or lower the cost of the call. Only the owner raises the budget. |
| `daily_email_limit` | The business emailed as many quotes, invoices or purchase orders in 24 hours as it may. | Send the rest tomorrow, or download the PDF and send it yourself. A business that needs more asks with `account_request_limit`. |
| `monthly_ceiling_reached` | The business reached its monthly spending ceiling. | Wait until the month turns, or ask the owner to raise the ceiling on their account page. |
| `new_recipient_limit` | The business emailed as many new addresses today as it may. | Send to these people tomorrow. Replies and people who wrote first are not limited. A business that needs more asks with `account_request_limit`. |
| `rate_limited` | Too many calls in a short time: from this key or account, or to a service the tool uses (search, social posting, a site's analytics events), or more than three exports of the account in a day. | Wait a few seconds (a minute for a service) and call again. A business that needs more calls a minute asks with `account_request_limit`. |
| `team_budget_reached` | The key's team spent its budget for this period, and the budget is hard. | Wait for the next period (counted in the account's time zone. A project budget doesn't start again), or ask the owner to raise the budget or make it soft. |
| `too_many_emails` | The document was emailed as often in 24 hours as one document may be. | Try again tomorrow. |
| `too_soon` | A reminder about it went out in the last 24 hours. | Remind again after the time the message gives. |

## 500 Server error

| Code | What it means | What to do |
| --- | --- | --- |
| `internal_error` | Something failed on Conecto's side. Nothing was charged. | Call again in a moment, with the same Idempotency-Key if you sent one. |
| `interrupted` | A call stopped before it finished (shown on the call when you poll it). Nothing was charged. | Run the call again. |
| `secret_unreadable` | A background call's secret arguments could not be read back. Nothing was charged. | Call the tool again. |

## 502 Bad gateway

| Code | What it means | What to do |
| --- | --- | --- |
| `carrier_error` | The phone carrier answered with something else than was asked. Nothing was charged. | Search again with `phone_search_numbers`. |
| `check_failed` | Asking the AI assistants failed. Nothing was charged. | Run the check again later. |
| `delivery_failed` | The notification reached no channel, or a channel's test message did not arrive. Nothing was charged. | Check the channel's webhook or token, or add the channel again. |
| `directory_rejected` | The directory refused: the credentials, or the permissions given to them, are not enough for that. | Ask the directory's admin to grant what the message names, then try again. |
| `email_failed` | The email with the document could not be sent. The document stays as it was and nothing was charged. | Try again in a moment. |
| `fetch_failed` | The link did not answer. | Check the link and try again. |
| `refund_refused` | Stripe refused the refund, for instance because the way it was paid can't be refunded. Nothing was refunded. | The payer can ask Link's support, which can refund a payment within 60 days. |
| `send_failed` | The email service did not accept the email. | Call again in a moment. The message says what was saved. |
| `service_refused` | The business's own email service turned the email down, often a from address it does not allow. | Allow the from address in the service, or connect it with one it allows. |
| `service_unreachable` | The business's own email service could not be reached, or the connection dropped. | Check the SMTP server and port (587 or 465), then try again. |
| `stripe_error` | Stripe refused or could not do what was asked (an invoice's payment page, its webhook). | Try again. The message gives Stripe's reason. |
| `vendor_rejected` | The company's Microsoft 365 or Google Workspace refused: its app lacks a permission or the admin's consent, or it said no to the request. | Ask the admin to grant what the message names, then try again. |
| `vendor_unavailable` | The other service an import reads from did not answer. Nothing was charged. | Try again in a few minutes, with the same `next_cursor` if you passed one. |

## 503 Unavailable

| Code | What it means | What to do |
| --- | --- | --- |
| `bridge_offline` | The company's bridge, the program inside its network that reaches systems behind its firewall, has not checked in for over 30 seconds. Nothing was charged. | Ask the company's IT to start the bridge, then call again. |
| `busy` | The workers that read files or run code are busy with other calls. Nothing was charged. | Try again in a minute. |
| `calendar_unavailable` | The business's connected calendar could not be checked, so nothing can be booked. | Try again in a few minutes. |
| `carrier_refused` | The phone carrier could not complete the order just now. Nothing was charged. | Search again with `phone_search_numbers` and try another number. |
| `carrier_unavailable` | The phone carrier could not be reached. | Try again in a minute. The message says what is kept. |
| `check_unavailable` | Every new email is checked for cold outreach before it goes, and the check couldn't run just now. Nothing was sent or charged. | Try again in a minute. |
| `directory_unavailable` | The company's directory (Entra ID or Okta) or its sign-in could not be reached. | Try again in a minute. Nothing changed. |
| `not_switched_on` | This kind of tool (social posting, running code) is not switched on yet. Nothing was charged. | Try again later. |
| `phone_unavailable` | The phone service is not available right now. Nothing was charged. | Try again later. |
| `rates_loading` | The day's exchange rates are still loading. | Try again in a few minutes, or pass the rate yourself. |
| `sandbox_unavailable` | The code sandbox is not available or did not answer. Nothing was charged. | Try again later. |
| `search_unavailable` | The search service is not available or did not answer. Nothing was charged. | Try again later. |
| `sending_unavailable` | Email to outsiders is not possible yet while the sending account is in review, or the email service turned the emails away. | Send to the owner's address for now, or try again later. |
| `service_busy` | The business's own email service asked to slow down. | Try again in a few minutes. |
| `social_unavailable` | The social posting service or Telegram did not answer, or the business's social workspace could not be opened. Nothing was charged. | Call again in a minute. When the message says so, tell Conecto's support. |
| `unavailable` | The tool, or a service it needs, is not available right now (or not switched on yet). Nothing was charged. | Try again later. |

## 504 Timed out

| Code | What it means | What to do |
| --- | --- | --- |
| `timeout` | The site took too long to send the page. | Try again later. |

## More in the docs

- Previous: [REST API](https://conecto.chat/docs/api.md)
- Next: [Event kinds](https://conecto.chat/docs/event-kinds.md)
- Every page in one file: https://conecto.chat/docs/all.md
- Every page's title and address: https://conecto.chat/docs/index.json
