Skip to main content
Ordered roughly by how often each one happens. Every entry starts with the check that resolves it most of the time.

Messages

Check the inbox is receiving at all, not just this conversation. Send yourself a test message on the same channel. If the test arrives, the problem is with that one contact; if it does not, the channel is down for everyone and that is a different fix.If the test does not arrive:
  • Web chat — the script tag may not be on the page the customer was on. Check the page source.
  • Email — check the forwarding address is still forwarding. A rule change on your mail provider breaks it silently. See Email.
  • WhatsApp, Instagram, Messenger — the provider’s webhook subscription may have lapsed. Reconnect the channel from its settings page.
  • Apple Messages for Business — inbound messages stop if the brand’s registration status changed. Check the registration state before looking anywhere else.
If the test does arrive, the customer probably messaged a different number, address or entry point than you think. Ask them to screenshot what they sent it to.
Open the message and check its status. Sent and delivered are different states, and a failed send carries its provider error.Common causes by channel:
Read the validation error — it names the field. Apple’s schemas reject unknown fields at every level, so a message fails in the composer rather than reaching a customer malformed. That is working as intended.The two that come up most:
  • A form with a single field. Not allowed — use a plain text question.
  • An image URL that is not reachable. Every image slot must be a URL Apple can fetch. A URL behind a login, or on a host that blocks unknown user agents, fails.

Web chat

In order of likelihood:
  1. The snippet is in <head> and your app hydrates late. Load it after mount instead.
  2. You copied the snippet from documentation rather than from your inbox settings page. The real one carries your own website token and base URL. See Web chat.
  3. A content security policy is blocking it. Check the browser console for a CSP violation naming the SDK URL.
  4. An ad blocker. Test in a clean profile before assuming anything else.
The snippet is running more than once. In a single-page app, load it once at app boot — the widget survives client-side route changes on its own, and re-running it per route produces a second instance.
Identity verification is probably off. Without it, every visitor is an anonymous stranger and the agent correctly refuses to discuss an account it cannot prove belongs to them.Turn on HMAC identity verification and the conversation binds to a real contact. See Identity verification.

The dashboard

Wait about ten seconds. If the messages have not loaded by then, a Retry appears — use it rather than reloading the page. Retry re-fetches that thread specifically.If retry does not fix it, reload once. A reload after a deploy picks up the new build; Tied handles that automatically the first time and offers a manual Refresh if it happens again.
Take the update. When a new version is available, an update action appears in the sidebar footer, above your profile menu. Tied never reloads underneath you — it waits for you to click, so you are never interrupted mid-conversation — which means an old tab can stay on an old build for a long time.
Three possibilities, in order:
  1. Your role does not include it. Most settings are administrator-only. See Roles and permissions.
  2. It is per-inbox, and you are looking at account settings — or the reverse. Business hours, assignment and greetings are inbox settings.
  3. It is not on your plan. See Plans.

The AI agent

Check which ground is firing — the reason is recorded on every handoff, and the fix is different for each. See Guardrails and safety.If it is no knowledge or low confidence, check the retrieval numbers before rewriting content — “didn’t know” and “couldn’t find what it knew” look identical in a transcript and have opposite fixes. See Knowledge and retrieval.
Add or widen a refusal category for the shape of question involved, then re-run evaluation.Write the category as a test on what a correct answer would require — this customer’s own record, a recommendation, a prediction — rather than on the topic. Topic-named categories match far more widely than their description implies.Then add the specific case to a golden set from the quality queue, so it becomes a permanent regression test rather than a one-off fix. See Evaluation.
Check the integration is connected and has the scope the action needs. The agent only ever sees tools for integrations you have connected and are entitled to — a tool it cannot see is one it cannot call, by design.A read-only connection produces exactly this symptom: the agent can answer questions about your data but cannot change anything. See Actions and tools.
This is usually correct, not a bug. Silence never bills. A resolution needs a positive signal: the customer confirming, a system verifying the outcome, or silence plus at least one corroborator.The most common unbilled outcome is silence with no corroborator — a good answer, no reply, and no read receipt, opened link or system change to corroborate it. Ambiguity always resolves to unbilled.A human sending a message in the thread also makes the resolution unbillable entirely, however much work the agent did first. See What counts as a resolution.

Billing

Check for non-GSM characters. One curly quote, one emoji, or one em dash forces the whole message into Unicode encoding, which cuts the segment size from 160 characters to 70 — more than doubling the segment count on a long message.This is by a wide margin the most common cause of a surprising SMS bill. See SMS and MMS.
Open its receipt. Every billed resolution has one, showing the conversation it came from, which signal tier justified billing it, the class and the specific trail entry that fixed the price, and the itemised model cost.If it still looks wrong, dispute it from the receipt — one click, not a support queue. See Operations.
That is deliberate. The two numbers on your invoice are independent. The orchestration fee is zero because nothing was resolved. The model cost is not zero because tokens were genuinely consumed, and zeroing a real provider charge would make the receipt easier to read and less true.On your own provider key, model cost never appears on a Tied invoice at all. See Model costs and BYOK.

API and webhooks

  1. Check the endpoint returns 2xx quickly. A slow or erroring endpoint gets retried and then backed off.
  2. Check you subscribed to the event you think you did. See Webhook events.
  3. Test the endpoint directly before assuming the problem is upstream. See Testing webhooks.
Verify against the raw request body, before any JSON parsing or re-serialisation. Parsing and re-encoding changes whitespace and key order, and the signature is over the exact bytes sent. This is the cause almost every time. See Signatures.
Check, in order: the token is being sent in the header the endpoint expects, the token has not been rotated, and the account id in the path matches the one the token belongs to. See Authentication.

Still stuck

Known limitations

Some behaviour is a platform constraint rather than a bug. Check here before spending an hour on it.

Core concepts

A lot of confusion is a channel-versus-inbox or conversation-versus-resolution mix-up.