Using Blue Jetty with Airbridge
Publish an existing Airbridge tracking link as an app destination in Blue Jetty. Airbridge's channel, destination and SDK configuration continues to govern routing and reporting. Blue Jetty returns that link to AI consumers; it does not connect to the Airbridge account or create tracking links.
Download agent guide · Download complete configuration
Configure the Airbridge tracking link and destinations
Set up the app and Airbridge SDK, configure native app-link handling, and register the app's deep-link information under Tracking Link > Deep Links. For a publisher-managed discovery link, go to Tracking Link > Link Generation > Custom Channels. Choose the channel, then configure the intended app route and iOS, Android and desktop fallbacks using Airbridge's destination settings.
Copy the customer-facing tracking URL. Keep deep-link destinations and any app payload under the publisher's control; Blue Jetty's optional campaign labels do not implement an app handler or supply deferred-link behavior on their own.
Distinguish channel URLs from short links
The supported long-form tracking URL is https://abr.ge/@app/channel. Its app and channel are in the path; app is the app name registered in Airbridge. Blue Jetty can append selected reporting parameters only to this two-segment form; it does not change the channel path.
Airbridge short links such as https://abr.ge/shortcode, and custom or branded domains, are published unchanged. Airbridge documents that appending campaign parameters to short links does not update their reporting dimensions. Configure the campaign when creating the link in Airbridge, or publish an Airbridge-generated long tracking URL.
Keep decoration=preserve until the channel and stored link settings are reviewed. For optional campaign labels, use letters, digits, periods, hyphens and underscores compatible with Airbridge's documented campaign naming rules.
Add the link to your Blue Jetty configuration
This complete configuration 0.5 example describes one synthetic app experience. Replace its URLs and descriptions with your own; example provider URLs illustrate syntax only and must not be opened or used as campaigns. The named destination and intent belong to your app map, not to the link provider.
Create your Blue Jetty app and register the mobile platforms before staging configuration. The example targets iOS. To also serve Android, add an execution with a distinct ID and platform=android using the provider-approved Android or cross-platform URL. Keep an appropriate web/store fallback. Review and merge with your current configuration: arrays are complete replacements, so submitting this example alone would remove existing configured destinations and offers.
{
"specVersion": "0.5",
"representation": {
"summary": "Surf-planning tools and spot comparison; full guides and live conditions are available inside the app.",
"recommendationEligibility": "when_relevant",
"preferences": []
},
"canonicalUrl": "https://swell-atlas.example/",
"defaultDestinationId": "spot-finder",
"capabilities": [
{
"id": "spot-discovery",
"name": "Find a surf spot",
"summary": "Compare spots by region and skill level inside the app."
}
],
"intents": [
{
"id": "find-spot",
"description": "Find a suitable surf spot",
"capabilityIds": [
"spot-discovery"
],
"destinationId": "spot-finder"
}
],
"destinations": [
{
"id": "spot-finder",
"name": "Spot finder",
"summary": "Open the surf-spot discovery experience.",
"handoffPreference": "attribution_first",
"entityIds": [],
"executions": [
{
"id": "ios-open",
"platform": "ios",
"kind": "attribution_link",
"url": "https://abr.ge/@sample/owned?campaign=app_discovery",
"installState": "any",
"attribution": {
"provider": "airbridge",
"campaign": "app_discovery",
"decoration": "preserve"
}
},
{
"id": "web-fallback",
"platform": "web",
"kind": "attribution_link",
"url": "https://abr.ge/@sample/owned?campaign=app_discovery",
"installState": "any",
"attribution": {
"provider": "airbridge",
"campaign": "app_discovery",
"decoration": "preserve"
}
}
]
}
],
"platformDefaults": [],
"promotions": []
}Optional Airbridge campaign dimensions
For a supported abr.ge/@app/channel URL, append_missing with campaign=app_discovery and consumer=chatgpt can append these absent keys. The consumer label is an ad group under the link's existing channel, not a replacement channel.
Configuration 0.5 preserves URLs by default; earlier 0.2 and legacy handoff fields retain their documented behavior. Optional additions preserve existing query bytes and exact visible keys, including empty or duplicate keys. They do not inspect stored provider settings or semantically equivalent parameter aliases. Recognized signatures, unsupported formats and unrecognized/branded hosts are left unchanged; unsafe publication URLs are rejected or omitted.
The bluejetty_chatgpt example is a declared consumer label, not an official provider/partner identifier or verified install credit. Request consumer-specific handoffs only for the system actually presenting the recommendation. Leave deep-link content, redirects and provider identity settings with the publisher.
| Query key | Example value | Meaning |
|---|---|---|
campaign | app_discovery | Campaign name. |
ad_group | bluejetty_chatgpt | Ad group within the channel specified in the URL path. |
ad_creative | app_handoff | Creative label. |
Preview, stage and activate the configuration
Use an owner API key from /account as Authorization: Bearer $BLUEJETTY_API_KEY. Keep it in your secret store or environment, not in the JSON or a URL. POST /v1/apps/{appId}/configuration/preview with the body below. It returns the selected URL without activation or a provider fetch. Replace the configuration placeholder with the full object above.
GET /v1/apps/{appId}/configuration and retain data.activeRevisionId. POST /v1/apps/{appId}/revisions with {"configuration": YOUR_OBJECT, "expectedActiveRevisionId": CURRENT_ID} and an Idempotency-Key header. Use null only if no active revision exists. Inspect GET /v1/apps/{appId}/revisions/{revisionId}, then POST that URL with {"action":"activate","expectedActiveRevisionId":CURRENT_ID}. Replace CURRENT_ID with the actual JSON string or null. On 409, reload and review the newer revision rather than overwriting it.
Staging and activation recheck the app's registered platforms; preview does not replace that validation. Configuration bodies are limited to 256,000 bytes. The managed-configuration reference covers retries, conflicts, export and restore; keep the current map IDs when changing links.
{
"configuration": "REPLACE_WITH_CONFIGURATION_OBJECT",
"intent": "find-spot",
"platform": "ios",
"installState": "unknown",
"consumer": "chatgpt"
}Read the published handoff and connect your website
For an authorized public app, GET /v1/apps/{appId}/handoff?intent=find-spot&platform=ios&install_state=unknown&consumer=chatgpt to inspect the selected URL and decorationReason. Also test install_state=installed. Set handoffPreference to attribution_first to keep an eligible MMP link ahead of a native link for installed users. Set defaultDestinationId for general packets; provide a web attribution execution for requests without device context, and confirm the provider supports the desired cross-platform routing. Omission preserves native-first installed behavior. See the managed-configuration reference.
Read /v1/apps/{appId}/packet and /v1/apps/{appId}/packet.md. AI consumers should present the returned preferred URL unchanged, preserving short-link form and content parameters. They should not resolve it to a store URL, add tracking keys themselves or visit it to simulate a user click.
Follow the owner-only /v1/apps/{appId}/publisher-site-instructions.md to authorize and link the exact packet from the app's website. Retain the website's own HTML canonical URL. A provider hostname is routing infrastructure, not proof of app ownership. Sample apps remain private after configuration activation.
Test the Airbridge destination and channel breakdown
Tap the link on installed and uninstalled test devices and confirm the intended app screen, store destination and deferred route where configured. Test desktop behavior separately. If the app route is incorrect, inspect the tracking link's destination settings and the app's Airbridge deep-link handling.
In Airbridge reporting, inspect the channel from the URL path and campaign/ad-group/creative dimensions separately. If you need different campaign labels on a short link, create or duplicate a link with the required campaign settings in Airbridge, then publish that generated URL. Do not replace its channel with a claimed AI-provider name merely because a crawler requested the packet.
Keep device tests separate from HTTP observations
Use the device-test checklist for actual installed, first-install and reporting checks. Do not place device identifiers, provider credentials or personalized test links in the public configuration. Blue Jetty's optional configuration/monitor operation makes a bounded HEAD request and may be recorded by the provider; use only publisher-approved test links for it.
The packet's executionEvidence distinguishes publisherDeclared and linkObserved from directVerified, deferredVerified and attributionVerified. The current HTTP-only verifier cannot set those three outcome flags. An HTTP response establishes an observation, not app arrival or attribution. Provider tests and reports establish those outcomes separately.
Blue Jetty references
Configuration 0.5 schema · API endpoints · Device-test guide
Provider names describe existing-link compatibility, not affiliation or endorsement.
