SurSolver
Docs menu

Docs / Guides

Authentication

How clientKey authenticates every solver call, how API keys are created and rotated in the dashboard, and what each authentication failure code means.

The credential

Every solver call carries the raw API key in the JSON body:

snippet.json
{"clientKey": "ssk_live_…"}

There is no auth header on /createTask, /getTaskResult and /getBalance. The key identifies the paying account: the charge lands on the balance of the key’s owner, and the owner’s subscription packages are used before that balance.

API keys

Keys are created, rotated and revoked in the dashboard (API keys). An account holds one prepaid key at a time:

  • Create a key when you have none; the value is shown when it is created. A second create is refused while a prepaid key is active.
  • Rotate replaces the stored value; the previous value stops working at once. This is how you get a fresh credential.
  • Revoke disables the key immediately and frees the slot for a new one.

Pay-as-you-go keys are the exception: support grants them, they are not created in the dashboard.

A key is a secret: keep it server-side and out of browsers, mobile bundles and public repositories. Keys must not be shared or resold, and the account owner is responsible for everything done with them.

What a rejected key looks like

Both cases answer HTTP 200 with errorId: 1:

errorCodeCause
ERROR_WRONG_CLIENT_KEYclientKey is missing, empty or not a string.
ERROR_KEY_DOES_NOT_EXISTThe key does not match an active key: wrong value, revoked, suspended or expired.

The messages deliberately do not say whether a key ever existed. An unknown key and another account’s taskId look identical for the same reason — see Errors.

Other surfaces

  • The dashboard and account pages authenticate with a session (Authorization: Bearer …) from sign-in. That is a browser surface, not part of the solver API.
  • GET /v1/services is the public rate sheet (price, status and average solve time per service) and needs no key at all.