[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-resend-migrate-sendgrid":3,"mdc-842r3h-key":33,"related-repo-resend-migrate-sendgrid":1130,"related-org-resend-migrate-sendgrid":1151},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":23,"topics":27,"repo":28,"sourceUrl":31,"mdContent":32},"migrate-sendgrid","migrate SendGrid integrations to Resend","Use when migrating SendGrid email integration to Resend - detects @sendgrid\u002Fmail, sgMail, sendgrid-ruby, sendgrid-go, sendgrid-java, sendgrid-php, or SENDGRID_API_KEY patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"resend","Resend","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fresend.jpg",[12,16,17,20],{"name":13,"slug":14,"type":15},"SendGrid","sendgrid","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Migration","migration",{"name":21,"slug":22,"type":15},"Email","email",0,"https:\u002F\u002Fgithub.com\u002Fresend\u002Fresend-migration-skill","2026-04-06T18:51:17.827518","MIT",[],{"repoUrl":24,"stars":23,"forks":23,"topics":29,"description":30},[],null,"https:\u002F\u002Fgithub.com\u002Fresend\u002Fresend-migration-skill\u002Ftree\u002FHEAD\u002Fmigrate-sendgrid","---\nname: migrate-sendgrid\ndescription: Use when migrating SendGrid email integration to Resend - detects @sendgrid\u002Fmail, sgMail, sendgrid-ruby, sendgrid-go, sendgrid-java, sendgrid-php, or SENDGRID_API_KEY patterns.\nlicense: MIT\nmetadata:\n    author: resend\n    version: \"1.0.0\"\n    homepage: https:\u002F\u002Fresend.com\u002Fmigrate\u002Fsendgrid\n    source: https:\u002F\u002Fgithub.com\u002Fresend\u002Fresend-migration-skills\ninputs:\n    - name: RESEND_API_KEY\n      description: Resend API key. Get yours at https:\u002F\u002Fresend.com\u002Fapi-keys\n      required: true\n---\n\n# Migrate from SendGrid to Resend\n\n## Overview\n\nResend is a modern email platform for developers. This skill covers migrating SendGrid integrations to Resend across all supported SDKs.\n\n**Automated tool:** [resend.com\u002Fmigrate\u002Fsendgrid](https:\u002F\u002Fresend.com\u002Fmigrate\u002Fsendgrid) — paste SendGrid code and get Resend code instantly.\n\n## Detection Patterns\n\nCode is SendGrid if it contains any of: `@sendgrid\u002Fmail`, `sendgrid`, `SendGrid`, `SENDGRID`, `sgMail`, `sg.client`, `sendgrid-ruby`, `sendgrid-go`, `sendgrid-java`, `sendgrid-php`\n\n## Migration Checklist\n\n- [ ] Verify domain in [Resend Domains](https:\u002F\u002Fresend.com\u002Fdomains) (SPF\u002FDKIM\u002FDMARC)\n- [ ] Create API key at [resend.com\u002Fapi-keys](https:\u002F\u002Fresend.com\u002Fapi-keys)\n- [ ] Replace env var: `SENDGRID_API_KEY` → `RESEND_API_KEY`\n- [ ] Replace SDK (see [SDK Examples](.\u002Freferences\u002Fsdk-examples.md))\n- [ ] Map webhook events (see [Webhooks](.\u002Freferences\u002Fwebhooks.md))\n- [ ] Update SMTP config if used (see [SMTP](.\u002Freferences\u002Fsmtp.md))\n- [ ] Review feature differences (see [Feature Mapping](.\u002Freferences\u002Ffeature-mapping.md))\n\n## Key Differences at a Glance\n\n| Aspect | SendGrid | Resend |\n|--------|----------|--------|\n| API endpoint | `https:\u002F\u002Fapi.sendgrid.com\u002Fv3\u002Fmail\u002Fsend` | `https:\u002F\u002Fapi.resend.com\u002Femails` |\n| Auth header | `Authorization: Bearer $SENDGRID_API_KEY` | `Authorization: Bearer $RESEND_API_KEY` |\n| Batch send | `sgMail.sendMultiple()` | `resend.batch.send()` |\n| Response | `[response, body]` | `{ data, error }` |\n| Idempotency | Not supported | `Idempotency-Key` header or SDK option |\n| Rate limit info | Error only | IETF-standard response headers |\n| Rust SDK | No official SDK | `resend-rs` available |\n| Templates | Dynamic templates (`templateId`) | React Email components or `html` |\n| Tracking | Per-email `trackingSettings` | Configured per-domain in dashboard |\n| Unsubscribe groups | `asm` field | Resend Topics (`topic_id`) |\n| IP pools | `ipPoolName` field | Account-level in dashboard |\n\n## Quick Reference\n\n| Reference | Use When |\n|-----------|----------|\n| [SDK Examples](.\u002Freferences\u002Fsdk-examples.md) | Converting code for Node.js, Python, Ruby, Go, PHP, Java, .NET, Elixir, cURL |\n| [SMTP](.\u002Freferences\u002Fsmtp.md) | Updating SMTP hostname, port, credentials |\n| [Webhooks](.\u002Freferences\u002Fwebhooks.md) | Mapping SendGrid event types to Resend event types |\n| [Feature Mapping](.\u002Freferences\u002Ffeature-mapping.md) | Templates, tracking, unsubscribe groups, idempotency |\n\n## Dashboard Concepts\n\n| SendGrid | Resend |\n|----------|--------|\n| Sender Authentication | Domains page |\n| Activity | Emails page |\n| Dashboard (stats) | Metrics page |\n| Event Webhook | Webhooks page |\n\n## Common Mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| `asm` has \"no equivalent\" in Resend | It does — use `topic_id` field + Resend Topics. See [Feature Mapping](.\u002Freferences\u002Ffeature-mapping.md) |\n| Webhook `unsubscribe` maps to `email.unsubscribed` | That event doesn't exist. Use `contact.updated`. See [Webhooks](.\u002Freferences\u002Fwebhooks.md) |\n| `sendAt: unixTimestamp` copied over | Resend uses ISO 8601 string: `scheduledAt: new Date(...).toISOString()` |\n| Expecting `[response, body]` from `resend.emails.send()` | Resend returns `{ data, error }` |\n| Looking for a CLI migration tool | The tool is a web UI: [resend.com\u002Fmigrate\u002Fsendgrid](https:\u002F\u002Fresend.com\u002Fmigrate\u002Fsendgrid) — no CLI |\n| `sgMail.sendMultiple()` replaced by passing array to `to` field | Wrong — `to` array sends one email to multiple recipients. `resend.batch.send()` sends multiple different emails in one call |\n| `dropped` SendGrid event has no Resend equivalent | Monitor `email.bounced` and `email.delivery_delayed` instead. See [Webhooks](.\u002Freferences\u002Fwebhooks.md) |\n| Resend SMTP only supports ports 465 and 587 | Resend also supports 2465 (SMTPS) and 2587 (STARTTLS) as alternatives. See [SMTP](.\u002Freferences\u002Fsmtp.md) |\n| Forgot to rename env var | `SENDGRID_API_KEY` → `RESEND_API_KEY` |\n\n## Resources\n\n- [Full migration guide](https:\u002F\u002Fresend.com\u002Fmigrate\u002Fsendgrid)\n- [Resend API reference](https:\u002F\u002Fresend.com\u002Fdocs\u002Fapi-reference)\n- [React Email](https:\u002F\u002Freact.email) — component-based email templates\n- [Resend Broadcasts](https:\u002F\u002Fresend.com\u002Fbroadcasts) — for marketing\u002Fnewsletter campaigns\n",{"data":34,"body":44},{"name":4,"description":6,"license":26,"metadata":35,"inputs":39},{"author":8,"version":36,"homepage":37,"source":38},"1.0.0","https:\u002F\u002Fresend.com\u002Fmigrate\u002Fsendgrid","https:\u002F\u002Fgithub.com\u002Fresend\u002Fresend-migration-skills",[40],{"name":41,"description":42,"required":43},"RESEND_API_KEY","Resend API key. Get yours at https:\u002F\u002Fresend.com\u002Fapi-keys",true,{"type":45,"children":46},"root",[47,56,63,69,90,96,170,176,307,313,623,629,711,717,789,795,1078,1084],{"type":48,"tag":49,"props":50,"children":52},"element","h1",{"id":51},"migrate-from-sendgrid-to-resend",[53],{"type":54,"value":55},"text","Migrate from SendGrid to Resend",{"type":48,"tag":57,"props":58,"children":60},"h2",{"id":59},"overview",[61],{"type":54,"value":62},"Overview",{"type":48,"tag":64,"props":65,"children":66},"p",{},[67],{"type":54,"value":68},"Resend is a modern email platform for developers. This skill covers migrating SendGrid integrations to Resend across all supported SDKs.",{"type":48,"tag":64,"props":70,"children":71},{},[72,78,80,88],{"type":48,"tag":73,"props":74,"children":75},"strong",{},[76],{"type":54,"value":77},"Automated tool:",{"type":54,"value":79}," ",{"type":48,"tag":81,"props":82,"children":85},"a",{"href":37,"rel":83},[84],"nofollow",[86],{"type":54,"value":87},"resend.com\u002Fmigrate\u002Fsendgrid",{"type":54,"value":89}," — paste SendGrid code and get Resend code instantly.",{"type":48,"tag":57,"props":91,"children":93},{"id":92},"detection-patterns",[94],{"type":54,"value":95},"Detection Patterns",{"type":48,"tag":64,"props":97,"children":98},{},[99,101,108,110,115,116,121,122,128,129,135,136,142,143,149,150,156,157,163,164],{"type":54,"value":100},"Code is SendGrid if it contains any of: ",{"type":48,"tag":102,"props":103,"children":105},"code",{"className":104},[],[106],{"type":54,"value":107},"@sendgrid\u002Fmail",{"type":54,"value":109},", ",{"type":48,"tag":102,"props":111,"children":113},{"className":112},[],[114],{"type":54,"value":14},{"type":54,"value":109},{"type":48,"tag":102,"props":117,"children":119},{"className":118},[],[120],{"type":54,"value":13},{"type":54,"value":109},{"type":48,"tag":102,"props":123,"children":125},{"className":124},[],[126],{"type":54,"value":127},"SENDGRID",{"type":54,"value":109},{"type":48,"tag":102,"props":130,"children":132},{"className":131},[],[133],{"type":54,"value":134},"sgMail",{"type":54,"value":109},{"type":48,"tag":102,"props":137,"children":139},{"className":138},[],[140],{"type":54,"value":141},"sg.client",{"type":54,"value":109},{"type":48,"tag":102,"props":144,"children":146},{"className":145},[],[147],{"type":54,"value":148},"sendgrid-ruby",{"type":54,"value":109},{"type":48,"tag":102,"props":151,"children":153},{"className":152},[],[154],{"type":54,"value":155},"sendgrid-go",{"type":54,"value":109},{"type":48,"tag":102,"props":158,"children":160},{"className":159},[],[161],{"type":54,"value":162},"sendgrid-java",{"type":54,"value":109},{"type":48,"tag":102,"props":165,"children":167},{"className":166},[],[168],{"type":54,"value":169},"sendgrid-php",{"type":48,"tag":57,"props":171,"children":173},{"id":172},"migration-checklist",[174],{"type":54,"value":175},"Migration Checklist",{"type":48,"tag":177,"props":178,"children":181},"ul",{"className":179},[180],"contains-task-list",[182,204,220,242,259,275,291],{"type":48,"tag":183,"props":184,"children":187},"li",{"className":185},[186],"task-list-item",[188,193,195,202],{"type":48,"tag":189,"props":190,"children":192},"input",{"disabled":43,"type":191},"checkbox",[],{"type":54,"value":194}," Verify domain in ",{"type":48,"tag":81,"props":196,"children":199},{"href":197,"rel":198},"https:\u002F\u002Fresend.com\u002Fdomains",[84],[200],{"type":54,"value":201},"Resend Domains",{"type":54,"value":203}," (SPF\u002FDKIM\u002FDMARC)",{"type":48,"tag":183,"props":205,"children":207},{"className":206},[186],[208,211,213],{"type":48,"tag":189,"props":209,"children":210},{"disabled":43,"type":191},[],{"type":54,"value":212}," Create API key at ",{"type":48,"tag":81,"props":214,"children":217},{"href":215,"rel":216},"https:\u002F\u002Fresend.com\u002Fapi-keys",[84],[218],{"type":54,"value":219},"resend.com\u002Fapi-keys",{"type":48,"tag":183,"props":221,"children":223},{"className":222},[186],[224,227,229,235,237],{"type":48,"tag":189,"props":225,"children":226},{"disabled":43,"type":191},[],{"type":54,"value":228}," Replace env var: ",{"type":48,"tag":102,"props":230,"children":232},{"className":231},[],[233],{"type":54,"value":234},"SENDGRID_API_KEY",{"type":54,"value":236}," → ",{"type":48,"tag":102,"props":238,"children":240},{"className":239},[],[241],{"type":54,"value":41},{"type":48,"tag":183,"props":243,"children":245},{"className":244},[186],[246,249,251,257],{"type":48,"tag":189,"props":247,"children":248},{"disabled":43,"type":191},[],{"type":54,"value":250}," Replace SDK (see ",{"type":48,"tag":81,"props":252,"children":254},{"href":253},".\u002Freferences\u002Fsdk-examples.md",[255],{"type":54,"value":256},"SDK Examples",{"type":54,"value":258},")",{"type":48,"tag":183,"props":260,"children":262},{"className":261},[186],[263,266,268,274],{"type":48,"tag":189,"props":264,"children":265},{"disabled":43,"type":191},[],{"type":54,"value":267}," Map webhook events (see ",{"type":48,"tag":81,"props":269,"children":271},{"href":270},".\u002Freferences\u002Fwebhooks.md",[272],{"type":54,"value":273},"Webhooks",{"type":54,"value":258},{"type":48,"tag":183,"props":276,"children":278},{"className":277},[186],[279,282,284,290],{"type":48,"tag":189,"props":280,"children":281},{"disabled":43,"type":191},[],{"type":54,"value":283}," Update SMTP config if used (see ",{"type":48,"tag":81,"props":285,"children":287},{"href":286},".\u002Freferences\u002Fsmtp.md",[288],{"type":54,"value":289},"SMTP",{"type":54,"value":258},{"type":48,"tag":183,"props":292,"children":294},{"className":293},[186],[295,298,300,306],{"type":48,"tag":189,"props":296,"children":297},{"disabled":43,"type":191},[],{"type":54,"value":299}," Review feature differences (see ",{"type":48,"tag":81,"props":301,"children":303},{"href":302},".\u002Freferences\u002Ffeature-mapping.md",[304],{"type":54,"value":305},"Feature Mapping",{"type":54,"value":258},{"type":48,"tag":57,"props":308,"children":310},{"id":309},"key-differences-at-a-glance",[311],{"type":54,"value":312},"Key Differences at a Glance",{"type":48,"tag":314,"props":315,"children":316},"table",{},[317,339],{"type":48,"tag":318,"props":319,"children":320},"thead",{},[321],{"type":48,"tag":322,"props":323,"children":324},"tr",{},[325,331,335],{"type":48,"tag":326,"props":327,"children":328},"th",{},[329],{"type":54,"value":330},"Aspect",{"type":48,"tag":326,"props":332,"children":333},{},[334],{"type":54,"value":13},{"type":48,"tag":326,"props":336,"children":337},{},[338],{"type":54,"value":9},{"type":48,"tag":340,"props":341,"children":342},"tbody",{},[343,370,396,422,448,472,490,514,545,569,600],{"type":48,"tag":322,"props":344,"children":345},{},[346,352,361],{"type":48,"tag":347,"props":348,"children":349},"td",{},[350],{"type":54,"value":351},"API endpoint",{"type":48,"tag":347,"props":353,"children":354},{},[355],{"type":48,"tag":102,"props":356,"children":358},{"className":357},[],[359],{"type":54,"value":360},"https:\u002F\u002Fapi.sendgrid.com\u002Fv3\u002Fmail\u002Fsend",{"type":48,"tag":347,"props":362,"children":363},{},[364],{"type":48,"tag":102,"props":365,"children":367},{"className":366},[],[368],{"type":54,"value":369},"https:\u002F\u002Fapi.resend.com\u002Femails",{"type":48,"tag":322,"props":371,"children":372},{},[373,378,387],{"type":48,"tag":347,"props":374,"children":375},{},[376],{"type":54,"value":377},"Auth header",{"type":48,"tag":347,"props":379,"children":380},{},[381],{"type":48,"tag":102,"props":382,"children":384},{"className":383},[],[385],{"type":54,"value":386},"Authorization: Bearer $SENDGRID_API_KEY",{"type":48,"tag":347,"props":388,"children":389},{},[390],{"type":48,"tag":102,"props":391,"children":393},{"className":392},[],[394],{"type":54,"value":395},"Authorization: Bearer $RESEND_API_KEY",{"type":48,"tag":322,"props":397,"children":398},{},[399,404,413],{"type":48,"tag":347,"props":400,"children":401},{},[402],{"type":54,"value":403},"Batch send",{"type":48,"tag":347,"props":405,"children":406},{},[407],{"type":48,"tag":102,"props":408,"children":410},{"className":409},[],[411],{"type":54,"value":412},"sgMail.sendMultiple()",{"type":48,"tag":347,"props":414,"children":415},{},[416],{"type":48,"tag":102,"props":417,"children":419},{"className":418},[],[420],{"type":54,"value":421},"resend.batch.send()",{"type":48,"tag":322,"props":423,"children":424},{},[425,430,439],{"type":48,"tag":347,"props":426,"children":427},{},[428],{"type":54,"value":429},"Response",{"type":48,"tag":347,"props":431,"children":432},{},[433],{"type":48,"tag":102,"props":434,"children":436},{"className":435},[],[437],{"type":54,"value":438},"[response, body]",{"type":48,"tag":347,"props":440,"children":441},{},[442],{"type":48,"tag":102,"props":443,"children":445},{"className":444},[],[446],{"type":54,"value":447},"{ data, error }",{"type":48,"tag":322,"props":449,"children":450},{},[451,456,461],{"type":48,"tag":347,"props":452,"children":453},{},[454],{"type":54,"value":455},"Idempotency",{"type":48,"tag":347,"props":457,"children":458},{},[459],{"type":54,"value":460},"Not supported",{"type":48,"tag":347,"props":462,"children":463},{},[464,470],{"type":48,"tag":102,"props":465,"children":467},{"className":466},[],[468],{"type":54,"value":469},"Idempotency-Key",{"type":54,"value":471}," header or SDK option",{"type":48,"tag":322,"props":473,"children":474},{},[475,480,485],{"type":48,"tag":347,"props":476,"children":477},{},[478],{"type":54,"value":479},"Rate limit info",{"type":48,"tag":347,"props":481,"children":482},{},[483],{"type":54,"value":484},"Error only",{"type":48,"tag":347,"props":486,"children":487},{},[488],{"type":54,"value":489},"IETF-standard response headers",{"type":48,"tag":322,"props":491,"children":492},{},[493,498,503],{"type":48,"tag":347,"props":494,"children":495},{},[496],{"type":54,"value":497},"Rust SDK",{"type":48,"tag":347,"props":499,"children":500},{},[501],{"type":54,"value":502},"No official SDK",{"type":48,"tag":347,"props":504,"children":505},{},[506,512],{"type":48,"tag":102,"props":507,"children":509},{"className":508},[],[510],{"type":54,"value":511},"resend-rs",{"type":54,"value":513}," available",{"type":48,"tag":322,"props":515,"children":516},{},[517,522,534],{"type":48,"tag":347,"props":518,"children":519},{},[520],{"type":54,"value":521},"Templates",{"type":48,"tag":347,"props":523,"children":524},{},[525,527,533],{"type":54,"value":526},"Dynamic templates (",{"type":48,"tag":102,"props":528,"children":530},{"className":529},[],[531],{"type":54,"value":532},"templateId",{"type":54,"value":258},{"type":48,"tag":347,"props":535,"children":536},{},[537,539],{"type":54,"value":538},"React Email components or ",{"type":48,"tag":102,"props":540,"children":542},{"className":541},[],[543],{"type":54,"value":544},"html",{"type":48,"tag":322,"props":546,"children":547},{},[548,553,564],{"type":48,"tag":347,"props":549,"children":550},{},[551],{"type":54,"value":552},"Tracking",{"type":48,"tag":347,"props":554,"children":555},{},[556,558],{"type":54,"value":557},"Per-email ",{"type":48,"tag":102,"props":559,"children":561},{"className":560},[],[562],{"type":54,"value":563},"trackingSettings",{"type":48,"tag":347,"props":565,"children":566},{},[567],{"type":54,"value":568},"Configured per-domain in dashboard",{"type":48,"tag":322,"props":570,"children":571},{},[572,577,588],{"type":48,"tag":347,"props":573,"children":574},{},[575],{"type":54,"value":576},"Unsubscribe groups",{"type":48,"tag":347,"props":578,"children":579},{},[580,586],{"type":48,"tag":102,"props":581,"children":583},{"className":582},[],[584],{"type":54,"value":585},"asm",{"type":54,"value":587}," field",{"type":48,"tag":347,"props":589,"children":590},{},[591,593,599],{"type":54,"value":592},"Resend Topics (",{"type":48,"tag":102,"props":594,"children":596},{"className":595},[],[597],{"type":54,"value":598},"topic_id",{"type":54,"value":258},{"type":48,"tag":322,"props":601,"children":602},{},[603,608,618],{"type":48,"tag":347,"props":604,"children":605},{},[606],{"type":54,"value":607},"IP pools",{"type":48,"tag":347,"props":609,"children":610},{},[611,617],{"type":48,"tag":102,"props":612,"children":614},{"className":613},[],[615],{"type":54,"value":616},"ipPoolName",{"type":54,"value":587},{"type":48,"tag":347,"props":619,"children":620},{},[621],{"type":54,"value":622},"Account-level in dashboard",{"type":48,"tag":57,"props":624,"children":626},{"id":625},"quick-reference",[627],{"type":54,"value":628},"Quick Reference",{"type":48,"tag":314,"props":630,"children":631},{},[632,648],{"type":48,"tag":318,"props":633,"children":634},{},[635],{"type":48,"tag":322,"props":636,"children":637},{},[638,643],{"type":48,"tag":326,"props":639,"children":640},{},[641],{"type":54,"value":642},"Reference",{"type":48,"tag":326,"props":644,"children":645},{},[646],{"type":54,"value":647},"Use When",{"type":48,"tag":340,"props":649,"children":650},{},[651,666,681,696],{"type":48,"tag":322,"props":652,"children":653},{},[654,661],{"type":48,"tag":347,"props":655,"children":656},{},[657],{"type":48,"tag":81,"props":658,"children":659},{"href":253},[660],{"type":54,"value":256},{"type":48,"tag":347,"props":662,"children":663},{},[664],{"type":54,"value":665},"Converting code for Node.js, Python, Ruby, Go, PHP, Java, .NET, Elixir, cURL",{"type":48,"tag":322,"props":667,"children":668},{},[669,676],{"type":48,"tag":347,"props":670,"children":671},{},[672],{"type":48,"tag":81,"props":673,"children":674},{"href":286},[675],{"type":54,"value":289},{"type":48,"tag":347,"props":677,"children":678},{},[679],{"type":54,"value":680},"Updating SMTP hostname, port, credentials",{"type":48,"tag":322,"props":682,"children":683},{},[684,691],{"type":48,"tag":347,"props":685,"children":686},{},[687],{"type":48,"tag":81,"props":688,"children":689},{"href":270},[690],{"type":54,"value":273},{"type":48,"tag":347,"props":692,"children":693},{},[694],{"type":54,"value":695},"Mapping SendGrid event types to Resend event types",{"type":48,"tag":322,"props":697,"children":698},{},[699,706],{"type":48,"tag":347,"props":700,"children":701},{},[702],{"type":48,"tag":81,"props":703,"children":704},{"href":302},[705],{"type":54,"value":305},{"type":48,"tag":347,"props":707,"children":708},{},[709],{"type":54,"value":710},"Templates, tracking, unsubscribe groups, idempotency",{"type":48,"tag":57,"props":712,"children":714},{"id":713},"dashboard-concepts",[715],{"type":54,"value":716},"Dashboard Concepts",{"type":48,"tag":314,"props":718,"children":719},{},[720,734],{"type":48,"tag":318,"props":721,"children":722},{},[723],{"type":48,"tag":322,"props":724,"children":725},{},[726,730],{"type":48,"tag":326,"props":727,"children":728},{},[729],{"type":54,"value":13},{"type":48,"tag":326,"props":731,"children":732},{},[733],{"type":54,"value":9},{"type":48,"tag":340,"props":735,"children":736},{},[737,750,763,776],{"type":48,"tag":322,"props":738,"children":739},{},[740,745],{"type":48,"tag":347,"props":741,"children":742},{},[743],{"type":54,"value":744},"Sender Authentication",{"type":48,"tag":347,"props":746,"children":747},{},[748],{"type":54,"value":749},"Domains page",{"type":48,"tag":322,"props":751,"children":752},{},[753,758],{"type":48,"tag":347,"props":754,"children":755},{},[756],{"type":54,"value":757},"Activity",{"type":48,"tag":347,"props":759,"children":760},{},[761],{"type":54,"value":762},"Emails page",{"type":48,"tag":322,"props":764,"children":765},{},[766,771],{"type":48,"tag":347,"props":767,"children":768},{},[769],{"type":54,"value":770},"Dashboard (stats)",{"type":48,"tag":347,"props":772,"children":773},{},[774],{"type":54,"value":775},"Metrics page",{"type":48,"tag":322,"props":777,"children":778},{},[779,784],{"type":48,"tag":347,"props":780,"children":781},{},[782],{"type":54,"value":783},"Event Webhook",{"type":48,"tag":347,"props":785,"children":786},{},[787],{"type":54,"value":788},"Webhooks page",{"type":48,"tag":57,"props":790,"children":792},{"id":791},"common-mistakes",[793],{"type":54,"value":794},"Common Mistakes",{"type":48,"tag":314,"props":796,"children":797},{},[798,814],{"type":48,"tag":318,"props":799,"children":800},{},[801],{"type":48,"tag":322,"props":802,"children":803},{},[804,809],{"type":48,"tag":326,"props":805,"children":806},{},[807],{"type":54,"value":808},"Mistake",{"type":48,"tag":326,"props":810,"children":811},{},[812],{"type":54,"value":813},"Fix",{"type":48,"tag":340,"props":815,"children":816},{},[817,846,885,910,941,961,1000,1039,1056],{"type":48,"tag":322,"props":818,"children":819},{},[820,830],{"type":48,"tag":347,"props":821,"children":822},{},[823,828],{"type":48,"tag":102,"props":824,"children":826},{"className":825},[],[827],{"type":54,"value":585},{"type":54,"value":829}," has \"no equivalent\" in Resend",{"type":48,"tag":347,"props":831,"children":832},{},[833,835,840,842],{"type":54,"value":834},"It does — use ",{"type":48,"tag":102,"props":836,"children":838},{"className":837},[],[839],{"type":54,"value":598},{"type":54,"value":841}," field + Resend Topics. See ",{"type":48,"tag":81,"props":843,"children":844},{"href":302},[845],{"type":54,"value":305},{"type":48,"tag":322,"props":847,"children":848},{},[849,868],{"type":48,"tag":347,"props":850,"children":851},{},[852,854,860,862],{"type":54,"value":853},"Webhook ",{"type":48,"tag":102,"props":855,"children":857},{"className":856},[],[858],{"type":54,"value":859},"unsubscribe",{"type":54,"value":861}," maps to ",{"type":48,"tag":102,"props":863,"children":865},{"className":864},[],[866],{"type":54,"value":867},"email.unsubscribed",{"type":48,"tag":347,"props":869,"children":870},{},[871,873,879,881],{"type":54,"value":872},"That event doesn't exist. Use ",{"type":48,"tag":102,"props":874,"children":876},{"className":875},[],[877],{"type":54,"value":878},"contact.updated",{"type":54,"value":880},". See ",{"type":48,"tag":81,"props":882,"children":883},{"href":270},[884],{"type":54,"value":273},{"type":48,"tag":322,"props":886,"children":887},{},[888,899],{"type":48,"tag":347,"props":889,"children":890},{},[891,897],{"type":48,"tag":102,"props":892,"children":894},{"className":893},[],[895],{"type":54,"value":896},"sendAt: unixTimestamp",{"type":54,"value":898}," copied over",{"type":48,"tag":347,"props":900,"children":901},{},[902,904],{"type":54,"value":903},"Resend uses ISO 8601 string: ",{"type":48,"tag":102,"props":905,"children":907},{"className":906},[],[908],{"type":54,"value":909},"scheduledAt: new Date(...).toISOString()",{"type":48,"tag":322,"props":911,"children":912},{},[913,931],{"type":48,"tag":347,"props":914,"children":915},{},[916,918,923,925],{"type":54,"value":917},"Expecting ",{"type":48,"tag":102,"props":919,"children":921},{"className":920},[],[922],{"type":54,"value":438},{"type":54,"value":924}," from ",{"type":48,"tag":102,"props":926,"children":928},{"className":927},[],[929],{"type":54,"value":930},"resend.emails.send()",{"type":48,"tag":347,"props":932,"children":933},{},[934,936],{"type":54,"value":935},"Resend returns ",{"type":48,"tag":102,"props":937,"children":939},{"className":938},[],[940],{"type":54,"value":447},{"type":48,"tag":322,"props":942,"children":943},{},[944,949],{"type":48,"tag":347,"props":945,"children":946},{},[947],{"type":54,"value":948},"Looking for a CLI migration tool",{"type":48,"tag":347,"props":950,"children":951},{},[952,954,959],{"type":54,"value":953},"The tool is a web UI: ",{"type":48,"tag":81,"props":955,"children":957},{"href":37,"rel":956},[84],[958],{"type":54,"value":87},{"type":54,"value":960}," — no CLI",{"type":48,"tag":322,"props":962,"children":963},{},[964,981],{"type":48,"tag":347,"props":965,"children":966},{},[967,972,974,980],{"type":48,"tag":102,"props":968,"children":970},{"className":969},[],[971],{"type":54,"value":412},{"type":54,"value":973}," replaced by passing array to ",{"type":48,"tag":102,"props":975,"children":977},{"className":976},[],[978],{"type":54,"value":979},"to",{"type":54,"value":587},{"type":48,"tag":347,"props":982,"children":983},{},[984,986,991,993,998],{"type":54,"value":985},"Wrong — ",{"type":48,"tag":102,"props":987,"children":989},{"className":988},[],[990],{"type":54,"value":979},{"type":54,"value":992}," array sends one email to multiple recipients. ",{"type":48,"tag":102,"props":994,"children":996},{"className":995},[],[997],{"type":54,"value":421},{"type":54,"value":999}," sends multiple different emails in one call",{"type":48,"tag":322,"props":1001,"children":1002},{},[1003,1014],{"type":48,"tag":347,"props":1004,"children":1005},{},[1006,1012],{"type":48,"tag":102,"props":1007,"children":1009},{"className":1008},[],[1010],{"type":54,"value":1011},"dropped",{"type":54,"value":1013}," SendGrid event has no Resend equivalent",{"type":48,"tag":347,"props":1015,"children":1016},{},[1017,1019,1025,1027,1033,1035],{"type":54,"value":1018},"Monitor ",{"type":48,"tag":102,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":54,"value":1024},"email.bounced",{"type":54,"value":1026}," and ",{"type":48,"tag":102,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":54,"value":1032},"email.delivery_delayed",{"type":54,"value":1034}," instead. See ",{"type":48,"tag":81,"props":1036,"children":1037},{"href":270},[1038],{"type":54,"value":273},{"type":48,"tag":322,"props":1040,"children":1041},{},[1042,1047],{"type":48,"tag":347,"props":1043,"children":1044},{},[1045],{"type":54,"value":1046},"Resend SMTP only supports ports 465 and 587",{"type":48,"tag":347,"props":1048,"children":1049},{},[1050,1052],{"type":54,"value":1051},"Resend also supports 2465 (SMTPS) and 2587 (STARTTLS) as alternatives. See ",{"type":48,"tag":81,"props":1053,"children":1054},{"href":286},[1055],{"type":54,"value":289},{"type":48,"tag":322,"props":1057,"children":1058},{},[1059,1064],{"type":48,"tag":347,"props":1060,"children":1061},{},[1062],{"type":54,"value":1063},"Forgot to rename env var",{"type":48,"tag":347,"props":1065,"children":1066},{},[1067,1072,1073],{"type":48,"tag":102,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":54,"value":234},{"type":54,"value":236},{"type":48,"tag":102,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":54,"value":41},{"type":48,"tag":57,"props":1079,"children":1081},{"id":1080},"resources",[1082],{"type":54,"value":1083},"Resources",{"type":48,"tag":177,"props":1085,"children":1086},{},[1087,1096,1106,1118],{"type":48,"tag":183,"props":1088,"children":1089},{},[1090],{"type":48,"tag":81,"props":1091,"children":1093},{"href":37,"rel":1092},[84],[1094],{"type":54,"value":1095},"Full migration guide",{"type":48,"tag":183,"props":1097,"children":1098},{},[1099],{"type":48,"tag":81,"props":1100,"children":1103},{"href":1101,"rel":1102},"https:\u002F\u002Fresend.com\u002Fdocs\u002Fapi-reference",[84],[1104],{"type":54,"value":1105},"Resend API reference",{"type":48,"tag":183,"props":1107,"children":1108},{},[1109,1116],{"type":48,"tag":81,"props":1110,"children":1113},{"href":1111,"rel":1112},"https:\u002F\u002Freact.email",[84],[1114],{"type":54,"value":1115},"React Email",{"type":54,"value":1117}," — component-based email templates",{"type":48,"tag":183,"props":1119,"children":1120},{},[1121,1128],{"type":48,"tag":81,"props":1122,"children":1125},{"href":1123,"rel":1124},"https:\u002F\u002Fresend.com\u002Fbroadcasts",[84],[1126],{"type":54,"value":1127},"Resend Broadcasts",{"type":54,"value":1129}," — for marketing\u002Fnewsletter campaigns",{"items":1131,"total":1150},[1132,1139],{"slug":4,"name":4,"fn":5,"description":6,"org":1133,"tags":1134,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1135,1136,1137,1138],{"name":21,"slug":22,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":1140,"name":1140,"fn":1141,"description":1142,"org":1143,"tags":1144,"stars":23,"repoUrl":24,"updatedAt":1149},"resend-migrate","migrate email providers to Resend","Use when migrating from SendGrid, Mailgun, or Postmark to Resend - detects @sendgrid\u002Fmail, sgMail, SENDGRID_API_KEY, mailgun, postmark imports and routes to the appropriate provider migration sub-skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1145,1146,1147,1148],{"name":21,"slug":22,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:51:16.542148",2,{"items":1152,"total":1257},[1153,1173,1190,1206,1227,1243,1250],{"slug":1154,"name":1154,"fn":1155,"description":1156,"org":1157,"tags":1158,"stars":1170,"repoUrl":1171,"updatedAt":1172},"email-best-practices","implement email delivery best practices","Use when building email features, emails going to spam, high bounce rates, setting up SPF\u002FDKIM\u002FDMARC authentication, implementing email capture, ensuring compliance (CAN-SPAM, GDPR, CASL), handling webhooks, retry logic, making emails accessible (alt text, headings, contrast, screen readers), or deciding transactional vs marketing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1159,1162,1163,1166,1167],{"name":1160,"slug":1161,"type":15},"Compliance","compliance",{"name":21,"slug":22,"type":15},{"name":1164,"slug":1165,"type":15},"Operations","operations",{"name":9,"slug":8,"type":15},{"name":1168,"slug":1169,"type":15},"Security","security",158,"https:\u002F\u002Fgithub.com\u002Fresend\u002Fresend-skills","2026-05-26T13:25:14.185307",{"slug":1174,"name":1174,"fn":1175,"description":1176,"org":1177,"tags":1178,"stars":1170,"repoUrl":1171,"updatedAt":1189},"react-email","build HTML emails with React Email","Use when building HTML email templates with React components, adding a visual email editor to an application using the React Email visual editor, rendering emails to HTML, or sending emails with Resend. Covers welcome emails, password resets, notifications, order confirmations, newsletters, transactional emails, and the embeddable email editor component.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1179,1180,1183,1186,1187],{"name":21,"slug":22,"type":15},{"name":1181,"slug":1182,"type":15},"Frontend","frontend",{"name":1184,"slug":1185,"type":15},"React","react",{"name":9,"slug":8,"type":15},{"name":521,"slug":1188,"type":15},"templates","2026-05-26T13:25:11.308896",{"slug":1191,"name":1191,"fn":1192,"description":1193,"org":1194,"tags":1195,"stars":1170,"repoUrl":1171,"updatedAt":1205},"resend-cli","manage Resend platform via CLI","Operate the Resend platform from the terminal — send emails (including React Email .tsx templates via --react-email), manage domains, contacts, broadcasts, templates, webhooks, API keys, logs, automations, and events via the `resend` CLI. Use when the user wants to run Resend commands in the shell, scripts, or CI\u002FCD pipelines, or send\u002Fpreview React Email templates. Always load this skill before running `resend` commands — it contains the non-interactive flag contract and gotchas that prevent silent failures.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1196,1199,1202,1203,1204],{"name":1197,"slug":1198,"type":15},"Automation","automation",{"name":1200,"slug":1201,"type":15},"CLI","cli",{"name":21,"slug":22,"type":15},{"name":1164,"slug":1165,"type":15},{"name":9,"slug":8,"type":15},"2026-07-24T05:39:11.114186",{"slug":1207,"name":1207,"fn":1208,"description":1209,"org":1210,"tags":1211,"stars":1224,"repoUrl":1225,"updatedAt":1226},"resend-brand","create Resend brand and marketing materials","Use when creating Resend marketing materials, documents, presentations, or visual content. Triggers for Resend brand, Resend style, or Resend visual identity requests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1212,1215,1218,1221],{"name":1213,"slug":1214,"type":15},"Branding","branding",{"name":1216,"slug":1217,"type":15},"Creative","creative",{"name":1219,"slug":1220,"type":15},"Design","design",{"name":1222,"slug":1223,"type":15},"Marketing","marketing",39,"https:\u002F\u002Fgithub.com\u002Fresend\u002Fdesign-skills","2026-07-14T05:44:56.364329",{"slug":1228,"name":1228,"fn":1229,"description":1230,"org":1231,"tags":1232,"stars":1224,"repoUrl":1225,"updatedAt":1242},"resend-design-skills","access Resend design resources","Use when needing Resend design resources. Routes to brand guidelines and visual identity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1233,1234,1235,1238,1239],{"name":1213,"slug":1214,"type":15},{"name":1219,"slug":1220,"type":15},{"name":1236,"slug":1237,"type":15},"Design System","design-system",{"name":9,"slug":8,"type":15},{"name":1240,"slug":1241,"type":15},"UI Components","ui-components","2026-04-06T18:51:12.604703",{"slug":4,"name":4,"fn":5,"description":6,"org":1244,"tags":1245,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1246,1247,1248,1249],{"name":21,"slug":22,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":1140,"name":1140,"fn":1141,"description":1142,"org":1251,"tags":1252,"stars":23,"repoUrl":24,"updatedAt":1149},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1253,1254,1255,1256],{"name":21,"slug":22,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},7]