RevKeenDocs

Dry-run usage events

Validate usage events without persisting them. Returns acceptance/rejection reasons that mirror real ingestion rules.


Related endpoints

  • POST /usage-events — Ingest usage events
  • GET /usage-events — Query usage events
  • GET /usage-events/aggregate/{meterId} — Get aggregated usage

Common errors

  • 400 invalid_request — malformed payload or failed validation.
  • 401 unauthenticated — missing, malformed, or revoked API key.

Idempotency

Pass an Idempotency-Key header (UUID v4 recommended) to make retries safe. Keys are valid for 24 hours; see the idempotency guide.

POST
/usage-events/dry-run
x-api-key<token>

Your RevKeen API key (powered by Unkey). Get it from Dashboard > Settings > API Keys. Use rk_sandbox_* for test mode and rk_live_* for production.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

Stuck on an error response? Ask the RevKeen assistant to explain it.
curl -X POST "https://api.revkeen.com/v2/usage-events/dry-run" \
  -H "x-api-key: $REVKEEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "api_call",
    "customer_id": "string",
    "external_customer_id": "usr_123",
    "subscription_id": "string",
    "meter_id": "string",
    "quantity": 1,
    "timestamp": "2026-03-14T10:30:00Z",
    "idempotency_key": "evt_unique_123",
    "metadata": {}
  }'
{
  "object": "usage_event_dry_run_result",
  "summary": {
    "would_ingest": 0,
    "would_skip": 0,
    "would_fail": 0
  },
  "data": [
    {
      "index": 0,
      "status": "would_ingest",
      "validationDetails": {
        "meterMatched": true,
        "customerMatched": true,
        "billableQuantity": 0,
        "filtersPassed": true
      },
      "reason": "string"
    }
  ]
}
{
  "error": "string"
}
{
  "error": "string"
}