ReplyCam API Docs

ReplyCam API reference for creating projects, links, submissions, exports, and transcripts.

Open Markdown OpenAPI JSON
Base URL

https://replycam.com

Primary Flow

Authenticate, create a project, send links, then fetch links and submissions by projectId.

Agent Entry

https://replycam.com/api/openapi.json for machine-readable schema, then https://replycam.com/api/docs.md for compact prose.

In plain English: create a project, get recording links, send those links to people, then come back later to fetch the videos, transcripts, and exports.

These docs are for project creators who already have an API token. Internal provisioning and admin controls are intentionally out of scope here.

Quick Start

1. Check your token

Call GET /api/me once to confirm the token works and inspect your remaining allowance.

2. Create a project

Call POST /api/projects with the title, number of links, and any options like transcription, terms, or interview questions.

3. Send the links

Use the returned recipientUrls or the shared universal link and send them however you want.

4. Fetch the responses

Use projectId with the submissions and export endpoints to retrieve videos, transcripts, and metadata later.

End-to-End Example

Step 1. Confirm the token

Make sure the API token works before you create anything.

curl https://replycam.com/api/me \
  -H 'authorization: Bearer api_...'
Step 2. Create the project

This returns the important IDs and links. Save projectId, dashboardUrl, and any recipient URLs you plan to send.

curl -X POST https://replycam.com/api/projects \
  -H 'content-type: application/json' \
  -H 'authorization: Bearer api_...' \
  -d '{
    "projectName": "Customer Testimonial Round",
    "count": 12,
    "expiresInHours": 72,
    "neverExpire": false,
    "sharedLinkEnabled": true,
    "sharedLinkMaxUses": 1000,
    "maxDurationSec": 180,
    "transcriptionEnabled": true,
    "noteEnabled": false,
    "requestUrl": "https://example.com/brief",
    "interviewQuestions": [
      "What problem were you trying to solve?",
      "What changed after using it?"
    ],
    "webhookUrl": "https://example.com/replycam/webhooks",
    "webhookSecret": "replace-with-your-secret",
    "requireTerms": true,
    "showSuccessDialog": true
  }'
Step 3. Pull the links later

If you need to rehydrate the project from your own system, fetch the links again by projectId.

curl https://replycam.com/api/projects/PROJECT_ID/links \
  -H 'authorization: Bearer api_...'
Step 4. Fetch submissions and transcripts

Use the submissions endpoint for live polling, or move to export routes when you want a downloadable bundle.

curl 'https://replycam.com/api/projects/PROJECT_ID/submissions?limit=25&selected=true&transcriptStatus=completed' \
  -H 'authorization: Bearer api_...'

Auth Model

Admin Controls

Internal-only. Used to create users, mint scoped tokens, inspect logs, and manage projects across the platform.

Creator API

Normal integration surface. Uses Authorization: Bearer api_... and is the canonical way to create and retrieve projects.

Project Dashboard Token

Private URL-based access for reviewing one project and using read-only conveniences like dashboard exports and shared-link QR PNG.

Recipient Token

Recording link only. Used by responders at /r/vr_... and not intended for creator retrieval or administration.

Authentication

AUTH Authorization: Bearer api_...

Send your API token as a Bearer token on each request.

Every user-facing endpoint below accepts the same Bearer token. That keeps the flow simple for both humans and agents.

Header
Authorization: Bearer api_...

Token Scopes

profile:read

Required for GET /api/me.

projects:read

Required for listing projects and reading project detail.

projects:write

Required for creating or updating projects.

links:read

Required for reading recipient links.

submissions:read

Required for reading submissions, transcripts, and media URLs.

Check Your Token

GET /api/me

Confirm which account is active and inspect your current creation allowance.

Use this before creating projects if you want to verify the token and see remaining project/video capacity.

Example Request
curl https://replycam.com/api/me \
  -H 'authorization: Bearer api_...'

Create A Project

POST /api/projects

Create a project, get back a permanent projectId, the private dashboard URL, a shared link if enabled, and the individual recipient links.

This is the main write endpoint. Save the returned projectId so you can retrieve links, submissions, transcripts, and media later.

Example Request
curl -X POST https://replycam.com/api/projects \
  -H 'content-type: application/json' \
  -H 'authorization: Bearer api_...' \
  -d '{
    "projectName": "Customer Testimonial Round",
    "count": 12,
    "expiresInHours": 72,
    "neverExpire": false,
    "sharedLinkEnabled": true,
    "sharedLinkMaxUses": 1000,
    "maxDurationSec": 180,
    "transcriptionEnabled": true,
    "noteEnabled": false,
    "requestUrl": "https://example.com/brief",
    "interviewQuestions": [
      "What problem were you trying to solve?",
      "What changed after using it?"
    ],
    "webhookUrl": "https://example.com/replycam/webhooks",
    "webhookSecret": "replace-with-your-secret",
    "requireTerms": true,
    "showSuccessDialog": true
  }'

Update A Project

PATCH /api/projects/PROJECT_ID

Update an existing project title, expiry, shared-link capacity, recording rules, terms, and success message.

Use this when a live project needs to be changed after creation. Shared-link capacity updates are quota-aware and will be rejected if they exceed your remaining allowance.

Example Request
curl -X PATCH https://replycam.com/api/projects/PROJECT_ID \
  -H 'content-type: application/json' \
  -H 'authorization: Bearer api_...' \
  -d '{
    "projectName": "Customer Testimonial Round / Wave 2",
    "expiresInHours": 168,
    "sharedLinkMaxUses": 1500,
    "transcriptionEnabled": true,
    "noteEnabled": true,
    "requestUrl": "https://example.com/brief-v2",
    "interviewQuestions": [
      "Tell me what stood out most.",
      "Who would you recommend it to?"
    ],
    "requireTerms": true,
    "termsLabel": "I authorize the use of my content and agree to the terms.",
    "showSuccessDialog": true,
    "successMessage": "Thanks. You may close this page."
  }'

List Projects

GET /api/projects

List every project owned by your token, along with live counts for videos created, remaining links, and transcript progress.

Use this as the main polling endpoint if you need a high-level operational view across many projects.

Example Request
curl https://replycam.com/api/projects \
  -H 'authorization: Bearer api_...'

Project Detail

GET /api/projects/PROJECT_ID

Retrieve one project summary with its settings and current response totals.

This is the fastest way to answer questions like how many videos are in, how many response slots remain, and whether transcription is enabled.

Example Request
curl https://replycam.com/api/projects/PROJECT_ID \
  -H 'authorization: Bearer api_...'

Interview Mode

interviewQuestions

Set an ordered array of prompts on create or update when one contributor should answer multiple questions in sequence.

One contributor session, many answers

ReplyCam keeps a responseSessionId so each interview answer can be stored as its own submission while still belonging to the same contributor session.

Question fields on submissions

Interview answers include questionIndex and questionText, which makes question-level sorting, grouping, exports, and downstream analysis possible.

Reference URL

Set requestUrl when contributors should open a supporting page, brief, or example while they record.

Final upload behavior

After the final interview answer uploads, the contributor is sent to a dedicated thank-you page instead of remaining inside the recorder review state.

Project Submissions

GET /api/projects/PROJECT_ID/submissions

Retrieve every submitted video, transcript, recorder note, review note, selection state, and authenticated media URL.

Supports limit, cursor, selected, and transcriptStatus query parameters so you can sync large projects without re-fetching the full history every time.

Example Request
curl 'https://replycam.com/api/projects/PROJECT_ID/submissions?limit=25&selected=true&transcriptStatus=completed' \
  -H 'authorization: Bearer api_...'

Project Exports

GET /api/projects/PROJECT_ID/export.json

Richer bundle with project settings, links, and serialized submissions.

curl https://replycam.com/api/projects/PROJECT_ID/export.json \
  -H 'authorization: Bearer api_...'
GET /api/projects/PROJECT_ID/export.csv

Flat CSV export for spreadsheets, BI tools, and manual review.

curl https://replycam.com/api/projects/PROJECT_ID/export.csv \
  -H 'authorization: Bearer api_...' \
  --output replycam-submissions.csv
GET /api/projects/PROJECT_ID/export/project.zip

ZIP bundle containing project.json, submissions.csv, transcripts.txt, and the video files.

curl https://replycam.com/api/projects/PROJECT_ID/export/project.zip \
  -H 'authorization: Bearer api_...' \
  --output replycam-project.zip
GET /api/projects/PROJECT_ID/export/transcripts.txt

Plain-text transcript bundle, optionally filtered with the same selected/transcriptStatus query params.

curl 'https://replycam.com/api/projects/PROJECT_ID/export/transcripts.txt?selected=true' \
  -H 'authorization: Bearer api_...' \
  --output replycam-transcripts.txt

Dashboard Token Routes

GET /project/PROJECT_TOKEN/export.json

Read-only JSON export using the private dashboard token instead of a creator Bearer token.

curl https://replycam.com/project/PROJECT_TOKEN/export.json
GET /project/PROJECT_TOKEN/export.csv

Dashboard-scoped CSV export for direct download from the project page.

https://replycam.com/project/PROJECT_TOKEN/export.csv
GET /project/PROJECT_TOKEN/export/project.zip

Dashboard-scoped ZIP bundle containing the full project export.

https://replycam.com/project/PROJECT_TOKEN/export/project.zip
GET /project/PROJECT_TOKEN/export/transcripts.txt

Dashboard-scoped transcript bundle for quick creator download.

https://replycam.com/project/PROJECT_TOKEN/export/transcripts.txt
GET /project/PROJECT_TOKEN/shared-link/qr.png

Direct PNG QR code route for the project’s shared universal link.

https://replycam.com/project/PROJECT_TOKEN/shared-link/qr.png

Transcript Downloads

GET /api/projects/PROJECT_ID/submissions/SUBMISSION_ID/transcript.txt

Download transcript text or VTT directly for one submission.

Use transcript.txt for plain text and transcript.vtt when you want subtitle-ready output for downstream tools.

Example Request
curl https://replycam.com/api/projects/PROJECT_ID/submissions/SUBMISSION_ID/transcript.txt \
  -H 'authorization: Bearer api_...'

Webhooks

webhookUrl

Optional HTTPS endpoint that receives JSON POSTs when a submission lands or a transcript finishes.

webhookSecret

Optional shared secret used to sign the request body with replycam-signature: sha256=....

Event Types

submission.completed, submission.transcript.completed, submission.transcript.failed.

Headers

replycam-event, replycam-event-id, and replycam-signature.

Project Settings

projectName

The title for this project in the dashboard.

count

How many unique recipient links to create.

expiresInHours

Optional link expiration window in hours.

neverExpire

Set true to keep links valid until manually exhausted or disabled.

sharedLinkEnabled

Include one reusable universal link in addition to the unique links.

sharedLinkMaxUses

How many times the universal link can be used before it stops accepting submissions.

successMessage

Text shown after a successful upload when the success dialog is enabled.

maxDurationSec

Maximum clip length in seconds, currently up to 600 seconds (10 minutes).

transcriptionEnabled

Include transcripts for new uploads when enabled.

noteEnabled

Show an optional note field to the person recording.

requestUrl

Optional HTTPS link shown on the recorder so contributors can open a brief, example, or source page while recording.

interviewQuestions

Ordered list of prompts for multi-question interview flows. Leave it empty for the standard one-response recorder.

webhookUrl

Optional HTTPS endpoint for event delivery when uploads or transcripts complete.

webhookSecret

Optional secret used to sign webhook payloads.

requireTerms

Require terms acceptance before upload.

Response Shape

The create-project response gives you the identifiers and links you need to keep working entirely through the API.

Example Response
{
  "projectId": "uuid",
  "projectName": "Customer Testimonial Round",
  "projectToken": "prj_...",
  "dashboardUrl": "https://replycam.com/project/prj_...",
  "webhookEnabled": true,
  "interviewQuestions": [
    "What problem were you trying to solve?",
    "What changed after using it?"
  ],
  "sharedLink": {
    "token": "vr_...",
    "url": "https://replycam.com/r/vr_...",
    "maxUses": 1000,
    "qrCodePngUrl": "https://replycam.com/api/projects/uuid/shared-link/qr.png"
  },
  "recipientUrls": [
    {
      "token": "vr_...",
      "url": "https://replycam.com/r/vr_..."
    }
  ],
  "counts": {
    "videosCreated": 4,
    "uniqueLinksRemaining": 8,
    "sharedUsesRemaining": 996,
    "responseSlotsRemaining": 1004
  },
  "apiUser": {
    "userId": "uuid",
    "userName": "Acme Team",
    "videoLimit": 1000000,
    "videosReserved": 1012,
    "reservedVideoCount": 1012,
    "remainingVideos": 998988
  }
}

Retrieval Fields

projectId

Stable identifier used by every retrieval endpoint.

videosCreated

How many submissions have been completed so far for the project.

responseSlotsRemaining

How many more responses the project can still accept across unique and shared links.

recipientUrl

The actual recording link you can send or store in your own system.

qrCodePngUrl

Authenticated PNG QR code URL for the project’s universal shared link.

videoUrl

Authenticated API URL for the recorded video asset.

responseSessionId

Stable session identifier that ties one contributor’s interview answers together across multiple submissions.

questionIndex / questionText

Question metadata attached to each interview answer so you can group, sort, and export by prompt.

transcriptText

Transcript text when transcription is enabled and processing has completed.

transcriptStatus

Current transcript state: pending, processing, completed, failed, or disabled.

selected

Whether that response has been marked as selected in the reviewer dashboard.

nextCursor

Opaque cursor returned when another submissions page is available.

selected / transcriptStatus filters

Query filters for narrowing submissions to selected clips or a specific transcript processing state.

webhookEnabled

Whether this project will push submission and transcript events to your webhook endpoint.

Agent Use

OpenAPI First

Use /api/openapi.json first when an agent needs a machine-readable contract with path params, response shapes, and auth requirements.

Markdown Fallback

Use /api/docs.md when an agent needs compact prose and examples without the HTML shell.

Agent Skill

This repo includes a Codex skill at .agents/skills/replycam-api/SKILL.md plus .agents/skills/replycam-api/agents/openai.yaml so agents can load ReplyCam-specific workflow guidance directly.

Stable IDs

Treat projectId and submissionId as the canonical IDs for later retrieval.

Dashboard Token

If the user only has a private dashboard URL, agents can still use the dashboard-token export and QR routes without needing the creator Bearer token.

Interview Retrieval

For interview projects, preserve responseSessionId, questionIndex, and questionText so grouped answers stay associated with the same contributor.

Authenticated Media

Video, thumbnail, and audio URLs stay inside the API so agents can fetch them with the same Bearer token.

Sync Pattern

Typical loop: list projects, pick a projectId, page through submissions with filters, then fetch transcript or media URLs as needed.

Usage Limits

  • Your token may have a project/video creation allowance attached to it.
  • If a request exceeds that allowance, the API will reject the project creation request.
  • Shared links count toward that allowance based on their maximum use count.
  • ReplyCam currently supports clips up to 600 seconds (10 minutes).
  • ReplyCam also enforces generous runtime rate limits and returns HTTP 429 if one route is hit far too aggressively.