---
title: "One fund's portfolio Δ between two retained quarters"
method: GET
path: "/api/v1/sec/13f/{cik}/changes"
tags: ["Hedge Fund Intelligence"]
---

# One fund's portfolio Δ between two retained quarters

`GET /api/v1/sec/13f/{cik}/changes`

Position-level delta between two quarters for one institutional manager (CIK). Without query params: latest 2 quarters from the manifest (most-recent vs previous). With `from_quarter` + `to_quarter`: both stems validated against the manifest. Composite diff key is `(cusip, put_call, title)`; multiple INFOTABLE rows with the same key but different investment_discretion / voting / co-manager are aggregated by sum(value)+sum(shares) before diff. `filer_status_*` is `filed` or `not_filed` per quarter - useful for spotting deregistration or new filings. 409 when manifest has <2 quarters and no params provided; 404 when CIK absent from BOTH stems.

## Path parameters

- `cik` string, required — SEC EDGAR CIK; leading zeros optional.

## Query parameters

- `from_quarter` string, nullable — Older stem (`ddmmmyyyy-ddmmmyyyy` or `yyyyqN`). Default: prior to most-recent.
- `to_quarter` string, nullable — Newer stem. Default: most-recent stem in retention.

## Response `200`

Composite-key position delta for one CIK across two quarters.

- EnvelopeSec13fCikChanges
  - `data` Sec13fCikChanges, required — Delta-positions between two quarters for one fund (CIK).
    - `comparison` Sec13fComparison — The interval a comparison actually covers. The baseline quarter is chosen from what retention holds, not from the calendar, so when a quarter is missing the two compared quarters are not adjacent and the delta spans more than one. Without this block the response would describe six months in the words of three.
      - `from_period_end` string, nullable — Reported quarter-end of the baseline.
      - `to_period_end` string, nullable — Reported quarter-end of the target.
      - `quarters_apart` integer, nullable — How many quarters the comparison covers; 1 is quarter-over-quarter. Null when the interval cannot be determined.
      - `calendar_adjacent` boolean, nullable — Whether the two quarters are consecutive. Absent when the interval could not be determined - false would read as a known answer.
      - `skipped_quarters` string[], nullable — Reported quarter-ends lying between the two that this comparison does not cover.
      - `note` string, nullable — Present only when quarters were skipped.
    - `cik` string, required
    - `manager_name` string, required
    - `from_stem` string, required
    - `to_stem` string, required
    - `filer_status_from` string, required — Whether CIK filed in from_stem.
    - `filer_status_to` string, required — Whether CIK filed in to_stem.
    - `positions_added` Sec13fPosition[], required — In to_stem only (composite-key aggregation).
      - `issuer` string, required
      - `title` string, required — Class title (e.g. COM = common stock).
      - `cusip` string, required
      - `figi` string, nullable — Bloomberg FIGI; often empty in SEC bulk.
      - `value_usd_thousands` integer, nullable — Holding market value in $thousands as filed.
      - `shares` integer, nullable — Share/principal amount.
      - `shares_type` string, required — SH = shares; PRN = principal amount (debt).
      - `put_call` string, nullable — None for direct holdings.
      - `investment_discretion` string, required
      - `voting_sole` integer, required — Voting authority: shares with sole voting power.
      - `voting_shared` integer, required — Voting authority: shares with shared voting power.
      - `voting_none` integer, required — Voting authority: shares with no voting power.
      - `accession` string, required
      - `period_of_report` string, required
      - `other_manager_cik` string, nullable — OWNER_CIK resolved from OTHERMANAGERS.tsv via INFOTABLE.OTHERMANAGER sequence number JOIN, 10-digit zero-padded string (matches Sec13fFiler.cik and Sec13fPosition.cik). Null when no co-manager OR seq unresolved. String type preserves leading zeros so joins to EDGAR / W3 SEC ADV string CIK keys work; an int field stripped 0001067983 -> 1067983 and broke those joins.
      - `other_manager_name` string, nullable — OTHER_INCLUDED_MANAGERS_NAME resolved from OTHERMANAGERS.tsv. Null when no co-manager OR seq unresolved.
      - `other_manager_seq` integer, nullable — Raw INFOTABLE.OTHERMANAGER sequence number, retained for debugging. Null when INFOTABLE row had no OTHERMANAGER reference.
    - `positions_removed` Sec13fPosition[], required — In from_stem only (composite-key aggregation).
      - `issuer` string, required
      - `title` string, required — Class title (e.g. COM = common stock).
      - `cusip` string, required
      - `figi` string, nullable — Bloomberg FIGI; often empty in SEC bulk.
      - `value_usd_thousands` integer, nullable — Holding market value in $thousands as filed.
      - `shares` integer, nullable — Share/principal amount.
      - `shares_type` string, required — SH = shares; PRN = principal amount (debt).
      - `put_call` string, nullable — None for direct holdings.
      - `investment_discretion` string, required
      - `voting_sole` integer, required — Voting authority: shares with sole voting power.
      - `voting_shared` integer, required — Voting authority: shares with shared voting power.
      - `voting_none` integer, required — Voting authority: shares with no voting power.
      - `accession` string, required
      - `period_of_report` string, required
      - `other_manager_cik` string, nullable — OWNER_CIK resolved from OTHERMANAGERS.tsv via INFOTABLE.OTHERMANAGER sequence number JOIN, 10-digit zero-padded string (matches Sec13fFiler.cik and Sec13fPosition.cik). Null when no co-manager OR seq unresolved. String type preserves leading zeros so joins to EDGAR / W3 SEC ADV string CIK keys work; an int field stripped 0001067983 -> 1067983 and broke those joins.
      - `other_manager_name` string, nullable — OTHER_INCLUDED_MANAGERS_NAME resolved from OTHERMANAGERS.tsv. Null when no co-manager OR seq unresolved.
      - `other_manager_seq` integer, nullable — Raw INFOTABLE.OTHERMANAGER sequence number, retained for debugging. Null when INFOTABLE row had no OTHERMANAGER reference.
    - `positions_changed` Sec13fPositionDelta[], required — In both, value or shares differ.
      - `cusip` string, required
      - `title` string, required
      - `put_call` string, nullable
      - `value_usd_thousands_from` integer, nullable
      - `value_usd_thousands_to` integer, nullable
      - `value_usd_thousands_delta` integer, nullable
      - `shares_from` integer, nullable
      - `shares_to` integer, nullable
      - `shares_delta` integer, nullable
      - `raw_row_count_from` integer, required — Distinct INFOTABLE rows aggregated into this key in from_stem.
      - `raw_row_count_to` integer, required — Distinct INFOTABLE rows aggregated into this key in to_stem.
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `422` — Validation Error
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/revisions/652554d2aae1/schema)
