DatabaseDrivenProvider) handles all providers.
Two Ways to Add Providers
Via API (Runtime)
Create a provider at runtime using the REST API:Via Database Seed (Builtin)
For providers that ship with Calseta, add a seed entry inapp/seed/enrichment_providers.py. This is how the four builtin providers (VirusTotal, AbuseIPDB, Okta, Entra) are defined.
HTTP Config Structure
Thehttp_config defines how Calseta calls the provider’s API. It supports template variables that are resolved at runtime.
Template Variables
| Variable | Resolves To |
|---|---|
{{value}} | The indicator value being enriched |
{{type}} | The indicator type (ip, domain, etc.) |
{{auth_token}} | The auth credential from auth_config |
Auth Types
| Type | Description |
|---|---|
no_auth | No authentication required (default) |
api_key | API key — stored in auth_config, resolved via {{auth_token}} in headers |
api_token | API token — same resolution as api_key, named differently for clarity |
oauth2_client_credentials | OAuth2 client credentials flow |
http_config template — auth_type just tells Calseta whether credentials are needed and how to resolve them. For example, to send an API key in a custom header:
ENCRYPTION_KEY environment variable.
Malice Rules
Configure rules that map provider response fields to malice verdicts:Operators
| Operator | Description |
|---|---|
eq | Equals |
neq | Not equals |
gte | Greater than or equal |
lte | Less than or equal |
in | In list |
contains | Contains substring |
Field Extractions
Define which fields from the raw provider response are surfaced to agents in theextracted object:
| Field | Description |
|---|---|
source_path | Dot-notation path into the raw response (e.g., data.results.score) |
target_key | Key name in the extracted object surfaced to agents |
value_type | Expected type: string, int, float, bool, list, dict, any |

