Paste the Message object returned from POST /webhooks/{id}/{token}?wait=true (or any Discord message JSON) and get a TypeScript interface for embeds, attachments, components, and the rest.
Discord's Message object carries author, content, embeds, attachments, mention arrays, components, and a tangle of timestamps and snowflake IDs. All snowflakes are returned as strings (never numbers) because they exceed Number.MAX_SAFE_INTEGER — getting that detail right by hand is a common source of bugs. Pasting a real response from a webhook with wait=true produces a TypeScript interface that matches exactly what Discord sent, snowflakes-as-strings included.
The official discord-api-types package covers everything but pulls in a large surface when you only need the message shape for one webhook. Generated types from a live payload are tighter, easier to inline into a Cloudflare Worker or Vercel function, and stable across discord-api-types version bumps. Paste a message that includes embeds, components, or interaction_metadata and the converter merges the variation into one accurate interface.