Decisions and grant outcomes
A decision evaluates a claim. A grant records the benefit that was assumed delivered, reserved, or confirmed.
Assumed on allow
The default mode records an effective grant with each allow. Report not_granted only when delivery is known to have failed. Corrections remove only that grant’s matching contribution.
Confirmed delivery
A confirmed-mode allow reserves eligibility for 10 minutes. Report granted or not_granted after your application resolves delivery. Missing outcomes become expired_unconfirmed and continue to hold eligibility. Release-on-expiry is an explicit advanced choice and may permit overlapping delivery.
Report an outcome
Use a stable idempotency key for the outcome. A consumed benefit reversal preserves protection; it does not restore eligibility. Late outcomes and conflicting external grant IDs need reconciliation.
curl https://veltor.tech/v1/decisions/DECISION_ID/outcome \
-H "Authorization: Bearer $VELTOR_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: outcome_grant_123" \
--data '{"outcome":"granted","external_grant_id":"grant_123"}'Retries and new evaluations
Same-key requests with the same payload replay the original response for 7 days. Changed payloads conflict. A new attempt key can reevaluate a denied claim after a policy or exception change. An already successful claim keeps its authorization. Calendar claims cannot create a second grant after the original period ends.
Response headers
Veltor-Grant-State describes the current tracked grant. Veltor-Reservation-Expires-At provides the UTC expiry for reservations. X-Request-ID identifies the request; Server-Timing reports recorded handler processing time.