From airship
Register email addresses as channels in Airship. Use when onboarding users, importing email lists, or creating email channels for messaging. Returns a channel_id for use in workflows.
How this skill is triggered — by the user, by Claude, or both
Slash command
/airship:email-registrationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill enables agents to register email addresses as channels in Airship. Registration creates a new email channel or updates an existing one, and returns a `channel_id` that can be used in workflows like associating the channel with a named user.
This skill enables agents to register email addresses as channels in Airship. Registration creates a new email channel or updates an existing one, and returns a channel_id that can be used in workflows like associating the channel with a named user.
Method: POST
Path: /api/channels/email
Base URL:
https://go.urbanairship.comhttps://go.airship.euhttps://api.asnapius.comhttps://api.asnapieu.comPath: /api/channels/email
| Method | Endpoint | Scope |
|---|---|---|
| OAuth (recommended) | api.asnapius.com | chn |
| Bearer token | go.urbanairship.com | — |
| Basic | go.urbanairship.com | — |
See Authentication Guide for token request details and MCP setup.
OAuth (api.asnapius.com):
Authorization: Bearer <oauth_token>
Content-Type: application/json
Accept: application/vnd.urbanairship+json; version=3
Bearer token (go.urbanairship.com):
Authorization: Bearer <dashboard_token>
Content-Type: application/json
Accept: application/vnd.urbanairship+json; version=3
Basic (go.urbanairship.com):
Authorization: Basic <base64(app_key:master_secret)>
Content-Type: application/json
Accept: application/vnd.urbanairship+json; version=3
{
"channel": {
"type": "email",
"address": "[email protected]",
"commercial_opted_in": "2020-10-28T10:34:22",
"transactional_opted_in": "2020-10-28T10:34:22",
"timezone": "America/Los_Angeles",
"locale_country": "US",
"locale_language": "en"
},
"opt_in_mode": "classic",
"properties": {
"interests": "newsletter"
},
"attributes": {
"first_name": "John",
"last_name": "Doe"
},
"tag_operations": {
"add": {
"tag_group_1": ["tag1", "tag2"]
}
}
}
channel.type: Must be "email"channel.address: The email address being registered (string)Opt-in Status (date-time format):
channel.commercial_opted_in: Date-time when user opted in to commercial emailschannel.commercial_opted_out: Date-time when user opted out of commercial emailschannel.transactional_opted_in: Date-time when user opted in to transactional emailschannel.transactional_opted_out: Date-time when user opted out of transactional emailschannel.click_tracking_opted_in: Date-time when user opted in to click trackingchannel.click_tracking_opted_out: Date-time when user opted out of click trackingchannel.open_tracking_opted_in: Date-time when user opted in to open trackingchannel.open_tracking_opted_out: Date-time when user opted out of open trackingDate Format Requirements:
Z suffix or +00:00)YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss+00:00)"2024-01-15T10:30:00Z" ✅"2024-01-15T10:30:00+00:00" ✅"2024-01-15T10:30:00" ❌ (missing UTC indicator)"2024-01-15T10:30:00.123456Z" ❌ (microseconds not accepted)Note: You cannot provide both opt-in and opt-out values for the same email type in a single request.
Channel Properties:
channel.timezone: IANA timezone identifier (e.g., "America/Los_Angeles")channel.locale_country: ISO 3166 two-character country code (e.g., "US")channel.locale_language: ISO 639-1 two-character language code (e.g., "en")Registration Options:
opt_in_mode: "classic" (default) or "double" (creates a double_opt_in event)properties: Object containing event properties (max 255 characters per value)attributes: Object containing customer-provided attributestag_operations: Tag group operations (add, remove, set)See example files in the examples/ directory:
register-email.json - Basic email registrationregister-with-opt-in.json - Registration with opt-in datesPOST /api/channels/email
{
"channel": {
"type": "email",
"address": "[email protected]"
}
}
POST /api/channels/email
{
"channel": {
"type": "email",
"address": "[email protected]",
"commercial_opted_in": "2024-01-15T10:30:00Z",
"timezone": "America/Los_Angeles",
"locale_country": "US",
"locale_language": "en"
}
}
{
"ok": true,
"channel_id": "251d3318-b3cb-4e9f-876a-ea3bfa6e47bd",
"attributes": {"ok": true},
"tags": {"ok": true}
}
Response Headers:
Location: URI of the newly created email channelIf an email channel already exists with the provided address, the existing channel is updated:
{
"ok": true,
"channel_id": "251d3318-b3cb-4e9f-876a-ea3bfa6e47bd",
"attributes": {"ok": true},
"tags": {"ok": true}
}
When you provide commercial_opted_in or transactional_opted_in dates, the user is immediately opted in to receive emails of that type. This is appropriate when you have explicit written consent from the user.
When you register an email address without providing commercial_opted_in or transactional_opted_in dates:
opt_in_mode: "double" is specified, a double_opt_in event is createdNote: Transactional emails do not require opt-in, but users can opt out of transactional emails.
opt_in_mode: "double"channel_id to associate the email channel with a named userOccurs when:
Invalid or missing authentication credentials.
channel_id → Associate with named usernpx claudepluginhub urbanairship/agent-tools --plugin airshipGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.