1. Trigger
Endpoint:POST /accounts/customers/{customerId}/verifications
target comes back masked. A trigger always returns PENDING, which means the code was dispatched — delivery is asynchronous and outside Meld’s control, so it may not have arrived yet.
The code is single-use and valid until expiresAt.
2. Confirm
Endpoint:POST /accounts/customers/{customerId}/verifications/{verificationId}/confirm
attemptsRemaining:
An expired code is not a
FAILED body — confirming against a verification that is no longer pending is a 400. Trigger a new one rather than re-prompting for the same code.
Limits and errors
Audit
Endpoint:GET /accounts/customers/{customerId}/verifications?channel=EMAIL&status=VERIFIED
Returns history with targets masked, newest first. The history is append-only, so it carries statuses the two calls above never return:
INVALIDATED is the one worth handling. Changing a customer’s email or phone clears the verified state for that channel, so a customer who was cleared to order is no longer verified and has to go through both calls again. Re-check eligibility after any contact change rather than assuming the earlier verification still stands.