Files
hatchet/api-contracts/openapi/openapi.yaml
matt d6f8be2c0f Feat: OLAP Table for CEL Eval Failures (#2012)
* feat: add table, wire up partitioning

* feat: wire failures into the OLAP db from rabbit

* feat: bubble failures up to controller

* fix: naming

* fix: hack around enum type

* fix: typo

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix: typos

* fix: migration name

* feat: log debug failure

* feat: pub message from debug endpoint to log failure

* fix: error handling

* fix: use ingestor

* fix: olap suffix

* fix: pass source through

* fix: dont log ingest failure

* fix: rm debug as enum opt

* chore: gen

* Feat: Webhooks (#1978)

* feat: migration + go gen

* feat: non unique source name

* feat: api types

* fix: rm cruft

* feat: initial api for webhooks

* feat: handle encryption of incoming keys

* fix: nil pointer errors

* fix: import

* feat: add endpoint for incoming webhooks

* fix: naming

* feat: start wiring up basic auth

* feat: wire up cel event parsing

* feat: implement authentication

* fix: hack for plain text content

* feat: add source to enum

* feat: add source name enum

* feat: db source name enum fix

* fix: use source name enums

* feat: nest sources

* feat: first pass at stripe

* fix: clean up source name passing

* fix: use unique name for webhook

* feat: populator test

* fix: null values

* fix: ordering

* fix: rm unnecessary index

* fix: validation

* feat: validation on create

* fix: lint

* fix: naming

* feat: wire triggering webhook name through to events table

* feat: cleanup + python gen + e2e test for basic auth

* feat: query to insert webhook validation errors

* refactor: auth handler

* fix: naming

* refactor: validation errors, part II

* feat: wire up writes through olap

* fix: linting, fallthrough case

* fix: validation

* feat: tests for failure cases for basic auth

* feat: expand tests

* fix: correctly return 404 out of task getter

* chore: generated stuff

* fix: rm cruft

* fix: longer sleep

* debug: print name + events to logs

* feat: limit to N

* feat: add limit env var

* debug: ci test

* fix: apply namespaces to keys

* fix: namespacing, part ii

* fix: sdk config

* fix: handle prefixing

* feat: handle partitioning logic

* chore: gen

* feat: add webhook limit

* feat: wire up limits

* fix: gen

* fix: reverse order of generic fallthrough

* fix: comment for potential unexpected behavior

* fix: add check constraints, improve error handling

* chore: gen

* chore: gen

* fix: improve naming

* feat: scaffold webhooks page

* feat: sidebar

* feat: first pass at page

* feat: improve feedback on UI

* feat: initial work on create modal

* feat: change default to basic

* fix: openapi spec discriminated union

* fix: go side

* feat: start wiring up placeholders for stripe and github

* feat: pre-populated fields for Stripe + Github

* feat: add name section

* feat: copy improvements, show URL

* feat: UI cleanup

* fix: check if tenant populator errors

* feat: add comments

* chore: gen again

* fix: default name

* fix: styling

* fix: improve stripe header processing

* feat: docs, part 1

* fix: lint

* fix: migration order

* feat: implement rate limit per-webhook

* feat: comment

* feat: clean up docs

* chore: gen

* fix: migration versions

* fix: olap naming

* fix: partitions

* chore: gen

* feat: store webhook cel eval failures properly

* fix: pk order

* fix: auth tweaks, move fetches out of populator

* fix: pgtype.Text instead of string pointer

* chore: gen

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-30 13:27:38 -04:00

234 lines
10 KiB
YAML

openapi: 3.1.0
servers:
- url: ""
info:
version: 1.0.0
title: Hatchet API
description: The Hatchet API
security:
- bearerAuth: []
- cookieAuth: []
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
cookieAuth:
type: apiKey
in: cookie
name: hatchet
schemas:
$ref: "./components/schemas/_index.yaml"
paths:
/api/v1/stable/tasks/{task}:
$ref: "./paths/v1/tasks/tasks.yaml#/getTask"
/api/v1/stable/tasks/{task}/task-events:
$ref: "./paths/v1/tasks/tasks.yaml#/listTaskEvents"
/api/v1/stable/tasks/{task}/logs:
$ref: "./paths/v1/tasks/tasks.yaml#/listLogs"
/api/v1/stable/tenants/{tenant}/tasks/cancel:
$ref: "./paths/v1/tasks/tasks.yaml#/cancelTasks"
/api/v1/stable/tenants/{tenant}/tasks/replay:
$ref: "./paths/v1/tasks/tasks.yaml#/replayTasks"
/api/v1/stable/dags/tasks:
$ref: "./paths/v1/tasks/tasks.yaml#/listTasksByDAGIds"
/api/v1/stable/tenants/{tenant}/workflow-runs:
$ref: "./paths/v1/workflow-runs/workflow_run.yaml#/listWorkflowRuns"
/api/v1/stable/tenants/{tenant}/workflow-runs/display-names:
$ref: "./paths/v1/workflow-runs/workflow_run.yaml#/listWorkflowRunDisplayNames"
/api/v1/stable/tenants/{tenant}/workflow-runs/trigger:
$ref: "./paths/v1/workflow-runs/workflow_run.yaml#/trigger"
/api/v1/stable/workflow-runs/{v1-workflow-run}:
$ref: "./paths/v1/workflow-runs/workflow_run.yaml#/getWorkflowRunDetails"
/api/v1/stable/workflow-runs/{v1-workflow-run}/status:
$ref: "./paths/v1/workflow-runs/workflow_run.yaml#/getWorkflowRunStatus"
/api/v1/stable/workflow-runs/{v1-workflow-run}/task-events:
$ref: "./paths/v1/workflow-runs/workflow_run.yaml#/listTaskEventsForWorkflowRun"
/api/v1/stable/workflow-runs/{v1-workflow-run}/task-timings:
$ref: "./paths/v1/workflow-runs/workflow_run.yaml#/getTimings"
/api/v1/stable/tenants/{tenant}/task-metrics:
$ref: "./paths/v1/tasks/tasks.yaml#/getTaskStatusMetrics"
/api/v1/stable/tenants/{tenant}/task-point-metrics:
$ref: "./paths/v1/tasks/tasks.yaml#/getTaskPointMetrics"
/api/v1/stable/tenants/{tenant}/events:
$ref: "./paths/v1/events/event.yaml#/V1EventList"
/api/v1/stable/tenants/{tenant}/events/keys:
$ref: "./paths/v1/events/event.yaml#/keys"
/api/v1/stable/tenants/{tenant}/filters:
$ref: "./paths/v1/filters/filter.yaml#/V1FilterListCreate"
/api/v1/stable/tenants/{tenant}/filters/{v1-filter}:
$ref: "./paths/v1/filters/filter.yaml#/V1FilterGetDeleteUpdate"
/api/v1/stable/tenants/{tenant}/webhooks:
$ref: "./paths/v1/webhooks/webhook.yaml#/V1WebhookListCreate"
# !!! IMPORTANT: we directly reference this path in the webhook rate limiter in `webhook_rate_limit.go`
# changing this path will break the rate limiter. !!!
/api/v1/stable/tenants/{tenant}/webhooks/{v1-webhook}:
$ref: "./paths/v1/webhooks/webhook.yaml#/V1WebhookGetDeleteReceive"
/api/v1/stable/tenants/{tenant}/cel/debug:
$ref: "./paths/v1/cel/cel.yaml#/V1CELDebug"
/api/ready:
$ref: "./paths/metadata/metadata.yaml#/readiness"
/api/live:
$ref: "./paths/metadata/metadata.yaml#/liveness"
/api/v1/meta:
$ref: "./paths/metadata/metadata.yaml#/metadata"
/api/v1/cloud/metadata:
$ref: "./paths/metadata/metadata.yaml#/cloudMetadata"
/api/v1/meta/integrations:
$ref: "./paths/metadata/metadata.yaml#/listIntegrations"
/api/v1/users/login:
$ref: "./paths/user/user.yaml#/login"
/api/v1/users/google/start:
$ref: "./paths/user/user.yaml#/oauth-start-google"
/api/v1/users/google/callback:
$ref: "./paths/user/user.yaml#/oauth-callback-google"
/api/v1/users/github/start:
$ref: "./paths/user/user.yaml#/oauth-start-github"
/api/v1/users/github/callback:
$ref: "./paths/user/user.yaml#/oauth-callback-github"
/api/v1/tenants/{tenant}/slack/start:
$ref: "./paths/user/user.yaml#/oauth-start-slack"
/api/v1/users/slack/callback:
$ref: "./paths/user/user.yaml#/oauth-callback-slack"
/api/v1/sns/{tenant}/{event}:
$ref: "./paths/ingestors/ingestors.yaml#/sns"
/api/v1/tenants/{tenant}/sns:
$ref: "./paths/ingestors/ingestors.yaml#/snsIntegration"
/api/v1/tenants/{tenant}/alerting-email-groups:
$ref: "./paths/tenant/tenant.yaml#/tenantAlertEmailGroups"
/api/v1/tenants/{tenant}/resource-policy:
$ref: "./paths/tenant/tenant.yaml#/tenantResourcePolicy"
/api/v1/alerting-email-groups/{alert-email-group}:
$ref: "./paths/tenant/tenant.yaml#/alertEmailGroup"
/api/v1/sns/{sns}:
$ref: "./paths/ingestors/ingestors.yaml#/deleteSNS"
/api/v1/tenants/{tenant}/slack:
$ref: "./paths/slack/slack.yaml#/slackWebhook"
/api/v1/slack/{slack}:
$ref: "./paths/slack/slack.yaml#/deleteSlack"
/api/v1/users/current:
$ref: "./paths/user/user.yaml#/current"
/api/v1/users/password:
$ref: "./paths/user/user.yaml#/update-password"
/api/v1/users/register:
$ref: "./paths/user/user.yaml#/register"
/api/v1/users/logout:
$ref: "./paths/user/user.yaml#/logout"
/api/v1/users/memberships:
$ref: "./paths/user/user.yaml#/memberships"
/api/v1/users/invites:
$ref: "./paths/user/user.yaml#/invites"
/api/v1/users/invites/accept:
$ref: "./paths/user/user.yaml#/acceptInvite"
/api/v1/users/invites/reject:
$ref: "./paths/user/user.yaml#/rejectInvite"
/api/v1/tenants:
$ref: "./paths/tenant/tenant.yaml#/tenants"
/api/v1/tenants/{tenant}:
$ref: "./paths/tenant/tenant.yaml#/updateTenants"
/api/v1/tenants/{tenant}/alerting/settings:
$ref: "./paths/tenant/tenant.yaml#/tenantAlertingSettings"
/api/v1/tenants/{tenant}/invites:
$ref: "./paths/tenant/tenant.yaml#/invites"
/api/v1/tenants/{tenant}/invites/{tenant-invite}:
$ref: "./paths/tenant/tenant.yaml#/inviteScoped"
/api/v1/tenants/{tenant}/api-tokens:
$ref: "./paths/api-tokens/api_tokens.yaml#/withTenant"
/api/v1/api-tokens/{api-token}:
$ref: "./paths/api-tokens/api_tokens.yaml#/revoke"
/api/v1/tenants/{tenant}/queue-metrics:
$ref: "./paths/tenant/tenant.yaml#/getQueueMetrics"
/api/v1/tenants/{tenant}/step-run-queue-metrics:
$ref: "./paths/tenant/tenant.yaml#/getStepRunQueueMetrics"
/api/v1/tenants/{tenant}/events:
$ref: "./paths/event/event.yaml#/withTenant"
/api/v1/tenants/{tenant}/events/bulk:
$ref: "./paths/event/event.yaml#/bulkCreateEvents"
/api/v1/tenants/{tenant}/events/replay:
$ref: "./paths/event/event.yaml#/replayEvents"
/api/v1/tenants/{tenant}/events/cancel:
$ref: "./paths/event/event.yaml#/cancelEvents"
/api/v1/tenants/{tenant}/rate-limits:
$ref: "./paths/rate-limits/rate_limits.yaml#/withTenant"
/api/v1/tenants/{tenant}/members:
$ref: "./paths/tenant/tenant.yaml#/members"
/api/v1/tenants/{tenant}/members/{member}:
$ref: "./paths/tenant/tenant.yaml#/member"
/api/v1/events/{event}:
$ref: "./paths/event/event.yaml#/withEvent"
/api/v1/events/{event}/data:
$ref: "./paths/event/event.yaml#/eventData"
/api/v1/tenants/{tenant}/events/keys:
$ref: "./paths/event/event.yaml#/keys"
/api/v1/tenants/{tenant}/workflows:
$ref: "./paths/workflow/workflow.yaml#/withTenant"
/api/v1/tenants/{tenant}/workflows/{workflow}/scheduled:
$ref: "./paths/workflow/workflow.yaml#/scheduledCreate"
/api/v1/tenants/{tenant}/workflows/scheduled:
$ref: "./paths/workflow/workflow.yaml#/scheduledList"
/api/v1/tenants/{tenant}/workflows/scheduled/{scheduled-workflow-run}:
$ref: "./paths/workflow/workflow.yaml#/scheduled"
/api/v1/tenants/{tenant}/workflows/{workflow}/crons:
$ref: "./paths/workflow/workflow.yaml#/cronsCreate"
/api/v1/tenants/{tenant}/workflows/crons:
$ref: "./paths/workflow/workflow.yaml#/cronsList"
/api/v1/tenants/{tenant}/workflows/crons/{cron-workflow}:
$ref: "./paths/workflow/workflow.yaml#/crons"
/api/v1/tenants/{tenant}/workflows/cancel:
$ref: "./paths/workflow/workflow.yaml#/cancelWorkflowRuns"
/api/v1/workflows/{workflow}:
$ref: "./paths/workflow/workflow.yaml#/withWorkflow"
/api/v1/workflows/{workflow}/versions:
$ref: "./paths/workflow/workflow.yaml#/workflowVersion"
/api/v1/workflows/{workflow}/trigger:
$ref: "./paths/workflow/workflow.yaml#/triggerWorkflow"
/api/v1/workflows/{workflow}/metrics:
$ref: "./paths/workflow/workflow.yaml#/getMetrics"
/api/v1/step-runs/{step-run}/logs:
$ref: "./paths/log/log.yaml#/withStepRun"
/api/v1/step-runs/{step-run}/events:
$ref: "./paths/step-run/step-run.yaml#/listEvents"
/api/v1/tenants/{tenant}/workflow-runs/{workflow-run}/step-run-events:
$ref: "./paths/step-run/step-run.yaml#/listStepRunEventsForWorkflowRun"
/api/v1/step-runs/{step-run}/archives:
$ref: "./paths/step-run/step-run.yaml#/listArchives"
/api/v1/tenants/{tenant}/workflows/{workflow}/worker-count:
$ref: "./paths/workflow/workflow.yaml#/workflowWorkersCount"
/api/v1/tenants/{tenant}/workflows/runs:
$ref: "./paths/workflow/workflow.yaml#/workflowRuns"
/api/v1/tenants/{tenant}/workflow-runs/replay:
$ref: "./paths/workflow-run/workflow-run.yaml#/replayWorkflowRuns"
/api/v1/tenants/{tenant}/workflows/runs/metrics:
$ref: "./paths/workflow/workflow.yaml#/workflowRunsMetrics"
/api/v1/tenants/{tenant}/workflow-runs/{workflow-run}:
$ref: "./paths/workflow/workflow.yaml#/workflowRun"
/api/v1/tenants/{tenant}/workflow-runs/{workflow-run}/shape:
$ref: "./paths/workflow/workflow.yaml#/workflowRunShape"
/api/v1/tenants/{tenant}/step-runs/{step-run}:
$ref: "./paths/step-run/step-run.yaml#/stepRunScoped"
/api/v1/tenants/{tenant}/step-runs/{step-run}/rerun:
$ref: "./paths/step-run/step-run.yaml#/rerunStepRun"
/api/v1/tenants/{tenant}/step-runs/{step-run}/cancel:
$ref: "./paths/step-run/step-run.yaml#/cancelStepRun"
/api/v1/tenants/{tenant}/step-runs/{step-run}/schema:
$ref: "./paths/step-run/step-run.yaml#/getSchema"
/api/v1/tenants/{tenant}/worker:
$ref: "./paths/worker/worker.yaml#/withTenant"
/api/v1/workers/{worker}:
$ref: "./paths/worker/worker.yaml#/withWorker"
/api/v1/tenants/{tenant}/webhook-workers:
$ref: "./paths/webhook-worker/webhook-worker.yaml#/webhookworkers"
/api/v1/webhook-workers/{webhook}:
$ref: "./paths/webhook-worker/webhook-worker.yaml#/webhookworker"
/api/v1/webhook-workers/{webhook}/requests:
$ref: "./paths/webhook-worker/webhook-worker.yaml#/webhookworkerRequests"
/api/v1/tenants/{tenant}/workflow-runs/{workflow-run}/input:
$ref: "./paths/workflow-run/workflow-run.yaml#/getWorkflowRunInput"
/api/v1/monitoring/{tenant}/probe:
$ref: "./paths/monitoring/monitoring.yaml#/probe"
/api/v1/version:
$ref: "./paths/info/version.yaml#/version"
/api/v1/tenants/{tenant}/prometheus-metrics:
$ref: "./paths/tenant/tenant.yaml#/getPrometheusMetrics"