{
  "title": "PBS integration requirements",
  "research_date": "2026-10-16",
  "status": "Public-source requirements profile; not an implemented integration",
  "integration_tested": false,
  "coverage": "Four public documentation pages; not a complete PBS API inventory.",
  "freshness": "The undated changing-data page names ARISTOGOLD; present availability of a page does not establish a current contract.",
  "sources": [
    {
      "id": "basics",
      "title": "Basic usage",
      "url": "https://partnerhub.pbsdealers.com/basics",
      "checked_on": "2026-10-16",
      "publication_date": "Not established"
    },
    {
      "id": "getting",
      "title": "Querying data",
      "url": "https://partnerhub.pbsdealers.com/getting",
      "checked_on": "2026-10-16",
      "publication_date": "Not established"
    },
    {
      "id": "changing",
      "title": "Changing data",
      "url": "https://partnerhub.pbsdealers.com/changing",
      "checked_on": "2026-10-16",
      "publication_date": "Not established"
    },
    {
      "id": "notification",
      "title": "NotificationChange metadata",
      "url": "https://partnerhub.pbsdealers.com/json/metadata?op=NotificationChange",
      "checked_on": "2026-10-16",
      "publication_date": "Not established"
    }
  ],
  "claims": [
    {
      "id": "authorization",
      "area": "Access",
      "source_id": "basics",
      "finding": "PartnerHub describes HTTPS authentication and account access limited to authorized dealership SerialNumbers.",
      "freshness": "Public documentation only; live behavior untested.",
      "proposed_requirement": "Verify approved accounts, dealership mapping and revoked-access behavior before any data access."
    },
    {
      "id": "queries",
      "area": "Read scope",
      "source_id": "getting",
      "finding": "Get requests require SerialNumber; empty criteria are ignored.",
      "freshness": "Public documentation only; live behavior untested.",
      "proposed_requirement": "Require explicit local filters and field allowlists; confirm pagination, change cursors and deletion handling."
    },
    {
      "id": "queued-changes",
      "area": "Queued writes",
      "source_id": "changing",
      "finding": "The ARISTOGOLD description queues changes for roughly minute-level processing.",
      "freshness": "Undated legacy description; current behavior unconfirmed.",
      "proposed_requirement": "Separate acceptance from committed state; agree on read-back confirmation and timeout handling."
    },
    {
      "id": "matching",
      "area": "Record matching",
      "source_id": "changing",
      "finding": "Changes match records or create new ones; omitted or empty update fields are ignored.",
      "freshness": "Undated legacy description; current behavior unconfirmed.",
      "proposed_requirement": "Confirm identifiers and field-clearing rules. Test failed matches and replay without creating duplicates."
    },
    {
      "id": "response",
      "area": "Failure signals",
      "source_id": "notification",
      "finding": "The sample pairs HTTP 200 with WasSuccessful:false.",
      "freshness": "Public documentation only; live behavior untested.",
      "proposed_requirement": "Check operation-specific response bodies and errors; never infer success from HTTP status alone."
    },
    {
      "id": "notification-direction",
      "area": "Event direction",
      "source_id": "notification",
      "finding": "NotificationChange is a request sent to PBS, not evidence of outbound webhooks.",
      "freshness": "Public documentation only; live behavior untested.",
      "proposed_requirement": "Obtain a separately documented event contract before promising push notifications."
    }
  ],
  "unknowns": "Current product/version applicability, approved operations and fields, sandbox access, fees, rate limits, delivery guarantees, idempotency and support SLA remain unconfirmed.",
  "proposed_acceptance": "In an authorized test environment, demonstrate allowed and denied dealership reads, scoped queries, duplicate-free replay, empty-field behavior, body-level failures and delayed read-back. Record observed latency and quoted cost; set acceptable budgets with the owner before implementation. These checks have not run."
}
