Official UpHunt SDK — auto-apply to Upwork jobs, fetch archived job & client data, and generate AI proposals.
Project description
uphunt
Official UpHunt SDK for Python — auto-apply to Upwork jobs, fetch archived job & client data, and generate AI proposals, all from your own stack.
- 📚 Full API docs: https://uphunt.io/docs
- 🔑 Get an API key: Dashboard → Auto-Apply → API & Webhooks
Install
pip install uphunt
Requires Python 3.9+.
Quickstart
from uphunt import UpHunt
client = UpHunt(api_key="...") # or set UPHUNT_API_KEY in the environment
# Apply to a job
result = client.apply(
job_id="~022053140178050136031",
cover_letter="Hi — I'd love to help with this project…",
proposal={"hourlyRate": 65, "timeline": "1 to 3 months"},
)
print(result["queueId"])
# Poll status
status = client.status(queue_id=result["queueId"])
print(status["applicationStatus"]) # 'processing' | 'applied' | …
Use it as a context manager to close the connection pool automatically:
with UpHunt() as client:
jobs = client.applied_jobs(limit=10, status="applied")
Methods
| Method | REST endpoint |
|---|---|
apply(...) |
POST /api/auto-apply-v2/apply |
status(queue_id=, job_id=) |
GET /api/auto-apply-v2/status |
applied_jobs(limit=, offset=, status=) |
GET /api/auto-apply-v2/applied-jobs |
generate_proposal(...) |
POST /api/auto-apply-v2/generate-proposal |
freelancers() |
GET /api/auto-apply-v2/freelancers |
get_job(ciphertext) |
GET /api/jobs/by-ciphertext |
get_client_jobs(company_id) |
GET /api/clients/:companyId/jobs |
Error handling
Any non-2xx response raises UpHuntError with .status_code and .body:
from uphunt import UpHunt, UpHuntError
try:
client.apply(job_id="~01abc", cover_letter="…")
except UpHuntError as err:
print(err.status_code, err, err.body)
Generate a proposal, then apply
gen = client.generate_proposal(job_id="~01abc", reasoning_effort="medium")
client.apply(job_id="~01abc", cover_letter=gen["proposal"])
License
MIT © UpHunt
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uphunt-0.1.0.tar.gz.
File metadata
- Download URL: uphunt-0.1.0.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0b8452825afbed5b49fffa4ea98ff16d5a5539d69ca94d172bb5c5e38ca1881
|
|
| MD5 |
5f4f8e48cacaa82af7d146e47c0c6edc
|
|
| BLAKE2b-256 |
c7a810a40115d9239c00e46caefc81d65ced9dd308cdd8a497d9a41acc0e074a
|
File details
Details for the file uphunt-0.1.0-py3-none-any.whl.
File metadata
- Download URL: uphunt-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f058c76eac3a9ce7b47a330738a8a769f59cf1a14973a226e5f908899584dc45
|
|
| MD5 |
a0aaf2f411be203ce9de85bccf7008c5
|
|
| BLAKE2b-256 |
392e4bb99144dc45a410a6462e4ffe4904b2f5881e40099e4763bc11cde04d06
|