{"id":"dce87f67-bdff-4841-8e1a-82ce8465627d","entityType":"agent","slug":"clawhub-skills-andythemartketing-unione","name":"unione","canonicalUrl":"https://www.xpersona.co/agent/clawhub-skills-andythemartketing-unione","canonicalPath":"/agent/clawhub-skills-andythemartketing-unione","generatedAt":"2026-10-10T03:14:31.764Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Send transactional and marketing emails via UniOne Email API. Manage email templates, validate email addresses, check delivery statistics, manage suppression lists, configure webhooks, and handle domain settings. UniOne delivers billions of emails annually with 99.88% deliverability. --- name: unione description: > Send transactional and marketing emails via UniOne Email API. Manage email templates, validate email addresses, check delivery statistics, manage suppression lists, configure webhooks, and handle domain settings. UniOne delivers billions of emails annually with 99.88% deliverability. metadata: openclaw: emoji: \"📧\" requires: env: - UNIONE_API_KEY primaryEnv: UNIONE_API_KEY --- UniOne E","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.","installCommand":"clawhub skill install skills:andythemartketing:unione","sourceUrl":"https://github.com/openclaw/skills/tree/main/skills/andythemartketing/unione","homepage":null,"primaryLinks":[{"label":"View on ClawHub","url":"https://github.com/openclaw/skills/tree/main/skills/andythemartketing/unione","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":50,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Send transactional and marketing emails via UniOne Email API. Manage email templates, validate email addresses, check delivery statistics, manage suppression li"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"take","status":"self-declared"},{"label":"be","status":"self-declared"},{"label":"make","status":"self-declared"},{"label":"personalization","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":5,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"take","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"be","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"make","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"personalization","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:take|supported|profile capability:be|supported|profile capability:make|supported|profile capability:personalization|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No source adoption metrics were available."},"stars":null,"forks":null,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-02-25T03:36:41.675Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-25T03:36:41.675Z","lastIndexedAt":null,"nextCrawlAt":"2026-02-26T03:36:41.675Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install skills:andythemartketing:unione","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T03:14:31.763Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-andythemartketing-unione/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"---\nname: unione\ndescription: >\n  Send transactional and marketing emails via UniOne Email API.\n  Manage email templates, validate email addresses, check delivery statistics,\n  manage suppression lists, configure webhooks, and handle domain settings.\n  UniOne delivers billions of emails annually with 99.88% deliverability.\nmetadata:\n  openclaw:\n    emoji: \"📧\"\n    requires:\n      env:\n        - UNIONE_API_KEY\n    primaryEnv: UNIONE_API_KEY\n---\n\n# UniOne Email API\n\nUniOne is a transactional email service with Web API for sending transactional and marketing emails at scale (up to 3,000 emails/sec). This skill lets you send emails, manage templates, validate addresses, track delivery, and more.\n\n## Authentication\n\nAll requests require the `UNIONE_API_KEY` environment variable. Pass it as the `X-API-KEY` header.\n\n**Base URL:** `https://api.unione.io/en/transactional/api/v1/{method}.json?platform=openclaw`\n\nAll methods use `POST` with JSON body.\n\n---\n\n## CRITICAL: Domain Setup (Required Before Sending)\n\n**Emails will not be delivered until the sender's domain is verified.** Before attempting to send any email, ensure the domain is set up:\n\n### Step 1: Get DNS Record Values — `domain/get-dns-records.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/get-dns-records.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"domain\": \"yourdomain.com\"}'\n```\n\n**API response** returns raw values (not ready-to-paste DNS records):\n\n```json\n{\n  \"status\": \"success\",\n  \"domain\": \"yourdomain.com\",\n  \"verification-record\": \"unione-validate-hash=483bb362ebdbeedd755cfb1d4d661\",\n  \"dkim\": \"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDo7\"\n}\n```\n\n**The user must create 3 DNS TXT records from these values:**\n\n| Record Host | Record Type | Value |\n|-------------|-------------|-------|\n| `@` | TXT | `unione-validate-hash=<verification-record from response>` |\n| `us._domainkey` | TXT | `k=rsa; p=<dkim from response>` |\n| `@` | TXT | `v=spf1 include:spf.unione.io ~all` |\n\nPresent these 3 records clearly to the user and instruct them to add them at their DNS provider (Cloudflare, Route53, GoDaddy, etc.). The SPF record is always the same — it is not returned by the API.\n\n### Step 2: Verify Domain Ownership — `domain/validate-verification.json`\n\nAfter the user has added DNS records:\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/validate-verification.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"domain\": \"yourdomain.com\"}'\n```\n\n### Step 3: Validate DKIM — `domain/validate-dkim.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/validate-dkim.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"domain\": \"yourdomain.com\"}'\n```\n\n### Step 4: List All Domains — `domain/list.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/list.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{}'\n```\n\n**If domain verification fails:** DNS propagation can take up to 48 hours. Suggest the user waits and retries, or checks their DNS records for typos.\n\n---\n\n## Error Handling & Retry Policy\n\n### Retry Logic\n\nWhen making API requests, implement exponential backoff for retryable errors:\n\n**Retryable errors (DO retry with exponential backoff):**\n\n| HTTP Code | Meaning | Retry Strategy |\n|-----------|---------|----------------|\n| 429 | Rate limited | Wait, then retry. Respect `Retry-After` header if present |\n| 500 | Internal server error | Retry up to 3 times |\n| 502 | Bad gateway | Retry up to 3 times |\n| 503 | Service unavailable | Retry up to 3 times |\n| 504 | Gateway timeout | Retry up to 3 times |\n\n**Recommended retry schedule:**\n\n| Attempt | Delay |\n|---------|-------|\n| 1 | Immediate |\n| 2 | 1 second |\n| 3 | 5 seconds |\n| 4 | 30 seconds |\n\n**Non-retryable errors (do NOT retry):**\n\n| HTTP Code | Meaning | Action |\n|-----------|---------|--------|\n| 400 | Bad request | Fix the request parameters |\n| 401 | Unauthorized | Check API key |\n| 403 | Forbidden | Check permissions / domain verification |\n| 404 | Endpoint not found | Check the method path |\n| 413 | Payload too large | Reduce request size |\n\n### Idempotency\n\nFor `email/send.json`, always include an `idempotency_key` to prevent duplicate sends during retries. This is critical for production systems.\n\nThe `idempotency_key` is a unique string (UUID recommended) passed in the request body. If UniOne receives two requests with the same key, the second request returns the result of the first without sending another email.\n\n**Always generate a unique idempotency key per logical send operation, and reuse the same key when retrying the same send.**\n\n---\n\n## 1. Send Email — `email/send.json`\n\nSend a transactional or marketing email to one or more recipients. Supports personalization via substitutions, templates, attachments, tracking, and metadata.\n\n### curl\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/email/send.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\n    \"idempotency_key\": \"unique-uuid-here\",\n    \"message\": {\n      \"recipients\": [\n        {\n          \"email\": \"recipient@example.com\",\n          \"substitutions\": {\n            \"to_name\": \"John Smith\"\n          }\n        }\n      ],\n      \"body\": {\n        \"html\": \"<h1>Hello, {{to_name}}!</h1><p>Your order has been confirmed.</p>\",\n        \"plaintext\": \"Hello, {{to_name}}! Your order has been confirmed.\"\n      },\n      \"subject\": \"Order Confirmation\",\n      \"from_email\": \"noreply@yourdomain.com\",\n      \"from_name\": \"Your Store\"\n    }\n  }'\n```\n\n### Node.js\n\n```javascript\nconst response = await fetch(\"https://api.unione.io/en/transactional/api/v1/email/send.json?platform=openclaw\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    \"X-API-KEY\": process.env.UNIONE_API_KEY\n  },\n  body: JSON.stringify({\n    idempotency_key: crypto.randomUUID(),\n    message: {\n      recipients: [{ email: \"recipient@example.com\", substitutions: { to_name: \"John\" } }],\n      body: {\n        html: \"<h1>Hello, {{to_name}}!</h1><p>Your order has been confirmed.</p>\",\n        plaintext: \"Hello, {{to_name}}! Your order has been confirmed.\"\n      },\n      subject: \"Order Confirmation\",\n      from_email: \"noreply@yourdomain.com\",\n      from_name: \"Your Store\"\n    }\n  })\n});\nconst data = await response.json();\n// data.status === \"success\" → data.job_id, data.emails\n```\n\n### Python\n\n```python\nimport requests, uuid, os\n\nresponse = requests.post(\n    \"https://api.unione.io/en/transactional/api/v1/email/send.json?platform=openclaw\",\n    headers={\n        \"Content-Type\": \"application/json\",\n        \"X-API-KEY\": os.environ[\"UNIONE_API_KEY\"]\n    },\n    json={\n        \"idempotency_key\": str(uuid.uuid4()),\n        \"message\": {\n            \"recipients\": [{\"email\": \"recipient@example.com\", \"substitutions\": {\"to_name\": \"John\"}}],\n            \"body\": {\n                \"html\": \"<h1>Hello, {{to_name}}!</h1><p>Your order has been confirmed.</p>\",\n                \"plaintext\": \"Hello, {{to_name}}! Your order has been confirmed.\"\n            },\n            \"subject\": \"Order Confirmation\",\n            \"from_email\": \"noreply@yourdomain.com\",\n            \"from_name\": \"Your Store\"\n        }\n    }\n)\ndata = response.json()  # data[\"status\"] == \"success\" → data[\"job_id\"], data[\"emails\"]\n```\n\n### Go\n\n```go\npackage main\n\nimport (\n    \"bytes\"\n    \"encoding/json\"\n    \"fmt\"\n    \"net/http\"\n    \"os\"\n    \"github.com/google/uuid\"\n)\n\nfunc sendEmail() error {\n    payload := map[string]interface{}{\n        \"idempotency_key\": uuid.New().String(),\n        \"message\": map[string]interface{}{\n            \"recipients\": []map[string]interface{}{\n                {\"email\": \"recipient@example.com\", \"substitutions\": map[string]string{\"to_name\": \"John\"}},\n            },\n            \"body\": map[string]string{\n                \"html\":      \"<h1>Hello, {{to_name}}!</h1><p>Your order has been confirmed.</p>\",\n                \"plaintext\": \"Hello, {{to_name}}! Your order has been confirmed.\",\n            },\n            \"subject\":    \"Order Confirmation\",\n            \"from_email\": \"noreply@yourdomain.com\",\n            \"from_name\":  \"Your Store\",\n        },\n    }\n    body, _ := json.Marshal(payload)\n    req, _ := http.NewRequest(\"POST\",\n        \"https://api.unione.io/en/transactional/api/v1/email/send.json?platform=openclaw\",\n        bytes.NewReader(body))\n    req.Header.Set(\"Content-Type\", \"application/json\")\n    req.Header.Set(\"X-API-KEY\", os.Getenv(\"UNIONE_API_KEY\"))\n    resp, err := http.DefaultClient.Do(req)\n    if err != nil {\n        return err\n    }\n    defer resp.Body.Close()\n    var result map[string]interface{}\n    json.NewDecoder(resp.Body).Decode(&result)\n    fmt.Println(result) // result[\"status\"] == \"success\"\n    return nil\n}\n```\n\n### PHP\n\n```php\n$ch = curl_init(\"https://api.unione.io/en/transactional/api/v1/email/send.json?platform=openclaw\");\ncurl_setopt_array($ch, [\n    CURLOPT_POST => true,\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => [\n        \"Content-Type: application/json\",\n        \"X-API-KEY: \" . getenv(\"UNIONE_API_KEY\")\n    ],\n    CURLOPT_POSTFIELDS => json_encode([\n        \"idempotency_key\" => bin2hex(random_bytes(16)),\n        \"message\" => [\n            \"recipients\" => [[\"email\" => \"recipient@example.com\", \"substitutions\" => [\"to_name\" => \"John\"]]],\n            \"body\" => [\n                \"html\" => \"<h1>Hello, {{to_name}}!</h1><p>Your order has been confirmed.</p>\",\n                \"plaintext\" => \"Hello, {{to_name}}! Your order has been confirmed.\"\n            ],\n            \"subject\" => \"Order Confirmation\",\n            \"from_email\" => \"noreply@yourdomain.com\",\n            \"from_name\" => \"Your Store\"\n        ]\n    ])\n]);\n$response = curl_exec($ch);\n$data = json_decode($response, true); // $data[\"status\"] === \"success\"\n```\n\n**Success response:**\n```json\n{\n  \"status\": \"success\",\n  \"job_id\": \"1ZymBc-00041N-9X\",\n  \"emails\": [\"recipient@example.com\"]\n}\n```\n\n**Full parameters for `message` object:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `recipients` | array | Yes | Array of recipient objects. Each has `email` (required), `substitutions` (object), `metadata` (object) |\n| `body.html` | string | Yes* | HTML content. Use `{{variable}}` for substitutions |\n| `body.plaintext` | string | No | Plain text version |\n| `subject` | string | Yes* | Email subject line. Supports `{{substitutions}}` |\n| `from_email` | string | Yes* | Sender email (must be from a verified domain) |\n| `from_name` | string | No | Sender display name |\n| `reply_to` | string | No | Reply-to email address |\n| `template_id` | string | No | Use a stored template instead of body/subject |\n| `tags` | array | No | Tags for categorizing and filtering |\n| `track_links` | 0/1 | No | Enable click tracking (default: 0) |\n| `track_read` | 0/1 | No | Enable open tracking (default: 0) |\n| `global_language` | string | No | Language for unsubscribe footer: en, de, fr, es, it, pl, pt, ru, ua, be |\n| `template_engine` | string | No | `\"simple\"` (default) or `\"velocity\"` or `\"liquid\"` |\n| `global_substitutions` | object | No | Variables available to all recipients |\n| `attachments` | array | No | Array of `{type, name, content}` where content is base64 |\n| `skip_unsubscribe` | 0/1 | No | Skip unsubscribe footer (use 1 only for transactional) |\n| `headers` | object | No | Custom email headers |\n\n*Not required if `template_id` is used.\n\n**Top-level parameter:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `idempotency_key` | string | Recommended | Unique key (UUID) to prevent duplicate sends on retry. Max 36 chars. |\n\n**Send with template:**\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/email/send.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\n    \"idempotency_key\": \"unique-uuid-here\",\n    \"message\": {\n      \"recipients\": [\n        {\n          \"email\": \"customer@example.com\",\n          \"substitutions\": {\n            \"to_name\": \"Alice\",\n            \"order_id\": \"ORD-12345\",\n            \"total\": \"$59.99\"\n          }\n        }\n      ],\n      \"template_id\": \"your-template-id\",\n      \"from_email\": \"shop@yourdomain.com\",\n      \"from_name\": \"My Shop\"\n    }\n  }'\n```\n\n**Send to multiple recipients with personalization:**\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/email/send.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\n    \"idempotency_key\": \"unique-uuid-here\",\n    \"message\": {\n      \"recipients\": [\n        {\"email\": \"alice@example.com\", \"substitutions\": {\"to_name\": \"Alice\"}},\n        {\"email\": \"bob@example.com\", \"substitutions\": {\"to_name\": \"Bob\"}}\n      ],\n      \"body\": {\n        \"html\": \"<p>Hi {{to_name}}, check out our new {{promo_name}}!</p>\"\n      },\n      \"subject\": \"Special offer for you, {{to_name}}!\",\n      \"from_email\": \"marketing@yourdomain.com\",\n      \"from_name\": \"Marketing Team\",\n      \"global_substitutions\": {\"promo_name\": \"Summer Sale\"},\n      \"track_links\": 1,\n      \"track_read\": 1,\n      \"tags\": [\"promo\", \"summer-2026\"]\n    }\n  }'\n```\n\n---\n\n## 2. Email Validation — `email-validation/single.json`\n\nValidate an email address to check if it exists and is deliverable.\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/email-validation/single.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"email\": \"user@example.com\"}'\n```\n\n**Response:**\n```json\n{\n  \"status\": \"success\",\n  \"email\": \"user@example.com\",\n  \"result\": \"valid\",\n  \"local_part\": \"user\",\n  \"domain\": \"example.com\",\n  \"mx_found\": true,\n  \"mx_record\": \"mail.example.com\"\n}\n```\n\nPossible `result` values: `\"valid\"`, `\"invalid\"`, `\"unresolvable\"`, `\"unknown\"`.\n\n---\n\n## 3. Template Management\n\n### 3.1 Create/Update Template — `template/set.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/template/set.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\n    \"template\": {\n      \"name\": \"Order Confirmation\",\n      \"subject\": \"Your order {{order_id}} is confirmed\",\n      \"template_engine\": \"simple\",\n      \"body\": {\n        \"html\": \"<h1>Thank you, {{to_name}}!</h1><p>Order {{order_id}} total: {{total}}</p>\",\n        \"plaintext\": \"Thank you, {{to_name}}! Order {{order_id}} total: {{total}}\"\n      },\n      \"from_email\": \"shop@yourdomain.com\",\n      \"from_name\": \"My Shop\"\n    }\n  }'\n```\n\n**Response:** `{\"status\": \"success\", \"template\": {\"id\": \"generated-template-id\"}}`\n\nTo **update** an existing template, include the `\"id\"` field in the template object.\n\n### 3.2 Get Template — `template/get.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/template/get.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"id\": \"template-id-here\"}'\n```\n\n### 3.3 List Templates — `template/list.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/template/list.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"limit\": 50, \"offset\": 0}'\n```\n\n### 3.4 Delete Template — `template/delete.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/template/delete.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"id\": \"template-id-here\"}'\n```\n\n---\n\n## 4. Webhook Management\n\nWebhooks send real-time notifications about email events to your URL.\n\n### 4.1 Set Webhook — `webhook/set.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/webhook/set.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\n    \"url\": \"https://yourapp.com/unione-webhook\",\n    \"events\": {\n      \"email_status\": [\n        \"delivered\", \"opened\", \"clicked\", \"unsubscribed\",\n        \"soft_bounced\", \"hard_bounced\", \"spam\"\n      ]\n    }\n  }'\n```\n\n### 4.2 List Webhooks — `webhook/list.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/webhook/list.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{}'\n```\n\n### 4.3 Get / Delete Webhook — `webhook/get.json` / `webhook/delete.json`\n\n```bash\n# Get\ncurl -X POST \".../webhook/get.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"url\": \"https://yourapp.com/unione-webhook\"}'\n\n# Delete\ncurl -X POST \".../webhook/delete.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"url\": \"https://yourapp.com/unione-webhook\"}'\n```\n\n---\n\n## 5. Suppression List Management\n\n### 5.1 Add — `suppression/set.json`\n\n```bash\ncurl -X POST \"https://api.unione.io/en/transactional/api/v1/suppression/set.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"email\": \"user@example.com\", \"cause\": \"unsubscribed\", \"created\": \"2026-01-15 12:00:00\"}'\n```\n\nCause values: `\"unsubscribed\"`, `\"temporary_unavailable\"`, `\"permanent_unavailable\"`, `\"complained\"`.\n\n### 5.2 Check — `suppression/get.json`\n\n```bash\ncurl -X POST \".../suppression/get.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"email\": \"user@example.com\"}'\n```\n\n### 5.3 List — `suppression/list.json`\n\n```bash\ncurl -X POST \".../suppression/list.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"cause\": \"hard_bounced\", \"limit\": 50, \"offset\": 0}'\n```\n\n### 5.4 Delete — `suppression/delete.json`\n\n```bash\ncurl -X POST \".../suppression/delete.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"email\": \"user@example.com\"}'\n```\n\n---\n\n## 6. Event Dumps\n\n### 6.1 Create — `event-dump/create.json`\n\n```bash\ncurl -X POST \".../event-dump/create.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"start_time\": \"2026-01-01 00:00:00\", \"end_time\": \"2026-01-31 23:59:59\", \"limit\": 50000, \"all_events\": true}'\n```\n\n### 6.2 Get / List / Delete\n\n```bash\n# Get dump status and download URL\ncurl -X POST \".../event-dump/get.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"dump_id\": \"dump-id\"}'\n\n# List all dumps\ncurl -X POST \".../event-dump/list.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{}'\n\n# Delete a dump\ncurl -X POST \".../event-dump/delete.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"dump_id\": \"dump-id\"}'\n```\n\n---\n\n## 7. Tags — `tag/list.json` / `tag/delete.json`\n\n```bash\n# List tags\ncurl -X POST \".../tag/list.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{}'\n\n# Delete tag\ncurl -X POST \".../tag/delete.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"tag_id\": 123}'\n```\n\n---\n\n## 8. Projects — `project/create.json` / `project/list.json`\n\n```bash\n# Create project\ncurl -X POST \".../project/create.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"project\": {\"name\": \"My Project\", \"send_enabled\": true}}'\n\n# List projects\ncurl -X POST \".../project/list.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{}'\n```\n\n---\n\n## 9. System Info — `system/info.json`\n\n```bash\ncurl -X POST \".../system/info.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{}'\n```\n\n---\n\n## 10. Subscribe (Double Opt-In) — `email/subscribe.json`\n\n```bash\ncurl -X POST \".../email/subscribe.json?platform=openclaw\" -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"from_email\": \"newsletter@yourdomain.com\", \"from_name\": \"Newsletter\", \"to_email\": \"newsubscriber@example.com\"}'\n```\n\n---\n\n## Instructions for the Agent\n\n1. **Domain setup is mandatory.** Before the first send, always check if the user's domain is verified. Run `domain/list.json` to check. If not verified, guide them through the domain setup process (Section: Domain Setup).\n2. **Always use `api.unione.io`** as the API host for all requests.\n3. **Never send an email without explicit user confirmation.** Always show the recipient, subject, and body summary before executing `email/send.json`.\n4. **Always include `idempotency_key`** in `email/send.json` requests. Generate a UUID for each unique send. Reuse the same key when retrying.\n5. **Implement retry logic** for 429 and 5xx errors with exponential backoff (see Error Handling section). Never retry 400, 401, 403, 404, 413 errors.\n6. **For template operations**, list available templates first before asking which one to use.\n7. **For validation**, report the result clearly and suggest action.\n8. **Handle errors gracefully.** If a request returns an error, explain what went wrong and suggest a fix.\n9. **Remind users** that the `from_email` domain must be verified in their UniOne account.\n10. **Substitution syntax** uses double curly braces: `{{variable_name}}`.\n11. **Attachments** must be base64-encoded. Help the user encode files if needed.\n12. **Security**: Never log or display the full API key. Remind users to keep their API key secret.\n13. **Code language**: When the user's project uses a specific language (Node.js, Python, Go, PHP, etc.), provide code examples in that language. The examples in this skill can be adapted to any language that can make HTTP POST requests with JSON.\n\n## Common Workflows\n\n### \"Send a test email\"\n1. Check domain verification (`domain/list.json`)\n2. If domain not verified, guide through domain setup\n3. Ask for recipient email address\n4. Compose a simple test message\n5. Confirm with user before sending\n6. Execute `email/send.json` with `idempotency_key`\n7. Report the job_id on success\n\n### \"Check my deliverability setup\"\n1. Run `system/info.json` to get account status\n2. Run `domain/list.json` to check domain verification\n3. For each unverified domain, run `domain/get-dns-records.json` and show required records\n4. Run `domain/validate-dkim.json` to check DKIM\n5. Suggest fixes if domains are not fully verified\n\n### \"Validate a list of emails\"\n1. For each email, call `email-validation/single.json`\n2. Categorize results: valid, invalid, unknown\n3. Report summary\n\n### \"Set up delivery tracking\"\n1. Ask for webhook URL and events to track\n2. Execute `webhook/set.json`\n3. Confirm setup\n\n## Resources\n\n- Full API Reference: https://docs.unione.io/en/web-api-ref\n- Getting Started: https://docs.unione.io/en/\n- Template Engines: https://docs.unione.io/en/web-api#section-template-engines\n- Sign Up: https://cp.unione.io/en/user/registration/\n","readmeExcerpt":"--- name: unione description: > Send transactional and marketing emails via UniOne Email API. Manage email templates, validate email addresses, check delivery statistics, manage suppression lists, configure webhooks, and handle domain settings. UniOne delivers billions of emails annually with 99.88% deliverability. metadata: openclaw: emoji: \"📧\" requires: env: - UNIONE_API_KEY primaryEnv: UNIONE_API_KEY --- UniOne E","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"curl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/get-dns-records.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"domain\": \"yourdomain.com\"}'"},{"language":"bash","snippet":"curl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/get-dns-records.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"domain\": \"yourdomain.com\"}'"},{"language":"json","snippet":"{\n  \"status\": \"success\",\n  \"domain\": \"yourdomain.com\",\n  \"verification-record\": \"unione-validate-hash=483bb362ebdbeedd755cfb1d4d661\",\n  \"dkim\": \"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDo7\"\n}"},{"language":"bash","snippet":"curl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/validate-verification.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"domain\": \"yourdomain.com\"}'"},{"language":"bash","snippet":"curl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/validate-verification.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"domain\": \"yourdomain.com\"}'"},{"language":"bash","snippet":"curl -X POST \"https://api.unione.io/en/transactional/api/v1/domain/validate-dkim.json?platform=openclaw\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-KEY: $UNIONE_API_KEY\" \\\n  -d '{\"domain\": \"yourdomain.com\"}'"}],"parameters":{},"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["typescript"],"docsSourceLabel":"CLAWHUB","editorialOverview":"Send transactional and marketing emails via UniOne Email API. Manage email templates, validate email addresses, check delivery statistics, manage suppression lists, configure webhooks, and handle domain settings. UniOne delivers billions of emails annually with 99.88% deliverability. --- name: unione description: > Send transactional and marketing emails via UniOne Email API. Manage email templates, validate email addresses, check delivery statistics, manage suppression lists, configure webhooks, and handle domain settings. UniOne delivers billions of emails annually with 99.88% deliverability. metadata: openclaw: emoji: \"📧\" requires: env: - UNIONE_API_KEY primaryEnv: UNIONE_API_KEY --- UniOne E","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":382,"uniquenessScore":65,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T03:14:31.764Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}