Skip to main content

Census (as a reverse-ETL source)

Sync audiences and traits from your warehouse into Hober with Census's HTTP Request destination. Each synced record becomes a subscriber create-or-update against Hober's documented upsert API; the endpoint is an upsert, so Census's retries and full re-syncs are naturally idempotent.

Setup

  1. In Hober, copy your publishable SDK key from Settings → API keys.
  2. In Census, create an HTTP Request destination:
    • URL: https://api.hober.io/api/v1/subscribers/upsert
    • Method: POST
    • Headers: X-SDK-Key: <your SDK key> and Content-Type: application/json
    • Keep the default per-request record count at 1 (the endpoint takes one subscriber per request) and start at ≤ 10 requests/second.
  3. Map your model's fields into the request body:
{
"external_id": "{{ record['user_id'] }}",
"email": "{{ record['email'] }}",
"attributes": {
"plan": "{{ record['plan'] }}",
"churn_risk": "{{ record['churn_risk'] }}"
}
}

Mapping

Warehouse fieldHober fieldNotes
Your primary user keyexternal_idRequired. Match the identifier your SDKs and server events already use so every source lands on one profile.
EmailemailOptional; becomes the subscriber's email identifier
Anything elseattributes.*Schemaless; immediately usable in segments and {{ subscriber.* }} personalization

A 200 returns the stored subscriber; 401 means a missing/invalid SDK key; 422 names the failing field (external_id is the only required one).

Syncing warehouse-computed events

For model-derived events — milestone reached, score crossed a threshold — target the Events API: POST https://api.hober.io/v1/events with your hober_srv_ server key as a Bearer token, up to 1,000 events per request, with an idempotency_key per record so re-syncs never double-fire journey triggers.

Reverse-ETL syncs attributes, not permission. Upserting a subscriber does not grant marketing consent — sends still pass Hober's consent and suppression checks. To record an express opt-in your warehouse holds, use the consent assertion field documented in the subscribers API; never sync around a suppression.