Answers inside the request. Reactions when it matters.
Ask about any user, account, device or order and get the answer back in the same call. Or let Aggrelis watch the events and tell your systems when something happens, or when something stops happening.
- Calls this minute412
- Calls this month1,180,340
- Quota used94%
Illustrative
Ask, get it with the event, or be told
Pick one per use case, or mix them. All three read the same running totals, so the numbers agree wherever they show up.
- 1Ask on demand
Your service asks a question about a user, account or device inside its own request, and the answer comes straight back.
Good forSign-insCheckoutsPaymentsAPI calls - 2Answer with the event
Send the event as usual. A trigger asks the question for you, and the answer comes back in the response to that event.
Good forOrders as they are placedSubmissionsReadings - 3Push to your systems
Results go to a stream you read at your own pace, or arrive as signed webhooks in the tools you already run.
Good forAlertingReview queuesCase managementAnalytics
Need an outcome, not just the facts? Let Aggrelis decide
Everything you want to know, in one call
A question bundles the metrics you care about, values worked out from them, and your conditions, each true or false. Ask it about any user, account, device or order and get it all back at once.
- Metrics, derived values and conditions in one answer, written once and shared by every team
- Pass what the request knows: the card, the device, the API key, the store, and values such as the amount being paid
- Give each question a time budget, and choose: answer with what is ready, or refuse
- Ask as things stood at an earlier time, to look back at a past decision
- Ask and count the event in the same call
usage_checkA question about an accountcallsThisMinuteAPI calls, rolling 1 minutecallsThisMonthAPI calls, this calendar monthaccount's time zonekeyCallsThisMinuteCalls by the request's API key, rolling 1 minutewith the request
quotaUsedPctcallsThisMonth ÷ the plan's monthly quota
near_monthly_quotaquota used ≥ 90%key_rate_limitedkey calls this minute > 600
Missing values are never zero
Every answer says what it knows, what it could not compute, and why. A condition that depends on a missing value is left undecided, not quietly false, so no guess reaches your decision.
- Values: every metric and derived value that could be computed
- Reasons: the conditions that hold, in the order you wrote them
- Skipped: what could not be computed for this request, each with a reason
- The versions that answered, to log with your decision
curl -s -X POST \
"$P/entities/account/acme/profiles/usage_check:evaluate" \
-H "Authorization: Bearer $KEY" \
-H 'Content-Type: application/json' \
-d '{"context":{"api_key":"key_42"}}'{
"entity": {"type": "account", "id": "acme"},
"values": {
"callsThisMinute": 412,
"callsThisMonth": 1180340,
"keyCallsThisMinute": 37,
"quotaUsedPct": 94
},
"reasons": ["near_monthly_quota"],
"degraded": [],
"skipped": [],
"profileVersion": "usage_check@v3",
"configVersion": 12,
"evaluatedAt": "2026-10-22T10:22:55.698155402Z"
}{
"entity": {"type": "account", "id": "acme"},
"values": {
"callsThisMinute": 412,
"callsThisMonth": 1180340,
"quotaUsedPct": 94
},
"reasons": ["near_monthly_quota"],
"degraded": [],
"skipped": [
{"name": "keyCallsThisMinute", "reason": "missing_context:api_key"},
{"name": "reason:key_rate_limited",
"reason": "depends_on_unavailable_value:keyCallsThisMinute"}
],
"profileVersion": "usage_check@v3",
"configVersion": 12,
"evaluatedAt": "2026-10-22T10:23:04.120518733Z"
}Reacts without being asked
A trigger asks a question for you whenever a certain event arrives, and sends the answer where you want it. It also notices when nothing arrives at all.
- Fire on a type of event, or only when a condition holds: orders above 1,000, readings out of range
- Check before the event counts, to see the history alone, or after, to include it
- Absence triggers fire when the next event does not come, from 1 minute to 30 days: a device went quiet, a cart was never checked out
- Send the result back in the response to the event, to the result stream, or both
- Never in the way: a trigger that fails is skipped, and never rejects the event or fails the request
total > 1000none for 10 minIllustrative
Results delivered to the tools you run
Push results into the tools you run, signed to the Standard Webhooks spec. Or read them from your workspace's result stream, at your own pace.
- Signed deliveries that any Standard Webhooks library can verify
- Retried when your side fails, from 30 seconds doubling up to 6 hours, and delivered at least once
- Rotate the signing secret with an overlap of up to 7 days, or revoke a leaked one at once
- Every attempt logged; send a test ping, or retry any delivery once you have fixed your side
- Or read the result stream by cursor, with long-polling and a filter per question
POST https://ops.example.com/hooks/aggrelis- webhook-id
- d7c1e9a0-52f4-4b8e-9c1a-6f0e2b7d3a15
- webhook-timestamp
- 1792733002
- webhook-signature
- v1,K5oZfzN9…= v1,g0hM9SsE…=
- Attempt 1503, retry in 30 s
- Attempt 2Timeout, retry in 1 min
- Attempt 3200, delivered
GET /v1/results?after=…&wait=20- Waiting for new results…
Ask why, of any answer
Explain answers the same question and shows how it got there: what each value was read from, which versions answered and where the time went. Analysts can trust a number, and support can answer “why did this happen?”.
- What each value read, and over which window
- The versions of the question and of each running total
- The time each phase of the answer took
- During a rollout, what the next version would answer
- The same “Why?” in the workspace, next to any answer
| Value | Read from | Version |
|---|---|---|
callsThisMinute412 | calls per account, rolling 1 minute | v2 |
callsThisMonth1,180,340 | calls per account, calendar month | v2 |
keyCallsThisMinute37 | calls per API key key_42, rolling 1 minute | v1 |
near_monthly_quotaholds: quotaUsedPct 94 ≥ 90The promises behind every answer
What holds for every question you ask and every result Aggrelis sends.
- Each event counts once
Resend an event, say after a timeout, and it is recognised as a duplicate instead of counted twice.
- Exact
Amounts and decimals are kept exactly, never as floating point. Money stays right to the cent.
- Never guesses
Missing values are listed with a reason, and conditions that depend on them stay undecided.
- Explainable
Every answer names its versions, and explain shows what it read.
- Bounded
Every question has a time budget. What is not ready in time is reported, not waited for.
- Never in the way
A trigger that fails is skipped. It never rejects your event or fails your request.
- Signed
Webhooks follow Standard Webhooks; verify them with any of its libraries.
- Delivered at least once
Failed deliveries are retried and logged, and you can retry any of them yourself.
Put live answers inside your product
Request access to a workspace, or read the docs to see the API first.