GET https://api.linkskipper.app/v1/jobs/{job_id} · Any valid API key.POST /v1/resolve returns 202, it gives you a job_id. Poll this
endpoint to track the resolve until it finishes. The job belongs to the API key that
created it — fetching another key’s job returns not_found (404).
Request
Path parameters
string
required
The job UUID returned by
POST /v1/resolve. Must be a valid UUID; a malformed id returns
not_found (404).Headers
string
required
Bearer sk_live_…. See Authentication.Response
string
The job UUID.
string
Present only when
status is done. The resolved destination URL.string
Present only when
status is done. The provider that owned the link (e.g. ouo).string
Present only when
status is done. "standard" or "premium".string
Present only when
status is failed or invalid. resolve_failed for a failed job,
unsupported_link for an invalid one.number
Credits spent on this job. The successful cost when
done; 0 when failed / invalid.number | null
Your current credit balance.
Examples
Responses by status
- done
- queued / running
- failed
- invalid
Job lifecycle
A job moves through these states.queued, running are non-terminal — keep polling.
done, failed, invalid are terminal — stop polling.
Polling guidance
- Poll on a short, fixed interval — 1.5–2 seconds is a good default. Standard links
typically resolve in seconds; premium (
exe.io) links are best-effort and slower. - Stop as soon as
statusisdone,failed, orinvalid. - Set an overall deadline (e.g. 60–120s) so a stuck job doesn’t poll forever.
- Reads count against your per-minute rate limit like any request — don’t poll tighter than ~1s.
- Prefer webhooks for high volume so you don’t poll at all.
The SDKs implement this loop for you.
resolveAndWait (JS / PHP) submits the resolve,
polls until terminal, and returns the resolved link — throwing JobFailedError /
JobFailedException on failed / invalid and TimeoutError / TimeoutException if the
deadline passes. See JavaScript and PHP.