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:

FieldTypeDescription
urlrequiredThe URL to test (must include https://)
promptrequiredNatural language description of the journey to test
viewport_presetoptionaldesktop (default), tablet, mobile, mobile_large
webhook_urloptionalURL 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