Documentation
A REST API with predictable URLs, JSON request bodies, and standard HTTP status codes.
Every request must include an X-Api-Key header with a valid workspace API key.
You can generate and revoke keys from your dashboard under Settings → API Keys.
X-Api-Key: sk_live_… SEEKAPI_KEY) in all production environments.
{ "error": "unauthorized", "message": "Missing or invalid X-Api-Key header.", "status": 401 }
Limits are applied per API key. Rate-limited requests return 429 Too Many Requests with a
Retry-After header.
| Plan | Sustained (req/s) | Burst | Credits |
|---|---|---|---|
| Free | 10 req/s | 20 | 100/mo |
| Pro | 50 req/s | 100 | Pay-as-you-go |
| Enterprise | Custom | Custom | Volume pricing |
/v1/me Get current account info and plan details
/v1/me/credits Credit balance and usage history
/v1/me/deployments List your published workers
/v1/workers List all available marketplace workers (paginated)
/v1/workers/{worker_id} Get worker details, schema, and per-credit pricing
/v1/workers/{worker_id}/publish Publish your worker to the marketplace
/v1/workers/{worker_id}/jobs Submit a new job (async)
/v1/jobs List your recent jobs (latest 100)
/v1/jobs/{job_uuid} Get job status and result
/v1/jobs/{job_uuid} Cancel a pending or queued job
The job submission endpoint accepts the worker's input schema as the JSON body. Additional control parameters
(webhook, priority) are passed at the top level.
Request
POST /v1/workers/linkedin-profile/jobs X-Api-Key: sk_live_… Content-Type: application/json { "profile_url": "https://linkedin.com/in/example", "webhook": "https://myapp.com/hooks/seek", "priority": "normal" }
Response (202 Accepted)
{ "job_uuid": "job_a1b2c3d4e5f6", "status": "queued", "worker": "linkedin-profile", "cost_estimate_credits": 5, "created_at": "2026-03-16T10:00:00Z" }
Jobs move through a linear state machine. Poll GET /v1/jobs/{job_uuid} until the status
is terminal (completed, failed, timeout, or cancelled).
| Status | Description |
|---|---|
queued | Job is waiting in the execution queue. |
running | Worker is actively executing the job. |
completed | Job finished. Result is available in the result field. |
failed | Job encountered a fatal error. See error field. |
timeout | Job exceeded the worker max_duration. Deducted 0 credits. |
cancelled | Job was cancelled before execution started. |
{ "job_uuid": "job_a1b2c3d4e5f6", "status": "completed", "worker": "linkedin-profile", "cost_credits": 5, "duration_ms": 4210, "created_at": "2026-03-16T10:00:00Z", "completed_at": "2026-03-16T10:00:04Z", "result": { … worker output … }, "error": null }
Pass a webhook URL in your job submission body. When the job reaches a terminal state,
we send a single HTTP POST to that URL with the full job object as the body.
Enabling webhooks
{ "query": "coffee in Paris", "webhook": "https://myapp.com/hooks/seek" }
Webhook payload (POST body)
{ "event": "job.completed", "job_uuid": "job_a1b2c3d4e5f6", "status": "completed", "result": { … }, "fired_at": "2026-03-16T10:00:04Z" }
Seek API expects a 200 OK response within 10 seconds. Failed deliveries are retried 3 times with exponential backoff (5 s, 30 s, 5 min).
Validate the X-SeekAPI-Signature header using your webhook secret to prevent spoofing.
| Status | Title | When it happens |
|---|---|---|
| 400 | Bad Request | Request body is malformed or missing required fields. |
| 401 | Unauthorized | X-Api-Key header is missing or invalid. |
| 402 | Payment Required | Insufficient credits to run this job. |
| 404 | Not Found | Worker or job UUID does not exist. |
| 422 | Unprocessable Entity | Input failed worker schema validation. |
| 429 | Too Many Requests | Rate limit exceeded. Back off and retry. |
| 500 | Internal Server Error | Unexpected server error. Retryable after a short delay. |