resend

resend

resend.

Resend contacts — the people Broadcasts are sent to: keep a segment up to

add to otoauth : —prefix : resend_*

setup & usage

⚠ a resend api key with full access

the key is your organization's, set by an org admin on the resend connector. it serves two things: the platform's email sending (email_send, from a domain verified in your resend account) and the contact list your broadcasts go to.

  • in resend, create an api key with permission full access
  • a sending access key keeps sending emails, but resend refuses it on contacts, segments and topics: the tools then say so. a full-access key also sends, so replacing the key never breaks sending
  • byo-only: your organization's key, no platform key
  • ▸ keep a broadcast audience up to date
  • "add these people to the newsletter segment" → resend_contact(op="upsert", contacts=[{"email": …, "first_name": …}], segment_ids=["…"]) — up to 50 per call, with a receipt; dry_run=true first to preview
  • "who is in the segment?" → resend_contact(op="list", segment_id="…") (pass next_after as after for the next page)
  • "who unsubscribed?" → resend_contact(op="list", segment_id="…", unsubscribed=true)
  • "what do we know about this person?" → resend_contact(op="get", contact="<email or id>") — with segments and topic subscriptions
  • "this person asked to stop receiving the newsletter" → resend_contact(op="update", contact="…", unsubscribed=true)
  • "list the segments" / "create a segment" → resend_segment(op="list") / resend_segment(op="create", name="…")
  • "which topics can people subscribe to?" → resend_topic(op="list")
  • · what the tools will not do
  • ⚠️ an upsert never resubscribes someone who unsubscribed: the receipt lists them under kept_unsubscribed. resubscribing is an explicit op="update" with unsubscribed=false, on the person's own request
  • ⚠️ deleting a contact drops their opt-out: to stop emailing someone, set unsubscribed=true instead
  • topics are read-only: the recipient changes their own topic subscriptions from the unsubscribe page
  • no broadcast is created or sent from here
  • ⚙ multiple comptes

    this connector accepts multiple comptes: each stored credential becomes a named account (one name per compte), at your level, your team's or your org's.

  • the first one doesn't need a name; from the second on, each one carries its own (the first then takes the name "principal", renamable)
  • without specification, the agent takes the only stored compte, otherwise the one marked as default; otherwise the call is refused, naming the available comptes — never a random choice
  • target a compte for a call: _account="<name>" on the tool; list them: oto_identity(op='list', connector='resend') (scope='org' or scope='group' for the org's or team's)
  • set the default: oto_identity(op='set', connector='resend', identity_id='<name>'); rename: op='rename' with new_name
  • ⚠️ no tool walks through the comptes on its own: a total across several comptes is obtained by calling each one (_account) and adding up
  • outils

    chargement…

    usage

    claude code — install the oto plugin — claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configured.
    claude.ai — add mcp.oto.cx/mcp as a custom connector (guide)
    cli — pipx install oto-cli then oto resend …