Skip to Content

Action Triggers

To access the Configs tab, you’ll need the project-view-configs permission, which is available to users with the Config Manager role or other roles that include this permission.

Action Triggers allow you to automate responses when test runs complete in Nexus. Unlike run triggers that initiate test executions, action triggers are activated when a test run ends and perform outbound actions based on the test results. This enables you to integrate test outcomes into your broader development workflow, such as notifying external systems, updating status dashboards, or triggering downstream processes.

Nexus currently supports outbound webhook action triggers, which call external HTTP endpoints with test run result data. Below you’ll find detailed documentation for configuring webhook actions.

Outbound Webhook

Outbound Webhook action triggers call external HTTP endpoints when a test run completes. When a test run finishes, Nexus will automatically send a POST request with a JSON body containing information about the test run to your configured endpoint.

Configuration Options

There are two configuration options for outbound webhooks:

  1. URL: The endpoint that will receive the POST request with test run data as a JSON body.

  2. Secret: An optional secret token used to validate webhook deliveries and ensure they are coming from Nexus. This works the same way as GitHub’s webhook validation, but uses the X-Nexus-Signature-256 header instead. Nexus generates an HMAC hex digest using your secret token and the payload contents, which you can verify on your server to confirm the authenticity of the webhook delivery.

You can press the toggle button to enable or disable the action trigger at any time. This is useful when you want to temporarily pause webhook executions without deleting the trigger configuration.

Example Request

When a test run completes, we will send a POST request similar to this:

POST /your-endpoint HTTP/1.1 Host: your-domain.com ... Content-Type: application/json X-Nexus-Signature-256: sha256=<hmac_hex_digest> ...
{ "projectId": "your-project", "jobId": "00000000-0000-0000-0000-000000000001", "multiplayerRunId": "abcdefghijk", "compositeRunId": "abcdefghijk-1", "testPlanExecutionId": null, "multiplayerState": { "runState": "COMPLETED", "totalPlayers": 2, "finishedPlayers": 2, "pendingPlayers": 0 }, "runResult": "SUCCESS", "bugLabel": "NO_BUG", "startedBy": { "type": "user", "value": { "user_id": "00000000-0000-0000-0000-000000000002" } }, "platformInfo": { "kind": "android-native", "config": { "device": { "name": "Pixel 9 Pro XL", "os_version": "15" } } }, "tags": [], "buildId": "00000000-0000-0000-0000-000000000003", "startTime": "2025-09-03T16:00:12.802+02:00", "endTime": "2025-09-03T16:23:25.416+02:00", "duration": "PT1392.614S", "testPlanId": null, "multiplayerTestVersionId": "00000000-0000-0000-0000-000000000004", "compositeTestVersionId": "00000000-0000-0000-0000-000000000005", "playerNumber": 1, "report": "...", "artifacts": [ { "filename": "deliverables/custom-report.json", "url": "https://bouncer.nunu.ai/runs/abcdefghijk-1/artifacts/deliverables/custom-report.json", "size": 523, "uploaded": "2025-09-03T14:23:05.683Z", "etag": "00000000000000000000000000000001" }, { "filename": "device_log.log", "url": "https://bouncer.nunu.ai/runs/abcdefghijk-1/artifacts/device_log.log", "size": 1048576, "uploaded": "2025-09-03T14:23:05.735Z", "etag": "00000000000000000000000000000002" }, { "filename": "recording.mp4", "url": "https://bouncer.nunu.ai/runs/abcdefghijk-1/artifacts/recording.mp4", "size": 298183654, "uploaded": "2025-09-03T14:23:17.630Z", "etag": "00000000000000000000000000000003" } ] }

Payload Fields

The webhook payload contains the following fields:

FieldTypeDescription
Core Identifiers
projectIdstringThe unique identifier of the project this test run belongs to.
jobIduuidThe unique identifier for this specific test run job.
multiplayerRunIdstringThe unique identifier for the multiplayer run this player run belongs to.
compositeRunIdstringA composite identifier combining multiple run information.
testPlanExecutionIduuid | nullThe unique identifier for the test plan execution if this run was part of a test plan. Will be null for standalone test runs.
testPlanIduuid | nullThe unique identifier for the test plan if this run was part of a test plan. Will be null for standalone test runs.
Test Results
multiplayerStateobjectCurrent aggregate state for the multiplayer run. Contains runState (string: the multiplayer run state, one of INITIALIZING, RUNNING, or COMPLETED — for outbound webhooks this is always COMPLETED), totalPlayers (number: Total players in the multiplayer run), finishedPlayers (number: Players that have finished), and pendingPlayers (number: Players still pending).
runResultstringThe outcome of the test run. Possible values: SUCCESS (Test completed successfully), MAX_STEPS (Test ran out of execution time and was forcefully stopped), STOPPED (Test was stopped by a user), ERROR (Test encountered an error).
bugLabelstringClassification of any bugs found during the test run. Possible values: UNDECIDED (Bug presence is undetermined), NO_BUG (No bugs detected), LIKELY_NO_BUG (Likely not a bug, but not certain), LIKELY_BUG (Likely a bug, but not confirmed), DEFINITELY_BUG (Confirmed bug present).
Execution Context
startedByobjectInformation about who or what initiated the test run. Contains type (string: the type of initiator, one of user, trigger, bot, api, or unknown) and value (object: additional details about the initiator — user runs contain a user_id, trigger runs contain a trigger_id, api runs contain a key_id, bot runs contain a details object, and unknown has no value).
platformInfoobjectDetails about the platform where the test was executed. Contains kind (string: the platform type, one of android-native, android-native-private, android-native-nunu, android-emulator-cloud, android-emulator-nunu, ios-native, ios-native-private, ios-simulator-nunu, windows-vm, windows-native, or xbox) and config (object: platform-specific configuration details, such as the device or input method — see the example payload above).
tagsarrayAn array of string tags associated with this test run for organization and filtering.
buildIdstring | nullThe unique identifier of the game build used for this test run, if any.
Timing Information
startTimestring | nullISO 8601 timestamp indicating when the test run started, including timezone offset.
endTimestring | nullISO 8601 timestamp indicating when the test run completed, including timezone offset.
durationstring | nullThe total duration of the test run in ISO 8601 duration format (e.g., PT1392.614S represents 1392.614 seconds).
Test Configuration
multiplayerTestVersionIduuidThe unique identifier for the version of the multiplayer test configuration used.
compositeTestVersionIduuidThe unique identifier for the version of the composite test configuration used.
playerNumbernumberFor multiplayer tests, indicates which player number this run represents.
reportstring | nullThe final run report (if available).
Artifacts
artifactsarrayAn array of artifact objects generated during the test run. Each artifact object contains: filename (string: The name and path of the artifact file), url (string: A direct URL to download the artifact, can be accessed with cookies from an active nexus session or an api key valid for the run’s project with no permissions required), size (number: The size of the artifact in bytes), uploaded (string: ISO 8601 timestamp of when the artifact was uploaded), etag (string: An entity tag for cache validation and version tracking).
Last updated on