alloy@eng:~$alloy.com ↗

// changelog

What's new

Product updates, new features, and improvements to the Alloy platform.

New Featurev2.8.02025-03-01

Bulk Decisions API

You can now submit up to 1,000 decisions in a single API call using the new bulk decisions endpoint.

Endpoint: POST /decisions/bulk

This is especially useful for backfill scenarios, migration workflows, and batch processing pipelines where submitting decisions individually would hit rate limits.

{
  "decisions": [
    {
      "application_token": "app_abc123",
      "outcome": "approved",
      "reason_codes": ["CLEAN_IDENTITY"]
    }
  ]
}

Rate limits apply per batch, not per individual decision within the batch. See the API reference for full details.

Improvementv2.7.32025-02-15

Improved Webhook Retry Logic

Outbound webhooks now use exponential backoff with jitter for retries, replacing the previous fixed-interval retry schedule.

Before: Retries at 30s, 60s, 120s intervals

After: Exponential backoff starting at 30s, with ±20% jitter to prevent thundering herd on recovery

Failed webhooks are retried up to 8 times over ~24 hours before being marked as permanently failed. You'll receive a webhook.failed event at that point.

This change improves delivery reliability during your endpoint's brief downtime windows without hammering a recovering service.

New Feature2025-01-20

Full-Text Search Across Evaluations

The Alloy dashboard now supports full-text search across all evaluation data, including:

  • Applicant name and contact info
  • Document numbers
  • Custom metadata fields
  • Evaluation tokens and external IDs

Search is powered by OpenSearch and returns results across all time periods. Use the search bar at the top of the Evaluations page or press ⌘K to open search from anywhere in the dashboard.

Bug Fixv2.6.22025-01-08

Fixed: Validation error messages now return field paths

Request validation errors now include the full field path in the error message, making it easier to identify which nested field caused a validation failure.

Before:

{ "error": "Invalid input" }

After:

{
  "error": "Validation failed",
  "details": [
    { "field": "applicant.address.postal_code", "message": "Invalid postal code format" }
  ]
}