continueops_outbound_webhook (Resource)
An outbound webhook: an HTTPS endpoint ContinueOps posts human-in-the-loop approval events to (Settings -> HOL webhooks). generic deliveries are signed with secret (HMAC-SHA256 in X-HOL-Signature); discord and slack deliveries are reshaped for those services and not signed.
Needs an API key whose owner is a tenant owner or admin, minted in their primary tenant.
secret is generated by the platform and returned only when the endpoint is created or its secret is rotated: after terraform import it is null until the next rotation. Increase secret_version to rotate it; the old secret stops verifying at once, so update the receiver in the same change.
Destroy is a soft delete: the endpoint stops receiving events at once; its delivery history is kept.
Example Usage
# Post approval events to your own receiver, signed with HMAC-SHA256.
resource "continueops_outbound_webhook" "approvals" {
name = "Approvals to Zapier"
url = "https://hooks.zapier.com/hooks/catch/123/abc/"
events = ["approval.created", "approval.decided", "approval.resolved"]
# Increase to rotate the signing secret in place.
secret_version = 1
}
# A Discord channel webhook needs no signature.
resource "continueops_outbound_webhook" "discord" {
name = "Approvals to #ops"
url = "https://discord.com/api/webhooks/123/abc"
format = "discord"
}
output "approvals_webhook_secret" {
value = continueops_outbound_webhook.approvals.secret
sensitive = true
}Schema
Required
name(String) Display name, 1 to 200 characters. Can be changed in place.url(String) Where events are posted. Must behttps://on a public host (the dispatcher refuses private, loopback and link-local addresses). Stored exactly as written. At most 2048 characters.
Optional
active(Boolean) Whether events are delivered. Defaulttrue.description(String) Free-text description, at most 2000 characters.events(Set of String) Events delivered to this endpoint, at least one ofapproval.created,approval.decided,approval.resolved,approval.cancelled,approval.timeout. Default: all of them.format(String) Payload shape:generic(signed JSON),discord(a Discord channel webhook URL) orslack(a Slack incoming webhook URL). Defaultgeneric.secret_version(Number) Rotation counter forsecret, kept only in Terraform state. Increase it to have the platform issue a new secret in place (the old one stops verifying immediately). Default1; set to1on import.timeouts(Attributes) (see below for nested schema)
Read-Only
created_at(String) When the endpoint was created (RFC 3339, UTC).id(String) Endpoint id (UUID).last_delivery_at(String) When an event was last delivered (RFC 3339, UTC); null before the first. Never causes a plan diff.last_delivery_status(String) Outcome of the last delivery; null before the first. Never causes a plan diff.secret(String, Sensitive) HMAC signing secret (whsec_...) for verifyinggenericdeliveries. Returned only on create and on rotation; null after import untilsecret_versionis increased.updated_at(String) When the endpoint last changed (RFC 3339, UTC).
Nested Schema for timeouts
Optional:
create(String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).delete(String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.read(String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.update(String) A string that can be parsed as a duration consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours).
Import
Import is supported using the following syntax:
In Terraform v1.5.0 and later, the import block can be used with the id attribute, for example:
import {
to = continueops_outbound_webhook.example
id = "00000000-0000-4000-8000-000000000000"
}The terraform import command can be used, for example:
# Import by id (UUID). secret is only returned at creation, so it is null after
# import; increase secret_version to have the platform issue (and return) a new one.
terraform import continueops_outbound_webhook.example 00000000-0000-4000-8000-000000000000