Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.sacra.com/llms.txt

Use this file to discover all available pages before exploring further.

The Sacra API provides two ways to display company data on your site: ready-to-use embeds that return drop-in HTML iframes, and raw JSON endpoints for building fully custom UIs.

Embeds

Embed endpoints return an embed_html string containing a styled <iframe> you can insert directly into any page. Every embed accepts optional height and width parameters (in pixels).

Company data summary

A pre-built summary card with key company metrics.
curl -H "Authorization: Token YOUR_API_KEY" \
  "https://sacra.com/api/v1/embed/company-data-summary/?company_domain=stripe.com"
{
  "status": "success",
  "data": {
    "embed_html": "<iframe src=\"...\" height=\"840\" width=\"600\"></iframe>"
  }
}
Drop the HTML into your page:
<div id="sacra-summary"></div>

<script>
  fetch("https://sacra.com/api/v1/embed/company-data-summary/?company_domain=stripe.com", {
    headers: { "Authorization": "Token YOUR_API_KEY" }
  })
    .then(res => res.json())
    .then(data => {
      document.getElementById("sacra-summary").innerHTML = data.data.embed_html;
    });
</script>
Pass height and width query parameters to control the iframe dimensions, e.g. ?company_domain=stripe.com&height=600&width=800.

Valuation chart

An interactive chart showing a company’s valuation history.
curl -H "Authorization: Token YOUR_API_KEY" \
  "https://sacra.com/api/v1/embed/company-data-valuation-chart/?company_domain=stripe.com"

Valuation table

A tabular view of valuation data points.
curl -H "Authorization: Token YOUR_API_KEY" \
  "https://sacra.com/api/v1/embed/company-data-valuation-table/?company_domain=stripe.com"

Document PDF

Embed a Sacra research document as a PDF viewer.
curl -H "Authorization: Token YOUR_API_KEY" \
  "https://sacra.com/api/v1/embed/document-pdfs/?document_slug=stripe-revenue"
All embed endpoints identify companies by one of company_slug, company_domain, or company_id. The document PDF embed uses document_slug instead.

Build a custom UI with JSON data

If you need full control over presentation, use the JSON endpoints to fetch raw data and render it yourself.

Fetch company profile

The /api/v1/companies/ endpoint returns the full company profile including financials, milestones, and metadata.
curl -H "Authorization: Token YOUR_API_KEY" \
  "https://sacra.com/api/v1/companies/?company_domain=stripe.com"
The response wraps the company object inside a company key:
{
  "company": {
    "id": 112,
    "slug": "stripe",
    "name": "Stripe",
    "domain": "stripe.com",
    "is_active": true,
    "type": "private",
    "logo": { ... },
    "social": [
      { "url": "https://twitter.com/stripe", "type": "twitter" }
    ],
    "founding_year": 2010,
    "headquarters": { ... },
    "description": "...",
    "financials": [
      { "name": "latest_estimated_revenue", "value": 6900000000, "date": "2025-12-30" },
      { "name": "latest_estimated_valuation", "value": 91500000000, "date": "2025-02-26" },
      { "name": "total_estimated_funding", "value": 9800000000, "date": "2025-05-05" }
    ],
    "milestones": [ { "id": "1", "type": "...", "date": "...", "label": "...", "description": "..." } ],
    "listings": [ { "id": "1", "type": "...", "venue": "...", "ticker": "..." } ],
    "categories": [
      { "id": 12, "name": "fintech", "slug": "fintech" },
      { "id": 11, "name": "b2b", "slug": "b2b" }
    ],
    "documents": [ ... ],
    "company_datasets": [ ... ]
  }
}
Each entry in financials has a snake_case name, a numeric value, and a date.

Fetch financial metrics

The /api/v1/metrics/ endpoint returns detailed metric observations with citations.
curl -H "Authorization: Token YOUR_API_KEY" \
  "https://sacra.com/api/v1/metrics/?company_domain=stripe.com"
You can filter by metric type and date range:
curl -H "Authorization: Token YOUR_API_KEY" \
  "https://sacra.com/api/v1/metrics/?company_domain=stripe.com&metric_base=revenue&measurement_scenario=historical"
The response wraps results inside a metrics key:
{
  "metrics": [
    {
      "metric_id": "35c57075-5f39-46ff-9379-d8408ad3a547",
      "metric_definition": {
        "base": "run_rate_revenue",
        "view": "value",
        "base_forward": "year",
        "base_period": null,
        "growth_period": null,
        "growth_period_length": null
      },
      "measurement": {
        "scenario": "historical",
        "end_date": "2025-01-31",
        "custom_start_date": null,
        "comparison_window_end_date": null,
        "comparison_window_custom_start_date": null,
        "type": "equals",
        "unit_kind": "currency",
        "currency_code": "USD",
        "amount": 500000000,
        "low": null,
        "high": null,
        "scope_name": null,
        "scope_type": null,
        "status": "Active"
      },
      "company": { "id": "112", "slug": "stripe", "domain": "stripe.com" },
      "citations": {
        "summary": { "count": 1 },
        "sources": [ { "url": "https://...", "quote": "..." } ]
      },
      "created_at": "2026-02-25T20:17:24.715380+00:00",
      "updated_at": "2026-02-26T20:27:14.216043+00:00"
    }
  ],
  "pagination": { ... },
  "meta": { ... }
}
Key fields to note:
  • metric_definition.base — the metric type (e.g. revenue, run_rate_revenue, recurring_revenue)
  • metric_definition.view — either value or growth
  • measurement.amount — the metric value
  • measurement.end_date — the date the metric applies to
  • measurement.scenario — typically historical or projection
When metric_definition.view is "growth", the amount field is a percentage — even if unit_kind says "currency". Always check the view field before interpreting amount.
Some metrics return amount: null with low and high range values instead of a single point estimate.

Fetch funding events

The /api/v1/events/ endpoint returns aggregated company events including funding rounds, secondary transactions, milestones, and corporate actions.
curl -H "Authorization: Token YOUR_API_KEY" \
  "https://sacra.com/api/v1/events/?company_domain=stripe.com&types=funding-round"
Filter by event type using the types parameter. Supported values: funding-round, secondary-transaction, company-milestone, corporate-action.
The types query parameter uses kebab-case, while the event_type field in the response uses snake_case (e.g. funding_round).
The response wraps results inside an events key:
{
  "events": [
    {
      "event_id": "fr_561d3001-52d0-4dfc-b2f2-1b2ed5d9e22a",
      "event_type": "funding_round",
      "event_subtype": "series_a",
      "event_name": "Series A (2026)",
      "event_date": "2026-02-23",
      "event_status": "closed",
      "event_last_updated_at": "2026-02-24T18:05:55.786756+00:00",
      "company": { "id": "112", "slug": "stripe", "domain": "stripe.com" },
      "data": {
        "id": "561d3001-52d0-4dfc-b2f2-1b2ed5d9e22a",
        "name": "Series A (2026)",
        "round_type": "series_a",
        "amount_raised": "16600000.00",
        "updated_at": "2026-02-24T18:05:55.786756+00:00"
      }
    }
  ],
  "pagination": { ... },
  "meta": { ... }
}
Each event has top-level metadata (event_type, event_name, event_date, event_status) and a data object with type-specific details like amount_raised for funding rounds.

Example: React company card

Here’s a complete example building a company card component with React. The component fetches data through your own backend proxy to keep the API token server-side.
import { useState, useEffect } from "react";

function CompanyCard({ domain }) {
  const [company, setCompany] = useState(null);

  useEffect(() => {
    fetch(`/api/sacra/company?domain=${domain}`)
      .then((res) => res.json())
      .then((data) => setCompany(data.company));
  }, [domain]);

  if (!company) return <div>Loading...</div>;

  const findFinancial = (name) =>
    company.financials?.find((f) => f.name === name);

  const revenue = findFinancial("latest_estimated_revenue");
  const valuation = findFinancial("latest_estimated_valuation");

  return (
    <div className="company-card">
      <h2>{company.name}</h2>
      <p>{company.description}</p>

      <dl>
        {revenue && (
          <>
            <dt>Revenue</dt>
            <dd>${(revenue.value / 1e9).toFixed(1)}B</dd>
          </>
        )}
        {valuation && (
          <>
            <dt>Valuation</dt>
            <dd>${(valuation.value / 1e9).toFixed(1)}B</dd>
          </>
        )}
      </dl>
    </div>
  );
}
The /api/sacra/company route is a backend proxy you create to forward requests to the Sacra API. A minimal Express example:
app.get("/api/sacra/company", async (req, res) => {
  const response = await fetch(
    `https://sacra.com/api/v1/companies/?company_domain=${req.query.domain}`,
    { headers: { Authorization: `Token ${process.env.SACRA_API_KEY}` } }
  );
  res.json(await response.json());
});
Never expose your API token in client-side code shipped to end users. Proxy requests through your own backend and keep the token server-side.

Embed reference

EndpointMethodIdentifies byReturns
/api/v1/embed/company-data-summary/GETcompany_slug, company_domain, or company_idSummary card iframe
/api/v1/embed/company-data-valuation-chart/GETcompany_slug, company_domain, or company_idValuation chart iframe
/api/v1/embed/company-data-valuation-table/GETcompany_slug, company_domain, or company_idValuation table iframe
/api/v1/embed/document-pdfs/GETdocument_slugPDF viewer iframe
/api/v1/embed/charts/PUTdataset_id (in request body)Custom chart iframe