LetsGetChecked · AsyncAPI Specification
Letsgetchecked Notifications Webhooks
Version
View Spec
View on GitHub
CompanyHealthHealthcareDiagnosticsLaboratoryTelehealthMedical TestingPharmacyOrderResultsWebhookHL7LOINCAsyncAPIEvents
AsyncAPI Specification
generated: '2026-08-04'
method: searched
source: https://docs.letsgetchecked.com/documentation/API%20Reference/API%20Notifications/webhooks/
spec_type: none
spec_type_note: 'LetsGetChecked publishes NO AsyncAPI document. The GitHub org
(github.com/LetsGetChecked) carries three repositories, none of them a specification,
and no /asyncapi.yaml or event-catalog endpoint exists on any host. This artifact
captures the documented WEBHOOK CATALOG verbatim from the API Notifications reference —
it is a Webhooks surface, not an AsyncAPI one. Nothing here is generated.'
surface: webhooks
docs: https://docs.letsgetchecked.com/documentation/API%20Reference/API%20Notifications/webhooks/
transport:
protocol: HTTPS
method: POST
direction: LetsGetChecked -> client endpoint
content_type: application/json
endpoint_registration: 'Manual. The client supplies its endpoint URL (and HMAC signing
key) to LetsGetChecked, who configure the webhook on the staging environment during
onboarding. There is no self-service webhook management API.'
endpoint_granularity: 'A single destination endpoint, or a different endpoint per
webhook type.'
payload:
shape: '{ "type": <resource type>, "body": { ... } }'
common_fields:
- name: type
description: The resource type that changed — order, Result, or outreach.
note: 'Case is inconsistent across the published examples: "order", "Result",
"outreach".'
- name: body.callbackURL
description: A URL back into the LetsGetChecked REST API to query the changed resource.
absent_on: [outreach]
- name: body.timestamp
description: Creation time of the message, UTC. Use it to order events against your
own state.
event_types:
- type: order
description: An updated order.
versions:
- version: v1
example:
body:
clientOrderId: '123456789'
callbackURL: '{LGC-API}/1001/api/v1/orders/123456789/status'
timestamp: '2022-03-04T11:35:17.43+00:00'
type: order
- version: v2
example:
type: order
body:
clientOrderId: '246975'
callbackURL: '{LGC-API}/1111/api/v2/orders/246975'
orderItemStatus:
id: 2fa58516-fc54-4e5d-9349-4865d38f785e
status:
code: KitRegistered
timestamp: '2023-05-15T16:22:11.3513804Z'
statuses:
- code: Submitted
description: The client has submitted an order to LetsGetChecked.
- code: Created
description: LetsGetChecked has created the order.
- code: KitDispatched
description: The order is dispatched from LetsGetChecked to the participant.
- code: KitRegistered
description: 'The participant has activated the test kit; the LGC kit identifier is
populated.'
- code: KitArrivedAtLab
description: The test kit is received at the LetsGetChecked lab.
- code: ResultsAvailable
description: Results are available for a test kit.
- code: Cancelled
description: 'Set when a client triggers cancellation via the v2 PATCH order endpoint.
Only available up to KitArrivedAtLab, and only on Orders API v2.'
- code: ValidationFailed
description: 'Set when the system cannot process a submitted order; the status moves
from Submitted to ValidationFailed.'
- type: Result
description: An updated result.
example:
body:
barcode: LGC-XXX-XXX-XXX
alphaCode: QWERTY
callbackURL: '{LGC-API}/1001/api/v1/results/{Barcode}?alphaCode={AlphaCode}&fields=status'
timestamp: '2022-03-04T10:33:37.6713587Z'
type: Result
note: 'Order and result each carry their own status. The same status value (for example
ResultsAvailable) can arrive on both the order and the result event and must be
interpreted separately.'
- type: outreach
description: An updated outreach notification.
example:
body:
barcode: LGC-XXX-XXX-XXX
type: PcpResultsLetter
status: DeliverySent
failureReason: null
timestamp: '2022-08-10T11:37:37.6715487Z'
type: outreach
body_types:
- PcpResultsLetter
- PatientResultsLetter
body_statuses:
- DeliverySent
fields:
- name: failureReason
description: Not currently in use; the value is always null.
no_callback_url: true
delivery:
guarantee: at-least-once
ordering: not guaranteed
ordering_note: 'Events may not arrive in generation order. LetsGetChecked''s own example
is that KitDispatched and KitRegistered can be delivered out of sequence, and advises
clients to reconcile by querying the API for the current status.'
duplicate_handling: 'Endpoints may receive the same event more than once; clients are
instructed to make event processing idempotent.'
acknowledgement:
success_status: 200
retry:
retryable_statuses: [5xx, 401, 403]
schedule: '3 immediate retries, then a 15-minute wait followed by 3 more immediate
retries, looping 4 times — a 1-hour retry window in total.'
total_attempts: 15
exhaustion: 'The webhook mechanism fails; the client must contact LetsGetChecked.'
dead_letter_queue: none published
replay_api: none published
docs: https://docs.letsgetchecked.com/documentation/API%20Reference/API%20Notifications/event_handling/
security:
default: unauthenticated
default_note: 'LetsGetChecked states authentication is not required for submitted
payloads "due to their lightweight content", and instructs clients to inspect the
received callback URL so access tokens are not leaked when following links.'
optional_signing:
enabled_on_request: true
header: Authorization
scheme: LGC2-HMAC-SHA256
algorithm: HMAC-SHA256
encoding: base64
signed_payload: the stringified JSON request body
key_supply: 'Client generates a strong signing key in base64 and provides it to
LetsGetChecked.'
verification: 'Recompute HMAC-SHA256(signing key, stringified body), base64-encode,
and compare with the header value.'
reference: https://www.rfc-editor.org/rfc/rfc2104
replay_protection: none published
timestamp_tolerance: not published
docs: https://docs.letsgetchecked.com/documentation/API%20Reference/API%20Notifications/security/
gaps:
- No AsyncAPI (or any machine-readable event schema) is published.
- No self-service webhook subscription, rotation, or test-delivery endpoint.
- Signing is opt-in rather than default, on a surface that notifies about PHI-bearing
resources.
- No timestamp tolerance or nonce, so a signed payload can be replayed.
- No dead-letter queue or event-replay API once the 1-hour retry window is exhausted.
- The type discriminator is inconsistently cased across the published examples.
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/letsgetchecked-notifications-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.