Integrations
Better Stack
Overview
This document provides a complete guide to integrating Better Stack (Uptime) with Callgoose SQIBS using outbound webhooks.
Better Stack sends incident lifecycle events (trigger and resolve) to Callgoose SQIBS, where they automatically create and resolve incidents through API Filters. This integration uses Better Stack’s Outgoing Webhooks (Incident event type) and Callgoose SQIBS’s Process API endpoint.
Prerequisites
Ensure you have the following before beginning:
- Better Stack (Uptime): Active account with access to Outgoing Webhooks.
- Callgoose SQIBS:
- API Token.
- Inbound process endpoint.
- Configuration: At least one Better Stack monitor to generate incidents.
1. Obtain Callgoose API Token & Endpoint
- Refer API Token & API Endpoint
- Go to Callgoose SQIBS → API Tokens.
- Generate a new token or use an existing one.
- Construct your Callgoose inbound process URL.
URL Format:
https://****.callgoose.com/v1/process?from=BetterStack&token=<API_TOKEN>
Note: Replace **** with your organization's subdomain and <API_TOKEN> with your actual token. Store this securely.
2. Select Webhook Payload Strategy
Better Stack allows custom JSON bodies. To make API Filters in Callgoose simple, use a streamlined payload containing:
- status
- id
- title
- description
- monitor metadata
This structure avoids deep nesting and ensures predictable incident correlations.
3. Configure Better Stack → Outgoing Webhook
3.1 Create Outgoing Webhook
- Navigate to Better Stack → Integrations → Outgoing Webhooks.
- Create a new webhook.
- Name: Callgoose Integration.
- Event Type: Select Incident.
- Events to Notify: Enable:
- Incident Started
- Incident Resolved
- Webhook URL: Enter the URL constructed in Section 1.
3.2 Add Headers (Optional)
If you prefer not to put the token in the URL, you can pass it via a header:
- Content-Type: application/json
- X-Callgoose-Auth: <API_TOKEN>
3.3 Configure Custom Body Template
Use the following JSON template.
Important: You must replace the variables below (e.g., {{ ... }}) with the exact tokens provided in your Better Stack template editor sidebar. The syntax below follows Better Stack's standard object model, but available tokens may vary by plan or version.
{
"source": "betterstack",
"status": "{{ incident.attributes.status }}",
"id": "{{ incident.id }}",
"title": "{{ incident.attributes.name }}",
"description": "{{ incident.attributes.cause }}",
"monitor": {
"id": "{{ incident.relationships.monitor.data.id }}",
"name": "{{ incident.relationships.monitor.data.attributes.name }}"
},
"started_at": "{{ incident.attributes.started_at }}",
"resolved_at": "{{ incident.attributes.resolved_at }}"
}
4. Sample Trigger and Resolve Payloads
4.1 Trigger (Incident Started)
{
"source": "betterstack",
"status": "Started",
"id": "INC-98765",
"title": "Server Down: api.example.com",
"description": "Monitor check failed. Status code 500.",
"monitor": {
"id": "MON-12345",
"name": "api.example.com Health Check"
},
"started_at": "2025-11-10T09:12:00Z"
}
4.2 Resolve (Incident Resolved)
{
"source": "betterstack",
"status": "Resolved",
"id": "INC-98765",
"title": "Recovery: api.example.com",
"description": "Monitor check successful. Response 200 OK.",
"monitor": {
"id": "MON-12345",
"name": "api.example.com Health Check"
},
"started_at": "2025-11-10T09:12:00Z",
"resolved_at": "2025-11-10T09:20:00Z"
}
5. Configure Callgoose SQIBS API Filters
5.1 Trigger Filter (Create Incident)
- Payload JSON Key: "status"
- Key Value Contains: Started (Note: Better Stack sends "Started" with a capital S)
- Incident Mapped With: "id"
- Title Field: "title"
- Description Field: "description" (or leave empty to get the whole payload as description)
5.2 Resolve Filter (Resolve Incident)
- Payload JSON Key: "status"
- Key Value Contains: Resolved (Note: Better Stack sends "Resolved" with a capital R)
- Incident Mapped With: "id"
This ensures:
- Every new Better Stack incident creates a Callgoose incident.
- Resolves correctly map to the same incident using the id field.
6. Testing the Integration
- Save the Better Stack webhook configuration.
- Trigger a webhook using the built-in "Send Test" option in Better Stack.
- Verify in Callgoose:
- Check API logs to confirm receipt (200 OK).
- Confirm a new incident is created for the Started status.
- Resolve the monitor in Better Stack (or simulate recovery) and verify the incident resolves in Callgoose.
- Cleanup: Disable API debug logging after successful tests.
7. Security Recommendations
- HTTPS: Use HTTPS at all times.
- Headers: Prefer authentication headers (X-Callgoose-Auth) over query tokens in the URL when possible.
- Secrecy: Avoid exposing token values in shared systems.
- Scope: Use short-lived or environment-specific API tokens for staging setups.
8. Troubleshooting
No Incident Created
- Webhook may be disabled in Better Stack.
- JSON template may contain invalid variables (check for {{ }} vs $ syntax).
- Payload may not match the case sensitivity (Ensure filter checks for Started, not started).
- API Token may be incorrect.
Incident Does Not Resolve
- Payload status must match exactly: Resolved.
- id field must match the trigger event id.
400/500 Errors
- JSON may be malformed (e.g., extra commas, missing braces).
- Invalid characters in body template.
Webhook Not Received
- Endpoint must return a 2xx status code.
- Network or firewall rules may be blocking outgoing requests from Better Stack.
9. Conclusion
Integrating Better Stack with Callgoose SQIBS provides a seamless, real-time incident management workflow by combining Better Stack’s precise uptime monitoring with Callgoose’s automated incident handling.
By using a simple, consistent payload structure and clear API Filter mappings, this integration ensures that trigger and resolve events are accurately reflected within Callgoose. Once configured, the system operates entirely hands-free, enabling faster response times, cleaner observability pipelines, and a unified source of truth for operational incidents.
For further customization or advanced use cases, refer to the official documentation for both Uptrends and Callgoose SQIBS:
