API And Webhooks

The Bitaic API and webhook layer lets engineering, operations, and automation teams retrieve monitoring data, manage monitored resources, configure alert behavior, export operational data, and deliver operational events into internal systems.

When To Use API Versus Webhooks

NeedUseTypical workflow
Read current or historical state on demand.APIQuery targets, checks, metrics, alerts, or exports from a script, dashboard, or internal tool.
Create or update monitoring configuration from automation.APIManage monitored targets, check schedules, alert thresholds, integration settings, and agent metadata.
React when something changes.WebhooksSend alert, recovery, certificate, endpoint, DNS, or domain events to another system.
Connect Bitaic to incident or workflow tools.Integrations and webhooksUse a built-in integration where one exists, and use webhooks for custom routing or in-house automation.

Authentication And Authorization

  • API requests use a Bitaic API token in the Authorization: Bearer <token> header.
  • API tokens are workspace-scoped service tokens created and rotated from Bitaic App settings by users with permission to manage API access.
  • Requests are authorized against the workspace in the URL path and the scopes granted to the token.
  • Administrative API activity is part of the Bitaic audit trail so teams can review configuration and access changes.
Permission requirement

Create and rotate API tokens from an account role that can manage API access, then scope each automation token to the resources and actions it actually needs.

Secret handling

Store API tokens in a secrets manager or protected runtime variable, not in source code, command history, or committed configuration files.

Base URL And Versioning

Base URLhttps://api.bitaic.com/v1
Workspace boundaryWorkspace resources live under /v1/workspaces/{workspace_id}.
Content typeSend and receive JSON with Content-Type: application/json.
TimestampsUse ISO 8601 UTC timestamps in request and response payloads.
Request IDsResponses include request_id and X-Bitaic-Request-Id.
Idempotent writesSend Idempotency-Key on retried POST, PATCH, or DELETE requests when the first outcome is unknown.

Resource Model

ResourcePurposeCommon fields
TargetsMonitored infrastructure objects such as endpoints, domains, and DNS records.id, workspace_id, name, type, status, labels, created_at, updated_at
ChecksScheduled or on-demand monitoring rules attached to targets.id, target_id, type, state, enabled, schedule, thresholds, last_run
MetricsCurrent and historical values for uptime, response time, DNS latency, certificate expiration, and domain status.metric, value, unit, target_id, check_id, observed_at
AlertsAlert records created from threshold crossings, status changes, failures, and recoveries.id, severity, state, summary, source, target_id, check_id, opened_at, resolved_at
AgentsInstalled collectors and their version, status, last report time, and product coverage.id, name, agent_type, version, status, last_seen_at
IntegrationsNotification, incident, webhook, and API-connected routing configuration.id, provider, name, enabled, status, filters, created_at, updated_at

Target And Check Types

Launch productTarget typePrimary check typeKey API usage
Certificate Monitoringendpointssl_certificateCertificate status, expiration metrics, and certificate alert thresholds.
Domain Monitoringdomaindomain_statusDomain continuity status, expiration thresholds, registry metadata, nameserver drift, DNSSEC state, registrar-lock state, and domain alerts.
DNS Monitoringdns_recorddns_resolutionRegional resolver state, authoritative answers, expected-value mismatches, TTL and DNSSEC state, propagation state, latency metrics, and DNS alerts.
Endpoint Monitoringendpointendpoint_availabilityAvailability state, status-code and redirect behavior, response-time metrics, and response-time threshold severity.
Private beta products

Health Monitoring and Windows Event Monitoring remain private beta only and release publicly in Q1 2027. Detailed target types, check types, metrics, events, and troubleshooting fields for those products stay in beta-specific documentation for enrolled workspaces.

Endpoint Reference

MethodPathPurposeUse case
GET/v1/workspaces/{workspace_id}/targetsList monitored targets.Inventory the resources Bitaic is monitoring.
POST/v1/workspaces/{workspace_id}/targetsCreate a monitored target.Add an endpoint, domain, or DNS record.
GET/v1/workspaces/{workspace_id}/targets/{target_id}Retrieve one monitored target.Inspect target metadata, status, labels, and configuration.
PATCH/v1/workspaces/{workspace_id}/targets/{target_id}Update a target.Rename a target, change labels, or update supported config.
DELETE/v1/workspaces/{workspace_id}/targets/{target_id}Remove a monitored target.Stop monitoring a retired resource.
GET/v1/workspaces/{workspace_id}/targets/{target_id}/checksList checks for a target.See which monitoring rules are attached to a resource.
POST/v1/workspaces/{workspace_id}/targets/{target_id}/checksCreate a target check.Add availability, certificate, DNS, or domain checks.
GET/v1/workspaces/{workspace_id}/checks/{check_id}Retrieve one check.Inspect schedule, thresholds, state, and last run.
PATCH/v1/workspaces/{workspace_id}/checks/{check_id}Update a check.Change schedule, thresholds, enabled state, or rule metadata.
DELETE/v1/workspaces/{workspace_id}/checks/{check_id}Remove a check.Stop one monitoring rule while keeping the target.
POST/v1/workspaces/{workspace_id}/checks/{check_id}/runRun an on-demand check.Verify a fix before waiting for scheduled collection.
GET/v1/workspaces/{workspace_id}/metricsRetrieve metrics.Read bounded time-series or rolled-up monitoring data.
GET/v1/workspaces/{workspace_id}/alertsList alerts.Read active and resolved alert records for operations review.
GET/v1/workspaces/{workspace_id}/alerts/{alert_id}Retrieve one alert.Inspect alert source, evidence, timeline, and routing state.
PATCH/v1/workspaces/{workspace_id}/alerts/{alert_id}Update an alert.Acknowledge, annotate, assign, or resolve an alert.
GET/v1/workspaces/{workspace_id}/agentsList agents.Check installed collector status and freshness.
GET/v1/workspaces/{workspace_id}/agents/{agent_id}Retrieve one agent.Inspect version, last-seen time, type, and associated targets.
PATCH/v1/workspaces/{workspace_id}/agents/{agent_id}Update agent metadata.Rename an agent or update supported desired-state metadata.
GET/v1/workspaces/{workspace_id}/integrationsList integrations.Audit configured alert-routing destinations.
POST/v1/workspaces/{workspace_id}/integrationsCreate an integration.Configure a supported alert-routing provider from automation.
GET/v1/workspaces/{workspace_id}/integrations/{integration_id}Retrieve one integration.Inspect provider, enabled state, filters, and last test result.
PATCH/v1/workspaces/{workspace_id}/integrations/{integration_id}Update an integration.Change filters, routing metadata, or enabled state.
DELETE/v1/workspaces/{workspace_id}/integrations/{integration_id}Remove an integration.Disable and remove a retired alert-routing destination.
POST/v1/workspaces/{workspace_id}/integrations/{integration_id}/testSend a test notification.Confirm a configured integration reaches the expected channel.
GET/v1/workspaces/{workspace_id}/webhook-subscriptionsList webhook subscriptions.Audit custom event receivers.
POST/v1/workspaces/{workspace_id}/webhook-subscriptionsCreate a webhook subscription.Deliver selected events to a customer-owned HTTPS endpoint.
GET/v1/workspaces/{workspace_id}/webhook-subscriptions/{subscription_id}Retrieve one webhook subscription.Inspect URL, event filters, enabled state, and signing status.
PATCH/v1/workspaces/{workspace_id}/webhook-subscriptions/{subscription_id}Update a webhook subscription.Change URL, selected events, description, or enabled state.
DELETE/v1/workspaces/{workspace_id}/webhook-subscriptions/{subscription_id}Remove a webhook subscription.Stop delivery to a retired receiver.
POST/v1/workspaces/{workspace_id}/webhook-subscriptions/{subscription_id}/testSend a test webhook.Verify signature handling and receiver availability.
POST/v1/workspaces/{workspace_id}/webhook-subscriptions/{subscription_id}/secret/rotateRotate a webhook signing secret.Replace a subscription secret without changing the receiver URL.
GET/v1/workspaces/{workspace_id}/webhook-deliveriesList webhook delivery attempts.Troubleshoot receiver failures, retries, and duplicates.
POST/v1/workspaces/{workspace_id}/exportsStart an export job.Export alerts, metrics, targets, or audit-ready data.
GET/v1/workspaces/{workspace_id}/exports/{export_id}Retrieve export status.Poll until the export is complete or failed.
GET/v1/workspaces/{workspace_id}/exports/{export_id}/downloadDownload a completed export.Fetch a generated JSON or CSV export.

Create A Monitored Target

Use targets for monitored objects and attach one or more checks to decide what Bitaic should evaluate.

POST /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/targets HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Content-Type: application/json
Idempotency-Key: target-create-20260825-001

{
  "type": "endpoint",
  "name": "Production API",
  "labels": {
    "service": "checkout",
    "environment": "production"
  },
  "config": {
    "url": "https://api.example.com/health",
    "method": "GET",
    "follow_redirects": true,
    "max_redirects": 5,
    "expected_status_codes": ["200-399"],
    "timeout_ms": 10000
  }
}
POST /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/targets HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Content-Type: application/json
Idempotency-Key: target-create-20260826-002

{
  "type": "dns_record",
  "name": "Production API DNS",
  "labels": {
    "service": "checkout",
    "environment": "production"
  },
  "config": {
    "record_name": "www.example.com",
    "record_type": "A"
  }
}
{
  "data": {
    "id": "target_01J5Z8M4Q9K7P6N2H1W8R5T3A1",
    "workspace_id": "workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X",
    "type": "endpoint",
    "name": "Production API",
    "status": "healthy",
    "labels": {
      "service": "checkout",
      "environment": "production"
    },
    "created_at": "2026-08-25T14:30:00Z",
    "updated_at": "2026-08-25T14:30:00Z"
  },
  "request_id": "req_01J5Z8T6N9QVH6CY7W0Z6QG1F2"
}

Create A Check

Checks hold schedules, thresholds, and product-specific rule configuration. The same endpoint target can have both endpoint_availability and ssl_certificate checks.

Endpoint response-time thresholds use thresholds.response_time_ms.warning and thresholds.response_time_ms.critical in whole milliseconds. If omitted, Bitaic uses 1000 ms for warning and 3000 ms for critical; custom values must be supplied together, must be positive integers, and critical must be greater than warning and no higher than the check timeout.

Domain Monitoring uses expiration_alert_days as its numeric threshold. It defaults to 30 calendar days and accepts integers from 1 through 365. Nameserver, DNSSEC, and registrar-lock alerts are expected-state checks: they alert only when the relevant expected value is configured.

DNS Monitoring uses dns_resolution checks with launch record types A, AAAA, CNAME, MX, TXT, NS, and CAA records. Default checks run every 60 seconds from us-east, us-west, and eu-west resolver regions, use a 2-second resolver-query timeout, and use max_latency_ms with a 500 ms default. Optional controls include authoritative_check, expected_ttl_seconds, dnssec_validation, and propagation_grace_period_minutes.

POST /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/targets/target_01J5Z8M4Q9K7P6N2H1W8R5T3A1/checks HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Content-Type: application/json
Idempotency-Key: check-create-20260825-001

{
  "type": "endpoint_availability",
  "enabled": true,
  "schedule": {
    "interval_seconds": 60
  },
  "thresholds": {
    "response_time_ms": {
      "warning": 1000,
      "critical": 3000
    }
  }
}
POST /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/targets/target_01J5Z9D7M4P2Q8R6T1V3W5X7Y/checks HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Content-Type: application/json
Idempotency-Key: check-create-20260826-002

{
  "type": "domain_status",
  "enabled": true,
  "schedule": {
    "interval_hours": 24
  },
  "expiration_alert_days": 30,
  "expected_nameservers": [
    "ns1.example-dns.com",
    "ns2.example-dns.com"
  ],
  "expected_dnssec_state": "enabled",
  "expected_registrar_lock_state": "locked"
}
POST /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/targets/target_01J5ZA9K8W7Q6R5T4Y3U2I1O0/checks HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Content-Type: application/json
Idempotency-Key: check-create-20260826-003

{
  "type": "dns_resolution",
  "enabled": true,
  "schedule": {
    "interval_seconds": 60
  },
  "resolver_regions": [
    "us-east",
    "us-west",
    "eu-west"
  ],
  "expected_values": [
    "203.0.113.10"
  ],
  "alert_on_mismatch": true,
  "max_latency_ms": 500,
  "timeout_ms": 2000,
  "authoritative_check": true,
  "expected_ttl_seconds": {
    "min": 60,
    "max": 3600
  },
  "dnssec_validation": "observe",
  "propagation_grace_period_minutes": 30
}

Retrieve Metrics

Metrics are queried by target, check, metric name, and a bounded time window. Use rollup and interval for charts, reports, and exports that do not need raw samples.

Domain Monitoring emits domain.days_until_expiration when expiration data is available. Domain check records also expose registrar, registry status, nameserver state, DNSSEC state, registrar-lock state, RDAP/WHOIS retrieval state, and checked timestamp.

GET /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/metrics?target_id=target_01J5Z8M4Q9K7P6N2H1W8R5T3A1&metric=endpoint.response_time_ms&from=2026-08-25T13:30:00Z&to=2026-08-25T14:30:00Z&rollup=avg&interval=5m HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Accept: application/json
{
  "data": [
    {
      "target_id": "target_01J5Z8M4Q9K7P6N2H1W8R5T3A1",
      "check_id": "check_01J5ZA8FJ2N7G5Q0HF4P12V7XD",
      "metric": "endpoint.response_time_ms",
      "unit": "ms",
      "value": 248,
      "observed_at": "2026-08-25T14:30:00Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  },
  "request_id": "req_01J5Z8T6N9QVH6CY7W0Z6QG1F2"
}

Pagination, Filtering, And Limits

  • List APIs support cursor pagination with limit and cursor. The default limit is 50, and the maximum limit is 100.
  • Cursor responses include pagination.next_cursor and pagination.has_more.
  • Metric and delivery queries require bounded from and to timestamps.
  • Rate-limit responses include RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, and Retry-After on 429.
AreaCommon filters
Targets and checkstype, target_id, check_type, status, state, enabled, agent_id, label
Alertsstate, severity, source, target_id, check_id, from, to
Metricstarget_id, check_id, metric, from, to, rollup, interval
Webhook deliveriessubscription_id, event_type, status, from, to

Permissions And Token Scopes

Use separate tokens for read-only reporting, configuration automation, alert operations, and integration management. A token can act only inside the workspace and scopes assigned to it.

ScopeAllows
targets:readRead monitored targets and target status.
targets:writeCreate, update, or delete monitored targets.
checks:readRead check configuration and check results.
checks:writeCreate, update, delete, or run checks.
metrics:readRead current and historical metrics.
alerts:readRead alert records.
alerts:writeAcknowledge, annotate, assign, or resolve alerts.
agents:readRead agent inventory and last-seen status.
agents:writeUpdate agent display metadata or desired state.
integrations:readRead integration and webhook configuration.
integrations:writeCreate, update, test, or remove integrations and webhooks.
exports:readRead export status and download completed exports.
exports:writeStart export jobs.

Manage Integrations

Use integration resources for built-in provider destinations such as Slack, Microsoft Teams, email, and PagerDuty preview routing. Custom event receivers use webhook subscriptions.

Provider IDStatusCommon configNotes
slackLaunch-readychannel_id, filters, include_recoveriesBitaic app authorization with posting access to selected channels.
microsoft_teamsLaunch-readyworkflow_webhook_url, filters, include_recoveriesTeams Workflows webhook URL for new channel delivery.
emailLaunch-readyrecipients, filters, include_recoveriesVerified recipients or group inboxes managed from notification settings.
pagerdutyPreviewrouting_key, service_name, severity_map, filtersEvents API v2 routing key with Bitaic alert IDs as dedup keys.
POST /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/integrations HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Content-Type: application/json
Idempotency-Key: integration-create-20260825-001

{
  "provider": "slack",
  "name": "Production operations alerts",
  "enabled": true,
  "filters": {
    "severity": ["warning", "critical"],
    "product": ["endpoint", "ssl"],
    "label": {
      "environment": "production"
    },
    "state": ["open", "resolved"]
  },
  "config": {
    "channel_id": "C0123456789",
    "include_recoveries": true
  }
}
{
  "data": {
    "id": "int_01J5ZAG2FF4V18T8G3J8K4N6XQ",
    "workspace_id": "workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X",
    "provider": "slack",
    "name": "Production operations alerts",
    "enabled": true,
    "status": "active",
    "filters": {
      "severity": ["warning", "critical"],
      "product": ["endpoint", "ssl"],
      "label": {
        "environment": "production"
      },
      "state": ["open", "resolved"]
    },
    "created_at": "2026-08-25T14:30:00Z",
    "updated_at": "2026-08-25T14:30:00Z"
  },
  "request_id": "req_01J5ZAHX5TWW2E1V8W9S3CVR42"
}
  • Integration filters support severity, product, target_id, check_id, label, team, service, and state where the provider and selected event include that field.
  • PagerDuty preview uses Events API v2 routing keys and the Bitaic alert ID as the PagerDuty dedup_key.
  • API keys are created from Bitaic App settings and controlled by token scopes rather than integration routing filters.

Errors And Recovery

StatusMeaningRecovery
400Request body, query, or parameter is malformed.Fix the request syntax and retry.
401Authentication token is missing, expired, or invalid.Rotate or reissue the token, then retry the request.
403The token lacks the required workspace or scope permission.Use a token with the required least-privilege scope.
404The resource does not exist in the active workspace.Check the workspace and resource ID.
409The requested write conflicts with current state.Reload the resource, apply the current state, and retry.
422The request is syntactically valid but fails validation.Fix the field named in the error details and retry.
429The client exceeded a rate limit.Honor Retry-After, reduce concurrency, and use backoff.
5xxBitaic could not complete the request.Retry safe requests with backoff and include the request ID.
{
  "error": {
    "code": "validation_failed",
    "message": "One or more request fields are invalid.",
    "field": "config.expected_status_codes",
    "details": [
      {
        "field": "config.expected_status_codes",
        "message": "At least one expected status code is required."
      }
    ]
  },
  "request_id": "req_01J5Z8W6YF5QA20NHJ9FE7J7VQ"
}

Manage Webhook Subscriptions

Webhook subscriptions define where Bitaic sends events, which event names are selected, which filters apply, and whether delivery is currently enabled.

FieldMeaning
idWebhook subscription identifier.
urlCustomer-owned HTTPS receiver URL.
eventsExplicit event names delivered to the subscription.
filtersOptional severity, product, target, check, agent, or label filters.
enabledUser-controlled delivery pause or resume flag.
statusDelivery health such as active, degraded, or disabled_by_system.
secret_last_rotated_atTimestamp of the most recent signing-secret rotation.
POST /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/webhook-subscriptions HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Content-Type: application/json
Idempotency-Key: webhook-subscription-20260825-001

{
  "url": "https://automation.example.com/bitaic/webhooks",
  "description": "Production operations receiver",
  "events": [
    "alert.created",
    "alert.resolved",
    "endpoint.check_failed",
    "ssl.expiring",
    "agent.offline"
  ],
  "filters": {
    "severity": ["warning", "critical"],
    "product": ["endpoint", "ssl"],
    "label": {
      "environment": "production"
    }
  },
  "enabled": true
}
{
  "data": {
    "id": "whsub_01J5Z8ZYK2M4X7P2Q9BH8E3E2R",
    "workspace_id": "workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X",
    "url": "https://automation.example.com/bitaic/webhooks",
    "description": "Production operations receiver",
    "events": [
      "alert.created",
      "alert.resolved",
      "endpoint.check_failed",
      "ssl.expiring",
      "agent.offline"
    ],
    "filters": {
      "severity": ["warning", "critical"],
      "product": ["endpoint", "ssl"],
      "label": {
        "environment": "production"
      }
    },
    "enabled": true,
    "status": "active",
    "signing_secret": "whsec_01J5Z92Y3EJ9G5X8S5PS7VN2BB",
    "secret_last_rotated_at": "2026-08-25T14:30:00Z",
    "created_at": "2026-08-25T14:30:00Z",
    "updated_at": "2026-08-25T14:30:00Z"
  },
  "request_id": "req_01J5Z930ZPK7VYV3XG3C7Z9WNQ"
}
  • Bitaic returns signing_secret only when a subscription is created or rotated.
  • Rotate a secret with /v1/workspaces/{workspace_id}/webhook-subscriptions/{subscription_id}/secret/rotate.
  • During rotation, Bitaic includes signatures for the current and previous secret for 24 hours so receivers can deploy the new secret without dropping events.

Webhook Events

EventWhen it firesPayload focusCommon consumers
alert.createdA new alert opens.alert, target, checkIncident tools, chat channels, ticketing systems.
alert.updatedAn alert changes severity, owner, note, or routing state.alert, changesIncident records, automation workflows.
alert.resolvedAn alert returns to clear or resolved state.alert, resolutionIncident closure, status summaries, reporting.
endpoint.check_failedAn endpoint availability check fails.target, check, result, alertOn-call routing, service dashboards.
endpoint.recoveredAn endpoint returns to healthy state.target, check, result, alertRecovery automation, incident updates.
ssl.expiringA certificate enters its configured expiration window.target, check, certificate, alertRenewal workflows, ticket queues.
ssl.renewedA certificate check observes a renewed certificate.target, check, certificateRenewal confirmation, compliance evidence.
domain.status_changedA monitored domain moves between healthy, at-risk, degraded, unavailable, or unknown states.target, check, domain, alertDomain operations, escalation workflows.
dns.lookup_failedA DNS lookup cannot resolve successfully.target, check, dns_result, alertNetwork operations, incident workflows.
dns.record_mismatchA DNS answer differs from the configured expected value.target, check, dns_result, alertChange review, DNS operations.
agent.offlineAn agent stops reporting within its expected window.agent, target, alertCollector health automation, operations channels.
agent.recoveredAn agent resumes reporting.agent, target, alertRecovery automation, operational reports.
webhook.testA user sends a test delivery for a subscription.subscription, testReceiver validation, deployment checks.

Webhook Payload And Security

Webhook deliveries use HTTPS, include a unique event ID, and provide the event name, delivery timestamp, workspace context, and related resource payload. Receivers should verify the signature before processing the event.

Receiver validation

Reject unsigned deliveries, failed signature checks, stale timestamps, and duplicate event IDs before triggering downstream automation.

POST /bitaic/webhooks HTTP/1.1
Host: automation.example.com
Content-Type: application/json
X-Bitaic-Event: alert.created
X-Bitaic-Delivery: whd_01J5Z91CBA9W37F68JTE7W8JEV
X-Bitaic-Timestamp: 2026-08-25T14:30:00Z
X-Bitaic-Signature: v1=<hex_hmac_sha256>
{
  "event_id": "evt_01J5Z91CBA9W37F68JTE7W8JEV",
  "event_type": "alert.created",
  "api_version": "v1",
  "created_at": "2026-08-25T14:30:00Z",
  "workspace_id": "workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X",
  "subscription_id": "whsub_01J5Z8ZYK2M4X7P2Q9BH8E3E2R",
  "delivery_id": "whd_01J5Z91CBA9W37F68JTE7W8JEV",
  "attempt": 1,
  "data": {
    "alert": {
      "id": "alert_01J5Z8P2A9W8H2XP0J4K3V7B8C",
      "severity": "critical",
      "state": "open",
      "summary": "Endpoint response time exceeded threshold",
      "target_id": "target_01J5Z8M4Q9K7P6N2H1W8R5T3A1",
      "check_id": "check_01J5ZA8FJ2N7G5Q0HF4P12V7XD"
    },
    "target": {
      "id": "target_01J5Z8M4Q9K7P6N2H1W8R5T3A1",
      "type": "endpoint",
      "name": "Production API"
    }
  }
}
  • Build the signed value from X-Bitaic-Timestamp + "." + X-Bitaic-Delivery + "." + raw_request_body.
  • Validate X-Bitaic-Signature by calculating an HMAC-SHA256 digest with the webhook signing secret and comparing the v1 value in constant time.
  • Verify the raw request body before JSON parsing, and reject timestamps older than five minutes.
  • Treat event_id and X-Bitaic-Delivery as idempotency values to prevent duplicate processing.
  • Respond with a 2xx status after successful processing.
  • During secret rotation, accept any valid v1 signature generated by either the current or previous signing secret.

Delivery Guarantees And Retries

Webhooks are delivered at least once. Consumers should handle duplicate deliveries and should not depend on global ordering across subscriptions, products, or targets.

ConditionBehaviorRetry handling
2xxDelivery succeeds.No retry.
Network, TLS, timeout, 408, 429, or 5xxTemporary failure.Retry with jitter after roughly 1m, 5m, 15m, 1h, 4h, 12h, 24h, and 48h.
3xx, 400, 401, 403, 404, 410, or 422Terminal failure for that event delivery.No retry.
Repeated production failuresSubscription becomes degraded, then disabled_by_system after 50 consecutive failures or 72 hours after the first failed production delivery without a successful production delivery.Fix the receiver and re-enable the subscription.

Bitaic retains webhook delivery attempt records for 30 days. Test deliveries use the same timeout and signature behavior as production deliveries, but they do not count toward system-disable thresholds.

Webhook Delivery Records

Use delivery records to troubleshoot receiver failures, identify retry timing, and correlate downstream automation with Bitaic event IDs.

StatusMeaning
pendingThe delivery has been queued but not attempted.
deliveredThe receiver returned a 2xx response.
retryingThe last attempt failed temporarily and another attempt is scheduled.
failedThe receiver returned a terminal response or retries were exhausted.
discardedDelivery was skipped because the subscription was disabled.
GET /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/webhook-deliveries?subscription_id=whsub_01J5Z8ZYK2M4X7P2Q9BH8E3E2R&status=retrying&from=2026-08-25T00:00:00Z&to=2026-08-25T23:59:59Z HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Accept: application/json
{
  "data": [
    {
      "id": "whd_01J5Z91CBA9W37F68JTE7W8JEV",
      "event_id": "evt_01J5Z91CBA9W37F68JTE7W8JEV",
      "event_type": "alert.created",
      "subscription_id": "whsub_01J5Z8ZYK2M4X7P2Q9BH8E3E2R",
      "status": "retrying",
      "attempt": 2,
      "response_status": 503,
      "next_attempt_at": "2026-08-25T14:36:00Z",
      "created_at": "2026-08-25T14:30:00Z",
      "updated_at": "2026-08-25T14:31:00Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  },
  "request_id": "req_01J5Z9KJCPZ85FRJN2X7B2S4MD"
}

Data Export

API exports support operational reporting, compliance review, backup, and downstream analytics. Export requests should include the resource area, target scope, time window, and desired output format.

POST /v1/workspaces/workspace_01J5Z82DB7YV6PRPK6K4WSGJ5X/exports HTTP/1.1
Host: api.bitaic.com
Authorization: Bearer <token>
Content-Type: application/json
Idempotency-Key: export-20260825-001

{
  "resource": "alerts",
  "format": "csv",
  "from": "2026-08-01T00:00:00Z",
  "to": "2026-08-25T23:59:59Z",
  "filters": {
    "state": "resolved",
    "severity": ["warning", "critical"]
  }
}

Security Notes

  • Use least-privilege tokens for automation and rotate them on a regular schedule.
  • Separate read-only reporting tokens from tokens that can create, update, or delete configuration.
  • Restrict webhook receivers to HTTPS endpoints controlled by your organization.
  • Log request_id, event_id, and delivery IDs in downstream systems for support and audit review.
  • Avoid forwarding secrets, credentials, or unnecessary sensitive details through webhook payloads or exports.

Related Workflows

  • Integrations for Slack, Microsoft Teams, email, PagerDuty, and custom webhook routing.
  • Certificate Monitoring for certificate status, expiration thresholds, and HTTPS certificate diagnostics.
  • Endpoint Monitoring for endpoint availability, response time, and uptime states.
  • DNS Monitoring for resolver checks, DNS latency, and record mismatches.
  • Domain Monitoring for expiration, registry metadata, nameserver, DNSSEC, and registrar-lock signals.
  • Audit for reviewing administrative and security-relevant activity.