Snapshot & Tracking

Track the outstanding updates from a snapshot, along with any discrepancies that result

Here we explore a simplified sample workflow for identifying the status of a snapshot's changes using the tracking endpoint(s).

Step 1: Send Snapshot

First, send a snapshot to Noyo:

curl --request POST \
     --url https://fulfillment.noyo.com/api/v1/groups/{group_id}/member_snapshots

You'll receive the ID of the created snapshot:

{
  "id": "7bea80ac-499d-560b-5512-60be9e2349cb",
  "created": 1656030390,
  ...
}

If you use webhooks, you'll receive difference.created events for every change or update in the snapshot.


Step 2: Retrieve differences

We then call the tracking endpoint to retrieve a field-level list of differences associated with the snapshot. These differences will either be pending changes introduced by the snapshot, or discrepancies raised during round-trip confirmation. They can be pulled at any time and will always reflect their real-time status.

For this example, we'll assume your snapshot included one new item– enrolling a dependent in vision coverage.

Call the differences endpoint using the snapshot ID as a query parameter:

curl --request GET \
     --url https://tracking.noyo.com/api/v1/differences?member_snapshot_id=7bea80ac-499d-560b-5512-60be9e2349cb

The response returns one difference (pending change)– the carrier doesn't have an enrollment in the snapshot (that's what is being processed)

[
  {
    "id": "da5ec83e-450f-4eee-ad6c-8b6d60d41b88",
    "resolved": null,
    "discrepancy_time": null,
    "group_id": "a1b6fe36-ccc5-41e3-bcc0-e6488d7e031e",
    "carrier_id": "2d370e0e-fd73-45e0-8828-796d2cacaeef",
    "employee_id": "a9c01d76-019c-4c44-b414-a832246c014d",
    "object_type": "dependent",
    "object_id": "d0e180e6-fafc-441e-8ac4-08d9a9fe4657",
    "impact_score": 5,
    "difference_classification": "missing_from_carrier",
    "difference_type": "missing_ie",
    "sources": [],
    "fields": [
      {
        "key": "object",
        "platform_value": {
          "individual_id": "d0e180e6-fafc-441e-8ac4-08d9a9fe4657",
          "line_of_coverage": "vision",
          "member_first_name": "Jade",
          "member_last_name": "Cornwall",
          "member_type": "dependent",
          "plan_id": "9302a1db-bed5-4be6-96f5-c51371cc96a3"
        },
        "carrier_value": null
      }
    ]
  }
]


Step 3: Track over time

Fast forward a day or two. The carrier has enrolled the dependent successfully, but with a later effective date due to their rules and limitations. The tracking endpoint will surface this information. Let's call it again:

curl --request GET \
     --url https://tracking.noyo.com/api/v1/differences?member_snapshot_id=7bea80ac-499d-560b-5512-60be9e2349cb

We now get an updated response. The original difference is now marked as resolved, meaning the carrier successfully enrolled the dependent. There's a new discrepancy raised noting the difference in effective start date. (some payload fields omitted for brevity)

[
  {
    "id": "da5ec83e-450f-4eee-ad6c-8b6d60d41b88",
    "resolved": 1708295864,
    "discrepancy_time": null,
    "impact_score": 5,
    "difference_classification": "missing_from_carrier",
    "difference_type": "missing_ie",
    "fields": [
      {
        "key": "object",
        "platform_value": {
          "individual_id": "d0e180e6-fafc-441e-8ac4-08d9a9fe4657",
          "line_of_coverage": "vision",
          "member_first_name": "Jade",
          "member_last_name": "Cornwall",
          "member_type": "dependent",
          "plan_id": "9302a1db-bed5-4be6-96f5-c51371cc96a3"
        },
        "carrier_value": null
      }
    ]
  },
  {
    "id": "95b8611b-15f6-46c6-8bb1-353dcd52e3fb",
    "resolved": null,
    "discrepancy_time": 1703098579,
    "impact_score": 4,
    "difference_classification": "field_mismatch",
    "difference_type": "ie_effective_start_date",
    "fields": [
      {
        "key": "effective_start_date",
        "platform_value": "2024-08-22",
        "carrier_value": "2024-09-01"
      }
    ]
  }
]


If you use webhooks, you will have received a few events along the way:

  • For the dependent enrollment, a difference.resolvedevent (in addition to the original creation event)
  • For the effective date discrepancy, both a difference.created and difference.discrepancy event
  • For the snapshot, both a member_snapshot.status_change event and a member_snapshot_carrier_fulfillment_status.status_change event