Skip to content
ScrapeField

Error codes

Every code the API can return, when it happens and what to do about it. Branch on the code — it is stable. The message is written for a human and may change.

No error costs credits. Most are found before anything is charged. The ones marked refunded can happen after a call has started; the credits come back at once. A call’s refund is a row in your usage ledger.

Error codes
CodeHTTPWhenWhat to do
key_in_url
invalid_request
400The key was sent as `?api_key=` in the URL.Send it in the `Authorization: Bearer …` header. A key that has been in URLs may be in someone's logs: consider revoking it.
missing_api_key
authentication_error
401No Authorization header was sent.Send `Authorization: Bearer sf_live_…`. Create a key in the dashboard, or, from an agent, ask for one for your person with `POST /v1/signup`.
invalid_api_key
authentication_error
401The key is unknown or was revoked.Check the key, or create a new one. Revoked keys never come back.
insufficient_credits
permission_error
403The balance is less than the call costs.Buy a pack on the dashboard’s billing page; calls work again at once. Nothing was charged for this call.
account_suspended
permission_error
403The account is suspended: for a breach of the acceptable use policy, or while a payment is disputed. Every key of the account is paused, and no new key can be made.Reply to the email that told you why, or write to support. The keys work again as soon as the account is resumed. Nothing is charged while it is suspended.
scope_not_allowed
permission_error
403The key is scoped to some surfaces and this is not one of them.Use a key with the surface in its scopes, or widen the key.
fresh_not_available
permission_error
403`fresh=true` on an account that has never bought credits, or in the demo.Trial credits are cache-first. Buy any amount of credits to bypass the cache.
disposable_email
invalid_request
400Signup with a throwaway mailbox provider.Use an address you will still have next month.
signup_rate_limit
permission_error
403Too many signups from one address in an hour.Email us if you genuinely need several keys — we will just make them.
400A sign-in or confirmation link that is not ours.Check you copied the whole link — mail apps sometimes break long links across lines — or ask for a new one from the sign-in page.
400A sign-in or confirmation link opened a second time.Links work once. Ask for a new one from the sign-in page.
400A sign-in link older than 15 minutes, or a confirmation link older than 24 hours.Ask for a new one from the sign-in page; it goes to the same address.
email_rate_limit
permission_error
4035 emails to one inbox in an hour from one network, or 10 from all networks together. A request we refuse sends nothing and is not counted. A browser that has signed in to that address before is not held to this.Check that inbox and its spam folder for the ones already sent, or try again in an hour, or from the browser you last signed in with.
sign_in_rate_limit
permission_error
40310 sign-in emails from one address in an hour.Check your inbox and spam folder for the ones already sent — each works for 15 minutes.
account_closed
permission_error
403Signing in to, or signing up with, an account that has been closed.Email us if you want it back. A closed account is not reopened by signing up again.
key_limit
permission_error
403The account already has as many active keys as it may: an agent's approved request makes one more.Revoke a key you no longer use on the Keys page, then ask the agent to check again.
unverified_account
permission_error
403Calling the API before confirming your email address.Open the link we emailed. Confirming the address adds the trial credits and signs you in.
unknown_endpoint
not_found
404The path is not one of the documented endpoints.See the endpoint list at /docs. Paths are `/v1/{surface}/{resource}`.
missing_parameter
invalid_request
400A required parameter was not given.The message names it. Every parameter is documented on the endpoint page.
missing_one_of
invalid_request
400An endpoint that accepts either of two identifiers got neither.Give exactly one of the parameters the message names.
invalid_parameter
invalid_requestrefunded
400A parameter was the wrong type, out of range, not in the form it takes (an id, a username, a URL on the platform), over 2,048 characters, not a parameter of the endpoint, or sent with the other one of its pair.The message names the parameter and says what was expected and what arrived.
invalid_json
invalid_request
400A POST body, to `/v1/signup`, is not valid JSON.Send one JSON object, with `Content-Type: application/json`. The message gives the parser’s reason.
invalid_cursor
invalid_requestrefunded
400The cursor was not issued for this query, or its page has expired: pages are kept as long as the answer is cached, hours rather than days.Pass `meta.next_cursor` from the previous page verbatim and soon, or start again from the first page.
profile_not_found
not_foundrefunded
404No account, person or company page exists for that username or URL.Check the username. Usernames are case-insensitive and exclude the leading @.
place_not_found
not_foundrefunded
404No place exists for that id or URL.Place ids come from a search. A place that has closed permanently may stop resolving.
subject_suppressed
not_foundrefunded
404The account or place asked us not to serve it, and we do not.Nothing to fix on your side, and nothing was charged. In a list, rows about them are left out.
signup_not_found
not_found
404No sign-up request has that id.Send the `id` that `POST /v1/signup` returned as `Authorization: Bearer …`, exactly as it was. A request that has expired says `expired`; start a new one.
post_not_found
not_foundrefunded
404No post or video exists at that URL or id.The post may have been deleted or made private.
posting_not_found
not_foundrefunded
404No LinkedIn job posting exists for that id or URL.Job ids come from a search. A posting that was filled or taken down stops resolving.
group_not_found
not_found
404No LinkedIn group exists for that id or URL.Group ids come from `linkedin/groups`. A group that was closed stops resolving.
ad_not_found
not_found
404No ad with that id is in LinkedIn's Ad Library.Ad ids come from `linkedin/ads`. An ad LinkedIn has taken out of its library stops resolving.
community_not_found
not_found
404No X community exists at that URL or id.Check the number in `https://x.com/i/communities/<id>`. A community that was removed stops resolving.
endpoint_busy
rate_limitrefunded
429The call waited in line for a place among this endpoint's calls at once, which all customers share, and its turn did not come within its time. It can happen before your own limit.Retry after the seconds in `Retry-After`. Nothing was charged.
concurrency_limit
rate_limit
429More requests are in flight than the account allows.Retry after the seconds in `Retry-After`. Concurrency is what we limit, not requests per second, and it rises with credits purchased.
method_not_allowed
method_not_allowed
405The path does not take that HTTP method: a read is a GET, and only an agent's sign-up is a POST.Use a method from the `Allow` header, which lists what the path takes.
not_found_limit
rate_limit
4291000 calls in an hour that found nothing, or 50 on an account that has not bought credits. Only "does not exist" answers count, never a failure of ours. They cost nothing, but each one reached the source.Check the names, URLs and ids you send, and retry after the seconds in `Retry-After`. The same call for something that does not exist answers again from the cache for up to 6 hours, free, and does not count.
demo_limit
rate_limit
429About 60 demo calls a minute came from one address.Wait the seconds in `Retry-After`, or add an API key: keyed calls are limited by concurrency, not by rate.
not_available_yet
not_available
501The endpoint, or one of its options, is documented but not live yet.Leave the option out, or wait for the endpoint. Nothing was charged, and its documentation page says so while it lasts.
upstream_unavailable
upstream_errorrefunded
502We could not get the answer from the platform: every source we asked failed, most often within a second or two, or the call ran out of its 25 seconds. The message says which, without the detail.Retry. This call was not charged, and the refund is already in your usage ledger. When the message says the endpoint has no capacity left, retrying will not help until our status page says it is back.
internal_error
internal_errorrefunded
500Something broke on our side.This call was not charged. If it repeats, send us the request_id.