Streaming API timepoints and endpoints

Hello, I have a few questions and would appreciate your help in clarifying them.

  1. I need some assistance with understanding a few things related to StreamingAPI:

    1.1 The API’s different endpoints seem to have different starting points for timepoints. For example, in filing-history the timepoint is 168511966, but in company it’s 82025317.
    Is this normal? Are they supposed to be different? And do these timepoints differ across different accounts? (I’m using two accounts, one primary and one backup.)

    1.2 What should we do if the last event we received was more than 3 days ago? Our connector was intentionally disconnected from StreamingAPI due to technical reasons.
    Is there a way to retrieve events older than 3 days? Is this even possible?

    1.3 Are timepoints counted in seconds starting from a certain DateTime? And is that DateTime in UTC (i.e., UTC+0)?

    1.4 According to the documentation, the oldest retrievable timepoint is “3 days ago,” but when trying to fetch events from that time range, we receive a 416 response code.
    Does this mean we’re requesting a timepoint that exceeds the 3-day limit? Here’s an example of the last event we received:

{
   "resource_kind": "company-profile",
   "resource_uri": "/company/15893094",
   "resource_id": "15893094",
   "data": {
   "accounts": {
   "accounting_reference_date": {
   "day": "31",
   "month": "08"
   },
   "next_accounts": {
   "due_on": "2026-05-12",
   "period_end_on": "2025-08-31",
   "period_start_on": "2024-08-12"
   },
   "next_due": "2026-05-12",
   "next_made_up_to": "2025-08-31"
   },
   "can_file": true,
   "company_name": "VAPEBOX LTD",
   "company_number": "15893094",
   "company_status": "active",
   "confirmation_statement": {
   "next_due": "2025-08-25",
   "next_made_up_to": "2025-08-11"
   },
   "date_of_creation": "2024-08-12",
   "etag": "b845162ed5d8824907607daf6ccc939cd2dc76f9",
   "jurisdiction": "england-wales",
   "links": {
   "filing_history": "/company/15893094/filing-history",
   "officers": "/company/15893094/officers",
   "persons_with_significant_control": "/company/15893094/persons-with-significant-control",
   "self": "/company/15893094"
   },
   "registered_office_address": {
   "address_line_1": "83 Chelford Road",
   "address_line_2": "Eccleston",
   "country": "England",
   "locality": "St. Helens",
   "postal_code": "WA10 5PL"
   },
   "sic_codes": [
   "46170"
   ],
   "type": "ltd"
   },
   "event": {
   "timepoint": 82025317,
   "published_at": "2024-08-12T19:28:02",
   "type": "changed"
   }
}

Based on the logic, the timepoint 82025317 represents 82025317 seconds from 2024-08-12T19:28:02, which means to avoid a 416 error in the request, I would need to calculate the difference in seconds between 2024-08-12T19:28:02 and the current time (e.g., 2024-09-05 09:09:49), then add this difference to the original timepoint and use the result in the request.
However, I still receive a 416 error. Here’s an example of my calculations:

[2024-09-05 09:09:49.798389][][][DEBUG] Original timepoint: 82025317. Original datetime: 2024-08-12 19:28:02  
[2024-09-05 09:09:49.798468][][][DEBUG] Modified timepoint: 83802655
[2024-09-05 09:09:49.799231][][][DEBUG] StreamingAPI called endpoint: https://stream.companieshouse.gov.uk/companies?timepoint=83802655

I’ve tried the same approach for a timepoint “2 days ago” but still get the same 416 error. Meanwhile, the same logic works fine with the filing-history endpoint.
Is it possible that some endpoints allow fetching historical events with different time ranges (1 day, 2 days, 3 days)? The documentation doesn’t mention this. What am I doing wrong?

  1. Is there a more up-to-date version of the documentation?
    In the current documentation available at developer-specs.company-information.service.gov.uk/companies-house-public-data-api/reference,
    the object schemas and descriptions (e.g., mandatory/optional fields) don’t match the actual data I’m receiving from the API.

  2. From what I understand, the officer_id from the endpoint developer-specs.company-information.service.gov.uk/companies-house-public-data-api/reference/officer-disqualifications/get-natural-officer
    doesn’t match the officer_id from developer-specs.company-information.service.gov.uk/companies-house-public-data-api/reference/officer-appointments/list.
    How can I retrieve disqualifications for an officer using the ID I get from your data (e.g., BZVJHIlegGkpm_1w4bT4HnZ4Ekk)?
    When I request data from both disqualified-officers endpoints, I get the response {"timestamp":"2024-09-05T09:27:54.254069593","message":"Resource not found."}
    Could you clarify for which officers this request is valid? Is it specific to a certain type or status of officers?

Thats a lot of post there…

  1. They are not timepoints you can calculate. Think of them as indexes. Store the last index you received from each stream and supply the same index when you re-connect.
    Yes the ‘timepoints’ are all different as the number of events or the amount of traffic, varys across the streams.
  2. If you have a specific example of the data not matching the specs, please provide that so we can investigate.
  3. officer id and disqualified officer id are not related.
    ‘Both’ disqualified-officers endpoints ?

Thanks for the prompt response Mark and sorry for the wall of text!

  1. I haven’t connected to the Streaming API for 5 days. When I try to reconnect using the last received timepoint, I get a 416 Range Not Satisfiable error.
    I’d like to understand how I can retrieve the events I missed while I was disconnected from the Streaming API.

  2. According to the documentation on this page: Streaming API:,
    if the requested timepoint is too old, it returns a 416 error. This brings up the question: what’s the correct timepoint to use in such cases?
    Should I make a request without a timepoint? How can I fetch the events I missed?

  3. It seems like most sections of the CompanyHouse Public Data API haven’t been updated for at least 2 years, but the response data has changed quite a bit.
    For example, in the filing history section (Companies House Public Data API: filingHistoryList),
    a lot of fields aren’t documented, like items[].description_values, annotations[].category, annotations[].type, and associated_filing[].description_values. Here’s an example:

{
  "filing_history_status": "filing-history-available",
  "items": [
    {
      "transaction_id": "MzQyODkxODk5OWFkaXF6a2N4",
      "barcode": "XD7GELAI",
      "type": "RP10",
      "date": "2024-07-16",
      "category": "address",
      "description": "default-companies-house-service-address-applied-psc",
      "description_values": {
        "change_date": "2024-07-16",
        "default_address": "Companies House Default Address, PO Box 4385, Cardiff, CF14 8LH",
        "company_number": "15589529",
        "psc_name": "Sajid Saeed"
      },
      "pages": 1,
      "links": {
        "self": "/company/15589529/filing-history/MzQyODkxODk5OWFkaXF6a2N4",
        "document_metadata": "https://document-api.company-information.service.gov.uk/document/n2rjdYLHtGQJoSNZh_JtRdxsrp2heJ350HrTRcechj8"
      }
    },
    {
      "transaction_id": "MzQyODkxODkwNmFkaXF6a2N4",
      "barcode": "XD7GEKLE",
      "type": "RP09",
      "date": "2024-07-16",
      "category": "address",
      "description": "default-companies-house-service-address-applied-officer",
      "description_values": {
        "change_date": "2024-07-16",
        "officer_name": "Sajid Saeed",
        "default_address": "Companies House Default Address, PO Box 4385, Cardiff, CF14 8LH",
        "company_number": "15589529"
      },
      "pages": 1,
      "links": {
        "self": "/company/15589529/filing-history/MzQyODkxODkwNmFkaXF6a2N4",
        "document_metadata": "https://document-api.company-information.service.gov.uk/document/T8nESN6FdLqvHMyvTuBxmelkrY0dtg-kjzbRO7IIkCc"
      }
    },
    {
      "transaction_id": "MzQyODkxODI2NWFkaXF6a2N4",
      "barcode": "RD7HCLAY",
      "type": "RP05",
      "date": "2024-07-16",
      "category": "address",
      "description": "default-companies-house-registered-office-address-applied",
      "description_values": {
        "change_date": "2024-07-16",
        "default_address": "PO Box 4385, 15589529 - Companies House Default Address, Cardiff, CF14 8LH"
      },
      "pages": 1,
      "action_date": "2024-07-16",
      "paper_filed": true,
      "links": {
        "self": "/company/15589529/filing-history/MzQyODkxODI2NWFkaXF6a2N4",
        "document_metadata": "https://document-api.company-information.service.gov.uk/document/tGdB_5aeW8_YXzr9gyNMuXqVmQUARXLSmsuO4W6Bc08"
      }
    },
    {
      "transaction_id": "MzQxNTg3NjMyNmFkaXF6a2N4",
      "barcode": "XCZI724P",
      "type": "NEWINC",
      "date": "2024-03-23",
      "category": "incorporation",
      "annotations": [
        {
          "annotation": "Part Admin Removed The registered office, director, person with significant control and shareholder address details on the IN01 were administratively removed from the public register on 16/07/2024 as the material was not properly delivered.",
          "date": "2024-07-16",
          "description": "annotation",
          "category": "annotation",
          "type": "ANNOTATION",
          "description_values": {
            "description": "Part Admin Removed The registered office, director, person with significant control and shareholder address details on the IN01 were administratively removed from the public register on 16/07/2024 as the material was not properly delivered."
          }
        }
      ],
      "associated_filings": [
        {
          "category": "incorporation",
          "date": "2024-03-23",
          "description": "model-articles-adopted",
          "type": "MODEL ARTICLES"
        },
        {
          "category": "capital",
          "date": "2024-03-23",
          "description": "statement-of-capital",
          "type": "SH01",
          "description_values": {
            "date": "2024-03-23",
            "capital": [
              {
                "currency": "GBP",
                "figure": "1"
              }
            ]
          },
          "action_date": "2024-03-23"
        }
      ],
      "description": "incorporation-company",
      "pages": 11,
      "paper_filed": true,
      "links": {
        "self": "/company/15589529/filing-history/MzQxNTg3NjMyNmFkaXF6a2N4",
        "document_metadata": "https://document-api.company-information.service.gov.uk/document/9WFrn8HmHupmOsLEUX1Nc_1Vzlag6Thz-SICDa4QOoQ"
      }
    }
  ],
  "items_per_page": 100,
  "start_index": 0,
  "total_count": 4
}

You can also compare the documentation here: Document API: documentMetadata
with the API response. For example:

{
  "company_number": "13498402",
  "barcode": "XD7LY2LM",
  "significant_date": null,
  "significant_date_type": "",
  "category": "annual-returns",
  "pages": 3,
  "filename": "13498402_cs01_2024-07-18",
  "created_at": "2024-07-18T16:36:44.14154645Z",
  "etag": "",
  "links": {
    "self": "https://document-api.company-information.service.gov.uk/document/lDtTHCKxs0MUsjFxYPWerq_2e14_RbNGeuMIgRvy-b0",
    "document": "https://document-api.company-information.service.gov.uk/document/lDtTHCKxs0MUsjFxYPWerq_2e14_RbNGeuMIgRvy-b0/content"
  },
  "resources": {
    "application/pdf": {
      "content_length": 86155
    }
  }
}

From what I’ve seen, there are quite a few differences between the actual API responses and the documentation. I can’t provide a list of every object with undocumented fields, but I can share schemas that include as many fields as possible, based on what I’ve compiled from the API responses, if it helps at all.