CI/CD Integration
Run RoboQA journey tests automatically from any pipeline, on every push, or via cron.
Trigger via API
POST to /api/cicd/trigger with your session token as the X-API-Key header. Your session token is visible in the browser's DevTools → Application → Cookies → roboqa_session.
# Minimal — runs a journey test and returns results synchronously
curl -X POST https://roboqa.tech/api/cicd/trigger \
-H "X-API-Key: YOUR_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://yourapp.com","prompt":"verify login works"}'
# With viewport and webhook
curl -X POST https://roboqa.tech/api/cicd/trigger \
-H "X-API-Key: YOUR_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com",
"prompt": "login then add item to cart and checkout",
"viewport_preset": "mobile",
"webhook_url": "https://hooks.yourteam.com/roboqa"
}'
Request body fields:
| Field | Type | Description |
|---|---|---|
| url | required | The URL to test (must include https://) |
| prompt | required | Natural language description of the journey to test |
| viewport_preset | optional | desktop (default), tablet, mobile, mobile_large |
| webhook_url | optional | URL to POST results to after test completes |
GitHub Actions Example
Add this workflow to .github/workflows/roboqa.yml. Store your session token as a GitHub Secret named ROBOQA_API_KEY.
name: RoboQA Journey Test
on:
push:
branches: [main]
workflow_dispatch:
jobs:
roboqa:
runs-on: ubuntu-latest
steps:
- name: Run RoboQA journey test
id: test
run: |
RESPONSE=$(curl -s -X POST https://roboqa.tech/api/cicd/trigger \
-H "X-API-Key: ${{ secrets.ROBOQA_API_KEY }}" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com",
"prompt": "verify login and dashboard load correctly"
}')
echo "response=$RESPONSE" >> $GITHUB_OUTPUT
STATUS=$(echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('status','FAIL'))")
echo "status=$STATUS" >> $GITHUB_OUTPUT
echo "RoboQA status: $STATUS"
echo "$RESPONSE" | python3 -m json.tool
- name: Fail if test failed
if: steps.test.outputs.status != 'PASS'
run: |
echo "RoboQA journey test FAILED — see output above"
exit 1
Webhook Payload
When webhook_url is provided, RoboQA POSTs the following JSON to that URL with a 10-second timeout after the test finishes. The same payload is also returned synchronously from the API call.
{
"job_id": "a3f9c1d2...", // unique run UUID
"status": "PASS", // "PASS" or "FAIL"
"bug_count": 0, // number of bugs found
"duration_seconds": 42.7, // wall-clock time
"summary": "All steps passed...", // human-readable summary
"results": { // full result object
"run_uuid": "a3f9c1d2...",
"status": "PASS",
"total_steps": 5,
"passed_steps": 5,
"failed_steps": 0,
"bug_summary": "No issues found.",
"bugs": [],
"initial_screenshot": "/screenshots/...",
"final_screenshot": "/screenshots/..."
}
}
TIP Use the job_id to link directly to the results page: https://roboqa.tech/tool/results?run_uuid=<job_id>&run_type=journey