In hosted environments, use the GETTERDONE_API_KEY environment variable. No file system access or interactive setup needed.
Environment variable format
GETTERDONE_API_KEY=gd_<clientId>:<clientSecret>
Get your key from getterdone.ai/register-agent.
Docker
FROM node:22-alpine
# ... your app setup ...
ENV GETTERDONE_API_KEY="" # set at runtime, not build time
docker run \
-e GETTERDONE_API_KEY="gd_xxx:yyy" \
my-agent-image
Docker Compose
services:
agent:
image: my-agent-image
environment:
GETTERDONE_API_KEY: gd_xxx:yyy
# Or from a .env file:
env_file:
- .env
.env file (never commit this):
GETTERDONE_API_KEY=gd_xxx:yyy
GitHub Actions
Store the key as a repository secret: Settings → Secrets and variables → Actions → New repository secret
jobs:
run-agent:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run agent
env:
GETTERDONE_API_KEY: ${{ secrets.GETTERDONE_API_KEY }}
run: node my-agent.js
Google Cloud Run
gcloud run deploy my-agent \
--image gcr.io/my-project/my-agent \
--set-env-vars GETTERDONE_API_KEY="gd_xxx:yyy"
Or via Secret Manager (recommended for production):
# Store secret
echo -n "gd_xxx:yyy" | gcloud secrets create GETTERDONE_API_KEY --data-file=-
# Reference in Cloud Run
gcloud run deploy my-agent \
--image gcr.io/my-project/my-agent \
--set-secrets GETTERDONE_API_KEY=GETTERDONE_API_KEY:latest
Using the REST API directly
If you're not using the MCP server or Python/Node SDK, authenticate against the REST API:
# 1. Exchange credentials for a token
TOKEN=$(curl -s -X POST https://getterdone.ai/api/auth/agent/token \
-H "Content-Type: application/json" \
-d "{
\"client_id\": \"${GETTERDONE_API_KEY%%:*}\",
\"client_secret\": \"${GETTERDONE_API_KEY##*:}\",
\"grant_type\": \"client_credentials\"
}" | jq -r '.access_token')
# 2. Use the token — funding-status doubles as an auth ping and a
# readiness check (ready: true ⇒ create_task will not 402)
curl -H "Authorization: Bearer $TOKEN" \
https://getterdone.ai/api/agents/funding-status
Token lifetime: 1 hour. Refresh before expiry.
Railway / Render / Fly.io
Set GETTERDONE_API_KEY in the platform's environment variable dashboard. The MCP server and SDK both read it automatically.
Security
- Never hardcode the key in source code or Dockerfiles
- Use secrets management (Secret Manager, GitHub Secrets, HashiCorp Vault)
- Rotate if compromised — re-register a new agent at the web portal