Airship
Customer engagement platform for push notifications, in-app messages, SMS, and mobile app experiences with deep journey orchestration.
Why route Airship through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Airship even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- Delivery is batched, rate-limited, and retried. Signal buffers to Kafka, respects the Airship rate limit, and retries on 429 or transient failure rather than dropping the event.
- One consent decision governs every destination. Airship is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
Complete these steps in Airship before configuring Signal.
Access your Airship dashboard
Log in to go.airship.com (US) or go.airship.eu (EU).
Find your App Key
Navigate to Settings > APIs & Integrations > App Keys. The App Key for your project is shown at the top — a 22-character alphanumeric string. Copy it.
Create a Bearer token
On the same APIs & Integrations page, click Tokens > Create Token. Configure:
- Give it a name (e.g. “Datafly Signal”).
- Assign the All Access role (or a custom role with
events:write,channels:write, andnamed_users:writescopes). - Click Create Token and copy it immediately.
Bearer tokens are the preferred auth method. The older App Master Secret is deprecated for new integrations.
Determine your data centre
| Dashboard URL | Data Centre | Value for Signal |
|---|---|---|
go.airship.com | US | go.urbanairship.com |
go.airship.eu | EU | go.airship.eu |
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
app_key | string | Yes | Your Airship App Key, sent as X-UA-Appkey. |
access_token | secret | Yes | An Airship bearer token with the Events scope, sent as Authorization: Bearer. |
api_host | select | Yes | go.urbanairship.com (US) or go.airship.eu (EU): the data centre your project is in. |
Signal Setup
Quick Setup
- Navigate to Integrations in the sidebar.
- Open the Integration Library tab.
- Find Airship under the Marketing Automation category.
- Click Install, and fill in the required fields with the credentials gathered above.
- Click Install Integration to create the integration with a ready-to-use default configuration.
API Setup
curl -X POST http://localhost:8084/v1/admin/integration-catalog/airship/install \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Airship",
"variant": "default",
"config": {
"app_key": "xxxxxxxxxxxxxxxxxxxxxx",
"access_token": "xxxxxxxxxxxxxxxxxxxx",
"api_host": "go.urbanairship.com"
},
"delivery_mode": "server_side"
}'Event Mapping
Signal sends Airship custom events (POST https://{api_host}/api/custom-events, a JSON array of up to 100 events) named after Airship’s SDK templates, so the template names work in Journeys and Automations:
| Signal event | Airship custom event | Preset |
|---|---|---|
view_item | browsed | Default, Retail |
add_to_cart | added_to_cart | Default, Retail |
remove_from_cart | removed_from_cart | Retail |
add_to_wishlist | starred_product | Retail |
product_shared | shared_product | Retail |
begin_checkout | begin_checkout | Default, Retail |
purchase | purchased (value, ltv: true) | All |
refund | refunded | Retail |
search | search (query, total_results) | All |
sign_up / login | registered_account / logged_in | All |
generate_lead | generate_lead | Default |
content_viewed, content_completed, content_saved, content_shared | browsed_content, consumed_content, starred_content, shared_content | Media |
Every event carries occurred (the event time), interaction_type: "url" and the page URL without its query string as interaction_id. Money events carry body.value as a number and an upper-case currency; product events carry id and items (id, name, category, brand, variant, price, quantity).
Identity
| Field | Source | Notes |
|---|---|---|
user.named_user_id | user_id from datafly.identify() | Required. Events from visitors who are not identified are not sent: Airship needs a named user or channel. |
Airship does not match custom events on email or phone, so neither is sent. Associate your named users with their channels in your apps or with the Named Users API.
Consent
Airship events should be sent under the marketing consent category. Airship maintains opt-in records per channel (push, email, SMS) — Signal forwards CMP consent state so server-side journey logic can suppress non-consenting visitors.
Verify it’s working
- Trigger a test event from your website.
- In Airship, navigate to Audience > Named Users and search for the test user by ID.
- Click into the named user and check the Events tab for recent custom events.
- In Signal, check Live Events to confirm delivery with a
202response status.
Troubleshooting
| Symptom | Possible Cause | Resolution |
|---|---|---|
401 Unauthorized | Invalid bearer token or wrong scopes | Regenerate the token in Settings > APIs & Integrations with the required write scopes. |
400 Bad Request on custom event | Missing required fields | Custom events require a lowercase name, occurred (within the last 90 days) and a named user or channel. Signal sends all three. |
| Events received but no notification triggered | Journey not configured for event name | Check that an Airship Journey or Automation is set to trigger on the custom event name being sent. |
| Wrong data centre error | US/EU mismatch | Check your dashboard URL and set api_host to go.urbanairship.com (US) or go.airship.eu (EU). |
Visit Airship API documentation for full reference and Custom Events details.
See also
- OneSignal — push notification alternative
- Braze — multi-channel engagement
- Customer.io — behavioural messaging