cURL

Fetch, filter, and paginate Jobven API job data from the command line with cURL.

Test the API straight from your terminal with cURL. Set your API key first — see Authentication.

export JOBVEN_API_KEY="your_api_key"

Fetch Jobs

Basic request to list job postings:

curl -H "X-API-Key: $JOBVEN_API_KEY" \
  "https://api.jobven.com/v1/public/jobs?limit=10"

Pipe the response through jq to read it:

curl -s -H "X-API-Key: $JOBVEN_API_KEY" \
  "https://api.jobven.com/v1/public/jobs?limit=10" | jq '.meta.count'

Filter Jobs

Search for remote React developer positions with a salary floor. Array filters use bracket notation, which must be URL-encoded (skills%5B%5D):

curl -H "X-API-Key: $JOBVEN_API_KEY" \
  "https://api.jobven.com/v1/public/jobs?q=react%20developer&skills%5B%5D=react&skills%5B%5D=typescript&remoteType%5B%5D=remote&minSalary=100000&limit=20"

For every available filter, see the Filter Jobs guide.

Paginate Results

Cursor pagination uses the nextCursor value from each response:

# First request - grab the next cursor
curl -s -H "X-API-Key: $JOBVEN_API_KEY" \
  "https://api.jobven.com/v1/public/jobs?limit=100" | jq -r '.meta.nextCursor'

# Subsequent requests (replace CURSOR_VALUE)
curl -s -H "X-API-Key: $JOBVEN_API_KEY" \
  "https://api.jobven.com/v1/public/jobs?limit=100&cursor=CURSOR_VALUE"

Get a Single Job

Fetch a specific job by ID:

curl -H "X-API-Key: $JOBVEN_API_KEY" \
  "https://api.jobven.com/v1/public/jobs/abc123-def456-ghi789"

Incremental Sync

Fetch only jobs posted in the last 24 hours. postedAfter takes a Unix timestamp in seconds:

YESTERDAY=$(( $(date +%s) - 86400 ))

curl -H "X-API-Key: $JOBVEN_API_KEY" \
  "https://api.jobven.com/v1/public/jobs?postedAfter=$YESTERDAY&limit=100"

Error Handling

Inspect the status code and react accordingly. A 429 with "error": "Quota Exceeded" means your monthly quota is gone — retrying won't help until it resets:

response=$(curl -s -w "\n%{http_code}" \
  -H "X-API-Key: $JOBVEN_API_KEY" \
  "https://api.jobven.com/v1/public/jobs?limit=10")

status=$(echo "$response" | tail -1)
body=$(echo "$response" | sed '$d')

case "$status" in
  200) echo "$body" | jq '.meta.count' ;;
  401) echo "Invalid API key" ;;
  429)
    if echo "$body" | jq -e '.error == "Quota Exceeded"' > /dev/null; then
      echo "Monthly quota exhausted"
    else
      retry=$(echo "$body" | jq -r '.retryAfter // 1')
      echo "Rate limited. Waiting ${retry}s..."
      sleep "$retry"
    fi
    ;;
  *) echo "API error: $status" ;;
esac

See Handle Rate Limits for the full retry strategy.

Next Steps

Jobs Reference

All parameters and response fields.

Incremental Sync

Fetch only new jobs on a schedule.