# Peptide adverse event reports: dataset definitions and reproduction

Checked October 14, 2026. This package contains two separate research series: a seven-peptide public openFDA name-search extraction and an audit of historical searches described in seven FDA briefing documents. Keep their counts, scopes and dates separate. No count measures incidence, confirmed injury or comparative safety.

## Files and units

- `openfda-seven-peptide-snapshot.csv`: seven compound-family rows; counts of identifiable, distinct `safetyreportid` case records from the declared public API searches.
- `openfda-case-name-audit.csv`: 35 matched candidate **drug-object rows**, including repeated matching objects within one case and excluded identities. It is not a 35-patient dataset. The two matching BPC-157 objects in case 23130696 remain visible; they contribute one included case.
- `openfda-query-audit.json`: seven exact requests, timestamps, original-response byte hashes, response metadata/error envelopes and extraction-completeness checks. It contains no raw patient responses.
- `fda-briefing-searches.csv`: seven historical FDA-described search results. These use the FDA’s reported search scope and cutoff rather than this package’s API algorithm.

Case identifiers count distinct submitted case records within each peptide query. They do not prove unique persons: separately submitted, unlinked duplicates can remain. One case can name several peptides, so row totals must not be combined into a unique-case total. openFDA documents returning the latest version of each report; we preserve the complete identifier and supplied version. We do not strip a purported checksum or suffix from the identifier. The source `duplicate` flag indicates earlier versions existed and is not an exclusion rule for this extraction.

## Verified counts

| Peptide | Included IDs | Suspect | Concomitant only |
|---|---:|---:|---:|
| BPC-157 | 20 | 8 | 12 |
| TB-500 | 1 | 0 | 1 |
| Semax | 1 | 1 | 0 |
| MOTS-C | 0 | 0 | 0 |
| KPV | 0 | 0 | 0 |
| DSIP / emideltide | 0 | 0 | 0 |
| Epitalon | 0 | 0 | 0 |

For BPC-157, 20 = 8 + 12. Four queries returned no matches. Neither zero nor a low count establishes safety. Products with more reports cannot be classified as more dangerous from these counts.

## Exact search scope and aliases

Each term set was OR-searched in `patient.drug.medicinalproduct`, `patient.drug.activesubstance.activesubstancename` and `patient.drug.openfda.generic_name`. The JSON manifest is authoritative for exact syntax, punctuation and URL encoding. We applied no date, country, seriousness or report-type filter. The data is not restricted to U.S. patients.

| Query name | Exact term set |
|---|---|
| `bpc157_cross` | BPC; BPC157; BPU (candidate discovery only); BEPECIN; “BODY PROTECTION COMPOUND”; “PL-14736”; PL14736 |
| `tb500_cross` | “TB-500”; TB500; LKKTETQ |
| `motsc_cross` | MOTS; MOTSC; “MOTS-C” |
| `semax_cross` | SEMAX |
| `kpv_cross` | KPV; “LYS PRO VAL”; “LYSINE PROLINE VALINE” |
| `dsip_cross` | DSIP; EMIDELTIDE; “DELTA SLEEP INDUCING PEPTIDE” |
| `epitalon_cross` | EPITALON; EPITHALON |

The API’s tokenized search discovers candidates; it does not authenticate a molecule. This declared set does not guarantee retrieval of every misspelling, trade name, foreign-language variant or unreported ingredient. Reported research-peptide names can lack harmonized identifiers; searching only the `openfda` block would omit potentially relevant unharmonized names.

## Inclusion, exclusions and same-object drug roles

We checked every returned candidate’s reported drug name locally. BPC-157 inclusion requires a spelling/punctuation variant that explicitly contains BPC and 157 together after punctuation/spacing normalization, including `Bepecin [BPC-157]`. The 31 candidate IDs contain 20 included IDs, nine unrelated vitamin/British Pharmacopoeia product IDs and two unresolved identities. `BPC + EPICATECHIN` does not establish BPC-157 identity. `GLOW GHK-CU/BPU 157/ TB 500 100 MG/10 MG/10 MG` contains a possible BPC typo; we left it unresolved rather than silently correcting BPU. That same object was included for TB-500 because its reported name explicitly contains TB 500; it does not prove the product contained the chemically authentic fragment.

The Semax search found two candidates. `SEMAX [CITALOPRAM HYDROBROMIDE]` was excluded as a different product identity. The retained object reports `SEMAX` as both product and active-substance name. No automatic substitution of full-length thymosin beta-4 for TB-500 was used. These names do not establish a product’s actual composition, salt, purity or source.

Role is read from the **same drug object** as the qualifying name: code 1 = suspect, 2 = concomitant, 3 = interacting. A report-level query such as “BPC name AND drug role 1” can match BPC in one object and another drug’s role 1 in another object, so it is not a valid shortcut for this tally. The openFDA role is reporter attribution, not FDA-validated causation; it does not separately identify primary and secondary suspects.

Within a peptide and `safetyreportid`, repeated matching objects count once. If matching objects have different roles, case-level precedence is suspect (1), interacting (3), concomitant (2), unknown. No retained case in this snapshot needed mixed-role precedence. This produces 8 suspect BPC cases rather than 9 suspect drug objects. The audit CSV retains the repeated object so the deduplication can be independently checked.

## Release metadata, extraction dates and empty responses

The three nonempty API responses report `meta.last_updated = 2026-07-30`. That is the source-release metadata, **not an event-date or report-receipt cutoff**. Exact request timestamps fall on October 14, 2026 and are preserved from the manifest in both CSVs. FDA’s AEMS dashboard and the quarterly openFDA API have different update schedules; this is an archived extraction, not a live dashboard.

Four requests returned HTTP 404 with `error.code = NOT_FOUND` and `message = No matches found!`. For these declared searches, this is an expected no-match result, not a retrieval failure. Those responses contain no release metadata; we preserve that absence. An unrelated 404, authentication error, HTTP 403, timeout, rate-limit response or malformed response must not be converted into a zero count.

## Retrieval completeness and pagination

All final requests used `limit=100`. Nonempty responses report `skip=0`, `limit=100` and totals of 31 (BPC), 1 (TB-500) or 2 (Semax). All records were fetched, and complete IDs were unique within each response. Each manifest entry includes `fetched_records` and `pagination_complete`. Nonempty completeness means fetched count equals the source total; no-match completeness means the expected 404/NOT_FOUND envelope was obtained.

No pagination was required for this snapshot. Future reruns with a total above the page limit must retrieve every page using the documented openFDA pagination mechanism and check all returned IDs before producing totals. A single page or the API’s reaction-term counts must not be presented as all case records. Do not confuse the source `limit` with the number actually fetched: it is the requested ceiling.

## Reproduction steps

1. Read the seven entries in `openfda-query-audit.json`. Request each exact `url`, retaining status and body bytes. Handle the expected 404/NOT_FOUND envelopes explicitly; treat other failures as failures.
2. Compare response release metadata and totals with the manifest. Download every candidate record. Keep full responses in a private analysis workspace; this public package does not distribute them.
3. Audit names and the matching drug objects using the documented inclusion/exclusion rules. Preserve original names and unresolved identities. The public case audit lists each retained/excluded matching object and its exact case identifier, making this naming decision checkable.
4. Count each retained full `safetyreportid` once per peptide. Resolve its role from retained same-name objects, using the precedence above. Recompute the summary’s included, suspect, concomitant, interacting and unknown counts.
5. Verify that included count equals the four role buckets, and candidate count equals included plus unresolved-identity exclusions plus unrelated-name exclusions. BPC must reproduce 31 = 20 + 2 + 9 and 20 = 8 + 12 for this archived extraction. Semax must reproduce 2 = 1 + 0 + 1.
6. Independently inspect the FDA PDFs cited by `fda-briefing-searches.csv`, using their recorded pages and search cutoffs. Record exactly what FDA reported. Do not replace those historical figures with current API output or subtract the series to infer growth.

The SHA-256 fields identify the exact original response bytes retained in the research archive. A changed API response, record order or formatting can change a byte hash. The raw response bodies are not included here, so this download cannot itself verify the original-byte hashes. Later API updates may revise old cases, remove records or change aliases and will not necessarily recreate an archived snapshot. A rerun should preserve its own date, metadata and audited outputs rather than overwrite historical provenance.

## `openfda-seven-peptide-snapshot.csv` fields

| Field | Definition |
|---|---|
| `peptide` | Normalized peptide label used in this snapshot; DSIP denotes emideltide. A label names a reported product family, not laboratory confirmation of its contents. |
| `candidate_case_records` | Integer count of all candidate safetyreportid records returned by the declared query before local name review; zero for an expected no-match response. |
| `included_identifiable_case_records` | Integer count of distinct, complete safetyreportid strings retained after identity review. The unit is a latest-version case record, not a unique patient or confirmed injury. |
| `suspect_case_records` | Included IDs with at least one retained matching drug object carrying role code 1. Repeated objects within one ID count once. |
| `concomitant_only_case_records` | Included IDs with retained matching objects carrying code 2 and no retained matching object with code 1 or 3. |
| `interacting_case_records` | Included IDs with a retained matching object carrying code 3 and none carrying code 1. Zero in this snapshot. |
| `unknown_role_case_records` | Included IDs without a recognized matching-object role code. Zero in this snapshot. |
| `unresolved_identity_case_records_excluded` | Candidate IDs excluded because compound identity could not be established by the declared naming rules. These are not treated as adverse-event-free products. |
| `unrelated_name_case_records_excluded` | Candidate IDs excluded because the name referred to another drug or product family. |
| `source_api_last_updated` | The exact API meta.last_updated value (2026-07-30) for nonempty responses. The text “not supplied in no-match response” records absent metadata; it is not a date. |
| `extracted_at_utc` | Exact ISO-8601 request timestamp from the corresponding query manifest. This denotes this extraction, not the date an event occurred. |
| `source_query_name` | Stable manifest key identifying the exact query, such as bpc157_cross. |
| `source_url` | Full, encoded FDA API request URL for this row; reproduces its declared search and limit. |
| `checked_date` | Date the source/audit was checked, in YYYY-MM-DD form; 2026-10-14. |

## `openfda-case-name-audit.csv` fields

| Field | Definition |
|---|---|
| `peptide` | Normalized peptide label matching the snapshot CSV. |
| `safetyreportid` | The complete, unmodified case/report identifier supplied by openFDA. Treat as an opaque string, preserving hyphens and leading characters; never derive patient identity from it. |
| `safetyreportversion` | FDA report-version string when supplied. Blank means absent in the source, including some legacy records. openFDA documents returning the latest available version. |
| `receivedate` | Source YYYYMMDD string for when FDA first received the case. It is not necessarily the event date. |
| `receiptdate` | Source YYYYMMDD string for when FDA received the latest information about the case. It is not necessarily the event date. |
| `reported_product_name` | Exact medicinalproduct value from the matching candidate drug object, including original punctuation, typos and combination-product ingredients. Names do not authenticate contents. |
| `reported_active_substance` | Exact activesubstancename from the same drug object when supplied; blank means not supplied. This is reported identity, not a chemical assay. |
| `reported_role_code` | Exact same-object drugcharacterization string: 1 suspect, 2 concomitant, 3 interacting; blank or other values would be unknown. Reporter attribution is not FDA-validated causation. |
| `reported_role_label` | Readable label derived from reported_role_code; Suspect, Concomitant, Interacting or Unknown. |
| `decision` | Local identity decision: include, exclude (unrelated identity), or unresolved_exclude (insufficient identity). This is a naming decision, not a judgment about whether the clinical event was real. |
| `reason` | Specific inclusion/exclusion reason supporting decision. |
| `query_name` | Stable key linking this object to its exact entry in openfda-query-audit.json. |
| `extracted_at_utc` | Exact ISO-8601 request timestamp copied from the corresponding manifest entry; it is not the time the audit file was written. |
| `source_url` | Full FDA API request URL corresponding to query_name. |
| `checked_date` | Date the source/audit was checked, in YYYY-MM-DD form; 2026-10-14. |

## `fda-briefing-searches.csv` historical fields

| Field | Definition |
|---|---|
| `peptide` | Peptide family reviewed in the FDA briefing document; historical naming can differ from the snapshot’s normalized label. |
| `source_media_id` | FDA media-document identifier used in the stable source_url. |
| `reader_page` | PDF-reader page or page span recorded during the audit; may differ from the document’s printed pagination. |
| `faers_count` | Number of reports retrieved in the FDA-described historical FAERS search. This is the agency’s stated result, not an independently deduplicated patient count or the current openFDA count. |
| `faers_end` | Latest cutoff date stated for the FDA-described FAERS search, YYYY-MM-DD. It is not the briefing publication date or an event cutoff established by this audit. |
| `faers_search_intervals` | Text recording FDA’s stated search interval or intervals. Overlapping MOTS-c intervals are preserved without arithmetic. |
| `hfcs_count` | FDA-described number of cases/reports from the Human Foods Complaint System (HFCS), when stated. Blank means not described, not zero. |
| `hfcs_start` | Stated HFCS search start date, YYYY-MM-DD, when given. Blank means no start date was recorded in this source audit. |
| `hfcs_end` | Stated HFCS search end date, YYYY-MM-DD, when given. Blank is not an implied cutoff. |
| `hfcs_status` | reported means the briefing states an HFCS result; not described means no HFCS result was identified for that row. |
| `human_event_summary` | Concise source-backed description of the historical human reports or findings. It does not summarize every current API case or establish causation. |
| `interpretation_note` | Scope-specific limit or context, including coingredients, absent safety assessments, overlapping intervals or clinical-literature evidence. |
| `source_url` | Stable primary FDA briefing-document URL. |
| `source_event_date` | July 23–24, 2026 advisory-committee meeting dates associated with the briefing. These are not the dates the search was run or adverse events occurred. |
| `checked_date` | Date the briefing source was checked; YYYY-MM-DD. |
| `record_unit` | Verbatim description of what the historical count represents. Currently FDA-described search result, not independently deduplicated patient count. |
| `count_type` | Verbatim classification of the historical figure. Currently FDA-reported retrieved reports. |
| `live_snapshot` | Boolean text. False denotes a historical document result, not a current database lookup. |
| `aggregate_allowed` | Boolean text. False means these counts must not be summed across peptide rows or reporting systems; cases and combination products may overlap. |

## `openfda-query-audit.json` fields

| Field | Definition |
|---|---|
| `description` | Package-level scope and privacy statement. |
| `queries` | Array of seven query/provenance entries. |
| `name` | Stable key linking CSV rows to this exact request. |
| `search` | Exact decoded API search expression. |
| `url` | Exact encoded request URL, including `limit=100`. |
| `retrieved_at_utc` | Original ISO-8601 request timestamp. |
| `status` | Observed HTTP status (200 for nonempty responses, 404 for expected no matches). |
| `response_sha256` | SHA-256 of original response-body bytes retained privately; not a hash of this redacted manifest. |
| `response_meta` | Exact FDA metadata object from a nonempty response; null if none was supplied. |
| `response_meta.disclaimer` | Exact source disclaimer string. |
| `response_meta.terms` | Source terms URL. |
| `response_meta.license` | Source license URL. |
| `response_meta.last_updated` | Source-release label, not an event cutoff. |
| `response_meta.results.skip` | Source offset for the returned page (0 here). |
| `response_meta.results.limit` | Requested page-size ceiling (100 here). |
| `response_meta.results.total` | Total candidate case records matching the query, before local name auditing. |
| `response_error` | Exact source error object for expected no-match responses; null on nonempty responses. |
| `response_error.code` | Source error code (NOT_FOUND for the four empty searches). |
| `response_error.message` | Exact source text (No matches found!). |
| `fetched_records` | Actual returned candidate count; 31, 1, 2 or 0. |
| `pagination_complete` | Boolean verification described in the retrieval-completeness section; true for all seven final requests. |

## Additional FDA context datasets

These datasets describe different sources and evidence units. They do not expand the seven-peptide API count or form an adverse-event-frequency comparison.

### `fda-historical-problem-summaries.csv` fields

| Field | Definition |
|---|---|
| `peptide` | Peptide family named in the historical FDA summary. |
| `reported_problem` | Specific human complaint described in an FDA briefing; not an incidence estimate or description of every current API case. |
| `attribution_limit` | Reason the complaint cannot be assigned confidently to that peptide, such as coingredients or sparse information. |
| `evidence_set` | Explicit source-series label separating this historical briefing summary from the October API extraction. |
| `source_url` | Stable primary FDA briefing-document URL. |
| `reader_page` | PDF-reader location recorded during the source audit; may differ from printed pagination. |
| `source_meeting_date` | Associated July 23–24, 2026 meeting dates, not the dates the clinical complaint occurred. |
| `checked_date` | Date this source was checked; YYYY-MM-DD. |

### `fda-compounded-glp1-reports.csv` fields

| Field | Definition |
|---|---|
| `product_scope` | Compounded product family in FDA’s separately published aggregate; not approved-product reports or one of the seven research-peptide snapshot rows. |
| `reports_received_numeric` | Source numerical value. Read with count_qualifier: 990 is the stated semaglutide count; 730 is the boundary in “more than 730” tirzepatide reports and is not an exact tirzepatide total. |
| `count_qualifier` | The source’s numerical qualifier; preserves exact figure versus more-than threshold. |
| `report_count_date` | FDA’s as-of date for the aggregate report count, YYYY-MM-DD; 2026-05-31. |
| `source_page_update_date` | FDA source-page update date, YYYY-MM-DD; it is not the report-count date. |
| `record_unit` | What FDA counted: reports received, not unique patients or proven injuries. Do not sum rows into a unique-case count. |
| `source_url` | Primary FDA source page for the aggregate. |
| `checked_date` | Date the source was checked; YYYY-MM-DD. |

### `fda-other-peptide-event-evidence.csv` fields

| Field | Definition |
|---|---|
| `substance` | Peptide or substance identified on FDA’s safety-risk source page, outside this page’s seven-family snapshot. |
| `evidence_summary` | Concise summary of FDA’s stated event evidence; no numerical report count or risk rate is implied. |
| `evidence_scope` | Source and interpretation boundary. Evidence types differ and must not be pooled into a comparative safety rank. |
| `source_url` | Primary FDA safety-risk source page. |
| `source_content_date` | Content date recorded for the source page; not necessarily the clinical event or original study date. |
| `checked_date` | Date this source was checked; YYYY-MM-DD. |

## Primary definitions

- [openFDA Drug Adverse Event Overview](https://open.fda.gov/apis/drug/event/): source coverage, update lag and multi-product/multi-reaction structure.
- [openFDA field reference](https://open.fda.gov/fields/drugevent_reference.pdf): reported names, role codes, case versions and receipt-date definitions.
- [FDA AEMS dashboard limitations](https://www.fda.gov/drugs/fda-adverse-event-monitoring-system-aems/fda-adverse-event-monitoring-system-aems-public-dashboard): duplicate/incomplete reports, lack of confirmed causation and inability to estimate incidence.
- [FDA AEMS dashboard FAQ](https://fis.fda.gov/extensions/FPD-FAQ/FPD-FAQ.html): daily dashboard updates, latest case versions and investigation/reporting limitations.
- Historical briefing-document source URLs are provided row by row in `fda-briefing-searches.csv`.

The dictionary defines the checked historical CSV schema. Any later addition or renaming of fields requires corresponding dictionary changes. Blank source fields preserve missing or undescribed information; they do not substitute a numerical zero.
