Short link not resolving or LINK_NOT_FOUND
Use this runbook when a short link does not open, or when a landing-page conversion
request returns 404 LINK_NOT_FOUND. Orbit has two related public surfaces:
GET /l/:codelooks up a short code and redirects a visitor to its stored target.POST /public/lp/:code/convertrecords a conversion for the published landing page represented by that code.
Split the symptom first
A. The redirect shows a branded 400 or 404 page
You minted a link, but opening its/l/:code URL returns a 400 or 404 instead
of the target page. Check the exact code and the host in the URL. The redirect
may be using the platform host or your tenant’s branded short-link host.
Browser agents receive a self-contained branded HTML error page. It is noindex,
does not track the request, and does not echo the raw code. That page is expected
for a browser request when the lookup misses or the stored target fails its
safety check. API clients receive the canonical JSON error envelope instead.
B. Conversion returns 404 LINK_NOT_FOUND
Your landing page calls POST /public/lp/:code/convert, but the response has
LINK_NOT_FOUND. This endpoint accepts only a code for a published landing
page. Unknown, expired, and unpublished codes all collapse to this same 404 so
the public endpoint does not reveal page state.
LINK_NOT_FOUND is not a signal to mint a replacement during the conversion
request. Confirm the page’s publication state with your authenticated tenant
controls, then update the page or re-mint the public link before trying the
conversion again.
Causes and fixes
The
LINK_NOT_FOUND row is also listed in the Error Code Reference.
Decision checklist
- Preserve the exact code. Copy it from the returned
short_url; do not normalize, decode, truncate, or substitute characters. Codes are case-sensitive. - Identify the endpoint. A browser failure on
GET /l/:codeis a redirect lookup or target-validation issue.POST /public/lp/:code/convertrequires a published landing page and returns JSON. - Verify the record in your tenant. Use the authenticated links API or
dashboard to confirm that the code exists and, for a conversion, that the
page is
PUBLISHED. These are tenant-owned records and controls; do not infer state from a public 404. - Check expiry and publication. Re-mint an expired short link. Publish a draft landing page and use the new/current published code. An archived or unpublished page is not a conversion target.
- Check the target scheme. For a redirect, the stored target must still be
http://orhttps://. A non-HTTP(S) target is refused even if the code row exists. - Separate validation from throttling. Fix a
422 VALIDATION_ERRORbefore another mint. For a rate limit, wait for the documented window; only that transient bucket is retryable. - Retry only after state changes. Once the code is confirmed published and unexpired, retry the conversion once. A repeated 404 with no state change is the same deterministic lookup miss.
A browser’s branded error page is intentionally self-contained: it is
noindex,
contains no raw-code echo, and makes no tracking request. API clients should
continue to parse the JSON envelope rather than scrape browser HTML.What not to do
- Do not retry a 400/404 to get a different outcome. Unknown, expired, and unpublished codes are deterministic lookup misses.
- Do not probe random code prefixes or nearby codes. A short code is an identifier, not a search space. Random probing adds load, can trigger the per-read limit, and cannot repair the original link.
- Do not convert a draft or archived page. Publish it first and use the published short code returned by the publish operation.
- Do not keep an expired URL in campaigns, messages, QR codes, or ads. Re-mint, replace the shared URL, and then verify the new code once.
- Do not bypass the URL scheme check. Never use a
javascript:,data:, or other non-HTTP(S) target to make a redirect resolve. - Do not treat the browser HTML as an API contract. API callers must use
the JSON response and its
error.code.
Related references
- Short links with click tracking — minting, branded domains, redirect behaviour, rate limits, and click analytics.
- Short links cookbook — runnable minting and landing-page examples.
- Short links concept — code, publication lifecycle, and tenant ownership model.
- Links API reference — request and response schemas.
- Error Code Reference — the
LINK_NOT_FOUNDrow and the surrounding 404 taxonomy. - Troubleshooting hub — the runbook index.
When to contact support
Contact support if the authenticated record isPUBLISHED, not expired, and
its target is a valid HTTP(S) URL, but the public redirect or conversion still
returns the same error after one state-confirming retry. Include the endpoint,
the tenant-visible link or page id, the response’s meta.request_id, and the
approximate time of the request. Do not include secret API keys or probe results
for unrelated codes.