---
title: "Vendor keys"
description: "Store vendor credentials on KingMinos. LeadMagic, Wiza, Findymail, and AI Ark are house-key vendors."
canonical: "https://kingminos.com/docs/api/credentials/"
sourceKind: "source-mdx"
---

import TryItLink from '../../../../components/docs/TryItLink.astro';

KingMinos can run LeadMagic, Wiza, Findymail, and AI Ark on a house key. Every other paid vendor you want to use is a vendor key you store (BYOK).

<TryItLink method="PUT" path="/v1/credentials/{provider}" />

```http
PUT /v1/credentials/{provider}
Authorization: Bearer <your-key>
```

`{provider}` today is one of: `zoominfo`, `brandfetch`, `leadmagic`, `findymail`, `wiza`, `aiark`, `builtwith`, `prospeo`, `apollo`, `companyurlfinder`, `peopledatalabs`, `hginsights`, `enrichcrm`, `lemlist`, `snovio`, `cognism`, `lusha`, `starbridge`, `clay`, `databar`, `quickenrich`, `getleads`, `blitzapi`. `snovio` is OAuth (`{ clientId, clientSecret }`) and is credentials-only — you can store and verify a key; it does not power a routing hop yet. `cognism`, `lusha`, `starbridge`, `clay`, `databar`, `quickenrich`, `getleads`, and `blitzapi` are API keys and also credentials-only — store and verify today, no routing hop yet.

- ZoomInfo and Snov.io body: `{ "clientId": "…", "clientSecret": "…" }`
- API-key vendors: `{ "apiKey": "…" }` (`api_key` is also accepted)

KingMinos stores the key encrypted. The response is metadata only — `ok`, `schema_version`, `provider`. It never echoes the raw key.

```http
DELETE /v1/credentials/{provider}
```

Revokes the live row (`revoked_at`). `404` when there is no live row. Same rule: the response never includes the raw key.

## Vendors you can store keys for today

| Vendor | `{provider}` | What it powers today |
| --- | --- | --- |
| LeadMagic / Findymail / Wiza / AI Ark | `leadmagic` · `findymail` · `wiza` · `aiark` | House key; store your own account to override |
| ZoomInfo | `zoominfo` | BYOK — resolve stamps, employment, hierarchy, b2b social, icon, description |
| BuiltWith | `builtwith` | BYOK — `company.domain` coverage |
| Prospeo / Apollo | `prospeo` · `apollo` | BYOK — `company.resolve` with `routing.only` |
| Brandfetch | `brandfetch` | BYOK — `company.icon` |
| Company URL Finder | `companyurlfinder` | BYOK — `company.domain` name → domain |
| People Data Labs / HG Insights / Enrich-CRM | `peopledatalabs` · `hginsights` · `enrichcrm` | BYOK — `company.resolve` with `routing.only` |
| Lemlist | `lemlist` | BYOK — `company.resolve` with `routing.only` |
| Snov.io | `snovio` | Key storage only (OAuth) — no routing endpoint yet |
| Cognism | `cognism` | Key storage only — no routing endpoint yet |
| Lusha | `lusha` | Key storage only — no routing endpoint yet |
| Starbridge | `starbridge` | Key storage only — no routing endpoint yet |
| Clay | `clay` | Key storage only — no routing endpoint yet |
| Databar | `databar` | Key storage only — no routing endpoint yet |
| QuickEnrich | `quickenrich` | Key storage only — no routing endpoint yet |
| GetLeads | `getleads` | Key storage only — no routing endpoint yet |
| BlitzAPI | `blitzapi` | Key storage only — no routing endpoint yet |

Stored keys are how the next vendor endpoint gets picked. If you want a "key storage only" vendor on a route — or a vendor that is not listed at all — [tell us](mailto:support@outboundsync.com?subject=KingMinos%20vendor%20request).

## House keys

LeadMagic, Wiza, Findymail, and AI Ark are house-key vendors. You do not have to PUT those keys for `company.resolve`, `company.b2b_social`, or employment validation to run them. You can still PUT a key to override with your own account (BYOK).

Do not treat ZoomInfo, Brandfetch, BuiltWith, Prospeo, Apollo, Company URL Finder, People Data Labs, HG Insights, Enrich-CRM, Lemlist, Snov.io, Cognism, Lusha, Starbridge, Clay, Databar, QuickEnrich, GetLeads, or BlitzAPI as house keys. If a path needs ZoomInfo, Brandfetch, BuiltWith, Prospeo, Apollo, Company URL Finder, People Data Labs, HG Insights, Enrich-CRM, or Lemlist and you have not stored a vendor key, the run skips that hop (`not_configured`) or returns a typed `400` (`zi_credentials_required`, `brandfetch_credentials_required`, and the same shape for the others). Snov.io, Cognism, Lusha, Starbridge, Clay, Databar, QuickEnrich, GetLeads, and BlitzAPI have no hop, so a stored key does not change routing and there is no `snovio_credentials_required` / `cognism_credentials_required` / `lusha_credentials_required` / `starbridge_credentials_required` / `clay_credentials_required` / `databar_credentials_required` / `quickenrich_credentials_required` / `getleads_credentials_required` / `blitzapi_credentials_required`.

`websearch` and `favicon-fetch` are house-only. `PUT /v1/credentials/websearch` or `PUT /v1/credentials/favicon-fetch` is rejected (`byok_not_supported`).

## When you need ZoomInfo keys

Company resolve stamps a primary ZoomInfo company id only on `es_decision: hit` with a non-blank `result.zoominfo_company_id`. That hop uses vendor keys you store. Without them, a LeadMagic or websearch name can still come back as `resolved_without_primary_id` — fill the name if it is safe, do not stamp an id.

Employment may attach `result.zoominfo_contact_id` the same way, after the LeadMagic decision. A missing ZoomInfo contact id does not change `answer.outcome`.

## Errors

| Status | `error` | Meaning |
| --- | --- | --- |
| `400` | `validation_failed` / `unknown_provider` | Bad body or provider slug. |
| `400` | `zi_credentials_required` (and siblings: `brandfetch_` / `findymail_` / `wiza_` / `aiark_` / `builtwith_` / `prospeo_` / `apollo_` / `companyurlfinder_` / `peopledatalabs_` / `hginsights_` / `enrichcrm_` / `lemlist_credentials_required`) | A path needed vendor keys and none were stored. |
| `401` | `unauthorized` | See [Authentication](/docs/api/authentication/). |
| `500` / `503` | — | Vendor keys temporarily unavailable. Retry later. The raw key is not returned. |
