veltor
Developer documentation

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.