Core concepts

The objects WhichClick stores and how they relate — organizations, domains, campaigns, tracking links, smart links, apps, clicks, installs, conversions.

Updated 2026-09-02

Object model#

Relationships
Organization (project) ── ApiKey*  ── TrackingDomain* ── TrackingLink* ──┐
        │                                                                 ├── Click* ── Conversion*
        ├── Campaign* ─────────────────── SmartLink* ────────────────────┘        └── Install* ── AppEvent*
        ├── App* (SDK key, attribution windows, deep-link scheme)                        └── Subscription*
        ├── PostbackEndpoint*, IpBlock*, Incident*, AlertRule*, Audience*
        └── CostEntry*, Impression*, Reengagement*, TvAiring*, Experiment*
ObjectPurposeKey fields
OrganizationTenant / project. All data and API keys are scoped to it.slug, currency, timezone, region
API keyBearer credential for the REST API and MCP. Hashed at rest; the prefix is shown in the dashboard.prefix, lastUsedAt, revokedAt
Tracking domainHostname visitors hit (go.yourbrand.com). Links only resolve on the hostname they are bound to.hostname, status (PENDING_DNSACTIVESUSPENDED), googleCertified
CampaignContainer that groups links, clicks, installs, conversions and spend. externalId maps to the ad platform's campaign id ({campaignid}).platform, status, externalId
Tracking linkGoogle Ads redirect endpoint GET /c/{slug}.slug, defaultFinalUrl, clickIdParam (default wc_click_id), appendClickId
Smart linkMobile / multi-destination endpoint GET /l/{slug} with routing rules.iosUrl, androidUrl, webFallbackUrl, deepLinkPath, rules, settings, expiresAt, clickCap
AppA mobile / CTV / web app with an SDK key and attribution windows.platform, bundleId, sdkKey, deepLinkScheme, universalLinkHost, clickLookbackDays, probabilisticHours, reattributionDays
ClickOne redirect. Holds ValueTrack fields, the next hop, transparency flags, geo / device / IP classification and the fraud verdict.gclid, campaignExtId, keyword, nextHopUrl, forceTransparent, verdict, riskScore
InstallFirst open of an app on a device, attributed to a click (or not).attributionMethod, clickId, campaignId, deviceIdHash, ctitSeconds, fraud flags
App eventIn-app event sent by the SDK (session_start, purchase, ad_revenue, …).name, value, currency, params
ConversionWeb conversion from a postback or the API, matched to a click by click_id or gclid.eventName, value, orderId, source, clickId
Postback endpointOutbound URL template called when a conversion is recorded.urlTemplate, method, enabled
IP blockBlocklist entry (auto or manual), synced to Google Ads as negative IP criteria.ip, prefix, reason, syncedToGoogle, expiresAt

Identifiers#

IdentifierWhere it comes fromWhere it goes
wc_click_idGenerated per click (16 chars, URL-safe). Appended to the landing page and to Android referrer=.Postbacks, SDK install call, beacon, deep links
gclid / gbraid / wbraidGoogle auto-tagging, captured from the tracking template.Offline conversion import, gclid replay detection
device_idSHA-256 of IDFV / GAID / app-set id computed by the SDK (raw ids are hashed server-side if sent).Install de-duplication, probabilistic matching
install_idReturned by POST /api/sdk/v1/install.Events, subscriptions, ad revenue
order_idYour order / transaction id.Idempotency of conversions

Statuses#

Campaign, TrackingLink and SmartLink share ACTIVE | PAUSED | ARCHIVED. Paused and archived links answer 404. Click verdicts are PENDING | VALID | SUSPICIOUS | INVALID.

Time and money#

Timestamps are ISO 8601 in UTC. Reports honour the organization's timezone. Money is stored in the currency you send (ISO 4217, default USD); spend and revenue are not converted.