UpHunt API
API Endpoints

Feeds

Create, list, update, and delete AI job feeds programmatically.

GET
/api/v1/feeds

List all feeds on your account.

POST
/api/v1/feeds

Create a new feed.

GET
/api/v1/feeds/:feedId

Fetch a single feed.

PATCH
/api/v1/feeds/:feedId

Partially update a feed.

DELETE
/api/v1/feeds/:feedId

Delete a feed and all of its matched jobs.

A feed is a saved search plus an AI scoring profile: UpHunt matches every new job against your feed's filters, scores it against your profilePrompt, and surfaces jobs at or above minScore in your dashboard and notifications.

Feeds created through the API start empty. They match jobs from creation time forward only, with no historical backfill. Feeds created in the dashboard also scan recent past jobs, but the API create intentionally skips that.

Authentication

Same x-api-key header as the other endpoints, scoped to your UpHunt account. Generate it from Dashboard → Auto-Apply → API & Webhooks.

x-api-key: <your-key>

Feed fields

These fields are writable on create (POST) and update (PATCH). On PATCH, every field is optional and only the provided fields change.

ParameterTypeDescription
titlestringrequired

Display name of the feed. Required on create.

profilePromptstringrequired

Plain-language description of what you do and what a great job looks like for you. The AI scores every matching job against this. Required on create.

minScorenumberrequired

Score threshold from 0 to 10. Jobs scoring at or above this show up in the feed and trigger notifications. Required on create.

includesstring[]

Keywords a job must contain to enter the feed. Defaults to [] (no keyword requirement).

excludesstring[]

Keywords that exclude a job from the feed. Defaults to [].

minHourlyRatenumber | null

Minimum hourly rate filter. Non-negative. On PATCH, pass null to clear the filter.

minFixedPricenumber | null

Minimum fixed-price budget filter. Non-negative. On PATCH, pass null to clear it.

clientMinSpentnumber | null

Minimum total amount the client has spent on the platform. Non-negative. On PATCH, pass null to clear it.

countryFilterModestring

"exclude" or "include". Controls whether the country lists below act as a blocklist or an allowlist.

excludedCountriesstring[]

Client countries to exclude (used with countryFilterMode: "exclude").

includedCountriesstring[]

Client countries to allow (used with countryFilterMode: "include").

platformsstring[]

Non-empty array of "upwork", "linkedin", "web". When omitted, the feed matches jobs from all platforms.

proposalGenerationPromptstring

Instructions used when generating proposals for jobs in this feed.

notificationsMutedboolean

When true, jobs are still matched and scored but no notifications are sent. Defaults to false.

emailFoundstring

"all" or "email_found". With "email_found", only jobs where a contact email was found enter the feed.

autoApply settings and proposal variants cannot be set through this API. Configure auto-apply from the dashboard or the dedicated auto-apply endpoints.

Create a feed

cURL
curl -X POST "https://uphunt.io/api/v1/feeds" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Senior React work",
    "profilePrompt": "I am a senior React/Next.js developer. Great jobs are US/EU clients with a verified payment method, budgets above $2k or $50/h, building web apps or dashboards.",
    "minScore": 7,
    "includes": ["react", "next.js"],
    "excludes": ["wordpress"],
    "minHourlyRate": 50,
    "clientMinSpent": 1000
  }'

Returns 201:

{
  "feed": {
    "id": "8f1c2f2e-6a1b-4c9d-9a3e-2b7d0c5e4f10",
    "createdAtTs": 1784678400000,
    "title": "Senior React work",
    "profilePrompt": "I am a senior React/Next.js developer. ...",
    "minScore": 7,
    "includes": ["react", "next.js"],
    "excludes": ["wordpress"],
    "minHourlyRate": 50,
    "clientMinSpent": 1000,
    "notificationsMuted": false
  }
}

Validation failures return 400 with the failing fields listed:

{
  "error": "Validation failed",
  "details": ["minScore must be a number between 0 and 10"]
}

List feeds

cURL
curl "https://uphunt.io/api/v1/feeds" -H "x-api-key: YOUR_API_KEY"

Returns { "feeds": [ ... ] } with every feed on your account.

Get one feed

cURL
curl "https://uphunt.io/api/v1/feeds/8f1c2f2e-6a1b-4c9d-9a3e-2b7d0c5e4f10" \
  -H "x-api-key: YOUR_API_KEY"

Returns { "feed": { ... } }.

Update a feed

Send only the fields you want to change. Pass null on minHourlyRate, minFixedPrice, or clientMinSpent to clear that filter.

cURL
curl -X PATCH "https://uphunt.io/api/v1/feeds/8f1c2f2e-6a1b-4c9d-9a3e-2b7d0c5e4f10" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "minScore": 8, "minFixedPrice": null }'

Returns { "feed": { ... } } with the updated feed.

Delete a feed

cURL
curl -X DELETE "https://uphunt.io/api/v1/feeds/8f1c2f2e-6a1b-4c9d-9a3e-2b7d0c5e4f10" \
  -H "x-api-key: YOUR_API_KEY"

Returns:

{ "deleted": true, "feedId": "8f1c2f2e-6a1b-4c9d-9a3e-2b7d0c5e4f10" }

Deleting a feed also permanently deletes every job matched into it. This cannot be undone.

Errors

StatusWhen
400Body is not a JSON object, validation failed (see details), or PATCH with no updatable fields
401x-api-key missing or invalid
404Feed not found, or it belongs to a different account
500Unexpected server error

On this page