Portrait Analytics API

Portrait Analytics API as documented publicly: 11 operations. Contract generated from the documentation by API Evangelist (2026-10-29); not the provider's own document.

Operations 11

GET /v1/case-studies/{ticker} List company case studies #
GET /v1/case-studies/{ticker}/{year}/{quarter} Read a quarterly case study #
GET /v1/company-graph/edges/sources Read evidence for relationship edges #
GET /v1/company-graph/{ticker} Read recorded company relationships #
GET /v1/company-primers/{ticker} Read an available company primer #
POST /v1/documents/by-companies Retrieve filings for specified companies #
POST /v1/documents/search Search supported filings #
GET /v1/documents/{documentId} Read filing metadata #
GET /v1/documents/{documentId}/content Read available filing content #
GET /v1/ping Verify authenticated connectivity #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/portrait-analytics:portrait-analytics-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

portrait-analytics-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: Portrait Analytics API
  version: '2026-10-29'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-10-29: 11 operation(s) read from 2 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; Portrait Analytics has published no machine-readable contract
    that the pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 0
    documentation: 11
    pages-with-code: 0
    pages-read: 2
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-10-29'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://portraitresearch.com/documentation/integrations/partner-api
  - https://portraitresearch.com/documentation/integrations/partner-api.md
paths:
  /v1/case-studies/{ticker}:
    get:
      operationId: get_v1_case_studies_ticker
      tags:
      - Case Studies
      summary: List company case studies
      description: 'Required scope: gen_content:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      parameters:
      - name: ticker
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/case-studies/{ticker}/{year}/{quarter}:
    get:
      operationId: get_v1_case_studies_ticker_year_quarter
      tags:
      - Case Studies
      summary: Read a quarterly case study
      description: 'Required scope: gen_content:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      parameters:
      - name: ticker
        in: path
        required: true
        schema:
          type: string
      - name: year
        in: path
        required: true
        schema:
          type: string
      - name: quarter
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/companies/search:
    get:
      operationId: get_v1_companies_search
      tags:
      - Companies
      summary: Resolve company identities
      description: 'Required scope: companies:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/company-graph/edges/sources:
    get:
      operationId: get_v1_company_graph_edges_sources
      tags:
      - Company Graph
      summary: Read evidence for relationship edges
      description: 'Required scope: gen_content:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/company-graph/{ticker}:
    get:
      operationId: get_v1_company_graph_ticker
      tags:
      - Company Graph
      summary: Read recorded company relationships
      description: 'Required scope: gen_content:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      parameters:
      - name: ticker
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/company-primers/{ticker}:
    get:
      operationId: get_v1_company_primers_ticker
      tags:
      - Company Primers
      summary: Read an available company primer
      description: 'Required scope: gen_content:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      parameters:
      - name: ticker
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/documents/by-companies:
    post:
      operationId: post_v1_documents_by_companies
      tags:
      - Documents
      summary: Retrieve filings for specified companies
      description: 'Required scope: documents:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/documents/search:
    post:
      operationId: post_v1_documents_search
      tags:
      - Documents
      summary: Search supported filings
      description: 'Required scope: documents:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/documents/{documentId}:
    get:
      operationId: get_v1_documents_documentId
      tags:
      - Documents
      summary: Read filing metadata
      description: 'Required scope: documents:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/documents/{documentId}/content:
    get:
      operationId: get_v1_documents_documentId_content
      tags:
      - Documents
      summary: Read available filing content
      description: 'Required scope: documents:read'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/ping:
    get:
      operationId: get_v1_ping
      tags:
      - Ping
      summary: Verify authenticated connectivity
      description: 'Required scope: Partner token'
      x-source: https://portraitresearch.com/documentation/integrations/partner-api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
tags:
- name: Case Studies
- name: Companies
- name: Company Graph
- name: Company Primers
- name: Documents
- name: Ping