Skip to content

Zup

Zup is a self-hosted incident-investigation agent. You run Zup on your own infrastructure; beeps creates a run when an alert fires and polls until the investigation finishes. The output is an investigation report (findings, situation assessment, recommendations), not a PR.

  • A running Zup server reachable from beeps. See the Zup docs for installation and configuration.
  • A bearer token for authenticating to the Zup server.
  • The Zup server’s URL.
  1. Install and run Zup following zup.dev/docs.
  2. Configure an API token on the Zup server. Save it; you’ll paste it into beeps as apiKey.
  3. Note the server URL. You’ll pass it on the relay rule as endpoint. Default during local development is http://localhost:3000/api/v0/runs.

Create the integration with the bearer token as apiKey:

const zupIntegration = await client.integration.create({
name: "Zup - internal",
provider: "zup",
apiKey: process.env.ZUP_API_TOKEN,
});

Reference it from a relay rule. Zup needs an endpoint pointing at your server:

await client.relay.rules.create(relayId, {
name: "Zup investigation",
ruleType: "agent",
config: {
agentType: "zup",
integrationId: zupIntegration.id,
endpoint: "https://zup.internal.corp/api/v0/runs",
pollInterval: 30000,
maxPollAttempts: 120,
},
});

Zup doesn’t use metadata. Only apiKey is required.

FieldTypeRequiredDefaultDescription
agentType"zup"yesSelects the Zup agent
integrationIdstringyesThe Zup integration’s id
endpointstring (URL)nohttp://localhost:3000/api/v0/runsBase URL of your Zup server’s runs endpoint

The shared polling and storm-control fields are documented in Relay Rules.

401 Unauthorized when starting a run. Beeps sends Authorization: Bearer <apiKey>. Confirm the token in apiKey matches what the Zup server is configured to accept.

Run completes but no findings show up. Check the run’s status in your Zup server. Zup returns status: "completed" only when the investigation actually finishes; partial or failed runs return different statuses and beeps marks the alert responder dropped accordingly.