{
  "openapi": "3.0.1",
  "info": {
    "title": "OpenTelemetry Demo Telemetry Generator",
    "description": "Generate realistic, correlated OpenTelemetry traces, metrics and logs for demos, POCs and trainings. Scripted incident scenarios streamed over OTLP to any observability backend.",
    "version": "0.1",
    "x-build-id": "es00Teo04N8MtYWUa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/michiganpublictech~otel-demo-generator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-michiganpublictech-otel-demo-generator",
        "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/michiganpublictech~otel-demo-generator/runs": {
      "post": {
        "operationId": "runs-sync-michiganpublictech-otel-demo-generator",
        "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/michiganpublictech~otel-demo-generator/run-sync": {
      "post": {
        "operationId": "run-sync-michiganpublictech-otel-demo-generator",
        "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": {
          "dryRun": {
            "title": "Dry run (preview only — send nothing, free)",
            "type": "boolean",
            "description": "Generate the scenario but do not send it. Stores one minute of sample OTLP/JSON payloads (SAMPLE_TRACES.json, SAMPLE_METRICS.json, SAMPLE_LOGS.json), the demo guide (DEMO_GUIDE.md) and volume estimates in the key-value store. Dry runs are never charged and ignore the endpoint and credentials. Uncheck to send data.",
            "default": false
          },
          "vendorPreset": {
            "title": "Backend (vendor preset)",
            "enum": [
              "generic-otlp",
              "otel-collector",
              "honeycomb",
              "grafana-cloud",
              "new-relic",
              "elastic",
              "dynatrace",
              "signoz",
              "jaeger",
              "uptrace",
              "axiom"
            ],
            "type": "string",
            "description": "Where the telemetry goes. Presets fill in the default endpoint and signal paths and check the authentication headers each vendor expects. Endpoints and header names follow the vendors' public docs — confirm them in your vendor's OTLP documentation.",
            "default": "generic-otlp"
          },
          "otlpEndpoint": {
            "title": "OTLP/HTTP endpoint (base URL)",
            "type": "string",
            "description": "Base URL of the OTLP/HTTP receiver; the Actor appends /v1/traces, /v1/metrics and /v1/logs. Required unless the preset has a default (Honeycomb, New Relic, SigNoz, Uptrace, Axiom). Examples: https://otlp.example.com, https://collector.example.com:4318, https://otlp-gateway-prod-us-east-0.grafana.net/otlp, https://{env-id}.live.dynatrace.com/api/v2/otlp. Use https://. Must be reachable from the public internet; ports 80, 443, 4318, 8080 and 8443 are allowed."
          },
          "headers": {
            "title": "Headers (secret)",
            "type": "string",
            "description": "Authentication and routing headers, one per line as 'Name: value' (a JSON object also works). Examples: 'x-honeycomb-team: <key>', 'api-key: <license key>', 'Authorization: Api-Token <token>', 'Authorization: Bearer <token>'. Stored encrypted; values are never written to the output or logs."
          },
          "basicAuthUser": {
            "title": "Basic auth user (optional)",
            "type": "string",
            "description": "Builds 'Authorization: Basic base64(user:password)' for you — e.g. the Grafana Cloud instance ID. Replaces any Authorization header above."
          },
          "basicAuthPassword": {
            "title": "Basic auth password / token (secret)",
            "type": "string",
            "description": "Password or token for Basic auth (e.g. a Grafana Cloud access policy token with write scopes)."
          },
          "protocol": {
            "title": "Protocol",
            "enum": [
              "http/protobuf",
              "http/json"
            ],
            "type": "string",
            "description": "OTLP/HTTP encoding. Binary protobuf is supported everywhere; JSON (with hex trace/span IDs per the OTLP spec) is switched to protobuf automatically for vendors that only accept protobuf.",
            "default": "http/protobuf"
          },
          "compression": {
            "title": "Compression",
            "enum": [
              "gzip",
              "none"
            ],
            "type": "string",
            "description": "gzip reduces egress and request size by ~5-8x.",
            "default": "gzip"
          },
          "confirmAuthorization": {
            "title": "I own or am authorized to send data to this endpoint",
            "type": "boolean",
            "description": "Required when sending (not for dry runs). The data is synthetic, but it counts toward the backend's ingest volume and bill. Don't send it to production tenants without the owner's consent.",
            "default": false
          },
          "scenario": {
            "title": "Scenario",
            "enum": [
              "healthy-baseline",
              "checkout-latency-incident",
              "bad-deployment-rollback",
              "database-slow-queries",
              "memory-leak-oom",
              "cache-stampede",
              "third-party-outage",
              "traffic-surge",
              "security-anomaly"
            ],
            "type": "string",
            "description": "The story the telemetry tells: a healthy baseline or an incident with a clear root cause and recovery. See the README for what each demo shows.",
            "default": "checkout-latency-incident"
          },
          "industry": {
            "title": "Industry (system topology)",
            "enum": [
              "ecommerce",
              "fintech",
              "saas",
              "logistics"
            ],
            "type": "string",
            "description": "Which microservice system to simulate. Each has 7-10 services in Java, Go, Python, Node.js and .NET plus databases, caches, a message broker and third-party APIs.",
            "default": "ecommerce"
          },
          "incidentStartMinute": {
            "title": "Incident start (minute)",
            "minimum": 0,
            "maximum": 119,
            "type": "integer",
            "description": "Minute (from the start of the run) when the incident begins. Default 5 (fitted automatically for runs shorter than 15 minutes). Start + duration must fit inside the run."
          },
          "incidentDurationMinutes": {
            "title": "Incident duration",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "How long the incident lasts, including onset and recovery phases. Default 8."
          },
          "incidentSeverity": {
            "title": "Incident severity",
            "enum": [
              "low",
              "medium",
              "high"
            ],
            "type": "string",
            "description": "Scales latency, error rates and other effects of the incident.",
            "default": "medium"
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "live",
              "backfill"
            ],
            "type": "string",
            "description": "live: stream in real time for durationMinutes (data every ~15 s) — best during a live demo; the run lasts as long as durationMinutes, so set the run timeout higher. backfill: timestamps cover the last durationMinutes ending now and are sent as fast as possible — best to prefill dashboards before a demo.",
            "default": "live"
          },
          "durationMinutes": {
            "title": "Duration",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "Simulated minutes of telemetry (1-120). Each delivered minute is one 'telemetry-minute' event.",
            "default": 15
          },
          "trafficLevel": {
            "title": "Traffic level",
            "enum": [
              "low",
              "medium",
              "high"
            ],
            "type": "string",
            "description": "Request traces per minute at baseline: low ≈ 30, medium ≈ 120, high ≈ 600 (hard cap 1,500/min during surges). Async consumer traces come on top. See the README for ingest volume per level.",
            "default": "medium"
          },
          "signals": {
            "title": "Signals",
            "type": "array",
            "description": "Which signals to send. Default: all three (traces, metrics, logs).",
            "items": {
              "type": "string",
              "enum": [
                "traces",
                "metrics",
                "logs"
              ],
              "enumTitles": [
                "Traces",
                "Metrics",
                "Logs"
              ]
            },
            "default": [
              "traces",
              "metrics",
              "logs"
            ]
          },
          "seed": {
            "title": "Seed (optional)",
            "minimum": 0,
            "maximum": 2147483647,
            "type": "integer",
            "description": "Same seed + same inputs = the same telemetry (IDs, values, timings relative to the start). Leave empty for a random seed; the seed used is reported in the output."
          },
          "environment": {
            "title": "Environment",
            "type": "string",
            "description": "deployment.environment.name on every resource.",
            "default": "demo"
          },
          "serviceNamespace": {
            "title": "Service namespace",
            "type": "string",
            "description": "service.namespace and k8s.namespace.name. Defaults to the industry (shop, bank, saas, logistics)."
          },
          "companyName": {
            "title": "Company name (optional)",
            "type": "string",
            "description": "Adds app.company to every resource and shows in the demo guide — handy for prospect-branded POCs."
          },
          "extraResourceAttributes": {
            "title": "Extra resource attributes",
            "type": "object",
            "description": "Up to 20 additional resource attributes (string, number or boolean values), e.g. {\"team\": \"presales\", \"demo.id\": \"acme-poc\"}. service.name, service.instance.id and app.synthetic cannot be overridden."
          },
          "maxBatchSize": {
            "title": "Max items per request",
            "minimum": 100,
            "maximum": 10000,
            "type": "integer",
            "description": "Upper bound on spans / data points / log records per OTLP request (requests are also kept under ~3 MB). Lower it if the backend answers 413.",
            "default": 2000
          },
          "metricsTemporality": {
            "title": "Metrics temporality",
            "enum": [
              "auto",
              "cumulative",
              "delta"
            ],
            "type": "string",
            "description": "auto: the preset's preference (delta for Dynatrace, cumulative elsewhere). In delta mode up/down counters are sent as gauges.",
            "default": "auto"
          },
          "failOnSeverity": {
            "title": "Fail run at severity",
            "enum": [
              "none",
              "critical",
              "high",
              "medium",
              "low"
            ],
            "type": "string",
            "description": "CI gate on delivery health: mark the run as FAILED when any finding (e.g. authentication rejected = critical, endpoint not found = high) is at or above this severity. 'none' disables the gate.",
            "default": "none"
          },
          "disabledRules": {
            "title": "Disabled rules",
            "type": "array",
            "description": "Rule IDs to skip, e.g. OTD-CFG-010 (see RULES.md). Requires the custom_rules feature (Pro plan and above); otherwise ignored with a note.",
            "items": {
              "type": "string"
            }
          },
          "licenseKey": {
            "title": "License key",
            "type": "string",
            "description": "Optional. Enterprise / prepaid license key. Store users don't need one."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}