Skip to main content
By the end of this page you will have declared an element with a control and a reward, served a decision to a user, reported the outcome Curious learns from, and seen it in the dashboard. Everything runs under a test key, so nothing here touches live data.
1

Get a test key

In the dashboard, open Settings and create a secret test key. It starts with curious_sk_test_. Put it in your environment as CURIOUS_SECRET_KEY; it is shown once.A test key runs the whole product against shadow users: real declarations, real variants, real decisions, excluded from live learning and live metrics. See Keys and environments.
2

Decide what to show

The first call for an element declares it: the control is what you show today, the rewards are what success means, and element_type tells Curious what kind of content it is writing. The response is the content to render.
The first decisions serve the control while Curious generates its first variants; experiment_status moves from initializing to exploring when they are live. Send the same declaration on every call: an identical declaration is a no-op.
3

Report the outcome

When the user does the thing, send the event. Curious attributes it to the decision that preceded it, within the reward’s window.
id is optional and makes a retry safe: send the same request again and the response is { "status": "success", "duplicate": true }.
4

Confirm it worked

Open the dashboard. The element is there with its experiment, the control, and the decision and event you just sent.When the first variants appear, each with the hypothesis behind it, they wait for your approval before serving: options.approval defaults to manual. Approve them in the dashboard, or declare "options": { "approval": "auto" } to let generated variants serve as soon as they exist. See Approval.

Where next

Serve a decision

The user buckets, the declaration fields, the response, and what publishable keys may send.

Track outcomes

Event names, values, timestamps, idempotent ids and the batch form.

Fallbacks and timeouts

What a correct delivery path does when Curious is slow or down.

Go live

The checklist for switching from a test key to a live one.
The nouns behind these calls (elements, declarations, arms, rewards) are on The model.