{
  "openapi": "3.0.1",
  "info": {
    "title": "Webhook Debugger, Logger & API Mocking Suite",
    "description": "Enterprise-grade webhook testing suite for developers. Capture, inspect, replay, forward, validate, and mock webhook traffic in real time without tunnels. Includes SSE live streaming, JSON Schema validation, and signature verification for Stripe, GitHub, Shopify, Slack, and custom HMAC workflows.",
    "version": "1.0",
    "x-build-id": "ZxzRjeqrvQg4OyYJA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ar27111994~webhook-debugger-logger/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ar27111994-webhook-debugger-logger",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/ar27111994~webhook-debugger-logger/runs": {
      "post": {
        "operationId": "runs-sync-ar27111994-webhook-debugger-logger",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/ar27111994~webhook-debugger-logger/run-sync": {
      "post": {
        "operationId": "run-sync-ar27111994-webhook-debugger-logger",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "section_urls": {
            "title": "🌐 Dynamic Endpoint Setup",
            "type": "string",
            "description": "Configuration for generated URLs."
          },
          "urlCount": {
            "title": "Number of Endpoints",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many unique webhook URLs to generate for this run (1-50). Default is 3.",
            "default": 3
          },
          "replayMaxRetries": {
            "title": "Replay Max Retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of retry attempts for failed replay requests. Default is 3.",
            "default": 3
          },
          "replayTimeoutMs": {
            "title": "Replay Timeout (ms)",
            "minimum": 1000,
            "maximum": 60000,
            "type": "integer",
            "description": "Timeout for each replay attempt in milliseconds. Default is 10000 (10s).",
            "default": 10000
          },
          "retentionHours": {
            "title": "Retention Window (Hours)",
            "minimum": 1,
            "maximum": 168,
            "type": "integer",
            "description": "How long to keep your webhook URLs active (1-168 hours). After expiry, the webhook stops accepting traffic immediately and its logs are removed from '/logs' during the next cleanup cycle (up to 10 minutes later). Reducing this value via hot-reload only affects new webhooks — pre-existing webhooks keep their original expiry. Logs already pushed to the Apify Dataset are not affected by retention.",
            "default": 24
          },
          "section_limits": {
            "title": "🛡️ Traffic & Payload Controls",
            "type": "string",
            "description": "Safety and parsing controls."
          },
          "maxPayloadSize": {
            "title": "Max Body Size (Bytes)",
            "minimum": 1024,
            "maximum": 104857600,
            "type": "integer",
            "description": "Maximum allowed size for the incoming request body. Defaults to 10MB. Requests exceeding this will be rejected with 413.",
            "default": 10485760
          },
          "enableJSONParsing": {
            "title": "Auto-Parse JSON Payloads",
            "type": "boolean",
            "description": "If enabled, the Actor will automatically convert 'application/json' bodies into searchable dataset objects.",
            "default": true
          },
          "useFixedMemory": {
            "title": "Use Fixed Memory (Opt-out)",
            "type": "boolean",
            "description": "If enabled, the Actor will bypass dynamic RAM calculation and use the manual value specified below.",
            "default": false
          },
          "fixedMemoryMbytes": {
            "title": "Manual Memory Allocation (MB)",
            "minimum": 256,
            "maximum": 32768,
            "type": "integer",
            "description": "Specify the exact RAM (MB) to use when 'Use Fixed Memory' is enabled (e.g., 1024, 2048, 4096). Rounded to nearest power of 2.",
            "default": 2048
          },
          "section_v2_security": {
            "title": "🔑 Enterprise-Grade Security",
            "type": "string",
            "description": "Security settings."
          },
          "maskSensitiveData": {
            "title": "Mask Authentication Headers",
            "type": "boolean",
            "description": "Automatically redact 'Authorization' and 'Cookie' headers from logs to ensure compliance and privacy.",
            "default": true
          },
          "redactBodyPaths": {
            "title": "Redact Payload Paths",
            "type": "array",
            "description": "List of dot-notation paths in the JSON body to redact. Must start with 'body.' (e.g., 'body.token', 'body.auth', 'body.user.password', 'body.payment.card', etc.).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "rateLimitPerMinute": {
            "title": "Management Rate Limit",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum requests per minute for management endpoints (/logs, /info, /replay, etc.). Applied per client IP.",
            "default": 60
          },
          "authKey": {
            "title": "Global API Key",
            "type": "string",
            "description": "Secure all incoming requests. Senders must provide this key via 'Authorization: Bearer' or '?key='."
          },
          "allowedIps": {
            "title": "IP Whitelist (CIDR)",
            "type": "array",
            "description": "Only accept traffic from these specific IPs or CIDR blocks. Leave blank for public access.",
            "items": {
              "type": "string"
            }
          },
          "signatureVerificationSecret": {
            "title": "Webhook Signing Secret",
            "type": "string",
            "description": "Signing secret used by the webhook provider selected in the 'Webhook Signature Verification' settings below."
          },
          "signatureVerification": {
            "title": "Webhook Signature Verification",
            "type": "object",
            "description": "Verify incoming webhook signatures from providers like Stripe, Shopify, GitHub, or Slack. Choose the provider here, then enter its shared secret in the top-level 'Webhook Signing Secret' field above.",
            "properties": {
              "provider": {
                "type": "string",
                "title": "Provider",
                "description": "Webhook provider for signature verification. Its shared secret is configured in the top-level 'Webhook Signing Secret' field above.",
                "enum": [
                  "stripe",
                  "shopify",
                  "github",
                  "slack",
                  "custom"
                ],
                "editor": "select"
              },
              "headerName": {
                "type": "string",
                "title": "Custom Header Name",
                "description": "(Custom Provider Only) The header containing the signature.",
                "editor": "textfield"
              },
              "timestampKey": {
                "type": "string",
                "title": "Timestamp Header Name",
                "description": "(Custom Provider Only) The header containing the timestamp for replay protection.",
                "editor": "textfield"
              },
              "algorithm": {
                "type": "string",
                "title": "Hash Algorithm",
                "description": "(Custom Provider Only) The HMAC algorithm (sha256 or sha1).",
                "enum": [
                  "sha256",
                  "sha1"
                ],
                "default": "sha256",
                "editor": "select"
              },
              "encoding": {
                "type": "string",
                "title": "Signature Encoding",
                "description": "(Custom Provider Only) The encoding of the signature string.",
                "enum": [
                  "hex",
                  "base64"
                ],
                "default": "hex",
                "editor": "select"
              },
              "tolerance": {
                "type": "integer",
                "title": "Timestamp Tolerance (seconds)",
                "description": "Maximum age of request timestamp for replay protection (default: 300).",
                "minimum": 60,
                "maximum": 3600,
                "default": 300,
                "editor": "number"
              }
            }
          },
          "section_alerting": {
            "title": "🔔 Alerting & Notifications",
            "type": "string",
            "description": "Alerting configuration."
          },
          "alerts": {
            "title": "Alert Configuration",
            "type": "object",
            "description": "Configure Slack or Discord notifications for webhook events.",
            "properties": {
              "slack": {
                "type": "object",
                "title": "Slack",
                "description": "Slack alert channel settings for webhook notifications.",
                "properties": {
                  "webhookUrl": {
                    "type": "string",
                    "title": "Slack Webhook URL",
                    "description": "Slack incoming webhook URL for notifications.",
                    "editor": "textfield"
                  }
                }
              },
              "discord": {
                "type": "object",
                "title": "Discord",
                "description": "Discord alert channel settings for webhook notifications.",
                "properties": {
                  "webhookUrl": {
                    "type": "string",
                    "title": "Discord Webhook URL",
                    "description": "Discord webhook URL for notifications.",
                    "editor": "textfield"
                  }
                }
              }
            }
          },
          "alertOn": {
            "title": "Alert Triggers",
            "type": "array",
            "description": "When to send alerts: error, 4xx, 5xx, timeout, signature_invalid",
            "default": [
              "error",
              "5xx"
            ],
            "items": {
              "type": "string"
            }
          },
          "section_v2_response": {
            "title": "🎭 API Mocking & Latency",
            "type": "string",
            "description": "Response settings."
          },
          "defaultResponseCode": {
            "title": "HTTP Status Code",
            "minimum": 100,
            "maximum": 599,
            "type": "integer",
            "description": "Default code to return (200, 201, etc). Use the '__status' query on webhooks to override dynamically.",
            "default": 200
          },
          "defaultResponseBody": {
            "title": "Custom Body Payload",
            "type": "string",
            "description": "The exact data to return to the sender. Supports JSON, XML, or plain text strings."
          },
          "defaultResponseHeaders": {
            "title": "Custom HTTP Headers",
            "type": "object",
            "description": "Define extra headers (e.g., {'X-Custom': 'Value'}) to include in EVERY webhook response."
          },
          "responseDelayMs": {
            "title": "Network Latency (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Simulate slow internet or busy servers by delaying the response (0-10,000ms).",
            "default": 0
          },
          "section_v2_workflows": {
            "title": "🔄 Smart Data Workflows",
            "type": "string",
            "description": "Workflow settings."
          },
          "forwardUrl": {
            "title": "Automated Pipe URL",
            "type": "string",
            "description": "Immediately POST a copy of every captured request to this destination URL."
          },
          "forwardHeaders": {
            "title": "Pass Original Headers",
            "type": "boolean",
            "description": "If enabled, all incoming headers will be forwarded to the destination. Disable this to send a 'clean' request (Type/Length only).",
            "default": true
          },
          "maxForwardRetries": {
            "title": "Forward Max Retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of retry attempts for failed forward requests. Default is 3.",
            "default": 3
          },
          "jsonSchema": {
            "title": "JSON Schema Guard",
            "type": "string",
            "description": "Enforce strict payload structure. Invalid requests will be rejected with a 400 Bad Request."
          },
          "customScript": {
            "title": "Transformation Logic (JS)",
            "type": "string",
            "description": "JavaScript snippet to clean or transform the event before storage. Args: { event, req }."
          },
          "testAndExit": {
            "title": "Automated QA Mode",
            "type": "boolean",
            "description": "Internal test flag: enables immediate exit after healthy startup.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}