UpHunt API

Changelog

API versions, breaking changes, and new features.

We version the UpHunt API under /api/auto-apply-v2/ and document every user-visible change here. Breaking changes are announced 60 days in advance via email to every account with an active API key.

2026-06 — Freelancers list moves into the v2 family

  • The "list freelancers" endpoint is now GET /api/auto-apply-v2/freelancers, alongside the other auto-apply-v2 endpoints. It accepts x-api-key or an in-app session.
  • Backward compatible: the old GET /api/auto-apply/external/freelancers path still works — it forwards to the same handler.

2026-06 — Data reads use x-api-key, no version prefix

  • GET /api/jobs/by-ciphertext?cipher=~02... and GET /api/clients/:companyId/jobs — the archived-job and client-history reads, authenticated with the standard x-api-key header (or an in-app session).
  • The old /api/v1/* "Data API" Bearer (up_) key system is retired. Use your x-api-key instead of Authorization: Bearer.
  • Backward compatible: the /api/v1/* and /api/v2/* paths still resolve — they forward to the unversioned endpoints and behave identically. No client changes required beyond the auth header.
  • The old v1 shared 10,000/billing-period quota is retired; the reads aren't separately metered.

2025-11 — Documentation rewrite

  • Full docs moved to Fumadocs with sidebar, search, and syntax highlighting.
  • Added Rate Limits, SDKs, and Recipes.
  • Machine-readable openapi.json kept in sync with the docs.

2025-09 — v2 endpoint generally available

  • New POST /api/auto-apply-v2/apply accepts job URL, ciphertext, or processed UUID as jobId. No more feed setup required.
  • New POST /api/auto-apply-v2/generate-proposal — AI-written cover letters on demand.
  • applicationOptions renamed to proposal for clarity.
  • Legacy POST /api/auto-apply/external remains supported.

2025-07 — Webhook delivery improvements

  • Added X-UpHunt-Delivery header with a unique ID per attempt (useful for idempotency).
  • Retries now use exponential backoff (30s, 2m, 10m) instead of a flat 5-minute delay.
  • Duplicate events for the same (jobId, jobListenerId) suppressed for 24 hours.

2025-05 — Status endpoint polish

  • New terminal states: not_enough_connects, logged_out.
  • errorMessage now includes a human-readable explanation for every failure.
  • appliedAt and processedAt reported as Unix milliseconds consistently.

2025-01 — Agency profiles

  • New GET /api/auto-apply/external/freelancers endpoint lists agency-linked freelancers and their specialized profiles.
  • /apply now accepts a profileId to route proposals to a specific freelancer / specialization.

Upgrading from legacy

See the Legacy Endpoint → Migrating to v2 table for field-by-field mappings.