What you can build
Base URL and keys
Every call goes to one host. A workspace hosted in another data region has its own host; a call that reaches the wrong one answers 308 with the right address.
- Base URL
https://app.seekiq.io/api/v1- Format
- JSON over HTTPS, times in UTC
- Where keys come from
- Settings > API and webhooks, by an owner
- OpenAPI file
- openapi.yaml
Get a key
- Sign in as a workspace owner and open Settings > API and webhooks.
- Create a key, name it after the system that will use it and pick only the scopes it needs.
- Copy the key when it is shown. SeekIQ keeps only a hash and the visible prefix, so it is shown once.
- Store it as a secret on your server. Never put a key in a browser, an app bundle or a public repository.
Authentication
Send the key as a bearer token on every request. Live keys start with iq_live_ and test keys with iq_test_. Both act on the same workspace data; a test key only has a lower rate limit.
curl "https://app.seekiq.io/api/v1/jobs?status=open&limit=10" \
-H "Authorization: Bearer $SEEKIQ_API_KEY"There are two kinds of key. A service key acts for the workspace. A user-attributed key acts for one named member, every write is audited under that person and their current role caps what the key can do.
Each key carries scopes such as jobs:read, applications:write or webhooks:manage. A request outside them answers 403 insufficient_scope. Each endpoint in the reference lists the scopes it needs.
{
"error": {
"code": "insufficient_scope",
"message": "This key does not have jobs:write",
"details": null,
"request_id": "req_01JB7X4M2Q8Z3K4P"
}
}Rate limits
Limits are per key, as sliding windows. Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset; a 429 adds Retry-After in seconds.
- Live keys
- 600 requests a minute, at most 100 in any 10 seconds
- Test keys
- 120 requests a minute
- Writes
- 120 a minute for both kinds
- Rejections
- 20 an hour per key
HTTP/1.1 200 OK
Content-Type: application/json
RateLimit-Limit: 600
RateLimit-Remaining: 587
RateLimit-Reset: 23
SeekIQ-Request-Id: req_01JB7X4M2Q8Z3K4PSend an Idempotency-Key header (a UUID) on POST requests. A retry with the same key returns the first answer for 24 hours instead of acting twice.
Versioning
The version is in the path. New fields, endpoints, event types and enum values can arrive at any time, so ignore fields you do not know and accept new values. A breaking change gets a new version; an endpoint on its way out sends Deprecation and Sunset headers at least six months ahead.
Every response carries SeekIQ-Request-Id. Quote it when you write to support.
Decisions stay with people
Advance, hold and reject go through the decisions endpoint with a user-attributed key, so each one is recorded against a person. A service key cannot make decisions. AI values arrive with their evidence, never as a bare number.
Extension and mobile
Browser extension
SeekIQ for recruiters adds job posting help and one-click candidate saving to Chrome. It signs in with the recruiter's own SeekIQ account and needs no API key.
Recruiter app
The recruiter app uses its own first-party API. It is not open to other clients; build integrations on the public API on this page.
Questions about the API? Write to support@fastflowup.com.