API Recipes · Developers
End-to-end recipes that stitch together multiple Dailybot API calls to accomplish real work.
Each recipe below is a self-contained end-to-end flow you can copy-paste today. Every one hits the public API using either an API key or a CLI Bearer token — the parity guarantee holds throughout.
Post a report from CI
Every green build files a standup update, so the team reads the build like a teammate.
# .github/workflows/release.yml (fragment)
- name: Report to Dailybot
env:
DAILYBOT_API_KEY: ${{ secrets.DAILYBOT_API_KEY }}
run: |
curl -X POST https://api.dailybot.com/v1/agent-reports/ \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Shipped v$RELEASE_TAG. Regression suite green.",
"type": "agent"
}'Fill a check-in from an agent
Your agent completes the standup on the developer’s behalf when they’re heads-down.
import os, requests
API = "https://api.dailybot.com"
H = {"X-API-KEY": os.environ["DAILYBOT_API_KEY"]}
pending = requests.get(f"{API}/v1/checkins/?only_pending=true", headers=H).json()
for checkin in pending["results"]:
requests.post(
f"{API}/v1/checkins/{checkin['uuid']}/responses/",
headers=H,
json={"answers": [{"question_uuid": q["uuid"], "answer": "Shipped auth parity fix; staging green."} for q in checkin["questions"]]},
)Trigger a workflow from a webhook
Bridge an external event to a Dailybot workflow with two API calls.
import { fetch } from 'undici';
const API = 'https://api.dailybot.com';
const H = { 'X-API-KEY': process.env.DAILYBOT_API_KEY!, 'Content-Type': 'application/json' };
// 1. Subscribe once. Store the returned uuid.
const sub = await (await fetch(`${API}/v1/webhook-subscription/`, {
method: 'POST', headers: H,
body: JSON.stringify({ url: 'https://your.app/dailybot/hook', events: ['workflow.trigger.requested'] }),
})).json();
// 2. In your webhook handler, trigger a Dailybot workflow.
export async function handleHook(payload: { workflow_uuid: string; data: Record<string, unknown> }) {
await fetch(`${API}/v1/workflows/${payload.workflow_uuid}/trigger/`, {
method: 'POST', headers: H,
body: JSON.stringify({ inputs: payload.data }),
});
}Recognize a teammate
Fire kudos from a bot when someone ships something worth celebrating.
# Resolve the user by name, then kudo.
USER_UUID=$(curl -s "https://api.dailybot.com/v1/users/?search=jane.doe" \
-H "X-API-KEY: $DAILYBOT_API_KEY" | jq -r '.results[0].uuid')
curl -X POST https://api.dailybot.com/v1/kudos/ \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"to_user_uuid\": \"$USER_UUID\",
\"message\": \"Landed the CI parity fix — nice work!\",
\"kudo_type\": \"appreciation\"
}"Fill a form from an AI agent
Use the `agent-skill` forms sub-skill to submit a compliance form on behalf of a developer.
# The agent has the /skills/dailybot-agent skill installed.
# In your Cursor / Claude Code session:
"Fill the weekly retro form for me — mark the top blocker as 'auth parity fix rollout'."
# The skill:
# 1. Calls GET /v1/forms/ to find the form named 'weekly retro'.
# 2. Reads its questions.
# 3. Composes a payload aligned with the schema.
# 4. Calls POST /v1/forms/{uuid}/submit/.Subscribe to events and react
Turn a Dailybot event stream into an ops surface — e.g. auto-post to your incident-response channel when a check-in flags a blocker.
# Subscribe (idempotent — re-run if you change the URL).
curl -X POST https://api.dailybot.com/v1/webhook-subscription/ \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your.app/dailybot/events",
"subscriptions": ["followups.response.completed", "forms.response.created"]
}'
# In your handler, verify the HMAC signature Dailybot sends with each
# delivery (see /developers/api/webhooks for the current header + algorithm),
# then react.