Why Did NexHealth Disable My Webhook Endpoint After 48 Hours of Errors?

NexHealth can disable a webhook endpoint after it continues returning errors for 48 hours. Its webhook documentation says non-2xx responses trigger retries. If those errors continue across that period, NexHealth sets the endpoint’s active state to false and stops sending webhooks to it.

Repair the receiver before reactivation. Confirm HTTPS delivery, request validation, durable acknowledgement, and the endpoint’s response path. Then inspect the endpoint and its needed subscriptions, set the intended resource active through the documented update operation, and reconcile the affected business window independently. Reactivation does not by itself prove that events from the inactive period were replayed.

Why did NexHealth set the endpoint to inactive?

NexHealth’s Webhook Endpoints reference describes a fail-safe for receivers that keep returning errors. A response outside the 2xx range is treated as unsuccessful and retried. If the endpoint continues producing errors for 48 hours, NexHealth changes the endpoint’s active property to false and stops sending webhooks to it.

This is endpoint transport state, not a statement about whether the connected EHR is healthy. A NexHealth sync can be green while the webhook receiver is inactive. It can also be red while the endpoint itself still accepts deliveries. Monitor those boundaries separately.

The article on NexHealth sync-status webhook direction covers the read and write health signals, including the current documentation conflict for write events. Endpoint deactivation answers a different question: whether NexHealth will attempt to deliver subscribed webhook events to a registered URL.

Do not reactivate immediately to silence an alert. If the receiver still returns errors, the incident continues and the same protection can apply again. First identify why the endpoint could not acknowledge accepted requests.

Which responses count as errors?

The mapped NexHealth documentation defines success by the HTTP response class. A 2xx response is successful; a non-2xx response triggers retry behavior. That makes the response path a control boundary. The handler should not return success before it has completed the local step required to avoid losing the event.

The exact durable step belongs to the integration design. It may be a committed database record or an accepted message in a durable queue. NexHealth does not require one storage product in these sources. The important distinction is that an in-memory task is not durable merely because the endpoint returned 2xx.

At the same time, do not hold the HTTP request open while running every downstream workflow. A short receiver can validate the request, store the event safely, return the appropriate response, and let a worker perform the slower action. This is operational guidance based on the documented acknowledgement and retry boundary.

NexHealth’s behavior differs from the contract described in Zocdoc’s HTTP 500 webhook handling. Do not reuse one vendor’s retry assumptions for another vendor.

What should be inspected before reactivation?

Start with the current endpoint record. NexHealth provides an operation for listing webhook endpoints, including active-state filtering, and an update operation for changing an endpoint. Confirm that the URL, environment, secret configuration, and intended active state match the receiver that was repaired.

Then inspect the subscriptions attached to the endpoint. An active endpoint and an active subscription answer separate questions. The endpoint determines whether the destination can receive deliveries. The subscription determines which event stream is attached to that destination. The documented subscription update surface includes its own active state.

Do not assume that toggling one resource silently repairs the other. Record the endpoint identifier, subscription identifiers, environment, previous states, approved change, and verification result. Avoid patient payloads. NexHealth warns that webhook events may contain PHI, while this recovery record needs only technical configuration.

If scheduling behavior is also failing, inspect that path separately. NexHealth appointment acceptance outside working hours explains why API acceptance and valid available-slot selection are not the same proof.

How should the receiver be repaired safely?

Repair the narrow cause before changing active. Confirm the public HTTPS endpoint resolves to the intended service, the route accepts the expected method, the receiver can validate the configured secret, and the durable acknowledgement path works when a dependency fails or recovers.

  1. Keep the endpoint inactive while the failing route is under repair.
  2. Test request validation with synthetic, non-patient content.
  3. Prove that accepted events reach durable storage before acknowledgement.
  4. Prove that a rejected request returns the intended non-2xx response.
  5. Confirm workers process repeated test events idempotently.
  6. Inspect endpoint and required subscription states.
  7. Reactivate only the approved resources through the documented update operations.

Do not print a webhook secret or full request body during testing. Store secrets in the approved secret manager and use a technical event fingerprint for correlation. Patient names, contacts, reasons, notes, insurance details, and clinical text do not belong in general observability.

A healthy receiver also needs bounded downstream failure handling. If a worker cannot apply an accepted event, keep the event visible for retry or review. Returning 2xx transfers recovery responsibility to the local system.

Does reactivation replay the missing window?

The mapped endpoint pages explain retries, automatic deactivation, active-state inspection, and reactivation. They do not promise that changing active back to true replays every event that occurred while the endpoint was inactive. Treat replay as unproven unless NexHealth supplies a separate current contract for the event and account.

This does not mean that replay never occurs. It means the reactivation response is not sufficient evidence. Build a bounded reconciliation interval from the last trusted processed event through the point when live delivery is verified again. Compare current source state with local state through approved identifiers.

Do not blindly recreate every appointment or resend every message from that interval. An operation may have succeeded through another path, and unconditional replay can create duplicates. The guide to preventing duplicate appointment reminders shows one downstream effect of applying the same scheduling event twice.

Preserve the original appointment lineage during recovery. An event applied after reconciliation is not a new acquisition. Keep the original source and later technical recovery state in separate fields.

How can live delivery be verified after reactivation?

Use an approved non-production environment or a synthetic event that cannot affect a real patient. After reactivating the intended endpoint and subscription, generate one supported test condition, observe the request at the receiver, verify it passes authentication, and confirm the worker reaches the expected technical state.

A 2xx response proves only that the receiver acknowledged that request. Add evidence from durable receipt and downstream completion. Record the endpoint, subscription, event class, one-way fingerprint, receipt time, response class, processing result, and environment.

Also test repeated delivery. The receiver should recognize an already accepted event or make the resulting state idempotent. It should not create another appointment, notification, or conversion merely because the same technical event arrived again.

If availability is involved, verify it through the appropriate API rather than inferring it from webhook traffic. NexHealth availability with an apparently open EHR calendar covers working hours and appointment-type assignment. Webhook recovery does not repair those inputs.

What should monitoring alert on?

Monitor both delivery symptoms and configuration state. Alert on sustained non-2xx responses, endpoint state changing to inactive, an expected subscription becoming inactive, and absence of expected technical events during a period when the business flow is active. Silence alone is not enough without activity context.

Keep EHR sync health beside, but separate from, webhook endpoint health. A useful dashboard shows endpoint active state, required subscription states, recent response classes, durable processing outcomes, and current read and write sync status. One green indicator should not hide another failed boundary.

Resource identity matters as well. When reconciling availability, do not collapse two operatories into one because they share a time. The article on NexHealth operatory identity for the same available time explains that scheduling scope.

Close the incident only after the receiver is stable, intended resources are active, a controlled live delivery completes, and the bounded gap has been reconciled. The active flag is necessary evidence, but it is not the whole recovery proof.

Frequently Asked Questions

What makes NexHealth retry a webhook?

The mapped documentation says NexHealth retries when the endpoint returns a response outside the 2xx range. Repair the response path rather than assuming an error response will remain harmless.

When does NexHealth disable the endpoint?

If endpoint errors continue for 48 hours, NexHealth sets the endpoint’s active state to false and stops sending webhooks to that destination.

Does setting active to true replay missed events?

The mapped pages do not promise complete replay for the inactive window. Reactivate the repaired resources, verify new delivery, and reconcile the gap independently.

Should webhook payloads be copied into application logs?

No. NexHealth warns that webhooks may contain PHI. Log technical identifiers, validation outcomes, response classes, and processing state without copying patient or clinical content.

References

Why Is a Zocdoc Visit Reason Unbookable Even Though It Is in allowed_visit_reason_ids?

A Zocdoc visit reason can remain unbookable even when its ID appears in allowed_visit_reason_ids because excluded_visit_reason_ids takes precedence. If the same identifier appears in both fields, the exclusion wins. When both populated arrays contain the same complete set, the timeslot allows no visit reason and cannot be booked.

Fix the conflict in the slot eligibility data, not in the clinic’s EHR mapping or patient workflow. Retrieve the current Zocdoc identifier, compare both arrays, confirm the intended provider, location, and patient type, then publish a corrected complete provider-day. Do not remove an exclusion merely because its label looks familiar.

Why does the excluded list win?

Zocdoc’s Create Timeslots guide defines the relationship directly. allowed_visit_reason_ids limits which reasons may use a slot, while excluded_visit_reason_ids names reasons that may not use it. When an identifier appears in both, the excluded list supersedes the allowed list.

This is a precedence rule, not a merge conflict that the booking client may resolve. A reason in both arrays is not partly eligible, conditionally eligible, or eligible because the allow list was processed first. The final answer for that reason is excluded.

The rule also explains the most confusing failure case. Suppose a slot’s allowed list contains the same populated set as its excluded list. Every allowed candidate is then removed by the higher-priority exclusion. The slot has no eligible visit reason, so the patient cannot book it through that configuration.

Keep this boundary separate from mapping Zocdoc visit reasons to EHR appointment types. A correct local mapping cannot override a Zocdoc slot exclusion. Eligibility must pass before the integration selects any EHR destination.

What do null and empty arrays mean?

The two fields do not use emptiness in the same way as a populated list. Zocdoc documents a null or empty allowed_visit_reason_ids value as no allow-list restriction. It does not mean that zero reasons are allowed. A null or empty excluded_visit_reason_ids value means that no reason is excluded by that field.

Allowed field Excluded field Eligibility result
Null or empty Null or empty No restriction from either list
Populated Null or empty Only listed allowed reasons qualify
Null or empty Populated Reasons qualify except those excluded
Populated Populated Apply the allowed set, then remove every excluded reason

Do not normalize null or empty allowed values into an empty mathematical set without preserving this vendor meaning. That transformation can turn an unrestricted slot into an unbookable one. Likewise, do not delete the excluded field during serialization merely because the allowed field exists.

How should the effective reason set be calculated?

Calculate eligibility with one explicit rule. Begin with the reasons permitted by the allowed field. If that field is null or empty, begin with the applicable Zocdoc reasons for the scheduling context. Remove every reason named in the excluded field. The remainder is the effective bookable set for that slot.

This description does not authorize the integration to invent the universe of applicable reasons. Use Zocdoc reference data and the approved provider context. The Reference Data guide supplies Zocdoc-specific IDs, and the glossary defines how allowed and excluded reasons behave. Local labels are reviewer aids, not substitutes for identifiers.

A compact diagnostic record can preserve the slot’s technical identifier, provider, location, patient type, allowed IDs, excluded IDs, and computed result. Keep patient names, contact details, visit notes, and clinical text out of this record. The question is slot configuration, not patient history.

Once eligibility succeeds, the local appointment-type mapping is a separate gate. The article on appointment source versus marketing source explains another separation worth preserving: neither an acquisition field nor a campaign label should change which visit reason a slot accepts.

Why can a valid ID still fail?

A valid Zocdoc ID proves that the referenced visit reason exists in the vendor’s reference data. It does not prove that every provider, location, patient type, or timeslot accepts that reason. Validity and eligibility answer different questions.

Start by retrieving or confirming the identifier through the current reference-data surface. Then inspect the exact timeslot object involved in the failed booking. Compare the reason against both eligibility arrays. A reason may be valid globally yet absent from a populated allowed list, present in the excluded list, or both allowed and excluded.

Do not diagnose this by comparing display names alone. Two labels can look similar while representing different IDs or scheduling scopes. Conversely, a label may change while the integration contract still depends on the ID. Preserve both for review, but make the technical decision with the documented identifier.

If the reason is eligible for the slot but booking still fails, move to the next boundary. Check the clinic-owned mapping, destination availability, and request contract. The guide to availability that looks open in an EHR but returns no slots shows why visible calendar space is not enough to prove end-to-end eligibility.

How should a conflicting slot be corrected?

Correct the source rule that produced the conflict. First decide whether the visit reason should be admitted for the exact provider, location, date, time, and patient type. If it should be admitted, remove the unintended exclusion. If it should not, remove the misleading allowance or leave the exclusion as the governing rule.

  1. Confirm the current visit-reason ID through Zocdoc reference data.
  2. Locate the exact provider-day snapshot that generated the slot.
  3. Compare the reason against both arrays before serialization.
  4. Resolve the clinic rule that created the contradiction.
  5. Recompute every slot for that provider and date.
  6. Validate that each slot has the intended effective reason set.
  7. Publish one complete corrected provider-day.

The final step matters because the Zocdoc timeslot operation replaces availability for one provider and date. The article on Zocdoc provider-day replacement behavior explains why sending only the corrected slot can remove valid slots omitted from the request.

Do not treat removal from an exclusion list as harmless cleanup. It changes what patients may book. Require the same operational approval used for provider availability and appointment-type rules, then record the rule version without copying patient data.

What checks should run before publication?

Run a deterministic eligibility check on every generated slot. Confirm that all populated IDs exist in current reference data, detect duplicates, compute the final set with exclusion precedence, and reject a slot whose final set is empty when the clinic intended it to be bookable.

The check should distinguish an intentional restriction from an accidental contradiction. A slot may correctly exclude one reason while admitting others. The failure worth blocking is a mismatch between the approved scheduling rule and the computed output, not the mere presence of an excluded list.

Test the main combinations with synthetic configuration. Cover unrestricted fields, allowed-only, excluded-only, partial overlap, and complete overlap. For partial overlap, verify that only the overlapping reason is removed. For complete overlap, verify that the slot is recognized as having no eligible reason.

Also test the corrected full-day publication. Confirm that unrelated slots remain present and the target reason becomes bookable only where approved. If appointment actions are part of the test, use synthetic records and follow the documented boundary for Zocdoc cancellation and reschedule webhooks.

How should this failure be monitored?

Monitor the effective eligibility result, not only the presence of values in the two source fields. An alert that says “reason appears in allowed list” misses the precedence rule. A useful signal says that a provider-day contains a slot whose computed set is empty or differs from the approved rule.

Record technical scope, list hashes or identifiers, computed count, validation result, rule version, and publication result. Do not place full appointment payloads or patient data in general logs. When the same configuration repeatedly returns, trace the upstream rule generator instead of patching each serialized payload.

After correction, verify the current slot behavior. A successful request proves acceptance of the submitted payload, not that the business rule was correct. Keep the operational verification separate from later appointment status updates such as the Zocdoc no-show reporting window.

Frequently Asked Questions

Does allowed_visit_reason_ids override an exclusion?

No. Zocdoc documents that the excluded list takes precedence. A visit-reason ID present in both arrays remains excluded from that timeslot.

Does an empty allowed_visit_reason_ids array block every reason?

No. The documented behavior treats a null or empty allowed list as no allow-list restriction. Apply any populated excluded list separately.

What happens when both arrays contain the same reasons?

Every candidate admitted by the allowed list is removed by the excluded list. The slot then has no eligible visit reason and is unbookable.

Can an EHR appointment-type mapping make the reason bookable?

No. The local mapping runs after slot eligibility. It can select an approved destination for an eligible reason, but it cannot override Zocdoc’s exclusion rule.

References

Why Was the Clinic’s Google Business Profile Verification Video Rejected?

A clinic’s Google Business Profile verification video is rejected when it does not show the required evidence in one acceptable recording: the real location, the business’s permanent presence, and the recorder’s authority to manage it. Review the stated issue, clear the clinic of patients and private material, then record a new live video.

The video must be continuous, unique, at least 30 seconds long, and recorded through the Business Profile on a mobile device. Never film patients, other people’s faces, charts, screens, IDs, forms, mail, or sensitive documents. Google permits non-sensitive business documents as management evidence in applicable flows, but a clinic can usually prove control through safe physical access with less privacy risk.

Why was the clinic’s verification video rejected?

Google lists practical rejection examples: the business name was not visible on the storefront, the nearby area was missing, or the recording did not prove authority to operate the business. A polished tour cannot compensate for one missing category. The reviewer needs connected evidence that matches the profile being verified.

Start with the notice under Review issues. Treat each listed problem as a required correction. Keep everything that was clear in the first attempt and add the missing evidence in the new recording. Do not edit the old file or upload a prerecorded replacement. Google requires a fresh live recording through the profile.

A video rejection does not mean the clinic should create another Business Profile. It also does not establish suspension, duplicate status, or ineligibility. Those are different states with different remedies. Verify the exact message before changing the profile’s name, category, or address.

If the profile’s appointment link has a separate problem, use the guide to why Google removed a clinic appointment link. Link review and business verification should remain separate investigations.

What must a storefront clinic show in the new recording?

A storefront clinic should connect three facts in one continuous route. First, show the real surroundings with a street sign, building number, nearby business, or recognizable place. Second, show the clinic’s name on permanent signage. Third, show that the recorder is authorized to manage the location through access that an ordinary visitor would not have.

The name on the permanent sign should match the Business Profile. A temporary paper taped to a door is weak evidence of a permanent presence. If the clinic shares a building, include enough exterior context to locate the correct suite without sweeping the camera across other people’s private activity.

For management proof, prefer a safe physical action. An authorized employee can unlock the clinic entrance or open a staff-only room after confirming that it is empty. Google also allows non-sensitive business documents in applicable cases. If one is needed, inspect every visible field first and exclude personal, clinical, financial, or confidential information.

Clinic structure matters before verification. A medical office may have a location profile and eligible practitioner profiles. Read who controls a Business Profile booking link to understand ownership boundaries, then confirm that the video and account belong to the same entity.

How can a clinic record safely without patients or documents?

Schedule the recording when the premises are closed to patients and visitors. Tell staff not to enter the route. Clear whiteboards, sign-in areas, delivery labels, wall schedules, patient materials, mail, and loose private paper from the camera’s view. Turn monitors off rather than trying to blur them later, since the video cannot be edited.

Walk the route before opening the recorder. Begin outside with location evidence, move to the permanent business sign, then demonstrate controlled access. Keep the camera aimed narrowly. Stop and restart the whole process if a person, private document, screen, or confidential conversation enters the frame.

Do not ask a patient to appear, even with permission. Do not use a patient chart or appointment list as proof that the clinic operates. The official requirement is proof of the business and the recorder’s management authority. Patient information adds no useful verification value.

The same restraint applies after verification. The article on safe clinic responses to Google reviews explains why public profile management should avoid confirming a person’s relationship with the practice.

Can the clinic choose a different verification method?

Not on demand. Google says it automatically determines the methods offered to a Business Profile, based on factors such as business type, public information, region, and business hours. The available options can include video, phone or text, email, live video call, or mail. Some profiles may need more than one method.

Use the options shown in the profile. If video is available and the first recording failed, select Review issues and follow the listed corrections. If another method is offered, the clinic can use that displayed route. Support cannot be treated as a shortcut for inventing an option that the profile does not offer.

Keep verification codes private. Google states that it will not ask the business to share a code. An agency or vendor should receive manager access after ownership is established, rather than controlling the clinic through a personal account or asking staff to forward codes.

Changing the business name, address, or category while troubleshooting can trigger more review or re-verification. Make only corrections that reflect the real clinic. Do not reshape the profile to chase a supposedly easier verification method.

How should the clinic respond to “Review issues”?

Read every reason before recording again. Translate each issue into a visible scene. If the business name was missing, plan a clear view of permanent signage. If the nearby area was absent, add the building number and surrounding context. If management proof was missing, plan a safe staff-only access action.

Then create a short shot list without filming it. The recording itself must remain one unedited sequence. Confirm mobile location, camera, and microphone permissions before starting. Use a stable network and stay inside the Business Profile workflow so the recording can upload from the device.

After recording, review the preview for accidental private material. If anything appears, discard it and record again. Google allows a new attempt when the requirements were not met. A failed first video does not justify accepting privacy exposure in the second.

Google says review can take up to five business days. Wait for the stated result rather than making repeated profile edits during that period. If the second attempt fails, compare the new notice with the shot list and contact support only after the available verification route has been followed carefully.

What does verification prove, and what remains unproven?

Verification gives the clinic ownership of the Business Profile and supports accurate management of its public information. It does not prove that appointment links work, that a scheduling vendor writes to the correct calendar, or that calls and bookings came from a specific marketing source.

After approval, inspect the public profile in Search and Maps. Confirm name, location, phone, hours, website, and appointment action. If a former vendor still controls a link, follow the process for removing a third-party booking link rather than deleting every booking option.

Verification also does not authorize the clinic to send health-related details to analytics or advertising products. Keep URLs, event names, support screenshots, and campaign reports generic. Public profile ownership and data-use permission are separate decisions.

Do not report the video as acquisition proof. A successful verification tells the team that Google accepted the evidence of business control. It does not quantify visibility, calls, directions, appointments, new patients, or revenue.

How can the clinic avoid another verification failure?

Keep the Business Profile under a clinic-controlled account and assign named managers. Record the exact public name, address, category, permanent signage, and ownership contacts in an internal control note. Do not store verification videos in general marketing folders or forward them through informal channels.

Review access when staff, agencies, or vendors change. Re-verification can follow changes to business information, so plan evidence before editing high-impact fields. The physical sign, public profile, website, and booking destination should describe the same clinic entity.

Use a reusable privacy checklist for any future recording: empty premises, clear route, screens off, no people, no sensitive documents, and no private audio. If non-sensitive business evidence is needed, approve it before recording and expose only what the verification requires. The checklist can be retained. The video itself should be deleted through the profile when it is no longer needed and Google offers that control.

If the clinic has multiple locations, keep one evidence set per eligible profile. Do not reuse another branch’s exterior, sign, or staff access. Each verification should establish the location and management authority of the profile in front of the reviewer.

Frequently asked questions

Can the clinic upload a prerecorded or edited verification video?

No. Google requires a live, unique, continuous recording made and uploaded from a mobile device through the Business Profile. If the route fails or private material appears, discard it and make a new complete recording.

Should a patient appear to prove the clinic is operating?

No. Keep patients and all other faces out of the video. Show the location, permanent signage, and safe staff-only control instead. A patient adds privacy risk and is not needed to prove management.

Can the clinic film a license, invoice, or schedule?

A patient schedule should never be filmed. Google can accept non-sensitive business documents such as a license or invoice as management evidence in applicable cases. For a clinic, prefer physical access when it proves control; if a document is necessary, confirm it contains no personal, clinical, financial, or confidential information.

Does video approval guarantee the appointment button will work?

No. Verification establishes control of the profile. The clinic still needs to test the public link, correct location, booking action, schedule write-back, privacy controls, and marketing measurement separately.

References

Why Did a validateOnly Clinic Event Request Pass but No Conversion Appear?

A clinic event request can pass with validateOnly=true and still produce no conversion because Google validates the request without executing it. That response is a dry-run result. It does not ingest the event, start destination processing, create diagnostics, or establish that Google Ads will report a conversion.

Move to a real submission deliberately. Keep the approved test fixture, send a separate request with validation-only mode disabled, capture the new control evidence, and follow diagnostics and Ads reporting as separate stages. Technical validation also says nothing about whether a healthcare event is eligible for an advertising destination.

What did the successful validateOnly response actually prove?

It proved that Google accepted the request for validation and did not return a blocking validation error at that gate. The Data Manager API reference states that when validateOnly is true, the request is validated but not executed. No changes are applied. That is the whole promise.

This mode is useful before a release because it can reveal request problems without applying the event. It is not a preview of a future conversion row. A valid shape can still be ineligible for the selected advertising use, fail later processing after a real submission, or never meet the reporting conditions of a conversion action.

Do not label the dry run as sent, uploaded, delivered, or converted. Use a state such as validation passed. The distinction should also appear in the server-side Data Manager architecture for clinic forms, so dashboards cannot combine a test with actual outbound work.

How do validation, execution, diagnostics, and reporting differ?

Validation checks the submitted request without applying its changes when validation-only mode is enabled. Execution begins only when the integration sends a real request. Diagnostics describe downstream processing for eligible successful requests. Reporting is the later Google Ads outcome. Each stage answers a different operational question.

A clean validation response answers, “Did this dry-run request pass the checks applied at this gate?” A real ingestion response answers, “Did Google accept this request for execution?” Diagnostics answer, “What happened while the named destinations processed it?” Google Ads reporting answers whether a corresponding conversion became visible under that product’s settings and attribution rules.

These stages should have separate timestamps and statuses. If a team uses one green badge called API success, a dry run can look identical to an executed request. That is how a technically accurate response becomes an operationally false success.

The same evidence discipline appears in the guide to what an Enhanced Conversions for Leads audit can prove. A useful status describes its boundary, not the outcome an operator hoped to see.

Why are there no diagnostics for the validation-only request?

Google’s diagnostics guide excludes requests sent with validate_only=true. Diagnostics exist for requests that succeeded and were actually submitted for processing. A dry run creates no destination work to follow, so repeatedly querying diagnostics cannot turn it into an executed event.

This absence is expected behavior, not evidence that the diagnostics service is delayed. Check the original outbound control record. If the flag was true, stop waiting for a downstream result. Correct any issues found during validation, then create a separate real request under the approved release path.

Do not reuse the dry-run state as proof for the real call. The executed request needs its own response and identifiers. If a library, job runner, or deployment environment sets validation-only mode by default, make that setting visible in the release checklist. An invisible default is easy to leave enabled.

Compare this case with a fast-fail Data Manager request. Fast-fail rejects the request because validation found a blocking error. Validation-only success intentionally stops before execution even though the validation gate passed.

How should the team move from dry run to real submission?

Start with the exact request builder and synthetic fixture that passed validation. Review the outbound configuration, then send a new request with validateOnly false or omitted. Treat this as a separate operation. Record its time, environment, destination, sender version, response status, and request identifier when provided.

  1. Confirm that the event type and destination passed the clinic’s policy review.
  2. Use synthetic data that contains no patient identity, contact detail, appointment note, treatment, or free text.
  3. Run the validation-only request and resolve any returned errors.
  4. Check the release configuration that controls validation-only mode.
  5. Send a separate real request with the flag disabled.
  6. Inspect the real response, including warnings rather than only its HTTP status.
  7. Follow the executed request through diagnostics when available.
  8. Check Google Ads reporting under the correct action, goal, and date interpretation.

Do not mutate a failed source record merely to make it pass. Fix the serializer or approved mapping at its source, rerun the synthetic check, and rebuild the outbound request. A production event should not be repaired by adding health-related values that the destination never needed.

What evidence belongs in the outbox and monitoring logs?

Keep control evidence, not event contents. Useful fields include operation type, validation-only state, sender version, destination, attempt time, response class, warning codes, request identifier, diagnostic state, and final reporting reconciliation. That record lets an operator distinguish dry run, execution, processing, and reporting without opening the payload.

Do not paste request bodies into logs, tickets, chat, or screenshots. Avoid names, email addresses, phone numbers, appointment times tied to a person, visit reasons, treatment details, and free text. Synthetic fixtures should be visibly artificial and isolated from real schedules or CRM records.

An offline conversion outbox report can expose these technical stages to agencies and clinic operators. It should never imply that a request was delivered simply because validation passed. A useful report makes the missing execution step obvious.

Keep retry controls separate too. A dry run should not enter the delivery retry queue because it did not attempt delivery. A real request with a client error needs correction before retry. A request accepted for processing follows the diagnostic path instead.

Why is policy eligibility separate from API validation?

Data Manager validates the technical request contract. It does not issue legal advice or decide that a clinic may use a particular event for advertising. A request can be structurally valid while the event remains disallowed, unapproved, excessive, or unsuitable for the chosen destination.

Place the eligibility decision before serialization. Define which generic events may leave the clinic system, which destination may receive them, and what fields are permitted. If that review has not approved the event, do not use validateOnly as a safe harbor. Even a dry run sends a request to an external API.

Hashing does not convert an ineligible clinic event into an eligible one. The article on why hashing does not establish eligibility explains that technical transformation and permission are different questions.

Document the policy gate outside the transport code, then enforce it in the live call path. Validation tests the format of an event that has already cleared that gate. It must never become the process that decides whether sensitive clinic data can be sent.

How do you troubleshoot “passed but no conversion” without guessing?

Read the actual outbound record first. Confirm whether validateOnly was true. If it was, the immediate cause is complete: the request was not executed. Do not spend time changing attribution windows, goals, or tags until a real request exists.

If the flag was false or omitted, move to the next evidence layer. Inspect the real response, then diagnostics for that request. Only after destination processing should the team reconcile Google Ads reporting. Keep conversion action, account, goal inclusion, and reporting date in scope, but do not use those settings to explain a request that never executed.

Check every place that can set the flag: configuration, environment variables, request wrapper, test harness, scheduled job, and retry path. One wrapper may force validation-only mode even when application code asks for a real submission. Prove the value at the final API call without logging the event body.

End the incident with a focused regression check. It should show that a dry run remains nonexecuting and that the approved real path disables the flag. Keep the test synthetic. The goal is to prove control behavior, not create a clinic conversion for a real person.

Frequently asked questions

Does HTTP 200 on validateOnly mean the event was ingested?

No. With validation-only mode enabled, Google validates the request but does not execute it. The response can be successful while no event is ingested and no conversion can result from that call.

Can I retrieve diagnostics for the dry-run request?

No. Google’s diagnostics guidance excludes requests sent with validate_only=true. Send a separate real request after approval and use the evidence from that executed operation.

Should the production request reuse the dry-run result?

No. It may reuse the reviewed request builder and synthetic test logic, but the real submission is a new operation. Capture its own response, request identifier, diagnostics, and reporting outcome.

Does passing validation prove the clinic event is allowed in Google Ads?

No. Validation checks the API request, not legal permission or product-policy eligibility. Complete those reviews before the event enters the outbound pipeline, then test only the approved generic data contract.

References

Does a Regional Cloud SQL Instance Keep Its Backups in the Same Region?

For Cloud SQL standard backups, a regional database instance does not keep its backups in that same region by default. Google Cloud stores the instance data in the instance’s region, but places backups in the geographically closest multi-region when no backup location is specified. An exact-region requirement needs an explicit regional backup location.

Changing that setting is prospective. Existing backups remain in their original locations, so a correct setting today does not prove that older copies share it. A defensible residency review must inventory every backup, its location, the backup option in use, organization-policy constraints, exports, and recoverable copies after instance deletion.

Why does a regional Cloud SQL instance have multi-region backups?

Google Cloud distinguishes the location of instance data from the storage location of standard backups. Its PostgreSQL FAQ says instance data is stored in the region where the instance resides. If no backup storage location is supplied, backups go to the multi-region geographically closest to that instance.

That default supports availability goals, but it does not preserve an exact regional boundary. A multi-region is a different location class from a named region. An architecture diagram that labels only the database region therefore omits a material storage fact.

The same service-boundary issue appears in regional Google Cloud logging. A regional workload does not confer its location on logs or backups. Record each resource, location property, scope, and default separately instead of describing the whole project as regional.

Which Cloud SQL backup option does this answer cover?

This answer focuses on standard backups managed by Cloud SQL. Google documents standard backups alongside another option managed through Backup and DR. Those products have different resource models, policies, locations, recovery paths, and deletion behavior. A team must identify the selected option before applying a location rule.

Within standard backups, Cloud SQL supports automatic and on-demand backups. The custom-location instructions apply to both. High availability does not merge instance and backup locations either. Google says backups use the same location logic for high-availability and non-high-availability instances.

Do not infer the backup option from a console label or an old runbook. Capture the effective instance settings and list the actual backup resources. If Backup and DR is also configured, review its vaults and policies as a separate path rather than treating them as duplicates of standard backups.

How do you keep standard backups in the instance’s exact region?

Set a custom backup location to the approved region. Google Cloud allows a regional or multi-regional custom location for automatic and on-demand standard backups. For an exact-region requirement, choose the same named region as the instance and verify the saved effective setting.

The configuration can be managed through the supported console, command-line, API, or infrastructure-as-code surfaces described by Google. The evidence should record the project, instance, instance region, backup-location value, actor, time, and review approval. Avoid copying database contents into the change ticket.

Test with a new synthetic backup and inspect its Location field. A successful configuration update only proves that the service accepted a setting. It does not prove that a backup was created there, that older backups moved, or that exports use the same destination.

What happens to backups created before the location changes?

They stay where they were created. Google’s standard-backup instructions explicitly state that changing the backup storage location leaves existing backups in their original location. The new setting controls future backups. It is not a migration command.

Inventory old backups individually and record their location and retention state. Decide whether each copy may remain, must expire, or requires an approved deletion. Do not restore an old backup merely to inspect its contents. Location metadata and a synthetic restore rehearsal can often provide the needed technical evidence without exposing healthcare records.

Deletion is another independent boundary. The guide to restorable Google Cloud Storage objects explains why a delete request can leave other recoverable states in that service. Cloud SQL has its own backup lifecycle, so verify its documented backup list and retention behavior rather than borrowing Cloud Storage semantics.

How do organization location policies affect Cloud SQL backups?

A resource-location organization policy can restrict allowed locations. Google warns that a backup fails if its configured region is not allowed by the applicable organization policy. The documentation also says a backup in the same region as the instance succeeds with respect to that location constraint.

Policy is a guardrail, not a migration. It does not move existing backups into an allowed location. It also does not prove that every project inherited the intended rule or that other data paths use the same region. Check the effective policy at the project and test the backup job after any policy or location change.

Failure monitoring matters. A strict policy can stop a backup that still points to the default multi-region. The safer rollout order is to inventory current locations, approve the target, configure the regional backup location, create and verify a test backup, then enforce the policy. Preserve failed-job alerts so residency controls do not silently remove recoverability.

Which copies sit outside the standard backup setting?

The standard backup location governs the standard backups covered by that setting. It does not govern database exports written to Cloud Storage, downstream analytics stores, replicas, application caches, local downloads, support attachments, or independent Backup and DR resources. Each destination has its own location and lifecycle.

Message paths also need separate treatment. The article on Pub/Sub storage policies for single-region health workloads shows that a message policy constrains that service’s storage behavior, not a later database or object copy. Trace the complete approved flow instead of extending one product setting across the architecture.

Encryption keys add another location and access question. A customer-managed key can support access control, but it does not relocate a backup or authorize a destination. Record key resource, location compatibility, administrators, rotation, and recovery dependencies separately from the backup’s location.

What evidence supports an exact-region claim?

Use resource evidence, not account-level assumptions. A useful record names the instance, its region, backup option, effective backup location, every relevant backup ID, each backup’s Location value, organization-policy result, and downstream copies. It should also identify the time range covered by the conclusion.

  1. Confirm the Cloud SQL engine, edition, backup option, project, and owner.
  2. Record the instance region and effective standard-backup location.
  3. List automatic and on-demand backups with individual locations.
  4. Separate backups created before and after the configuration change.
  5. Check effective organization location constraints and failed jobs.
  6. Map exports, replicas, Backup and DR resources, and application copies.
  7. Test creation and restoration with synthetic data in approved locations.
  8. Document exceptions, owners, review dates, and deletion triggers.

The conclusion should remain narrow: named standard backups created after a specified configuration time were stored in the verified region. If older backups remain elsewhere or another backup option was not reviewed, state that limitation. Precision prevents a regional backup fact from becoming an unsupported claim about all project data.

Does regional backup placement prove HIPAA or GDPR compliance?

No. Location is one technical and contractual fact. HIPAA, GDPR, and other duties depend on the organization, roles, purposes, agreements, safeguards, transfers, retention, rights, and actual data flow. Some organizations choose an exact region because of law or contract, while others choose it as an internal architecture constraint.

Google’s BAA coverage is separate from configuration. A BAA can define covered services and shared responsibilities, but it does not select a backup location, inspect organization policy, remove old backups, or validate exports. The article on Google Cloud BAA product boundaries explains why agreement scope should not be stretched across products or customer settings.

Obtain legal and privacy approval for the required boundary, then ask cloud operators to prove the named configuration. Do not reverse that sequence by treating a console choice as the source of the legal requirement. A region toggle can implement a decision; it cannot make the decision or certify the whole system.

Frequently asked questions

Are Cloud SQL standard backups regional by default?

No. When no location is specified, Google stores standard backups in the geographically closest multi-region. A named instance region and its default backup location are therefore different facts.

Does changing the backup location move existing backups?

No. Google states that existing backups remain in their original locations. The changed setting applies to future backups, so older copies need their own inventory and disposition decision.

Can organization policy force a disallowed backup to another region?

No. Google says backups in a disallowed configured region fail. Policy should be paired with an approved backup location, job monitoring, and a tested recovery path rather than treated as automatic relocation.

Does putting Cloud SQL backups in one region make the workload compliant?

No. Regional placement can implement one approved requirement. Compliance still depends on legal scope, agreements, access, encryption, application behavior, retention, incident response, exports, and every other data copy.

References

Does Deleting an Amazon RDS DB Instance Delete Its Healthcare Backups?

Deleting an Amazon RDS DB instance does not necessarily delete its healthcare backups. The result depends on the deletion choices and the type of backup. Retained automated backups can preserve system snapshots and transaction logs until the configured retention window expires. Final and manual DB snapshots are independent and remain until someone deletes them.

A clean database list is therefore not proof that every recoverable copy disappeared. A defensible review separates the source instance, retained automated backups, final snapshots, manual snapshots, copied snapshots, and any backup path outside RDS. It also distinguishes a technical deletion result from HIPAA, contract, and record-retention decisions.

What happens to automated backups when an RDS DB instance is deleted?

Amazon RDS lets an administrator choose whether to retain automated backups when deleting a supported DB instance. If retention is selected, RDS keeps the automated backup for the remaining source retention period. If retention is not selected, AWS documents that automated backups are deleted with the DB instance.

The choice is important, but it covers only that backup class. It does not decide the fate of final or manual snapshots. It also does not inspect exported data, replicas, application copies, or backups managed through another service. Deleting the source is one event inside a larger data lifecycle.

Capture the request parameters and resulting resource state. The review of CloudTrail audit-log residency explains why an event record needs destination and retention context. A deletion event can identify who requested an action, while the RDS inventory shows what remained recoverable afterward.

What is inside a retained automated backup?

AWS says retained automated backups contain system snapshots and transaction logs from the deleted DB instance. They also preserve instance properties needed for restoration. Together, those materials can support point-in-time restoration to a point within the retention period that existed when the source instance was deleted.

The retained backup eventually expires because no new snapshots or logs are produced after deletion. Its components age out according to the source retention settings. That makes it different from a final snapshot, which AWS describes as independent and nonexpiring. Teams should not use one generic status called “backup retained” for both.

RDS provides a separate view and API operation for automated backups associated with deleted instances. Use that inventory after source deletion. A console page that lists no active DB instance cannot answer whether a retained automated backup still exists and can restore the data.

How do final and manual DB snapshots behave?

Final and manual DB snapshots are independent of automated backups. AWS states that they are not affected when the source DB instance is deleted. A final snapshot created during deletion does not expire. A previously created manual snapshot also remains until an authorized party explicitly deletes it.

This independence is valuable for recovery, but it creates a separate disposal boundary. Inventory snapshots by identifier, source, Region, account, creation path, encryption key, sharing state, and copy history. A snapshot copied to another Region or account is another resource with its own lifecycle. Deleting the original does not silently reach it.

Encryption does not change that inventory requirement. The article on AWS KMS deletion and HIPAA disposal evidence explains why key state alone cannot prove that plaintext, alternate keys, exports, or every storage copy became unavailable. Snapshot state and key state should be recorded separately.

Which RDS resources need a separate scope check?

The retained automated backup feature documented on the mapped AWS page applies to DB instances, not Multi-AZ DB clusters. That limitation matters because a console can present several RDS resource types under the same service name. An instruction written for a DB instance should not be assumed to describe a cluster.

Amazon Aurora and RDS cluster workflows have their own deletion and snapshot behavior. RDS Custom and backups managed through AWS Backup can also introduce different controls or limitations. This article does not generalize the DB-instance rule to those resources. Confirm the engine, deployment type, backup manager, and deletion interface before execution.

Use exact resource identifiers in approvals. “Delete the healthcare database” is too broad when the account contains a source instance, replicas, cluster snapshots, automated backups, copied snapshots, and recovery vaults. A narrow action reduces accidental loss while making the later evidence easier to interpret.

What should a pre-deletion review inventory?

Begin with the approved purpose. Offboarding, test-environment cleanup, privacy response, incident containment, and ordinary retirement do not automatically have the same retention decision. Legal and records owners should determine what may be removed before an operator changes an irreversible resource.

  1. Confirm the DB resource type, engine, account, Region, and owner.
  2. Record the automated-backup retention setting and deletion choice.
  3. List retained automated backups already associated with deleted instances.
  4. List final, manual, shared, and copied snapshots.
  5. Map replicas, exports, analytics stores, caches, and application copies.
  6. Record encryption keys and any alternate decryption path.
  7. Check legal holds, record-retention decisions, and restoration requirements.
  8. Approve the exact resources and expected post-action states.

Test the runbook with synthetic data in a separate environment. A rehearsal can show whether automation silently creates a final snapshot, keeps automated backups, or leaves copied resources. It can also expose permissions that allow source deletion but prevent cleanup of the retained backup.

How should the team verify deletion after the request succeeds?

Verification should inspect each backup class after the source enters its final state. Query active instances, retained automated backups, DB snapshots, copied snapshots, and the external destinations identified in the inventory. Record resource identifiers, states, timestamps, request identities, and exceptions without copying protected content into the evidence package.

If a retained automated backup exists, state its remaining recovery window and owner. If a final or manual snapshot remains, state why, who can restore it, and the approved deletion trigger. If an API refuses snapshot deletion because of current state or another dependency, keep the task open instead of treating the request as complete.

Retention settings can create misleading expectations elsewhere too. The guide to CloudWatch Logs retention changes shows why a configuration update and physical removal can occur at different times. For RDS, use the documented backup state rather than inferring disposal from the source deletion timestamp.

Does the AWS result prove HIPAA compliance or disposal?

No. AWS documentation explains service behavior. HIPAA obligations depend on the covered entity or business associate, the purpose, applicable safeguards, required records, contracts, and the real system boundary. Deleting one DB instance with a particular option neither certifies the application nor decides whether deletion was legally permitted.

A business associate agreement is also a separate control. It can allocate responsibilities and define covered services, but it does not choose RDS deletion options, enumerate snapshots, or verify downstream copies. The discussion of BAA limits in cross-tenant healthcare processing applies the same principle: contract status does not authorize every use or prove every technical safeguard.

State the conclusion narrowly. For example, the named DB instance was deleted, retained automated backups were absent or documented, specified snapshots were checked, and listed downstream copies received their own disposition. If any class remains recoverable, say so. Accurate scope is stronger evidence than a broad promise that cannot be tested.

How can backup deletion avoid destroying required records?

Separate the technical capability to delete from the authority to delete. Healthcare records can be subject to legal, regulatory, contractual, operational, or litigation-related retention. Privacy requests may also require a record-by-record analysis rather than removal of every database copy. The cloud operator should execute an approved decision, not invent it.

Where a retained copy is required, restrict access and secondary use. Keep the rationale, owner, review date, and deletion trigger. Do not restore a retained snapshot into an unrestricted environment merely to inspect it. Restoration testing should use approved controls and the minimum necessary data.

Cross-provider deletion mechanics can sharpen this discipline. The article on restorable Google Cloud Storage copies shows how soft deletion and versioning create distinct states. RDS uses different terms, but the operational lesson is the same: identify every recoverable state before making a permanent-deletion claim.

Frequently asked questions

Does deleting an RDS DB instance delete every automated backup?

It depends on the selected option. Without retention, AWS says automated backups are deleted with the DB instance. With retention, supported DB instances keep them until the remaining source retention period expires.

Does an RDS final snapshot expire automatically?

No. AWS describes final snapshots as independent from retained automated backups and says the final snapshot does not expire. It remains a recoverable resource until an authorized party deletes it.

Are manual snapshots removed with the source instance?

No. Manual snapshots are independent and are not affected by deletion of the source DB instance. Inventory manual, shared, and copied snapshots separately before claiming complete disposal.

Does choosing Delete in RDS make the healthcare application HIPAA compliant?

No. The choice controls a defined AWS resource workflow. HIPAA compliance also depends on legal scope, agreements, access, application behavior, retention, incident handling, and every other copy of the information.

References

Why Must a Zocdoc No-Show Update Be Sent Within Two Days?

A Zocdoc appointment can be updated to no_show only after its start time is in the past and while that start is no more than two days old. The Scheduling API documents this rule for PUT /v1/appointments/update-status. Once a record is outside that window, continuing the same request indefinitely is not a supported recovery strategy.

The practical fix is to process post-appointment outcomes promptly, surface stale records for review, and keep local reporting separate from the Zocdoc update result. Do not rewrite “two days” as a different unit or promise a particular error response that the cited guide does not document.

What does the update-status endpoint permit?

Zocdoc’s Appointment Actions guide describes PUT /v1/appointments/update-status as the endpoint for updating a booked appointment after its scheduled time. The documented post-appointment statuses are arrived and no_show.

The glossary defines no_show as a patient who did not appear for a confirmed appointment. That definition matters. A cancellation, reschedule, unconfirmed request, integration failure, or staff uncertainty should not be translated into a no-show merely because the original start time passed.

Use the appointment’s actual state and the source contract. The guide to which Zocdoc cancellation and reschedule changes trigger webhooks covers different lifecycle actions. A webhook about a changed booking is not evidence that a completed appointment should be marked no_show.

Keep the outbound request narrow. The status update needs the identifiers and status required by the API. Operational logs can record a synthetic appointment reference, attempted status, attempt time, response class, and final workflow state. They do not need a name, phone number, visit reason, insurance value, or clinical note.

Why does the no-show update have a two-day window?

The official Appointment Actions guide states the boundary: for a no_show update, the appointment start must be in the past but no more than two days old. This defines when the API action is permitted. The source does not explain a broader policy rationale, so an integration should not invent one.

Treat “two days” as the wording of the contract. Do not silently convert it into “48 hours,” end-of-day logic, clinic-local calendar days, or another threshold unless Zocdoc provides that interpretation for the integration. If an edge case matters, test it in the supported environment or ask Zocdoc for clarification.

The time restriction means status collection cannot be an unbounded background task. A queue that waits through repeated outages may eventually contain an appointment that is no longer eligible for the no-show call. Retrying the same payload forever will not make the appointment recent again.

Operational inference: calculate urgency from the scheduled start and current eligibility, while allowing room for transport failures and human review. Zocdoc documents the boundary, but it does not prescribe the clinic’s queue interval or escalation schedule.

How should arrived and no_show remain distinct?

Both values describe an outcome after the appointment time, but they are not interchangeable. arrived represents attendance; no_show represents the absence defined in the glossary. A delayed front-desk update does not make every unresolved appointment a no-show.

Build the decision from an authoritative operational event. That may be a completed check-in, a staff-reviewed disposition, or another clinic-approved signal. The integration should not infer absence from a missing webhook, a blank field, or a temporary inability to reach the source system.

Likewise, do not use no_show to repair a cancellation or reschedule mismatch. Preserve the appointment lifecycle and investigate its actual transition. The article on preserving original booking source after a reschedule explains why changing operational state should not erase acquisition lineage.

A stale local record can remain classified for internal review even if the vendor update is no longer eligible. That local state must be labeled honestly. “Observed by clinic, not confirmed updated in Zocdoc” is different from “Zocdoc status updated.”

What queue design respects the window?

Store post-appointment candidates with their scheduled start, current local outcome, vendor appointment identifier, and next action. When the approved source confirms a no-show, attempt the update while the documented time condition still holds.

Separate temporary delivery failure from contract ineligibility. A network interruption or retryable server response may justify another bounded attempt. A record that has aged outside the allowed window needs a terminal workflow state and human-visible explanation, not another automatic request.

  1. Confirm the appointment start is in the past.
  2. Confirm the clinic’s source supports the no_show outcome.
  3. Check that the start is no more than two days old.
  4. Send the status update with the required vendor identifier.
  5. Record success, retryable uncertainty, or stale review as different states.
  6. Stop automatic retries when the request is outside its supported window.

Do not assume webhook delivery will recover the task. The analysis of Zocdoc appointment webhooks after an HTTP 500 shows why inbound delivery behavior and outbound status updates need separate reliability controls.

What should happen after the window has passed?

Surface the item as stale. Preserve the clinic’s evidence and the last vendor response, but do not label the external update successful. The cited guides establish the eligibility boundary; they do not promise a specific error code or a late-update exception.

Human review can determine whether the local scheduling record, reporting layer, or support process needs correction. If the vendor record must be changed, follow a documented Zocdoc support path rather than inventing an API workaround or substituting another status.

Do not delete the stale item simply to clear a queue. Keep a technical audit trail with timestamps, synthetic or opaque identifiers, attempt count, response category, and reviewer outcome. Limit access and retention according to the clinic’s approved policy.

Reporting should expose the uncertainty. A dashboard may count a clinic-confirmed outcome separately from a vendor-confirmed update. For rate definitions and denominator choices, see how to calculate no-show rate by booking source. The status API alone does not define the whole metric.

How can retries avoid duplicates and false success?

Make each attempt refer to the same Zocdoc appointment and intended status. Before retrying, reload current local state and check whether a prior attempt already succeeded. A worker that loses its acknowledgement should not create a second local outcome or send contradictory updates without review.

Bound retries by both error class and time eligibility. Authentication problems, invalid identifiers, contract rejection, and a temporary connection failure are not the same condition. Preserve the shortest useful response evidence without copying request content that can expose patient information.

Use a dead-letter or review state for unresolved work. Include the reason that automation stopped, such as “outside documented no-show window” or “current vendor result unknown.” Avoid a generic failure flag that invites an operator to press retry after the action has become ineligible.

If visit-reason mapping is also failing, resolve it as a separate contract. The guide to mapping Zocdoc visit reasons to EHR appointment types explains that boundary. A mapping defect is not evidence that attendance should change.

How should the behavior be tested?

Use Zocdoc’s documented testing data and an approved non-production setup for baseline contract checks. Create only synthetic appointments. The test record should contain a neutral identifier and the minimum scheduling fields needed by the sandbox, never a real patient name, contact detail, visit reason, insurance value, or clinical note.

Test the eligibility function locally with a deterministic clock and synthetic timestamps. Cover a future start, a recent past start, and a start outside the documented two-day condition. Confirm the first and third cases do not call the vendor client and the stale case enters review. Zocdoc’s Testing Data guide does not document a clock-control fixture for this window.

Also simulate a temporary transport failure around the local boundary. Verify the retry uses the same synthetic appointment, does not create a duplicate local outcome, and stops if the deterministic clock moves beyond eligibility. If an end-to-end sandbox test of the outside-window response is required, obtain a supported fixture or procedure from Zocdoc first. Record API response metadata without storing patient payloads.

Finally, test an arrived result separately from no_show. The goal is to prove that the workflow follows an authoritative disposition, not the mere passage of time. Keep any edge interpretation of “two days” out of production until confirmed by documentation or Zocdoc support.

What evidence should operators and reviewers see?

An operator needs scheduled start, local outcome, eligibility result, last attempt time, response category, and next action. A reviewer needs the source rule and a trace showing why automation sent, retried, or stopped. Neither view requires patient or clinical content.

Use clear labels: “eligible and queued,” “vendor update confirmed,” “delivery uncertain,” and “outside documented window.” These labels prevent a locally observed no-show from being presented as a completed external update.

Monitor the age of unresolved candidates so the team can act before they become stale. This is a clinic-defined operational control, not a new Zocdoc guarantee. Report volume and outcome by booking source without changing the original source when staff resolve an exception.

Frequently asked questions

Can no_show be sent before the appointment starts?

No. Zocdoc documents that the appointment start must be in the past for a no_show update. Wait for an authoritative post-appointment outcome rather than scheduling the status in advance.

Does Zocdoc define the no-show window as 48 hours?

The cited guide says the appointment start can be no more than two days old. It does not restate that boundary as 48 hours. Do not substitute an interpretation without confirmation.

Should a stale no-show update keep retrying?

No. Once the request is outside the documented condition, move it to a visible review state. Preserve local evidence and do not claim the Zocdoc status was updated.

Is an unconfirmed appointment automatically a no-show?

No. The Zocdoc glossary describes a no-show as a patient who did not appear for a confirmed appointment. Cancellation, reschedule, uncertainty, and delivery failure require their own states.

References

Does NexHealth Send a Webhook When EHR Sync Turns Red?

Do not assume NexHealth sync-status webhooks reliably announce every change from green to red. For read sync, the Webhook Subscriptions reference documents red-to-green recovery and says green-to-red does not trigger the event. For write sync, the page’s prose says recovery-only while its example shows sync_status_write_change.red with write_status set to red. That contradiction needs NexHealth confirmation before a team relies on write-side event direction.

The safer documented monitoring path is to inspect GET /sync_status and evaluate read_status_at and write_status_at. Those timestamps need context because NexHealth warns that activity outside business hours, especially on weekends and holidays, can make them appear several hours or days old. Webhooks and polling therefore provide different evidence.

What do NexHealth sync-status webhooks actually report?

NexHealth lists separate events for read and write functionality. The documented read event fires when an integration’s read status moves from red to green. The page’s prose assigns the same recovery direction to write functionality, but its write example instead uses sync_status_write_change.red and reports write_status as red.

The source explicitly says the read webhook does not currently trigger from green to red. Its write prose makes the same statement, yet the contradictory example prevents a categorical write-side conclusion. Treat read failure notification as absent and write failure notification as undocumented until NexHealth resolves the conflict.

Do not treat either event as a complete uptime feed. A recovery event can confirm a return to service after NexHealth observes the transition, but it cannot prove when the red state began. A possible write-red event does not establish a complete delivery guarantee either. Detect degraded connectivity through an independent status check.

This differs from appointment delivery behavior. The guide to Zocdoc webhook retry boundaries concerns transport acknowledgement for appointment events. A NexHealth sync-status event concerns EHR integration health. Keep those two kinds of monitoring separate.

Why is waiting for a green-to-red event unsafe?

A webhook-only monitor can remain quiet while reads are red because the missing transition is documented behavior. Write-side silence is also ambiguous because the source conflicts about failure events. It can mean the integration stayed healthy, no relevant event occurred, or a failure was not delivered to the listener.

That ambiguity matters for scheduling. If reads are degraded, the application may not have current appointments or unavailability blocks. If writes are degraded, a booking request may not reach the connected record system as expected. Neither condition should be translated into a positive claim merely because no webhook arrived.

Operational inference: use the status query as the failure-detection input and treat webhooks as supplementary transition signals. Confirm write-event direction with NexHealth before making it a control dependency. This is not a polling interval prescribed by NexHealth. Each team must choose a cadence that fits its booking risk, API limits, business hours, and incident process.

If a status problem first appears as an empty availability response, also inspect the scheduling inputs. NexHealth availability can be empty despite an open EHR calendar when working hours or appointment-type assignments do not qualify. Sync health and availability configuration are related evidence, not interchangeable diagnoses.

How should GET /sync_status be monitored?

The sync-status endpoint can be scoped by institution through subdomain. Its documented query options include read status, write status, and location identifiers. That lets a monitor ask about the exact integration scope used by the booking flow instead of reducing every location to one account-wide light.

Track read and write independently. A location can need fresh read state for availability while also needing working write state for appointment creation or changes. One green value should not hide a red value in the other direction. Display both status and the corresponding last-success timestamp.

Store a technical snapshot rather than a patient payload. Institution alias, location scope, observed read state, observed write state, timestamp ages, request result, and monitor time are enough for the health question. Patient names, contact details, appointment reasons, notes, and insurance data add no value to this test.

A status monitor also should distinguish a successful API response from a healthy integration. An HTTP response can carry a red status. Conversely, a failed status request leaves health indeterminate rather than proving the EHR is red or green. Preserve those states separately in alerts.

How do off-hours delays change alerting?

NexHealth warns that read_status_at and write_status_at can show delays of several hours or days outside business hours, particularly on weekends and holidays. An old timestamp alone is not enough to declare an outage without considering whether the connected practice was expected to generate activity.

This warning does not mean stale timestamps should be ignored. It means the monitor needs context. A timestamp that is normal for a closed office may be suspicious during active booking hours. Use the practice’s documented schedule as an operational input, not a vendor-wide threshold invented for every location.

Operational inference: alert on a combination of state, timestamp age, expected activity, and failed business operations. Keep the rule visible to clinic IT so a holiday schedule can be explained without silencing a genuine write failure.

Working hours themselves have a separate role in availability calculation. The article on NexHealth appointment validation outside working hours explains why an accepted API call and a valid booking slot are different claims. Do not reuse clinic hours as proof that sync is healthy.

What should the booking flow do while status is uncertain?

Make uncertainty explicit. If current EHR reads cannot be established, do not convert missing busy records into free time. If write health is red or unknown, do not present a local request as a completed EHR booking. The safest user-facing state is pending, unavailable, or under review, according to the clinic’s approved workflow.

Do not silently switch to a different calendar or operatory. A fallback may have different scope and may create a duplicate appointment. The discussion of overlapping operatories in NexHealth availability shows why resource identity must remain attached to a time.

Separate read controls from write controls. A practice might decide that existing appointments remain viewable from a recent local mirror while new bookings pause. Another practice may require the whole scheduler to close. NexHealth documents the status surfaces, but the acceptable degraded mode belongs to the clinic and its application.

Show operators which capability is affected. “Integration issue” is too broad. “EHR reads are red; online slots paused” or “EHR writes are indeterminate; requests held for review” makes the state actionable without exposing appointment content.

How should recovery be reconciled after red turns green?

A red-to-green read webhook confirms the documented recovery transition. A red-to-green write event is also consistent with the page’s prose, despite its contradictory red example. Neither proves that every operation attempted during degradation reached the EHR or that the local mirror is complete. Treat a recovery signal as a trigger to start reconciliation, not as automatic closure.

Review the bounded interval between the last trusted success and observed recovery. Compare queued or uncertain technical operations with current EHR state through approved identifiers. Do not replay every request blindly. A booking may have succeeded before connectivity became uncertain, and an unconditional replay could create a duplicate.

Operational inference: make reconciliation idempotent and preserve the original booking lineage. A recovered write should not become a new acquisition event or replace the original channel. The distinction in appointment source versus marketing source remains valid during incident recovery.

Close the incident only when current status is known, affected locations are checked, uncertain operations have an outcome, and availability is based on refreshed state. The recovery webhook is one piece of that evidence.

What controlled test proves the monitoring design?

Use a sandbox or approved non-production integration with synthetic records. Test read and write monitoring separately. The goal is not to force a production EHR outage. It is to prove how the application behaves when the status endpoint reports red, when the endpoint itself fails, and when a recovery event arrives.

  1. Capture a known green read and write state for one controlled location.
  2. Feed the monitor a controlled red read state and verify availability fails closed.
  3. Feed it a controlled red write state and verify new writes remain visibly uncertain.
  4. Test an unavailable status endpoint and confirm the state becomes indeterminate.
  5. Deliver a red-to-green recovery event and verify reconciliation starts.
  6. Confirm no test record contains real patient or clinical information.

Also test off-hours context. A delayed success timestamp during a configured closure should follow the documented alert rule, while an explicit red state should remain visible. Record the exact status inputs and resulting control decision so reviewers can reproduce the outcome.

Frequently asked questions

Does NexHealth send a webhook when read status changes from green to red?

No. The current Webhook Subscriptions reference says the read-status webhook fires from red to green and does not currently trigger from green to red. Use the sync-status endpoint to monitor the failure state.

Are read_status_at and write_status_at outage timestamps?

They are last-success timestamps used to assess sync health, but NexHealth warns they can lag outside business hours. Interpret their age with location schedule and current status rather than treating any delay as a confirmed outage.

Does the write-status webhook report a change from green to red?

The current reference is internally inconsistent. Its prose says the write event reports red-to-green recovery and does not trigger green-to-red, while its example shows a red write event. Ask NexHealth to confirm current behavior and monitor GET /sync_status instead of depending on one interpretation.

Should missing EHR reads be treated as open availability?

No. Missing or indeterminate calendar state is not evidence of free time. Pause or qualify availability according to the clinic’s approved degraded-mode policy until current read health and calendar coverage are established.

References

Why Is a Clinic Booking Conversion in All Conversions but Missing from the Conversions Column?

A clinic booking conversion can appear in All conversions but be missing from Conversions because the action is secondary, or because the campaign is not using the goal that contains that primary action. Secondary actions normally remain observation-only. Primary actions influence a campaign only when that campaign optimizes toward their associated goal.

There is an important exception: a secondary action included in a selected custom goal is used for bidding. Audit both conversion action optimization and campaign goal settings before changing the signal. Do not treat column membership as proof that a booking occurred, that the event is eligible for healthcare advertising, or that the campaign should optimize toward it.

What do Conversions and All conversions include?

The main Conversions column is the focused reporting and bidding view. Google describes primary actions as actions reported there and used for bidding when the standard goal they belong to is used for bidding. All conversions is broader. It includes the data in Conversions plus actions that were not included in that main column and certain other conversion sources.

That design lets an account observe useful actions without asking Smart Bidding to optimize toward every tracked signal. A booking-related action in All conversions is therefore not automatically missing or broken. It may be working exactly as configured as a secondary observation.

Segment All conversions by conversion action before diagnosing the total. A combined number can contain signals with different meanings and optimization settings. Compare the named action across columns, then inspect its goal and campaign scope.

This semantic discipline matters in a clinic booking outcome taxonomy. A form submission, booking request, confirmed slot, and later operational outcome should not share one vague label simply because they all appear in an advertising report.

How do primary and secondary actions behave?

A primary conversion action is eligible for the main Conversions reporting and bidding path, subject to the campaign’s goal selection. A secondary action is normally observation-only. Google reports it in All conversions and does not use it for bidding even when its standard goal is used.

Check the action itself in the conversion summary. The setting is commonly presented as Primary or Secondary, with secondary described as observe only. Do not infer it from the action name. Two actions called booking can have different optimization settings, owners, sources, or goals.

Imports from Google Analytics are secondary by default when created, according to Google’s current guidance, and the setting can be updated to primary in Google Ads when the action supports that change. That is one plausible reason a newly imported action appears in All conversions first. Verify the actual source and setting instead of assuming that explanation applies.

Where the action lives also matters. The guide to placing clinic conversion actions in a client or manager account explains why ownership and campaign access should be traced before an action is rebuilt.

Why can a primary action still be absent from campaign Conversions?

Primary is necessary but not sufficient. Google states that a campaign uses a conversion action for bidding when two conditions are met: the action is Primary, and the campaign uses the goal that contains it. A primary action under a goal the campaign does not optimize toward will not drive that campaign.

Campaigns can use account-default goals or campaign-specific goals. This means a conversion configuration can look correct at account level while a particular campaign follows a different goal set. Audit the affected campaign rather than extrapolating from another campaign that shows the action in Conversions.

Build a small evidence matrix with the action name, action source, primary or secondary setting, containing goal, account-default status, campaign goal selection, and observed columns. This separates configuration facts from assumptions. Do not include contact details, appointment notes, treatment information, or event payloads in that matrix.

The distinction resembles the Google Ads new-customer goal versus a clinic’s new-patient definition: a platform goal controls optimization behavior but does not replace the clinic’s operational definition.

How does the custom goal exception change the answer?

Custom goals can contain a combination of primary and secondary conversion actions. Google states that conversion actions inside a custom goal are used for reporting and bidding regardless of whether each action is labeled primary or secondary. Its conversion-goals documentation also warns that a secondary action included in a custom goal is used for bidding when that custom goal is set in campaign settings.

This exception is easy to miss. An operator may mark an action Secondary expecting observation-only behavior, then add it to a custom goal selected by a campaign. The action can become a bidding input even though the action page still says Secondary.

Therefore, an audit cannot stop at the action-level setting. Open the campaign, identify whether it uses account-default goals, campaign-specific standard goals, or a custom goal, and inspect every action inside the selected goal. Record the current state before editing it.

Do not use a custom goal merely to force a column to look complete. Custom goals change what the campaign optimizes toward. They should reflect an approved measurement design, not serve as a reporting workaround.

What is the safest troubleshooting sequence?

Begin with the exact campaign, date range, and conversion action. Add both Conversions and All conversions, then segment by conversion action. Confirm that the discrepancy belongs to the booking action rather than a broader aggregate.

  1. Record the conversion action’s exact name, source, and status.
  2. Check whether action optimization is Primary or Secondary.
  3. Identify the standard goal containing the action.
  4. Check whether the campaign uses account-default or campaign-specific goals.
  5. Confirm whether the associated standard goal is selected.
  6. Inspect any selected custom goal and every action it contains.
  7. Compare action-level results in Conversions and All conversions.
  8. Document the finding before changing reporting or bidding configuration.

If the action is secondary and no selected custom goal contains it, appearing only in All conversions is expected. If it is primary but the campaign does not use the associated goal, the campaign will not optimize toward it. If a selected custom goal includes it, the custom-goal exception applies.

Do not delete and recreate the action as a first response. That can fragment history and introduce another source or ownership problem. Fix the smallest incorrect setting after confirming the intended campaign behavior.

What should be checked before changing Smart Bidding inputs?

First ask whether the event means what the team thinks it means. A conversion labeled booking might be a form submit, a scheduling-page visit, or an actual slot creation. Validate the trigger and deduplication path with synthetic tests. Preserve the operational result in the clinic’s system of record.

Then review data quality and volume over an appropriate window. A signal that arrives late, duplicates, changes definition, or mixes locations can mislead bidding even if it appears in the desired column. The audit proof limits for Enhanced Conversions for Leads show why a successful diagnostic should not be expanded into a claim about business accuracy.

Finally, obtain the campaign owner’s approval for an optimization change. Moving an action from secondary to primary, selecting a new standard goal, or adding it to a custom goal can change bid decisions. Reporting convenience is not enough reason.

Keep the old configuration, change time, approver, intended effect, and rollback condition in the account change record. Monitor the named action and the business outcome separately after the change.

Why are reporting, bidding, and eligibility separate boundaries?

Conversions and All conversions describe Google Ads reporting and optimization configuration. They do not decide whether a clinic may collect an event, disclose it, or use it in advertising. A technically tracked action can still be inappropriate for the selected customer data feature or destination.

Run the eligibility review before configuring the action as a bidding input. Google’s health and customer-data policies, contracts, consent or other lawful basis where applicable, and the clinic’s privacy controls need their own evidence. Do not send patient identifiers, treatment details, appointment notes, or clinical free text merely because the interface offers a conversion action.

The page on hashing and clinic-form eligibility explains this policy boundary. Hashing is a technical transformation. It does not turn an otherwise ineligible event into an eligible one.

Keep three conclusions separate in the audit: the action is being received, the campaign is or is not optimizing toward it, and the event is or is not approved for that use. Evidence for one conclusion cannot substitute for the others.

Frequently asked questions

Is a conversion broken if it appears only in All conversions?

No. It may be a correctly tracked secondary action intended for observation. Check the action optimization setting and the campaign’s selected goals before treating it as a tracking failure.

Does setting the booking action to Primary make every campaign bid on it?

No. A campaign must also optimize toward the goal containing that primary action. Campaign-specific goal settings can differ from account-default goals.

Can a Secondary action affect bidding?

Yes. Google documents an exception when the secondary action is included in a custom goal selected by the campaign. Inspect custom-goal membership before calling any action observation-only.

Is Primary versus Secondary the same as One versus Every?

No. Primary versus Secondary controls reporting and optimization behavior. One versus Every controls how conversions are counted after an eligible interaction. Audit them as separate settings.

References

Why Did One Invalid Clinic Event Reject the Entire Google Data Manager API Request?

One invalid clinic event can reject the entire Google Data Manager API request because the API uses fast-fail validation. If the request has a structural error, or any record fails validation for a required field, Google rejects the request and processes none of its data. Read the structured Status details, correct the defect, and resend the complete batch.

That synchronous failure is different from an HTTP 200 response containing field warnings, and both are different from the destination diagnostics available after successful ingestion. Keep those evidence layers separate. Also keep event payloads out of logs, tickets, and screenshots. A transport success does not establish that a healthcare event is eligible for a Google advertising product.

What does fast-fail mean for a clinic event batch?

The Data Manager API documentation draws a clear boundary. Structural errors can prevent the service from understanding a request. A missing or invalid required field in any record can also stop the request. In either case, the entire request fails and the API does not process any of the data in it.

This differs from a partial-failure model in which valid records continue while invalid records are rejected. Do not infer partial acceptance from a large batch or from the fact that most records look correct. For a synchronous fast-fail response, the unit of recovery is the complete request.

Suppose batch A contains records built by the same mapping function, and one record has a required timestamp in an invalid format. The safe conclusion is not that every other record arrived. The documented conclusion is that none were processed. Use a synthetic fixture to reproduce the shape, fix the shared mapping or source validation, and send the complete corrected batch.

This request boundary should be designed into the server-side Data Manager architecture for clinic forms. Validation before transmission reduces avoidable failures, but the sender must still treat Google’s response as authoritative.

Which error details should the integration inspect?

Start with the standard Status response. The REST error exposes a status and a corresponding HTTP code. Do not stop at the human-readable message. The structured details can identify the class of failure and the affected request field more reliably than string matching.

For an invalid argument, inspect the BadRequest payload and its fieldViolations. Each violation can identify a field and provide a description or reason. The ErrorReason reference includes terms such as INVALID_ARGUMENT, REQUIRED_FIELD_MISSING, and INVALID_FORMAT. Preserve these official values in operational logs rather than inventing a private translation that hides the original error.

ErrorInfo can add machine-readable context. RequestInfo contains the request_id that uniquely identifies the failed API request. Capture that identifier with the response code, Status, field path, reason, sender version, and batch control record. This is enough for most triage without storing the clinic event body.

The same evidence discipline applies to a broader Enhanced Conversions for Leads audit: a useful audit states exactly what a diagnostic proves and what remains outside its scope.

Why should the sender fix and resend the full batch?

Google’s guidance for a failed fast-fail request is explicit: fix the error and resend the entire request. Removing the record that triggered the visible violation may hide a defect shared by other records. It can also turn a technical validation decision into an undocumented business decision about which events deserve processing.

Trace the field back to its producer. If the same serializer supplied the field for every record, correct the serializer and rerun the preflight check. If only one upstream value violated the contract, quarantine that input from the outbound workflow under an approved rule, correct it at the source when appropriate, and rebuild the requested batch. Do not edit health-related source records merely to make an advertising request pass.

A failed request should retain a safe control state such as rejected, with a reason code and attempt metadata. It should not advance records to sent or delivered. An offline conversion outbox report can make this boundary visible to operators and clients without exposing the event payload.

Retry classification matters. Google advises correcting client errors before retrying them. Transient server errors can use exponential backoff. A retry loop that resends the same invalid argument only creates noise and may obscure the original cause.

How is an HTTP 200 field warning different?

Fast-fail validation performs a limited set of checks for basic issues that prevent further processing. Optional-field validation can behave differently. A successful ingestion response with HTTP 200 may include a field_warnings list. Those warnings do not fail the request, so the sender must examine the response rather than treating the status code as the whole result.

A warning means the request crossed the synchronous ingestion gate with a documented concern. It does not mean the field was accepted exactly as sent. Store the warning type and field reference in the batch control record, then decide whether the integration needs a mapping correction. Keep the actual field value out of the log.

Do not combine failed and warning states into a label such as uploaded with issues. A failed request processed no data. An HTTP 200 response may have accepted the request while flagging optional-field concerns. Those states lead to different recovery actions and deserve separate counters.

What do later destination diagnostics prove?

Diagnostics are available only for requests that succeeded and were not sent with validate_only set to true. The sender uses the captured request_id to retrieve request status. Each destination can progress through processing and reach SUCCESS, PARTIAL_SUCCESS, or FAILURE, with warning and error information available at the destination layer.

This later evidence does not rewrite the synchronous response. A fast-fail request has no successful ingestion to diagnose. Conversely, an HTTP 200 does not promise that every destination will finish successfully. Model the flow as distinct gates: request validation, successful ingestion, destination processing, and destination result.

An error in destination diagnostics means a record was rejected at that later stage. A warning can indicate that some portion was ignored while processing continued. The outbox reporting guide explains why agencies should expose these stages instead of collapsing them into a single upload count.

How can the team troubleshoot without logging clinic payloads?

Use two records with different purposes. The protected business system retains its own approved event data. The integration log retains only technical control evidence needed to operate the pipeline. Do not copy names, contact details, free text, appointment notes, treatment information, or full request bodies into monitoring tools.

  1. Stop the failed batch from advancing to a delivered state.
  2. Capture the HTTP code, Status, typed detail, field path, reason, and request_id when present.
  3. Reproduce the request shape with synthetic data that contains no patient or contact identifiers.
  4. Trace the invalid field through every caller of the shared mapping code.
  5. Correct the root mapping or approved source value.
  6. Run local required-field and format checks on the rebuilt batch.
  7. Resend the full request and inspect field_warnings even when it returns HTTP 200.
  8. For successful non-validation requests, follow the request_id through destination diagnostics.

Access to control logs should be limited, retained for an approved period, and reviewed for accidental payload capture. Screenshots used in support cases should show the smallest useful structured error. If Google support needs a request identifier, RequestInfo provides it without requiring a copy of every clinic event.

Why does successful transport not establish policy eligibility?

The Data Manager API error model describes whether a request can be accepted and processed technically. It does not decide whether the organization may send a particular healthcare event to a particular Google advertising destination. That question requires a separate review of Google’s product terms and customer data policies, the clinic’s data governance, and applicable law.

Hashing does not change that boundary. The article on why hashing does not make clinic forms eligible for Enhanced Conversions for Leads explains why technical transformation is not policy permission. Likewise, a destination marked SUCCESS proves processing status, not lawful collection, valid consent, or advertising eligibility.

Keep an eligibility gate before serialization. Only events already approved for the named destination should reach the batch builder. Then apply the technical controls described here. The order matters: policy eligibility determines whether an event may enter the transport path; validation and diagnostics determine what happened after an eligible event was submitted.

Frequently asked questions

Did Google process the valid records when one required field failed?

No. Under the documented fast-fail model, a structural error or required-field validation failure causes the entire request to fail, and none of its data is processed.

Should the integration delete the bad record and resend the rest?

Not as an automatic recovery step. Inspect the structured violation, correct the root cause, rebuild the request, and resend the complete batch. Any decision to exclude an event needs its own approved rule.

Does HTTP 200 mean every field and destination succeeded?

No. A successful ingestion response can contain field_warnings, and later destination diagnostics can report SUCCESS, PARTIAL_SUCCESS, or FAILURE. Check each evidence layer separately.

Can the team paste the failed clinic request into a support ticket?

Avoid it. Capture the request_id and the smallest useful structured error, reproduce with synthetic data, and follow approved disclosure procedures if additional evidence is genuinely required.

References