Skip to main content
GET
/
api
/
v1
/
experiments
curl -H "Authorization: Bearer uj_live_your_key_here" \
  https://app.userjourneys.ai/api/v1/experiments
{
  "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
    }
  ]
}
Returns project-level usage and per-experiment interview stats, including whether each experiment is currently accepting interviews.

Request

Authorization
string
required
Your API key in Bearer format: Bearer uj_live_your_key_here
curl -H "Authorization: Bearer uj_live_your_key_here" \
  https://app.userjourneys.ai/api/v1/experiments

Response

project
object
required
Project-level usage across all experiments.
experiments
array
required
List of 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

Weekly counts reset automatically every Monday at 00:00 UTC. No configuration needed.

Monthly limits

Monthly counts reset based on your subscription start date. If your billing period started on the 15th, your periods are the 15th of each month to the 14th of the next.

The accepting_interviews field

This is the key field for integration. It is true only when all three conditions are met:
  1. The experiment’s weekly limit has not been reached
  2. The experiment’s monthly limit has not been reached
  3. The project’s overall monthly limit has not been reached
If any limit is not configured (null), that check is skipped.

Typical integration

Check accepting_interviews before showing your interview widget:
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) {
  showInterviewWidget(onboarding.interview_link);
}
Cache the response for a few minutes to avoid hitting the API on every page load. Interview capacity doesn’t change that frequently.