Skip to main content
@senddio/openai-tools · live

Give your ChatGPT assistant the power to send messages.

Seven pre-built tools — for sending, checking status, listing messages, reading replies and pulling stats — shipped as plain JSON schemas. Drop them into your OpenAI Assistants tools array and your assistant can send on every channel through the same endpoint your team already uses.

● Free forever · No card · All 6 channels · AI credits
assistant.tools · OpenAI Assistants API
JSON-Schema
{
  "type": "function",
  "function": {
    "name": "senddio_send",
    "description": "Send a transactional message on any channel.",
    "parameters": {
      "type": "object",
      "properties": {
        "channel": { "type": "string",
                     "enum": ["email","sms","whatsapp","push","slack","telegram"] },
        "to":      { "type": "string", "description": "Recipient (email, +E.164, device token, slack channel, etc.)" },
        "from":    { "type": "string", "description": "Required for email, SMS and WhatsApp" },
        "subject": { "type": "string" },
        "body":    { "type": "string" },
        "title":   { "type": "string", "description": "Push only" },
        "tag":     { "type": "string" },
        "reply_to":{ "type": "string", "description": "Email only" }
      },
      "required": ["channel","to","body"]
    }
  }
}
The shift

Stop hand-writing tool definitions at 1am for every new assistant.

  • No more drift between your docs and your tool schemas.
  • No more “why won’t GPT call my tool?” debugging sessions.
  • No more rebuilding the same handler for every new app.
  • No more agents holding administrator keys you will regret giving them.

Seven schemas. One handler. Assistants that genuinely ship work.

The toolbelt

Seven tools, fully typed.

senddio_send
Send on any configured channel.
senddio_notify
Notify a user through a preference chain.
senddio_get_message
Look up status by id.
senddio_list_messages
Recent message history.
senddio_list_inbound
Read inbound replies.
senddio_get_inbound
Fetch an inbound reply by ID.
senddio_get_stats
Aggregate stats over a window.
How it pairs

One package. Schemas + handler.

Import the schemas to declare the tool surface to OpenAI. Import the handler to actually execute the tool calls against /v1/send. Stateful idempotency keys, per-tool error mapping, and observability are baked in.

  • Schemas exported as plain JSON-Schema
  • Handler returns standard tool-output objects
  • Per-tool error code mapping to OpenAI's tool_error contract
  • Idempotency keys propagated end-to-end
  • Works in serverless (Vercel, Cloudflare Workers)
Node · usage
@senddio/openai-tools
import { SENDDIO_TOOLS, handleToolCall } from '@senddio/openai-tools';

// Pass these Chat Completions-style schemas to your model integration.
const tools = [...SENDDIO_TOOLS];

// When your model returns a function tool call:
async function executeSenddioTool(call) {
  const output = await handleToolCall(
    call.function.name,
    JSON.parse(call.function.arguments),
    { apiKey: process.env.SENDDIO_API_KEY }
  );
  // Return this tool result to the model in your application's loop.
  return { tool_call_id: call.id, output };
}
Suggested integration milestones

Your first 30 days as an assistant-driven product.

01
Day 1
First assistant turn ends with a real send
02
Day 3
Agent-scoped key live; original dev key revoked
03
Week 1
Tool calls tagged in Logs by assistant name
04
Day 30
Daily standup agent posts to Slack on its own
●Every milestone above ships on the Free plan. No card, no upgrade gate.
FAQ

OpenAI tools — FAQ

They run in your code. The cleanest pattern is to import the @senddio/openai-tools package, pass the schemas to the Assistants API's tools array, and use the included handler to forward each tool call to Senddio. You wire it up once.

Yes. The schemas are plain JSON Schema, so they work with both the modern Responses API and the older ChatCompletion function-calling style. The package exports Chat Completions-style schemas; adapt their envelope when using the Responses API.

You can, but we recommend giving each assistant its own agent-scoped key. That way your audit trail clearly shows which assistant sent which message. Same endpoint, different keys, much cleaner reporting.

The handler is asynchronous and returns a JSON string. OpenAI's streaming model orchestrates the interleaving on its side. Your application awaits execution and returns the result to the model.

Give your GPT a send tool today.

Free plan includes agent-scoped keys and 20 AI credits.

Start free Read the docs
● 300 emails/day · All 6 channels · AI credits · No card