{
  "swagger": "2.0",
  "info": {
    "title": "Webhook template service",
    "version": "0.1507.0",
    "description": "Send your API key as a bearer token: `Authorization: Bearer <api key>`."
  },
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "securityDefinitions": {
    "ApiKey": {
      "type": "apiKey",
      "in": "header",
      "name": "Authorization",
      "description": "Your API key as a bearer token: `Authorization: Bearer <api key>`."
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ],
  "paths": {
    "/scout/v1/webhook-templates/validate": {
      "post": {
        "operationId": "WebhookTemplateService_validateTemplate",
        "summary": "Validate template",
        "tags": [
          "Webhook Template Service"
        ],
        "description": "Validates a Handlebars webhook template and returns the evaluated payload. Checks for template syntax errors and validates that the result is valid JSON.",
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/ValidateTemplateRequest"
            },
            "required": true,
            "x-example": {
              "template": "<template>"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/ValidationResult"
            },
            "x-example": {
              "valid": true,
              "evaluatedPayload": "<evaluated payload>",
              "errors": [
                {
                  "message": "<message>",
                  "line": 1,
                  "column": 1
                }
              ],
              "warnings": [
                {
                  "message": "<message>"
                }
              ]
            }
          }
        }
      }
    },
    "/scout/v1/webhook-templates/test": {
      "post": {
        "operationId": "WebhookTemplateService_testWebhook",
        "summary": "Test webhook",
        "tags": [
          "Webhook Template Service"
        ],
        "description": "Sends a test webhook using the specified integration and template. This allows users to verify their webhook configuration before using it in procedures.",
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/TestWebhookRequest"
            },
            "required": true,
            "x-example": {
              "integrationRid": "<integration rid>",
              "template": "<template>"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/TestWebhookResponse"
            },
            "x-example": {
              "success": true,
              "statusCode": 1,
              "responseBody": "<response body>",
              "errorMessage": "<error message>",
              "evaluatedPayload": "<evaluated payload>",
              "latencyMillis": 1
            }
          }
        }
      }
    }
  },
  "definitions": {
    "TestWebhookRequest": {
      "description": "Request to send a test webhook",
      "type": "object",
      "properties": {
        "integrationRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "IntegrationRid",
          "description": "RID of the SimpleWebhookIntegration to use"
        },
        "template": {
          "type": "string",
          "description": "Handlebars template for webhook payload"
        },
        "sampleContext": {
          "type": "object",
          "additionalProperties": {},
          "description": "Sample variable values for template evaluation"
        },
        "eventType": {
          "type": "string",
          "description": "Event type header value (default: test.webhook)"
        }
      },
      "required": [
        "integrationRid",
        "template"
      ],
      "example": {
        "integrationRid": "<integration rid>",
        "template": "<template>"
      }
    },
    "TestWebhookResponse": {
      "description": "Result of test webhook delivery",
      "type": "object",
      "properties": {
        "success": {
          "type": "boolean",
          "description": "Whether the webhook was delivered successfully"
        },
        "statusCode": {
          "type": "integer",
          "format": "int32",
          "description": "HTTP status code from the webhook endpoint, or 0 if delivery failed before any HTTP request was sent (for example due to template errors, invalid JSON, or URL validation failures)."
        },
        "responseBody": {
          "type": "string",
          "description": "Response body from webhook endpoint"
        },
        "errorMessage": {
          "type": "string",
          "description": "Error message if delivery failed"
        },
        "evaluatedPayload": {
          "type": "string",
          "description": "The actual JSON payload that was sent"
        },
        "latencyMillis": {
          "type": "integer",
          "format": "int64",
          "description": "Time taken to deliver webhook in milliseconds"
        }
      },
      "required": [
        "success",
        "statusCode",
        "latencyMillis"
      ]
    },
    "ValidateTemplateRequest": {
      "description": "Request to validate a Handlebars webhook template",
      "type": "object",
      "properties": {
        "template": {
          "type": "string",
          "description": "Handlebars template string to validate"
        },
        "sampleContext": {
          "type": "object",
          "additionalProperties": {},
          "description": "Sample variable values for template evaluation"
        }
      },
      "required": [
        "template"
      ],
      "example": {
        "template": "<template>"
      }
    },
    "ValidationError": {
      "description": "A validation error with optional location information",
      "type": "object",
      "properties": {
        "message": {
          "type": "string",
          "description": "Error message"
        },
        "line": {
          "type": "integer",
          "format": "int32",
          "description": "Line number where error occurred"
        },
        "column": {
          "type": "integer",
          "format": "int32",
          "description": "Column number where error occurred"
        }
      },
      "required": [
        "message"
      ]
    },
    "ValidationResult": {
      "description": "Result of template validation",
      "type": "object",
      "properties": {
        "valid": {
          "type": "boolean",
          "description": "Whether the template is syntactically valid and produces valid JSON"
        },
        "evaluatedPayload": {
          "type": "string",
          "description": "Evaluated JSON payload if template is valid"
        },
        "errors": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValidationError"
          },
          "description": "List of validation errors"
        },
        "warnings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValidationWarning"
          },
          "description": "List of validation warnings"
        }
      },
      "required": [
        "valid"
      ]
    },
    "ValidationWarning": {
      "description": "A validation warning",
      "type": "object",
      "properties": {
        "message": {
          "type": "string",
          "description": "Warning message"
        }
      },
      "required": [
        "message"
      ]
    }
  },
  "tags": [
    {
      "name": "Webhook Template Service",
      "x-displayName": "Webhook template service"
    }
  ]
}
