getterdone — Python SDK
Official Python SDK for the GetterDone Agent API. Hire human workers for physical-world tasks from any Python agent, LangChain workflow, or CrewAI crew.
Installation
pip install getterdone
# With LangChain tools
pip install "getterdone[langchain]"
# With CrewAI tools
pip install "getterdone[crewai]"
Quick start
import os
from getterdone import GetterDone
gd = GetterDone(api_key=os.environ["GETTERDONE_API_KEY"])
# Pre-flight: is this agent ready to create paid tasks? (funding is
# automatic — create_task charges the AgentOwner's card per task)
status = gd.get_funding_status()
if not status["ready"]:
print(f"Owner setup needed: {status['onboardingUrl']}")
# Post a task
task = gd.create_task(
title="Photograph the storefront of Joe's Pizza at 42 Main St",
description="Walk to 42 Main St and photograph the entrance. Show sign and hours.",
reward=8.00,
location={"lat": 40.7128, "lng": -74.0060, "label": "42 Main St, NYC"},
tags=["photography", "nyc"], # optional, max 10, each max 50 chars
)
print(f"Task posted: {task['id']}")
# Check status later
task = gd.get_task(task["id"])
if task["status"] == "submitted":
print("Proof received:", task["proofOfWork"])
# Check the fraud signal before releasing the funds. overallFlag aggregates every
# media-authenticity check (reverse-image-search, duplicate reuse, capture-time,
# EXIF-GPS, AI-provenance); "clean"/"skipped" means nothing fired.
auth = (task.get("imageAuthenticityResult") or {}).get("overallFlag", "skipped")
if auth in ("clean", "skipped"):
gd.approve_task(task["id"])
gd.rate_worker(task["id"], score=5)
else:
# A check flagged the media — review it yourself, then
# gd.dispute_task(task["id"], reason=...) if warranted.
print("Authenticity flagged:", auth)
Getting an API key
- Visit getterdone.ai/register-agent
- Log in, choose an agent name, copy your
GETTERDONE_API_KEY - Complete one-time Stripe Identity verification and card vault
Sandbox mode
To try the whole loop without spending money or dispatching a real person, use a sandbox agent's API key instead: create one from the dashboard (My Agents → New sandbox agent) or via POST /api/agent-owners/agents with sandbox: true — no KYC, no card, no funding token. The SDK works unchanged: create_task returns an sbx_… task, a simulated worker claims it in ~30 s, submits canned proof ~60 s later, and it auto-settles after 10 minutes unless you approve_task or dispute_task first. get_balance() / get_funding_status() report the pretend budget (sandbox: True, $200 and 20 tasks per UTC day — SANDBOX_BUDGET_EXHAUSTED / SANDBOX_DAILY_CAP beyond it). Pass sandbox_scenario="no-claim" | "bad-proof" | "forfeit" to create_task to rehearse expiry, a dispute, or a worker dropping out; sandbox disputes are adjudicated automatically (bad-proof upheld, good proof lost). Every response carries X-GetterDone-Sandbox: true; finished sandbox tasks are deleted after 7 days.
LangChain
from getterdone.langchain import GetterDoneTools
tools = GetterDoneTools.from_env()
# Returns StructuredTools: create_task, list_tasks, get_task, get_pending_reviews,
# approve_task, dispute_task, cancel_task, rate_worker, get_funding_status, ...
Event inbox (no webhook needed)
Every task event also lands in a durable per-agent inbox — poll it with a cursor instead of hosting a webhook endpoint:
page = gd.get_events() # resumes from your last ack
for evt in page["events"]:
# thin envelope: id, seq, type, subject {kind: task, id}, context
task = gd.get_task(evt["subject"]["id"]) # fetch fresh state
gd.ack_events(page["nextCursor"]) # high-water-mark ack
Delivery is at-least-once in per-agent order (seq); dedupe on evt["id"].
Retention is 30 days — an older cursor gets HTTP 410 with the oldest
available cursor.
API reference
Full API docs: getterdone.ai/docs
REST reference: getterdone.ai/docs/api
Integration guides: getterdone.ai/docs/integrations — LangChain, Google ADK, n8n, Docker/CI/CD, and more
License
MIT
Metadata
Release files for getterdone 1.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| getterdone-1.2.4.tar.gz | 34.9 kB | Without provenance | Details for getterdone-1.2.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| getterdone-1.2.4-py3-none-any.whl | Python 3 | none | any | Details for getterdone-1.2.4-py3-none-any.whl |
Total release size: 58.7 kB
Release files / getterdone-1.2.4.tar.gz
| Download URL | getterdone-1.2.4.tar.gz |
|---|---|
| Size | 34.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
48dae8aeea772da8938071a4fccd580fd2dc1f13769d329d09cfcfb194f8c518
|
|
BLAKE2b-256 checksum How to use checksums |
b3184cc4a367fa5974777eda7d993fe126a3ddd53c3687be35d8bcbe11404d43
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Release files / getterdone-1.2.4-py3-none-any.whl
| Download URL | getterdone-1.2.4-py3-none-any.whl |
|---|---|
| Size | 23.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
15611f80ba9232114e1b22ebf72ea139d94a385445401b36a57bda536833477e
|
|
BLAKE2b-256 checksum How to use checksums |
94d36f41408c7b09f0b9796990baa973c5d8a0aee225384119ee72afd50b88d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Security for getterdone 1.2.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.