Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Sendivent

v1.0.0

Sendivent multi-channel notification API. Use when sending notifications via email, SMS, Slack, push, Telegram, WhatsApp, or Discord. Triggers on: send notif...

0· 80·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for oakleaf/sendivent.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Sendivent" (oakleaf/sendivent) from ClawHub.
Skill page: https://clawhub.ai/oakleaf/sendivent
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install sendivent

ClawHub CLI

Package manager switcher

npx clawhub@latest install sendivent
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The name, description, README, SDK guide, and API reference all consistently describe a Sendivent multi-channel notification integration. The documented endpoints, channels, and examples are coherent with the stated purpose.
Instruction Scope
SKILL.md instructs using a Sendivent API key (process.env.SENDIVENT_API_KEY), creating an account/application, and making HTTP requests to api.sendivent.com — all within the expected scope. The instructions do not ask the agent to read unrelated system files or transmit unrelated data.
Install Mechanism
This is an instruction-only skill with no install spec and no code files to write or execute locally, which minimizes install-time risk.
!
Credentials
The runtime docs require an API key (SENDIVENT_API_KEY) and show examples using it, but the registry metadata lists no required environment variables or primary credential. The request for an API key is proportionate to the skill's purpose, but the metadata omission is a mismatch that could lead to surprising behavior or accidental leaking if users aren't warned.
Persistence & Privilege
The skill does not request persistent/always-on presence (always:false) and does not modify other skills or global agent settings. Autonomous invocation is allowed by platform default but is not combined with other red flags here.
What to consider before installing
This skill appears to be a straightforward Sendivent API reference and helper, which legitimately needs an API key to operate. Before installing: (1) Confirm you trust the skill owner and the sendivent.com domain; (2) do not provide a production API key—use a test_* sandbox key for experimentation; (3) note that the skill's metadata does not declare SENDIVENT_API_KEY even though the docs require it—make sure you set the env var yourself if you intend to use it; (4) if you do not want the agent to call the skill autonomously, disable model invocation or limit the agent's permissions; (5) review any code the agent generates that uses the key and avoid embedding long-lived production credentials in source or logs.

Like a lobster shell, security has layers — review code before you run it.

latestvk97f6aqten8hc9h1c9kk7mg4158433q1
80downloads
0stars
1versions
Updated 3w ago
v1.0.0
MIT-0

Sendivent Notification API

Send multi-channel notifications, manage contacts, and configure events via REST API.

Using Node.js? See the SDK Guide for TypeScript examples with the @appitude/sendivent package.

Reference: API Guide | Official Docs

Prerequisites

  • Create Account — Sign up at sendivent.com/signup
  • Create Application — Dashboard > Applications > New Application
  • Get API Key — Dashboard > API Keys > Generate (docs)
  • Set Environment Variableexport SENDIVENT_API_KEY=live_your_key_here
  • Configure a Channel — Set up at least one integration (email, SMS, Slack, etc.)
  • Create an Event — Dashboard > Events > New Event (e.g. user.welcome)

Authentication

All requests require a Bearer token in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Base URLs:

  • Production: https://api.sendivent.com
  • Sandbox: https://api-sandbox.sendivent.com

Key Prefixes:

  • live_* — Production (real deliveries)
  • test_* — Sandbox (safe testing)

All POST/PATCH requests must include Content-Type: application/json.


Send Notification

Send to a single recipient

POST /v1/send/{event}

The event is the event name in the URL path (e.g. order.confirmed), not in the body.

ParameterTypeRequiredDescription
tostring | objectYesRecipient — email, phone, UUID, external_id, or contact object
payloadobjectYesTemplate variables (can be {} if none)
languagestringNoTemplate language override (e.g. sv, en)
fromstringNoSender override (must be verified)
overridesobjectNoChannel-specific overrides

Flexible to formats:

"to": "user@example.com"
"to": "+14155551234"
"to": "550e8400-e29b-41d4-a716-446655440000"
"to": { "email": "user@example.com", "name": "Jane", "tier": "premium" }

Any non-standard field in the contact object (like tier above) is stored in meta and accessible in templates as {{contact.meta.tier}}.

Response:

{
  "success": true,
  "deliveries": [
    { "email": "d4e5f6a7-b8c9-4d0e-a1f2-3b4c5d6e7f8a" },
    { "sms": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" }
  ]
}

Each entry in deliveries is a { channel: uuid } object mapping the channel to the delivery UUID.


Send to multiple recipients

POST /v1/send/{event}

Pass an array to to for personalized multi-recipient sends:

{
  "to": [
    { "email": "user1@example.com", "name": "Alice", "tier": "premium" },
    { "email": "user2@example.com", "name": "Bob", "tier": "free" }
  ],
  "payload": { "company": "ACME" }
}

Each contact receives individually compiled templates with their specific data + shared payload.


Force a specific channel

POST /v1/send/{event}/{channel}

Channels: email, sms, slack, push, telegram, whatsapp, discord


Idempotency

Include X-Idempotency-Key: your-unique-key header to prevent duplicate sends. Replayed requests return X-Idempotent-Replay: true.


Error response (send)

When a send fails, the response includes an errors array:

{
  "success": false,
  "deliveries": [],
  "errors": [
    { "code": "INTEGRATION_MISSING", "message": "No email integration configured" }
  ]
}

Contacts

List contacts

GET /v1/contacts

ParameterTypeRequiredDescription
limitnumberNoMax 100 (default 50)
offsetnumberNoPagination offset
searchstringNoSearch by email, name, or phone

Response:

{
  "success": true,
  "data": {
    "contacts": [{ "uuid": "...", "email": "...", "name": "...", "meta": {} }],
    "total": 150,
    "limit": 50,
    "offset": 0
  }
}

Find contact

GET /v1/contacts/{identifier}

Identifier can be: email, phone, UUID, external_id, or Slack user ID.


Create or upsert contact

POST /v1/contacts

ParameterTypeRequiredDescription
emailstringNo*Email address
phonestringNo*Phone (E.164 format)
namestringNoDisplay name
externalIdstringNoYour system's user ID
avatarstringNoAvatar URL
usernamestringNoUsername
slackstringNoSlack user ID
telegramstringNoTelegram user ID
discordstringNoDiscord user ID

*At least one identifier (email, phone, externalId) is required.

Any unknown field is automatically stored in meta with camelCase conversion.


Update contact

PATCH /v1/contacts/{identifier}

Same fields as create. Only updates provided fields.


Delete contact

DELETE /v1/contacts/{identifier}

Hard delete (GDPR compliant). Returns { "success": true, "deleted": true }.


Push tokens

POST /v1/contacts/{identifier}/push-tokens — Register token: { "token": "ExponentPushToken[...]" }

DELETE /v1/contacts/{identifier}/push-tokens — Remove token: { "token": "..." }


Developer Endpoints

Read-only endpoints for inspecting events, deliveries, and integrations. Available on the customer API with standard Bearer token auth.

List events

GET /v1/events

Returns all notification events for the application.

Response:

{
  "success": true,
  "data": {
    "events": [
      { "identifier": "user.welcome", "name": "User Welcome", "channels": ["email", "slack"] }
    ]
  }
}

Get event details

GET /v1/events/{identifier}

Returns detailed event configuration including templates and channel settings.

Response:

{
  "success": true,
  "data": {
    "event": { "identifier": "user.welcome", "name": "User Welcome", "channels": [...], "templates": [...] }
  }
}

List deliveries

GET /v1/deliveries

ParameterTypeRequiredDescription
limitnumberNoMax results (default 20)
offsetnumberNoPagination offset
eventstringNoFilter by event name
channelstringNoFilter by channel
statusstringNoFilter by status: pending, sent, delivered, failed

Response:

{
  "success": true,
  "data": {
    "deliveries": [...],
    "total": 42,
    "limit": 20,
    "offset": 0
  }
}

Get delivery trace

GET /v1/deliveries/{uuid}/trace

Returns full delivery trace with timeline and content snapshot.

Response:

{
  "success": true,
  "data": {
    "delivery": { "uuid": "...", "channel": "email", "status": "sent", ... },
    "timeline": [
      { "event": "queued", "timestamp": "2026-03-30T12:00:00Z" },
      { "event": "sent", "timestamp": "2026-03-30T12:00:01Z" }
    ]
  }
}

List integrations

GET /v1/integrations

ParameterTypeRequiredDescription
channelstringNoFilter by channel

Returns channel integrations with secrets stripped.

Response:

{
  "success": true,
  "data": {
    "integrations": [
      { "channel": "email", "provider": "ses", "status": "active" }
    ]
  }
}

Webhooks

Register one webhook endpoint per application to receive delivery status events.

Event types

  • delivery.sent — Notification dispatched to provider
  • delivery.delivered — Provider confirmed delivery (email only via SES)
  • delivery.failed — Delivery failed permanently
  • delivery.bounced — Email bounced
  • delivery.complained — Recipient marked as spam

Create webhook

POST /v1/webhooks

{
  "url": "https://yourapp.com/webhooks/sendivent",
  "enabled_events": ["delivery.sent", "delivery.failed"],
  "description": "Production webhook"
}

Response includes signing_secret for HMAC-SHA256 verification.

Other operations

  • GET /v1/webhooks — Get webhook config
  • PATCH /v1/webhooks/{uuid} — Update (url, enabled_events, is_active)
  • DELETE /v1/webhooks/{uuid} — Remove webhook

Payload format

{
  "event": "delivery.sent",
  "delivery": {
    "uuid": "d4e5f6a7-...",
    "channel": "email",
    "status": "sent",
    "event_name": "order.confirmed",
    "message_id": "ses-message-id",
    "sent_at": "2026-03-30T12:00:00Z",
    "delivered_at": null,
    "error": null
  },
  "request_id": "req-uuid",
  "timestamp": "2026-03-30T12:00:00Z"
}

Channels

Sendivent supports 7 channels. Each requires a configured integration.

ChannelIdentifierProvider
EmailemailAWS SES, SendGrid, Brevo
SMSphone (E.164)AWS SNS, Cellsynt
Slackslack (user ID)Slack API
Pushpush_tokenExpo, FCM, APNs
Telegramtelegram (user ID)Telegram Bot API
WhatsAppphone (E.164)WhatsApp Business API
Discorddiscord (user ID)Discord Bot API

Template Variables

Templates use Handlebars syntax. Available in all channel templates:

VariableDescription
{{contact.name}}Contact display name
{{contact.email}}Contact email
{{contact.phone}}Contact phone
{{contact.meta.fieldName}}Custom contact fields
{{payload.key}}Event payload data
{{app.name}}Application name
{{sender.name}}Sender name
{{sender.email}}Sender email

Fallback syntax: {{name | Guest}} — uses "Guest" if name is empty.


Error Handling

All errors return JSON:

{
  "error": "Event 'order.shipped' not found",
  "code": "EVENT_NOT_FOUND"
}
StatusCodeDescription
400VALIDATION_ERRORMissing or invalid parameters
401UNAUTHORIZEDInvalid or missing API key
402QUOTA_EXCEEDEDContact quota exceeded — upgrade plan
403FORBIDDENSubscription inactive or addon not enabled
404NOT_FOUNDEvent, contact, or resource not found
409CONFLICTWebhook endpoint already exists
429RATE_LIMITEDToo many requests — retry with backoff
500SERVER_ERRORInternal error
502PROVIDER_ERRORThird-party provider failed

Common error codes

CodeDescription
MISSING_IDENTIFIERContact lacks required identifier for channel
INTEGRATION_MISSINGChannel integration not configured
ADDON_NOT_ENABLEDSMS/WhatsApp addon not on plan
UNVERIFIED_SENDERSender email/phone not verified
INVALID_EMAILInvalid email format
INVALID_PHONEInvalid phone number (must be E.164)
EVENT_NOT_FOUNDEvent name doesn't exist

Rate Limits

EnvironmentRequests/SecondDaily Quota
Production1001,000
Sandbox10150

Comments

Loading comments...