POST /api/apps/{appId}/trigger

Schedule a new check for an app. The check is queued immediately and the response returns the new check ID so you can poll for results.

Authentication

Send a per-app API key as a Bearer token. See API authentication.

Request

POST /api/apps/{appId}/trigger HTTP/1.1
Host: qassandra.com
Authorization: Bearer qsk_...
Content-Type: application/json

{
  "git_commit_id": "abc123",
  "git_commit_message": "Fix login bug",
  "pull_request_id": "42",
  "pull_request_name": "Feature: Add dark mode",
  "branch": "feature/dark-mode",
  "discover_flows": true
}

Body parameters

All parameters are optional. An empty body is valid and triggers a default check.

FieldTypeDescription
git_commit_idstringThe commit SHA being tested. Shown in the UI for traceability.
git_commit_messagestringThe commit message. Used by the flow selector for relevance ranking.
pull_request_idstringThe PR number / identifier in your VCS.
pull_request_namestringThe PR title. Strongly recommended — the flow selector uses this heavily.
branchstringThe branch under test. Used for visual diff baseline lookup (a check on main becomes the next baseline).
discover_flowsbooleanRun an explicit flow discovery pass alongside execution. Defaults to false for apps that already have flows; bootstrap mode kicks in automatically for apps with zero flows.

Successful response

{
  "message": "Check triggered successfully",
  "check_id": "9f5c8b1e-...",
  "app_id": "8d4c2a91-...",
  "app_name": "myapp-prod",
  "status": "scheduled",
  "metadata": {
    "git_commit_id": "abc123",
    "branch": "feature/dark-mode",
    "discover_flows": true
  }
}

Error responses

StatusWhen
401Missing or invalid Authorization header.
404The appId doesn't exist or you don't have access.
400The app has no URL configured. Set one in app settings first.
500Server error. Check the response body for details.

Examples

Minimal — kick off a default check

curl -X POST https://qassandra.com/api/apps/$APP_ID/trigger \
  -H "Authorization: Bearer $QASSANDRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

From GitHub Actions

name: Qassandra check
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  qassandra:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger Qassandra check
        run: |
          curl -X POST "https://qassandra.com/api/apps/${{ vars.QASSANDRA_APP_ID }}/trigger" \
            -H "Authorization: Bearer ${{ secrets.QASSANDRA_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d "$(cat <<EOF
          {
            "git_commit_id": "${{ github.event.pull_request.head.sha }}",
            "branch": "${{ github.head_ref }}",
            "pull_request_id": "${{ github.event.pull_request.number }}",
            "pull_request_name": "${{ github.event.pull_request.title }}"
          }
          EOF
          )"

Force a discovery pass after a redesign

curl -X POST https://qassandra.com/api/apps/$APP_ID/trigger \
  -H "Authorization: Bearer $QASSANDRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "branch": "main",
    "discover_flows": true,
    "git_commit_message": "Redesign of the dashboard"
  }'

Polling for results

The trigger endpoint returns immediately with status: "scheduled". To watch a check progress, open the dashboard or poll for the check by ID. A results-fetching endpoint is on the roadmap.