Skip to content

99traits for developers

A conversation in. A richer report out.

Bring video-based personality reporting into your product. Structured findings alongside a report people can read and keep.

API concept preview. Endpoints and responses describe a proposed contract. No video is processed and no API is live.

Your experience. A report that fits inside it.

Keep your recording flow, your interface, and your relationship with the user. The proposed API handles the step between a completed conversation and an understandable report.

Input
Recorded video
Structured output
Report JSON
Reader output
Illustrated PDF

Three steps, one report.

Examples use reserved .example domains. Copy them as a reference; they will not call a live service.

01 · Submit a recording.

From your server, send a private video URL and a reference to the user’s consent. The proposed response gives you a report ID.

JavaScript request
// Proposed API — example domains, no live service.
// Call from your server; keep the API key private.
const response = await fetch(
  "https://api.99traits.example/v1/reports",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer YOUR_API_KEY",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      video_url: "https://media.example/session.mp4",
      consent_reference: "consent_example_001",
      outputs: ["json", "pdf"]
    })
  }
);

if (!response.ok) throw new Error("Request failed");
const job = await response.json();
// { id: "rpt_example_001", status: "queued" }

02 · Follow the report.

Check the job until it is ready. A failed job should return an explicit error, not an incomplete report.

Example job status
GET /v1/reports/rpt_example_001
Authorization: Bearer YOUR_API_KEY

{
  "id": "rpt_example_001",
  "status": "ready",
  "result_url": "/v1/reports/rpt_example_001/result"
}

03 · Use the report in your product.

Retrieve structured JSON for your interface and a PDF for the person who recorded the conversation.

Abbreviated result JSON
{
  "id": "rpt_example_001",
  "example": true,
  "status": "ready",
  "profile": {
    "title": "Your inner atlas",
    "categories": [
      {
        "id": "thinking",
        "title": "Thinking & exploration",
        "traits": [
          {
            "id": "possibility",
            "title": "Exploring possibilities",
            "tendency": "Leans toward exploration",
            "spectrum": {
              "left": "Familiar approaches",
              "right": "New possibilities"
            },
            "interpretation": "Explores an idea from several angles.",
            "context": "A deadline may call for a provisional answer."
          }
        ]
      }
    ]
  },
  "pdf_url": "https://files.99traits.example/report.pdf",
  "limitations": [
    "Fictional example; no video was analyzed."
  ]
}
Download PDF

A small, predictable contract.

Proposed API endpoints, not currently available
EndpointPurpose
POST /v1/reportsCreate a report job and return its ID.
GET /v1/reports/:idCheck queued, processing, ready, or failed status.
GET /v1/reports/:id/resultRetrieve JSON and a PDF reference when ready.

Context belongs in the output.

Explain the interpretation.

Return readable tendencies and their limits alongside structured fields. A score is not a complete description of a person.

Keep consent and ownership clear.

A production integration needs explicit consent, access controls, and retention rules. A consent reference is a traceable identifier, not a substitute for consent.

Make failure understandable.

Define actionable errors for inaccessible video, unsupported input, processing failures, and unavailable results. Exact formats and limits are still to be defined.

Start small. Grow with usage.

The proposed model is pricing per completed report, with volume options. Rates, supported languages, limits, and turnaround times are not set.

API keys and paid access are not available in this preview. Explore the output first to see how a report could fit your product.

Read the method notes →