Documentation

API Reference

A REST API with predictable URLs, JSON request bodies, and standard HTTP status codes.

Base URL https://api.seek-api.com/v1
Authentication

Authentication

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.

# All requests require this header
X-Api-Key: sk_live_…
Keep your key private. Never expose it in client-side JavaScript, public repositories, or log output. Use environment variables (SEEKAPI_KEY) in all production environments.

401 Unauthorized response

{
  "error": "unauthorized",
  "message": "Missing or invalid X-Api-Key header.",
  "status": 401
}

Rate limits

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

Endpoints

Account

GET
/v1/me

Get current account info and plan details

GET
/v1/me/credits

Credit balance and usage history

GET
/v1/me/deployments

List your published workers

Workers

GET
/v1/workers

List all available marketplace workers (paginated)

GET
/v1/workers/{worker_id}

Get worker details, schema, and per-credit pricing

POST
/v1/workers/{worker_id}/publish

Publish your worker to the marketplace

Jobs

POST
/v1/workers/{worker_id}/jobs

Submit a new job (async)

GET
/v1/jobs

List your recent jobs (latest 100)

GET
/v1/jobs/{job_uuid}

Get job status and result

DELETE
/v1/jobs/{job_uuid}

Cancel a pending or queued job

Submitting a job — full example

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"
}

Job lifecycle

Jobs move through a linear state machine. Poll GET /v1/jobs/{job_uuid} until the status is terminal (completed, failed, timeout, or cancelled).

queued running completed or failed / timeout / 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.

Completed job response

{
  "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
}

Webhooks

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.

Error codes

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.

Keep reading