Skip to content

feat: add gemini-webhooks skill#43

Merged
leggetter merged 5 commits into
mainfrom
feat/gemini-webhooks
May 11, 2026
Merged

feat: add gemini-webhooks skill#43
leggetter merged 5 commits into
mainfrom
feat/gemini-webhooks

Conversation

@leggetter
Copy link
Copy Markdown
Collaborator

Summary

Adds a complete gemini-webhooks provider skill for Google Gemini API event-driven webhooks (launched May 4, 2026). Covers both signing modes — static (HMAC-SHA256, Standard Webhooks) and dynamic (RS256 JWTs verified against Google's JWKS).

What's included

  • skills/gemini-webhooks/SKILL.md — entry point
  • skills/gemini-webhooks/references/ — overview, setup, verification (both modes)
  • skills/gemini-webhooks/examples/ — Express, Next.js, FastAPI handlers
  • Multi-signature rotation regression tests across all three example suites

Notes

  • Static webhooks: Standard Webhooks spec (webhook-id, webhook-timestamp, webhook-signature), HMAC-SHA256, supports overlapping space-separated signatures during secret rotation
  • Dynamic webhooks: RS256 JWTs verified against https://generativelanguage.googleapis.com/.well-known/jwks.json, per-job binding with user_metadata routing
  • Reject payloads older than 5 minutes
  • At-least-once delivery with 24-hour exponential backoff retries
  • Common events: batch.succeeded, batch.failed, video.generated, interaction.completed, interaction.requires_action

Iteration history

The generator's review phase caught and fixed several drift issues against the live docs:

  • Use data.video_uri (not file_name/output_file_uri) for video.generated payloads
  • Parse space-separated webhook-signature entries to support secret rotation
  • Correct setup REST endpoint to v1/webhooks; align body/response fields (name, uri, subscribed_events, new_signing_secret) with the google-genai cookbook
  • Removed a fabricated rotateSigningSecret method; described rotation as overlapping signatures
  • Simplified prerequisites to a Gemini API key from AI Studio

Test plan

  • cd skills/gemini-webhooks/examples/express && npm test
  • cd skills/gemini-webhooks/examples/nextjs && npm test
  • cd skills/gemini-webhooks/examples/fastapi && pytest test_webhook.py -v
  • Verify static-mode HMAC against the standardwebhooks library
  • Verify dynamic-mode JWT against the live JWKS endpoint
  • Confirm event names against https://ai.google.dev/gemini-api/docs/webhooks

Generation details

https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB


Generated by Claude Code

claude and others added 2 commits May 11, 2026 10:27
Adds a complete Standard Webhooks-based skill for receiving Gemini API
batch, video generation, and Interactions API LRO events across Express,
Next.js, and FastAPI, with HMAC-SHA256 verification and dynamic RS256/JWKS
notes in the verification reference.

https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB
Adds the Google Gemini row to the Provider Skills table in README.md and
a providers.yaml entry (docs URLs, notes, testScenario) so the
"Validate New Provider" CI workflow finds the integration files. The
integrations were previously only on the prep branch (PR #40); moving them
onto each feat PR makes the 12 generated PRs independently mergeable in
any order.

https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB
leggetter added 3 commits May 11, 2026 13:06
…ce arg

Applies the new project convention from PR #40: use
`npx hookdeck-cli listen <port> <source> --path /webhooks/<source>`
everywhere instead of `hookdeck listen <port> --path /webhooks/<source>`.
Skips the global-install prereq (webhook-skills is provider-neutral) and
passes the required `[source]` positional so the command is copy-paste-
runnable without falling into an interactive prompt.

https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB
…ce arg

Applies the new project convention from PR #40: use
`npx hookdeck-cli listen <port> <source> --path /webhooks/<source>`
everywhere instead of `hookdeck listen <port> --path /webhooks/<source>`.
Skips the global-install prereq (webhook-skills is provider-neutral) and
passes the required `[source]` positional so the command is copy-paste-
runnable without falling into an interactive prompt.

https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB
…ated payloads

Spec drift caught during pre-merge review against
https://ai.google.dev/gemini-api/docs/webhooks: Gemini's `video.generated`
events expose `data.output_file_uri` and `data.file_name`, not
`data.video_uri`. The original "fix iteration" mid-generation went in the
wrong direction.

- `references/overview.md`: corrected the events table, the prose, and
  the payload-field reference list.
- `examples/fastapi/main.py`: handler now logs `output_file_uri` and
  `file_name` instead of the non-existent `video_uri`.

https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB
@leggetter leggetter marked this pull request as ready for review May 11, 2026 21:40
@leggetter leggetter merged commit 3adaeac into main May 11, 2026
6 checks passed
@leggetter leggetter deleted the feat/gemini-webhooks branch May 11, 2026 21:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants