Skip to main content

GET /v1/experiments

Returns project-level usage and per-experiment interview stats for all active experiments. Returns an object with project usage and an experiments array.

Request

Authorization
string
required
Bearer token. See Authentication.
curl -H "Authorization: Bearer uj_live_your_key_here" \
  https://app.userjourneys.ai/api/v1/experiments

Response

project
object
required
Project-level usage.
experiments
array
required
Active experiments with usage stats.
{
  "project": {
    "monthly_limit": 200,
    "monthly_used": 42,
    "monthly_remaining": 158,
    "period_start": "2026-03-01T00:00:00.000Z",
    "period_end": null
  },
  "experiments": [
    {
      "id": "a1b2c3d4-5678-90ab-cdef-111111111111",
      "name": "Onboarding Feedback",
      "short_code": "xK9mR2pQ",
      "status": "active",
      "interview_link": "https://app.userjourneys.ai/i/xK9mR2pQ",
      "monthly_limit": 100,
      "monthly_used": 34,
      "monthly_remaining": 66,
      "weekly_limit": 25,
      "weekly_used": 12,
      "weekly_remaining": 13,
      "accepting_interviews": true
    },
    {
      "id": "e5f6a7b8-1234-56cd-ef78-222222222222",
      "name": "Churn Research",
      "short_code": "wN3jT8vL",
      "status": "active",
      "interview_link": "https://app.userjourneys.ai/i/wN3jT8vL",
      "monthly_limit": 100,
      "monthly_used": 8,
      "monthly_remaining": 92,
      "weekly_limit": 25,
      "weekly_used": 8,
      "weekly_remaining": 17,
      "accepting_interviews": true
    }
  ]
}

How limits work

Weekly limits

Reset every Monday at 00:00 UTC automatically.

Monthly limits

Reset based on your subscription start date. A billing period starting on the 15th runs from the 15th to the 14th of the next month.

The accepting_interviews field

true only when all three conditions are met:
  1. Experiment weekly limit not reached
  2. Experiment monthly limit not reached
  3. Project monthly limit not reached
Unconfigured limits (null) are skipped.

Typical integration

Check accepting_interviews before sending invitations:
const response = await fetch(
  "https://app.userjourneys.ai/api/v1/experiments",
  { headers: { Authorization: `Bearer ${API_KEY}` } }
);
const { experiments } = await response.json();

const onboarding = experiments.find(
  (e) => e.name === "Onboarding Feedback"
);

if (onboarding?.accepting_interviews) {
  await sendEmail({
    to: user.email,
    subject: "We'd love your feedback",
    body: `Share your experience in a quick 10-minute interview: ${onboarding.interview_link}`,
  });
}
Cache the response for a few minutes. Interview capacity doesn’t change that often.