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.

Summary

As of Thursday, May 14, 2026 at 10:00 AM ET, Sacra API fields that previously linked directly to underlying PDF files for documents and filings now return stable Sacra URLs instead. The response field names are not changing. The main change is the URL behavior:
Before: Sacra API -> direct S3 PDF URL
After:  Sacra API -> stable Sacra URL -> 302 redirect -> temporary signed PDF delivery URL
This lets Sacra stop exposing durable storage URLs while preserving the same API response shape for customers. Existing direct S3 links, such as https://sacra-pdfs.s3.us-east-2.amazonaws.com/spacex.pdf, will continue to work through June 14, 2026. After that date, Sacra will turn off support for old direct S3 links.
If your integration renders or stores Sacra-provided file links, no change should be needed. If your backend downloads PDFs directly, confirm that your HTTP client follows redirects.

Action required

  • If you render or store Sacra-provided PDF and filing links, no action should be required.
  • If you use Sacra PDF embeds, no action is needed. Existing embed HTML continues to point to Sacra’s embed route; Sacra now renders the PDF inside that embed using the browser’s native PDF viewer.
  • If your backend downloads PDFs directly, make sure your HTTP client follows redirects.
  • Keep using the stable Sacra URL returned by the API.
  • Do not store or hardcode the redirected delivery URL, since it is temporary.
Most common HTTP clients already follow redirects for GET requests. The examples below show the main case that can break: clients or wrappers configured to stop at the first 302 response.

What changed

Previously, some API responses returned direct storage URLs such as:
https://sacra-pdfs.s3.us-east-2.amazonaws.com/spacex.pdf
Those fields now return a stable Sacra URL:
https://sacra.com/f/UjuDFHb2GHgPNfvAKNf0PeowtFiwLUiX
When requested, the stable Sacra URL returns a redirect to a short-lived signed delivery URL:
GET https://sacra.com/f/UjuDFHb2GHgPNfvAKNf0PeowtFiwLUiX

HTTP/1.1 302 Found
Location: https://content.sacra.com/d/9Xk3mQ7rLp2vNz8bHt4cWy6sFa1uJd0E?Policy=...&Signature=...&Key-Pair-Id=...
Use the stable Sacra URL from the API response. Do not store or hardcode the redirected delivery URL, since it is temporary.

Affected API fields

This applies anywhere the API previously returned a direct PDF link for Sacra documents or filings.
EndpointAffected response field
GET /api/v1/documents/{document_slug}pdf_url
GET /api/v1/documentsdocuments[].link
GET /api/v1/documents?company_domain=...documents[].link
GET /api/v1/companies?company_domain=...company.documents[].link
GET /api/v1/companies?company_slug=...company.documents[].link
GET /api/v1/companies?id=...company.documents[].link
GET /api/v1/companies/{company_slug}company.documents[].link
GET /api/v1/categories/{category_slug}/itemsitems[].meta.pdf_url for document items
GET /api/v1/filingsfilings[].url
POST /api/v1/filingsfilings[].url
GET /api/v1/funding-roundsfunding_rounds[].citations[].url
GET /api/v1/metricsmetrics[].citations.sources[].link for filing evidence sources
POST /api/v1/metricsmetrics[].citations.sources[].link for filing evidence sources
GET /api/v1/events?include_citations=trueevents[].citations.items[].sources[].link for filing evidence sources
POST /api/v1/events with include_citations=trueevents[].citations.items[].sources[].link for filing evidence sources
Most document and filing response fields will use stable /f/... Sacra URLs. Some filing evidence citation links may use Sacra filing access URLs such as /access-filing/filing/{id}. In both cases, the important behavior is the same: clients should treat the Sacra URL as the stable link and follow redirects to retrieve the PDF bytes.

Example response changes

Document detail

// Before
{
  "slug": "spacex",
  "title": "SpaceX One-Pager",
  "pdf_url": "https://sacra-pdfs.s3.us-east-2.amazonaws.com/spacex.pdf"
}
// After
{
  "slug": "spacex",
  "title": "SpaceX One-Pager",
  "pdf_url": "https://sacra.com/f/UjuDFHb2GHgPNfvAKNf0PeowtFiwLUiX"
}

Documents list

// Before
{
  "documents": [
    {
      "slug": "spacex",
      "link": "https://sacra-pdfs.s3.us-east-2.amazonaws.com/spacex.pdf"
    }
  ]
}
// After
{
  "documents": [
    {
      "slug": "spacex",
      "link": "https://sacra.com/f/UjuDFHb2GHgPNfvAKNf0PeowtFiwLUiX"
    }
  ]
}

Downloading PDFs directly

Many HTTP clients follow redirects automatically for GET requests. Some clients, command-line calls, and custom downloaders do not. If your code expects the first response from the file URL to be 200 OK with PDF bytes, update it to allow redirects.

curl

Broken:
curl -H "Authorization: Token YOUR_API_KEY" \
  -o spacex.pdf \
  "https://sacra.com/f/UjuDFHb2GHgPNfvAKNf0PeowtFiwLUiX"
Fixed:
curl -L -H "Authorization: Token YOUR_API_KEY" \
  -o spacex.pdf \
  "https://sacra.com/f/UjuDFHb2GHgPNfvAKNf0PeowtFiwLUiX"
The -L option tells curl to follow redirects.

Python requests

requests.get() follows redirects by default, so most Python integrations do not need to change anything. Usually enough:
import requests

response = requests.get(
    pdf_url,
    headers={"Authorization": "Token YOUR_API_KEY"},
)
response.raise_for_status()

pdf_bytes = response.content
Broken only if redirects are disabled:
import requests

response = requests.get(
    pdf_url,
    headers={"Authorization": "Token YOUR_API_KEY"},
    allow_redirects=False,
)

# response.status_code is 302, not the PDF response
If your integration or HTTP wrapper disables redirects, remove that override or set allow_redirects=True.

JavaScript fetch

Broken if redirects were set to manual:
const response = await fetch(pdfUrl, {
  headers: { Authorization: "Token YOUR_API_KEY" },
  redirect: "manual",
});

// response.status is 302, not the PDF response
Fixed:
const response = await fetch(pdfUrl, {
  headers: { Authorization: "Token YOUR_API_KEY" },
  redirect: "follow",
});

if (!response.ok) {
  throw new Error(`Failed to fetch PDF: ${response.status}`);
}

const pdfBytes = await response.arrayBuffer();
The standard fetch default is redirect: "follow". The explicit option is useful if your code currently sets redirect: "manual" or uses a wrapper that disables redirects.

Notes

  • The API response field names are unchanged.
  • The stable Sacra URL is the URL to store, render, or fetch.
  • The redirected delivery URL is temporary and should not be stored.
  • Existing direct S3 links will continue to work through June 14, 2026, then support for old direct S3 links will be turned off.
  • Browser-based rendering should continue to work normally.
  • Backend downloaders should follow redirects when fetching Sacra PDF and filing links.