{"id":13469401,"url":"https://github.com/svix/svix-webhooks","last_synced_at":"2026-05-28T16:01:16.117Z","repository":{"id":37025577,"uuid":"342259394","full_name":"svix/svix-webhooks","owner":"svix","description":"The open source and enterprise-ready webhooks service 🦀","archived":false,"fork":false,"pushed_at":"2026-05-22T17:16:41.000Z","size":16188,"stargazers_count":3215,"open_issues_count":55,"forks_count":249,"subscribers_count":26,"default_branch":"main","last_synced_at":"2026-05-23T07:07:35.836Z","etag":null,"topics":["api","background-jobs","background-tasks","event-driven","hacktoberfest","kafka","message-queue","pubsub","queue","rabbitmq","redis","rust","stream","webhook","webhook-dispatcher","webhook-ingester","webhook-server","webhook-service","webhooks","webhooks-server"],"latest_commit_sha":null,"homepage":"https://www.svix.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/svix.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-02-25T13:49:38.000Z","updated_at":"2026-05-22T17:16:48.000Z","dependencies_parsed_at":"2023-12-21T20:09:50.539Z","dependency_job_id":"a86e6168-9174-4099-a5a9-cd78269a5dc7","html_url":"https://github.com/svix/svix-webhooks","commit_stats":{"total_commits":1720,"total_committers":54,"mean_commits":31.85185185185185,"dds":0.791860465116279,"last_synced_commit":"a92011983ff819c57d7665fbd47e754843055428"},"previous_names":["svix/svix-libs","svixhq/svix-libs"],"tags_count":226,"template":false,"template_full_name":null,"purl":"pkg:github/svix/svix-webhooks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svix%2Fsvix-webhooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svix%2Fsvix-webhooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svix%2Fsvix-webhooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svix%2Fsvix-webhooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/svix","download_url":"https://codeload.github.com/svix/svix-webhooks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svix%2Fsvix-webhooks/sbom","scorecard":{"id":861303,"data":{"date":"2025-08-11","repo":{"name":"github.com/svix/svix-webhooks","commit":"88ec277db1b3951b84126ab5d18e42b8eda9c744"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.1,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/bridge-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/bridge-release.yml:1","Warn: no topLevel permission defined: .github/workflows/bridge-security.yml:1","Warn: no topLevel permission defined: .github/workflows/cli-docker-release.yml:1","Warn: no topLevel permission defined: .github/workflows/cli-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/cli-security.yml:1","Warn: no topLevel permission defined: .github/workflows/codegen.yml:1","Warn: no topLevel permission defined: .github/workflows/csharp-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/csharp-release.yml:1","Warn: no topLevel permission defined: .github/workflows/go-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/go-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/java-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/java-release.yml:1","Warn: no topLevel permission defined: .github/workflows/javascript-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/javascript-release.yml:1","Warn: no topLevel permission defined: .github/workflows/kotlin-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/kotlin-release.yml:1","Warn: no topLevel permission defined: .github/workflows/mega-releaser.yml:1","Warn: no topLevel permission defined: .github/workflows/php-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/php-release.yml:1","Warn: no topLevel permission defined: .github/workflows/python-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/python-release.yml:1","Warn: no topLevel permission defined: .github/workflows/python-tests.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yml:18","Warn: no topLevel permission defined: .github/workflows/ruby-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/ruby-release.yml:1","Warn: no topLevel permission defined: .github/workflows/rust-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/rust-release.yml:1","Warn: no topLevel permission defined: .github/workflows/rust-security.yml:1","Warn: no topLevel permission defined: .github/workflows/server-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/server-docker-image.yml:1","Warn: no topLevel permission defined: .github/workflows/server-release.yml:1","Warn: no topLevel permission defined: .github/workflows/server-security.yml:1","Warn: no topLevel permission defined: .github/workflows/typos.yml:1","Warn: no topLevel permission defined: .github/workflows/update-postman.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: java/gradle/wrapper/gradle-wrapper.jar:1","Warn: binary detected: kotlin/gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/bridge-release.yml:49"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.73.0 not signed: https://api.github.com/repos/svix/svix-webhooks/releases/240043705","Warn: release artifact v1.72.0 not signed: https://api.github.com/repos/svix/svix-webhooks/releases/239991000","Warn: release artifact v1.71.0 not signed: https://api.github.com/repos/svix/svix-webhooks/releases/238392163","Warn: release artifact v1.70.1 not signed: https://api.github.com/repos/svix/svix-webhooks/releases/238004393","Warn: release artifact v1.70.0 not signed: https://api.github.com/repos/svix/svix-webhooks/releases/236821654","Warn: release artifact v1.73.0 does not have provenance: https://api.github.com/repos/svix/svix-webhooks/releases/240043705","Warn: release artifact v1.72.0 does not have provenance: https://api.github.com/repos/svix/svix-webhooks/releases/239991000","Warn: release artifact v1.71.0 does not have provenance: https://api.github.com/repos/svix/svix-webhooks/releases/238392163","Warn: release artifact v1.70.1 does not have provenance: https://api.github.com/repos/svix/svix-webhooks/releases/238004393","Warn: release artifact v1.70.0 does not have provenance: https://api.github.com/repos/svix/svix-webhooks/releases/236821654"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Info: Possibly incomplete results: error parsing shell code: invalid parameter name: .github/workflows/release.yml:83","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bridge-ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-ci.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bridge-ci.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-ci.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-ci.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-ci.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bridge-ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-ci.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bridge-release.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bridge-release.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bridge-release.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-release.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-release.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-release.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-release.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bridge-security.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-security.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/bridge-security.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/bridge-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cli-docker-release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-docker-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-docker-release.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-docker-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-docker-release.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-docker-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-docker-release.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-docker-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-docker-release.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-docker-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cli-lint.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-lint.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cli-lint.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-lint.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-lint.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-lint.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cli-security.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-security.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cli-security.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/cli-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codegen.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/codegen.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/csharp-lint.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/csharp-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/csharp-lint.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/csharp-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/csharp-release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/csharp-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/csharp-release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/csharp-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go-ci.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/go-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go-ci.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/go-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go-lint.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/go-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go-lint.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/go-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/java-lint.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/java-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/java-lint.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/java-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/java-release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/java-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/java-release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/java-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/javascript-lint.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/javascript-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/javascript-lint.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/javascript-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/javascript-release.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/javascript-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/javascript-release.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/javascript-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kotlin-lint.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/kotlin-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kotlin-lint.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/kotlin-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kotlin-release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/kotlin-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kotlin-release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/kotlin-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/php-ci.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/php-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/php-ci.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/php-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-lint.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/python-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-lint.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/python-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/python-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/python-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-release.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/python-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-tests.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/python-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-tests.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/python-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:344: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:73: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:89: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:123: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:138: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:182: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:187: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:194: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:212: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:232: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:237: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:244: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:257: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:264: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:297: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:304: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ruby-lint.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/ruby-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby-lint.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/ruby-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ruby-release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/ruby-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby-release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/ruby-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-lint.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust-lint.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust-lint.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust-lint.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-lint.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust-lint.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-lint.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust-lint.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust-release.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust-release.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-security.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-security.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust-security.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/rust-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/server-ci.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-ci.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/server-ci.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-ci.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/server-ci.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-ci.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-ci.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-ci.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/server-docker-image.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-docker-image.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/server-release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-release.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/server-release.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/server-release.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-release.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-release.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-release.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-release.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/server-security.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-security.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/server-security.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/server-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/typos.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/typos.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/typos.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/typos.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-postman.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/svix/svix-webhooks/update-postman.yml/main?enable=pin","Warn: containerImage not pinned by hash: bridge/Dockerfile:2","Warn: containerImage not pinned by hash: bridge/Dockerfile:52","Warn: containerImage not pinned by hash: server/Dockerfile:4","Warn: containerImage not pinned by hash: server/Dockerfile:9","Warn: containerImage not pinned by hash: server/Dockerfile:14","Warn: containerImage not pinned by hash: server/Dockerfile:41","Warn: containerImage not pinned by hash: svix-cli/Dockerfile:2","Warn: containerImage not pinned by hash: svix-cli/Dockerfile:40","Warn: nugetCommand not pinned by hash: .github/workflows/csharp-lint.yml:33: pin your dependecies by either enabling central package management (https://learn.microsoft.com/nuget/consume-packages/Central-Package-Management) or using a lockfile (https://learn.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies)","Warn: nugetCommand not pinned by hash: .github/workflows/csharp-release.yml:28: pin your dependecies by either enabling central package management (https://learn.microsoft.com/nuget/consume-packages/Central-Package-Management) or using a lockfile (https://learn.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies)","Warn: pipCommand not pinned by hash: .github/workflows/python-lint.yml:29","Warn: pipCommand not pinned by hash: .github/workflows/python-lint.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/python-lint.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/python-release.yml:28","Warn: pipCommand not pinned by hash: .github/workflows/python-release.yml:29","Warn: pipCommand not pinned by hash: .github/workflows/python-release.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/python-tests.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/python-tests.yml:35","Warn: pipCommand not pinned by hash: .github/workflows/python-tests.yml:36","Warn: downloadThenRun not pinned by hash: .github/workflows/release.yml:72","Warn: downloadThenRun not pinned by hash: .github/workflows/release.yml:131","Info:   0 out of  73 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  45 third-party GitHubAction dependencies pinned","Info:   0 out of   8 containerImage dependencies pinned","Info:   0 out of   2 nugetCommand dependencies pinned","Info:   1 out of   1 goCommand dependencies pinned","Info:   0 out of   9 pipCommand dependencies pinned","Info:   0 out of   2 downloadThenRun dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"31 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: RUSTSEC-2024-0384","Warn: Project is vulnerable to: RUSTSEC-2024-0436","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-vqfr-h8mv-ghfj","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-48p4-8xcf-vxj5","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: GHSA-f9vj-2wh5-fj8j","Warn: Project is vulnerable to: GHSA-q34m-jh98-gwm2","Warn: Project is vulnerable to: PYSEC-2021-47 / GHSA-5jqp-qgf6-3pvh","Warn: Project is vulnerable to: GHSA-mr82-8j83-vxmv","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: PYSEC-2023-207 / GHSA-gwvm-45gx-3cf8","Warn: Project is vulnerable to: PYSEC-2019-133 / GHSA-mh33-7rrq-662w","Warn: Project is vulnerable to: PYSEC-2019-132 / GHSA-r64q-w8jr-g9qp","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: PYSEC-2020-148 / GHSA-wqvq-5m8c-6g24","Warn: Project is vulnerable to: PYSEC-2018-32 / GHSA-www2-v7xj-xrc6","Warn: Project is vulnerable to: PYSEC-2021-108","Warn: Project is vulnerable to: PYSEC-2021-59","Warn: Project is vulnerable to: RUSTSEC-2024-0370","Warn: Project is vulnerable to: RUSTSEC-2023-0071 / GHSA-4grx-2x9w-596c / GHSA-c38w-74pg-36hr","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T01:20:15.390Z","repository_id":37025577,"created_at":"2025-08-24T01:20:15.390Z","updated_at":"2025-08-24T01:20:15.390Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33615490,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","background-jobs","background-tasks","event-driven","hacktoberfest","kafka","message-queue","pubsub","queue","rabbitmq","redis","rust","stream","webhook","webhook-dispatcher","webhook-ingester","webhook-server","webhook-service","webhooks","webhooks-server"],"created_at":"2024-07-31T15:01:37.849Z","updated_at":"2026-05-28T16:01:16.109Z","avatar_url":"https://github.com/svix.png","language":"Rust","funding_links":[],"categories":["Rust","Libraries","库 Libraries","api","Webhook","Repositories"],"sub_categories":["Web programming","网络编程 Web programming"],"readme":"\u003ch1 align=\"center\"\u003e\n    \u003ca style=\"text-decoration: none\" href=\"https://www.svix.com\"\u003e\n      \u003cimg width=\"120\" src=\"https://avatars.githubusercontent.com/u/80175132?s=200\u0026v=4\" /\u003e\n      \u003cp align=\"center\"\u003eSvix - Webhooks as a service\u003c/p\u003e\n    \u003c/a\u003e\n\u003c/h1\u003e\n\u003ch2 align=\"center\"\u003e\n  \u003ca href=\"https://svix.com\"\u003eWebsite\u003c/a\u003e | \u003ca href=\"https://docs.svix.com\"\u003eDocumentation\u003c/a\u003e | \u003ca href=\"https://svix.com/slack\"\u003eCommunity Slack\u003c/a\u003e\n\u003ch2\u003e\n\n![GitHub tag](https://img.shields.io/github/tag/svix/svix-webhooks.svg)\n[![Build Status](https://github.com/svix/svix-webhooks/workflows/Server%20CI/badge.svg)](https://github.com/svix/svix-webhooks/actions)\n[![Server Security](https://github.com/svix/svix-webhooks/actions/workflows/server-security.yml/badge.svg)](https://github.com/svix/svix-webhooks/actions/workflows/server-security.yml)\n[![Twitter Follow](https://img.shields.io/twitter/follow/SvixHQ?style=social)](https://twitter.com/SvixHQ)\n[![Join our slack](https://img.shields.io/badge/Slack-join%20the%20community-blue?logo=slack\u0026style=social)](https://www.svix.com/slack/)\n\n[![Docker Pulls](https://img.shields.io/docker/pulls/svix/svix-server?logo=docker)](https://hub.docker.com/r/svix/svix-server/)\n[![NPM Downloads](https://img.shields.io/npm/dm/svix?logo=npm)](https://www.npmjs.com/package/svix)\n[![Pypi Downloads](https://img.shields.io/pypi/dm/svix?logo=pypi)](https://pypi.org/project/svix/)\n\n## Svix is the enterprise ready webhook service\n\nSvix makes it easy for developers to send webhooks. Developers make one API call, and Svix takes care of deliverability, retries, security, and more. For more information, please refer to the [Svix homepage](https://www.svix.com).\n\n\n[![PyPI](https://img.shields.io/pypi/v/svix.svg)](https://pypi.python.org/pypi/svix/)\n[![Crates.io](https://img.shields.io/crates/v/svix)](https://crates.io/crates/svix)\n[![NPM version](https://img.shields.io/npm/v/svix.svg)](https://www.npmjs.com/package/svix)\n[![Gem](https://img.shields.io/gem/v/svix)](https://rubygems.org/gems/svix)\n[![Maven Central (Java)](https://img.shields.io/maven-central/v/com.svix/svix?label=maven-central%20(java))](https://search.maven.org/artifact/com.svix/svix)\n[![Maven Central (Kotlin)](https://img.shields.io/maven-central/v/com.svix.kotlin/svix-kotlin?label=maven-central%20(kotlin))](https://search.maven.org/artifact/com.svix.kotlin/svix-kotlin)\n[![Nuget](https://img.shields.io/nuget/v/svix)](https://www.nuget.org/packages/Svix/)\n[![Packagist Version](https://img.shields.io/packagist/v/svix/svix)](https://packagist.org/packages/svix/svix)\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/svix/svix-webhooks)](https://pkg.go.dev/github.com/svix/svix-webhooks/go)\n\n# Documentation\n\nYou can find general usage documentation at \u003chttps://docs.svix.com\u003e. For complete API documentation with code examples for each endpoint in all of our official client libraries head over to our API documentation site at \u003chttps://api.svix.com\u003e.\n\n# Support \u0026 Community\n\n  - [GitHub Issues](https://github.com/svix/svix-webhooks/issues) - report issues and make suggestions.\n  - [Community Forum](https://github.com/svix/svix-webhooks/discussions) - ask questions, and start discussions!\n  - [Slack](https://www.svix.com/slack/) - come and chat with us!\n\nTo stay up-to-date with new features and improvements be sure to watch our repo!\n\n![Watch \u0026 Star our repo](/static-assets/watch.gif)\n\n# Client Library Overview\n\n\u003ctable style=\"table-layout:fixed; white-space: nowrap;\"\u003e\n  \u003cth colspan=\"6\"\u003e⚡️ Feature Breakdown ⚡️\u003c/th\u003e\n  \u003ctr\u003e\n    \u003cth\u003eLanguage\u003c/th\u003e\n    \u003cth\u003eOfficially Supported\u003c/th\u003e\n    \u003cth\u003eAPI Support\u003c/th\u003e\n    \u003cth\u003eWebhook Verification\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003eOther Notes\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/go/\"\u003eGo\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003c/tr\u003e\n    \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/python/\"\u003ePython\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/javascript/\"\u003eTypescript/Javascript\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/java/\"\u003eJava\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003eAsync support planned. (If you use kotlin, checkout our kotlin library for coroutine support.)\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/kotlin/\"\u003eKotlin\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/ruby/\"\u003eRuby\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/csharp/\"\u003eC# (dotnet)\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/rust/\"\u003eRust\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://github.com/svix/svix-webhooks/tree/main/php/\"\u003ePHP\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\u003ca href=\"https://registry.terraform.io/providers/svix/svix/latest/docs/\"\u003eTerraform\u003c/a\u003e\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003e✅\u003c/th\u003e\n    \u003cth\u003eN/A\u003c/th\u003e\n    \u003cth colspan=\"4\"\u003e\u003c/th\u003e\n  \u003c/tr\u003e\n\n\u003c/table\u003e\n\n\n## Trying out the CLI\n\nThe Svix CLI is published on npm as [`svix-cli`](https://www.npmjs.com/package/svix-cli). You can run it directly with `npx` without installing anything:\n\n```sh\nnpx svix-cli --help\n```\n\nOr install it globally:\n\n```sh\nnpm install -g svix-cli\nsvix-cli --help\n```\n\n\n\n# Running the server\n\nThere are multiple ways to get the Svix server up running. Docker is probably the most common one, but you can choose the one that works best for you.\n\nThe Svix server is written in Rust 🦀, which means you can compile it into a static library for a variety of targets. Please refer to the building from source section below for more information.\n\nPlease refer to the [server configuration](#server-configuration) section below for more information regarding the available settings.\n\n## Deployment\n\n### Docker\n\nYou can use the official Svix Docker image from [Docker Hub](https://hub.docker.com/r/svix/svix-server). You can either use the `latest` tag, or one of [the versioned tags](https://hub.docker.com/r/svix/svix-server/tags) instead.\n\nYou can either use the example [docker-compose.yml](./server/docker-compose.yml) file with `docker compose` (easiest), `docker swarm` (advanced), or run the container standalone.\n\n#### With Docker Compose\n\nThis alternative is the easiest because it will also boot up and configure `redis` and `postgresql`.\n\nThis assumes you have Docker Compose v2 installed.\n\n```\ncd server\ndocker compose up\n```\n\n#### Standalone container\n\nRunning a standalone container is slightly more advanced, as it requires you to set some environment variables and have them pointing to your `redis` and `postgres` instances.\nYou can pass individual environment variables to docker using the `-e` flag, or just create a file like [development.env](./server/svix-server/development.env) and use the `--env-file` flag like in the example below:\n\n```\ndocker run \\\n  --name svix-server \\\n  -p 8071:8071 \\\n  --env-file development.env \\\n  svix/svix-server\n```\n\n### Building from source\n\nThe Svix server is written in Rust 🦀 and requires a Rust build environment.\n\nIf you already have one, you just need to run `cargo build`, otherwise, please please refer to the [Svix server README](./server/#readme) for more information about building the server from source.\n\n## Runtime dependencies\n\nThe server requires the following runtime dependencies to work correctly:\n\n- A PostgreSQL server - for the storage of events.\n- An *optional* Redis server version 6.2.0 or higher - for the task queue and cache.\n\n## Redis/Valkey Considerations\n### Persistence\nPlease note that it's recommended to enable persistence in Redis so that tasks are persisted across Redis server restarts and upgrades.\n\n### Eviction Policy\nPlease ensure that your Redis instances are configured to not evict keys without explicit `expire` policies set. This means that `maxmemory-policy` should be set to `noeviction` or to any of the available `volatile-` policies. See Redis/Valkey documentation for further information.\n\n## Server configuration\n\nThere are three ways to configure `svix-server`: environment vars, `.env` file, and a configuration file.\n\n### Configuration file\n\nYou can put a file called `config.toml` in the current working directory of `svix-server` and it will automatically pick it up.\nYou can take a look at the example file for more information and a full list of supported settings: [config.toml](./server/svix-server/config.default.toml).\n\nHere's a quick example of the most important configurations:\n\n```toml\n# The JWT secret for authentication - should be secret and securely generated\njwt_secret = \"8KjzRXrKkd9YFcNyqLSIY8JwiaCeRc6WK4UkMnSW\"\n\n# The DSN for the database. Only postgres is currently supported.\ndb_dsn = \"postgresql://postgres:postgres@pgbouncer/postgres\"\n\n# The DSN for redis (can be left empty if not using redis)\nredis_dsn = \"redis://redis:6379\"\n\n# What kind of message queue to use.\nqueue_type = \"redis\"\n```\n\n\n### Environment (variables or `.env`)\n\nAlternatively, you can configure `svix-server` by setting the equivalent environment variables for each of the supported settings. The environment variables can either be passed directly or by setting them in a `.env` file.\n\nThe environment variables have the name name as the config names, but they are all upper case and are prefixed with `SVIX_`.\n\nFor example, the above example configuration would look like this if it was passed in the env:\n\n```\n# The JWT secret for authentication - should be secret and securely generated\nSVIX_JWT_SECRET = \"8KjzRXrKkd9YFcNyqLSIY8JwiaCeRc6WK4UkMnSW\"\n\n# The DSN for the database. Only postgres is currently supported.\nSVIX_DB_DSN = \"postgresql://postgres:postgres@pgbouncer/postgres\"\n\n# The DSN for redis (can be left empty if not using redis)\nSVIX_REDIS_DSN = \"redis://redis:6379\"\n\n# What kind of message queue to use.\nSVIX_QUEUE_TYPE = \"redis\"\n```\n\n### OpenTelemetry\n\nYou may send tracing information to the OpenTelemetry Collector which allows forwarding trace events to a number of external applications/services such as DataDog, Jaeger, NewRelic, Prometheus, Sentry, Signoz, and Zipkin.\n\nYou can see more in [these instructions](./OpenTelemetry.md).\n\n### Connection Pool Size\n\nThe `db_pool_max_size` configuration parameter controls the maximum allowed size of the connection pool for PostgreSQL. This value defaults to a max size of 100, but you can potentially increase application performance significantly by increasing this value. You may need to consider Postgres and PGBouncer configuration parameters as well when tuning these parameters.\n\nThe `redis_pool_max_size` parameter controls the maximum size of each Svix instance's Redis connection pool. Its default is 100. Note that only redis _queuing_ leverages connection pooling -- caching is fully asynchronous and so does not otherwise benefit from pooling. Therefore, you probably won't need to tune this parameter.\n\n### SSRF Attacks and Internal IP Addresses\nTo prevent SSRF attacks, message dispatches to internal IP addresses are blocked by default. However we understand that this doesn't meet the needs of every user say, for example, the service can only be accessed internally. To bypass these restrictions, see the `whitelist_subnets` configuration option, which accepts an array of CIDR-notation subnets to allow messages to be dispatched to.\n\n### Webhook signature scheme (symmetric vs asymmetric)\n\nTo ensure the security and integrity of messages, Svix signs all webhook messages prior to sending.\nSvix supports two types of signature schemes: symmetric (pre-shared key) and asymmetric (public key).\n\nSymmetric signatures are significantly faster (~50x for signing, and ~160x for verifying), and are much simpler (which makes verification easier for your customers), though they require the usage of a pre-shared key per endpoint (endpoint secret) in order to work. Asymmetric signatures on the other hand only require sharing a public key with your customers (not secret).\n\nBecause of the above, using symmetric keys is both recommended and the Svix default. Using them is documented in the [verifying signatures section of the docs](https://docs.svix.com/receiving/verifying-payloads/how-manual).\n\nHowever, in some scenarios it may be beneficial to use asymmetric signatures, which is why they too are supported. For more information please refer to the [asymmetric signatures section](#asymmetric-signatures) below.\n\n## Authentication\n\nUse valid JWTs generated with the correct secret as `Bearer`.\n\nE.g:\n```\nAuthorization: Bearer \u003cJWT_TOKEN_HERE\u003e\n```\n\nEither generate one using\n```\nsvix-server jwt generate\n```\n\nOr if you are generating your own, make sure to use `org_23rb8YdGqMT0qIzpgGwdXfHirMu` as the `sub` field, and `H256` as the algorithm.\n\n\nExample valid JWT for the secret `x` (so you can see the structure):\n```js\n// JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NTUxNDA2MzksImV4cCI6MTk3MDUwMDYzOSwibmJmIjoxNjU1MTQwNjM5LCJpc3MiOiJzdml4LXNlcnZlciIsInN1YiI6Im9yZ18yM3JiOFlkR3FNVDBxSXpwZ0d3ZFhmSGlyTXUifQ.USMuIPrqsZTSj3kyWupCzJO9eyQioBzh5alGlvRbrbA\n// Structure (when decoded):\n{\n  \"iat\": 1655140639,\n  \"exp\": 1970500639,\n  \"nbf\": 1655140639,\n  \"iss\": \"svix-server\",\n  \"sub\": \"org_23rb8YdGqMT0qIzpgGwdXfHirMu\"\n}\n```\n\n### Using a different signing algorithm\n\nAs mentioned above, the default algorithm for signing JWTs is `HS256`. You can select a different algorithm by setting the `jwt_algorithm` config to one of these supported values: `HS384`, `HS512`, `RS256`, `RS384`, `RS512`, or `EdDSA`.\n\n## Operational (incoming) webhooks\n\nOperational webhooks are webhooks that you can subscribe to in order to get notified of important events occurring on the svix-server. The list of supported events is available in [the webhooks section of the API reference](https://api.svix.com/docs#tag/Webhooks).\n\nThe operational webhooks utilize Svix, and are controlled by a special account service account with the following ID: `org_00000000000SvixManagement00`.\n\nThe first step is to turn it on by setting the `operational_webhook_address` config to point to your Svix server. The most common value for this setting is `http://127.0.0.1:8071`, though it may be different based on your specific setup.\n\nThe above step enables operational webhooks on this instance, and the next step is to enable it for your specific organization. As mentioned above, operational webhooks use a normal Svix account behind the scenes, so we'll first need to get the authentication token for this account. To do this you should run:\n\n```\nsvix-server jwt generate org_00000000000SvixManagement00\n```\n\nThis will give you a special JWT to access the operational webhooks account which is different to the normal JWT you use when interacting with Svix. Let's assume for example that the JWT it returned was `op_webhook_token_123`.\n\nTo enable operational webhooks for a specific account we need to first create an application for it in the service account (remember: operational webhooks just use Svix behind the scenes). We'll use the default Svix account as an example: `org_23rb8YdGqMT0qIzpgGwdXfHirMu`.\n\n```\ncurl -X 'POST' \\\n  'http://localhost:8071/api/v1/app/' \\\n  -H 'Authorization: Bearer op_webhook_token_123' \\\n  -H 'Accept: application/json' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n        \"name\": \"Operational webhook for default org\",\n        \"uid\": \"org_23rb8YdGqMT0qIzpgGwdXfHirMu\"\n    }'\n```\n\nThis is it, we now have operational webhooks enabled for the default account. The only thing left is adding an endpoint where the operational webhooks are going to be sent to. For example:\n\n```\ncurl -X 'POST' \\\n  'https://api.eu.svix.com/api/v1/app/org_23rb8YdGqMT0qIzpgGwdXfHirMu/endpoint/' \\\n  -H 'Authorization: Bearer AUTH_TOKEN' \\\n  -H 'Accept: application/json' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n        \"url\": \"https://operational-webhook-destination.com/webhook/\",\n        \"filterTypes\": [\n          “endpoint.updated”,\n          “endpoint.deleted”\n        ],\n    }'\n```\n\nNote how we use the org ID of the default account as the `app_id` (or rather `uid` in this case), when creating an endpoint.\n\nThat's it. You should now have working operational webhooks. If you ever want to create a new endpoint, or modify an existing endpoint, you just need to generate a JWT for the service account, and then use the JWT like you would use any other Svix account.\n\n## Asymmetric signatures\n\nAs mentioned above, symmetric signatures are recommended. However, please read the following instructions on setting up asymmetric signatures if you have determined that asymmetric signatures are what you need.\n\n### Configuring the keys\n\nBy default, the Svix server generates symmetric secrets for endpoints, which in turn means messages will be signed with symmetric keys. To change this default, set the `default_signature_type` config to `ed25519` as follows:\n\n```toml\ndefault_signature_type = \"ed25519\"\n```\n\nAdditionally, no matter what the default is set to, you can still override it by explicitly setting a key on an endpoint.\nTo set a symmetric key, set the endpoint secret to a secret prefixed with `whsec_`, such as `whsec_51TKyHBy5KFY1Ab98GQ8V60BkWnejkWy`.\nTo set an asymmetric key, set the endpoint secret to a **valid** ed25519 base64 encoded private key prefixed with `whsk_` such as: `whsk_6Xb/dCcHpPea21PS1N9VY/NZW723CEc77N4rJCubMbfVKIDij2HKpMKkioLlX0dRqSKJp4AJ6p9lMicMFs6Kvg==`.\n\nPlease note, that the expected private key structure is: `whsk_${base64(private_key + public_key)}`.\n\nFor testing purposes, new asymmetric key pairs can be generated using the following command:\n```bash\n$ svix-server asymmetric-key generate\n\nSecret key: whsk_6Xb/dCcHpPea21PS1N9VY/NZW723CEc77N4rJCubMbfVKIDij2HKpMKkioLlX0dRqSKJp4AJ6p9lMicMFs6Kvg==\nPublic key: whpk_1SiA4o9hyqTCpIqC5V9HUakiiaeACeqfZTInDBbOir4=\n```\n\n### Signature scheme\n\nSvix uses `ed25519(m)` for signing the webhook messages, and it constructs `m` the same way as it does for the symmetric signatures.\n\nWhen verifying the message you should also ensure that the timestamp is recent enough in order to limit the potential of replay attacks as noted in [the symmetric verification docs](https://docs.svix.com/receiving/verifying-payloads/why).\n\n## Shutting down the server\n\nTo support graceful shutdown on the server, all running tasks are finished before shutting down on a SIGINT/SIGTERM. This usually takes less than ten seconds.\n\n# Differences to the Svix hosted service\n\nOne of our main goals with open sourcing the Svix dispatcher is ease of use. The hosted Svix service, however, is quite complex due to our scale and the infrastructure it requires. This complexity is not useful for the vast majority of people and would make this project much harder to use and much more limited.\nThis is why this code has been adjusted before being released, and some of the features, optimizations, and behaviors supported by the hosted dispatcher are not yet available in this repo. With that being said, other than some known incompatibilities, the internal Svix test suite passes. This means they are already mostly compatible, and we are working hard on bringing them to full feature parity.\n\n# Redis task queue DLQ\n\nIn case of repeated internal errors when processing a task, a task may end up in the dead letter queue (DLQ).\n\nRedis does not include built-in support for DLQs, therefore when using the Redis queue backend, Svix manages its own DLQ. It's therefore important to monitor the DLQ depth to ensure that it's always empty. You can do that using the `svix.queue.depth_dlq` metric. A non-zero value indicates that there are tasks in the DLQ that should be addressed.\n\nTo redrive the DLQ once the error conditions have ended, you can make a POST request to `/api/v1/admin/redrive-dlq/`.\n\n\n# Development\n\nCheckout our project specific development guides to get started hacking on Svix!\n\n- [Svix libs README](./README_LIBS.md)\n- [Svix server README](./server/#readme)\n\n# Contributing\n\nContributions are what makes the open source world go round! All contributions are very much welcomed and are greatly appreciated.\n\nPlease refer to the [contribution guide](./CONTRIBUTING.md) for information on how to contribute.\n\nA quick how to for contribution:\n\n1. Fork the project\n2. Create your feature branch (`git checkout -b feature/some-feature`)\n3. Make your changes\n4. Commit your changes (`git commit -m 'Implement an amazing feature.'`)\n5. Push to the branch (`git push origin feature/some-feature`)\n6. Open a pull request\n\n\n# License\n\nDistributed under the MIT License. See [LICENSE](LICENSE) for more information.\n\n\n# Sending guides\n\nHere is a list of guides for sending webhooks with Svix:\n\n* [Send Webhooks with Python](https://www.svix.com/guides/sending/send-webhooks-with-python/) (also w/ [Django](https://www.svix.com/guides/sending/send-webhooks-with-python-django/) \u0026 [Flask](https://www.svix.com/guides/sending/send-webhooks-with-python-flask/))\n* [Send Webhooks with JavaScript](https://www.svix.com/guides/sending/send-webhooks-with-javascript/) (also w/ [NodeJS](https://www.svix.com/guides/sending/send-webhooks-with-javascript-nodejs/) \u0026 [Express](https://www.svix.com/guides/sending/send-webhooks-with-javascript-express/))\n* [Send Webhooks with TypeScript](https://www.svix.com/guides/sending/send-webhooks-with-typescript/)\n* [Send Webhooks with Go](https://www.svix.com/guides/sending/send-webhooks-with-go/)\n* [Send Webhooks with Java](https://www.svix.com/guides/sending/send-webhooks-with-java/) (also w/ [Spring](https://www.svix.com/guides/sending/send-webhooks-with-java-spring/))\n* [Send Webhooks with Kotlin](https://www.svix.com/guides/sending/send-webhooks-with-kotlin/)\n* [Send Webhooks with Rust](https://www.svix.com/guides/sending/send-webhooks-with-rust/)\n* [Send Webhooks with C#](https://www.svix.com/guides/sending/send-webhooks-with-c-sharp/) (also w/ [ASP.NET](https://www.svix.com/guides/sending/send-webhooks-with-c-aspnet-sharp/))\n* [Send Webhooks with PHP](https://www.svix.com/guides/sending/send-webhooks-with-php/) (also w/ [Laravel](https://www.svix.com/guides/sending/send-webhooks-with-php-laravel/))\n* [Send Webhooks with Ruby](https://www.svix.com/guides/sending/send-webhooks-with-ruby/)\n* [Send Webhooks with Svix CLI](https://www.svix.com/guides/sending/send-webhooks-with-svix-cli/)\n\n# Backed By\n\n![Backed By YC \u0026 Aleph](/static-assets/backed-by.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvix%2Fsvix-webhooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsvix%2Fsvix-webhooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvix%2Fsvix-webhooks/lists"}