Content Fetch
Personalise messages with live data from your own systems, resolved at send time.
Overview
Content Fetch calls your API at the moment a message is sent, for each user, and drops the response straight into the message. Because the data is fetched live, it is never stored in Netcore and always reflects the current state of your system.
What is Content FetchContent Fetch fetches data from your API at send time for each user and inserts it into your message using the same Liquid syntax you already use for personalisation.
Use Content Fetch
Why Use Content Fetch
Personalisation normally uses data stored in the user profile, which only updates when a new ingestion or sync runs. That works well for values that rarely change like name, city, signup date. It falls short for values that move constantly like product price, inventory, loyalty points, wallet balance, weather, policy renewal dates. Between catalogue sync, these information go stale.
Content Fetch is the first-class alternative: a governed, reusable way to pull live data into a message at send time, with no per-campaign engineering.
Common Use Case for Content Fetch
| Use case | Example values you fetch |
|---|---|
| Live price & stock: Promotional or back-in-stock pushes. | {{ product_price }}, {{ stock_status }} |
| Loyalty balance: Points and membership tier | {{ loyalty_points }}, {{ loyalty_tier }} |
| Recommendations: Pulls data from your recommendation engine | {{ reco_1_name }}, {{ reco_2_name }} |
| Wallet & policy: Balance, renewal date, policy info | {{ wallet_balance }}, {{ renewal_date }} |
| Weather: Condition and temperature for the user's city | {{ weather_condition }}, {{ temperature }} |
Workflow of Content Fetch
When a campaign sends, Content Fetch runs this loop for every user:
flowchart LR A[Write message] --> B[Resolve user data] --> C[Call API] --> D[Map response] --> E[Render] --> F[Send]
- Write the message. Add labels like
{{ product_price }}in the editor. - Resolve user data. Netcore substitutes each request parameter (customer ID, SKU, city…) with the current user's value.
- Call your API. Netcore sends the resolved request to your endpoint.
- Map the response. The JSON response is mapped to the labels you configured.
- Render. Liquid replaces each label with the fetched value and applies any filters or conditions.
- Send. The personalised message goes out on the channel.
Data is never stored
- Content Fetch resolves data per user at send time. The response is not cached or stored in Netcore (unless you explicitly enable caching).
- Every send uses the latest data your API returns.
Content Fetch vs Liquid Tags
Content Fetch and Liquid Tags are two halves of one personalisation model.
| Layer | What it does |
|---|---|
| Liquid Tags | Renders variables, applies filters, runs conditional logic. |
| Content Fetch | Supplies the variables Liquid renders, pulled live from your API. |
| Both together | Content Fetch fetches and Liquid renders. |
Once a connection is active, its response fields become ordinary Liquid variables in the editor. If you can write {{ first_name }}, you can write {{ product_price }}, same syntax, different source. See the Liquid Tags reference.
Content Fetch is Mechanism. Liquid is Grammar.Content Fetch pulls the data in and Liquid decides how it's used (conditions, loops, formatting) once it's there.
Troubleshooting & FAQs
Q. Can I reuse one connection across many campaigns?
Yes, that's the point of labels. Activate once, and any APN campaign in your workspace can reference its labels. Reuse is preferred over duplicating connections.
Q. Can I use more than one connection in a single message?
Yes. Each label draws from its own connection, and Netcore calls all referenced connections in parallel, so latency doesn't stack linearly.
Q. What happens if my API goes down mid-send?
Remaining users get the fallback for each label; the send continues. Mark labels required (or add an abort_message guard) if you'd rather skip than send a fallback.
Q. How is credential data protected?
Authorization is stored securely at the connection level, never rendered in the UI, never shown in previews, and never written to logs.
Q. Can I edit the response mapping after campaigns are live?
Add new labels freely. You can only remove or rename a label if no live campaign uses it. Netcore blocks the change and shows the dependency list. To retire a label, migrate the campaigns first, then edit.
Q. I rotated my API key and campaigns started failing.
Credential rotation counts as a request change, which clears the last test and disables Activate. Re-run the test with the new credentials and re-activate.
Q. Where do I report a bug?
Send the connection ID, the campaign ID, and a sample failing request/response to your CSM, or open a ticket via Help > Support ([email protected])
Updated 1 day ago
