> For the complete documentation index, see [llms.txt](https://codemash.gitbook.io/codemash/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codemash.gitbook.io/codemash/cloud/emails/integrations/validation.md).

# Validation integrations

Email validation integrations (ZeroBounce, NeverBounce, Bouncer, Mailgun Validate) — API only, not active in sending yet.

**Where:** no screen — API, SDK and CLI only.

A validation integration connects an address-checking service (ZeroBounce, NeverBounce, Bouncer or Mailgun Validate) to the project, so Norbix can ask it whether an address is real before emailing it. Sending to addresses that do not exist hurts your sender reputation.

{% hint style="warning" %}
Cloud has no screen for this yet. Use the SDK, the CLI or the API below.

**Not working yet:** on the current gateway, saving a validation integration answers `A temporary internal error occurred. Reference: ref_…` (`CM-ERRORS-INFRA-NORBIX-001`) — the save command is not registered on the Hub. And even a saved one is not used: recipients are not checked before sending today, so the message status **BlockedByValidation** never appears. This page changes when both are fixed.
{% endhint %}

## Before you start

* An API key from the validation service, for example a ZeroBounce key.
* Permission `email:create` to save, `email:execute` to test (the test calls the real service and may use one of your paid checks).

## Steps

1. Save the integration through the API: `provider` = `ZeroBounce` (or `NeverBounce`, `Bouncer`, `MailgunValidate`), `integrationName`, `isEnabled` = `true`, `apiKey`. **Mailgun Validate** also takes `region` (`Us` or `Eu`).
2. Test it with the id you got back (`int_…`).
3. A campaign created through the API can name it in `validationIntegrationId`. The campaign form has no such field.

## Result

Today step 1 fails with the internal error above. When it works, the save returns the integration id and the test answers with success or the service's error. The key is stored encrypted and never returned; validation integrations are kept per environment.

## Change or remove it later

There is no list, edit or delete call for validation integrations yet.

## Do it from code

```ts
const { id } = await norbix.hub.notifications.saveEmailValidationIntegration({
  projectId,
  integration: { provider: 'ZeroBounce', integrationName: 'ZeroBounce (example)', isEnabled: true, apiKey: process.env.ZEROBOUNCE_API_KEY ?? 'made-up-key' },
});
// today: throws "A temporary internal error occurred. Reference: ref_…"
```

```sh
norbix hub notifications email validation integration save --projectId "$NORBIX_PROJECT_ID" --integration '{"provider":"ZeroBounce","integrationName":"ZeroBounce (example)","isEnabled":true,"apiKey":"made-up-key"}'
```

API: [Save Email Validation Integration](/codemash/api-reference/notifications/email/save-email-validation-integration.md) · [Test Email Validation Integration](/codemash/api-reference/notifications/email/test-email-validation-integration.md)
