> ## Documentation Index
> Fetch the complete documentation index at: https://www.edenai.co/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Static IP

> Have Eden AI fetch your file URLs from a fixed European IP address you can whitelist on your own servers.

export const TechArticleSchema = ({title, description, path, articleSection, about, proficiencyLevel = "Beginner", dependencies, keywords = [], datePublished, dateModified, image, inLanguage = "en"}) => {
  const baseUrl = "https://www.edenai.co/docs";
  const canonicalUrl = `${baseUrl}/${path}`.replace(/\/+$/, "");
  const ogParams = new URLSearchParams({
    division: articleSection || "",
    title: title || "",
    description: description || ""
  });
  const resolvedImage = image || `https://edenai.mintlify.app/_mintlify/api/og?${ogParams.toString()}`;
  const data = {
    "@context": "https://schema.org",
    "@type": "TechArticle",
    "@id": `${canonicalUrl}#techarticle`,
    mainEntityOfPage: {
      "@type": "WebPage",
      "@id": canonicalUrl
    },
    headline: title,
    name: title,
    description: description,
    url: canonicalUrl,
    inLanguage: inLanguage,
    isPartOf: {
      "@type": "WebSite",
      name: "Eden AI Documentation",
      url: baseUrl
    },
    author: [{
      "@type": "Organization",
      name: "Eden AI",
      url: "https://www.edenai.co/"
    }],
    publisher: {
      "@type": "Organization",
      name: "Eden AI",
      url: "https://www.edenai.co/",
      logo: {
        "@type": "ImageObject",
        url: "https://www.edenai.co/assets/logo.png"
      }
    }
  };
  if (articleSection) data.articleSection = articleSection;
  if (about) data.about = {
    "@type": "Thing",
    name: about
  };
  if (proficiencyLevel) data.proficiencyLevel = proficiencyLevel;
  if (dependencies) data.dependencies = dependencies;
  if (keywords && keywords.length) data.keywords = keywords;
  if (datePublished) data.datePublished = datePublished;
  if (dateModified) data.dateModified = dateModified;
  data.image = Array.isArray(resolvedImage) ? resolvedImage : [resolvedImage];
  const json = JSON.stringify(data);
  const schemaId = `techarticle-${canonicalUrl}`;
  React.useEffect(() => {
    if (typeof document === "undefined") return;
    document.querySelectorAll(`script[data-schema-id="${schemaId}"]`).forEach(n => n.remove());
    const script = document.createElement("script");
    script.type = "application/ld+json";
    script.dataset.schemaId = schemaId;
    script.textContent = json;
    document.head.appendChild(script);
    return () => script.remove();
  }, [json, schemaId]);
  return null;
};

<TechArticleSchema title={"Static IP"} description={"Have Eden AI fetch your file URLs from a fixed European IP address you can whitelist on your own servers."} path="v3/data-governance/static-ip" articleSection="Data Governance" about={"Data Compliance"} proficiencyLevel="Intermediate" keywords={["Eden AI", "AI API", "static IP", "IP whitelisting", "whitelist IP address", "allowlist", "firewall", "data residency"]} datePublished="2026-09-15T00:00:00Z" dateModified="2026-09-15T00:00:00Z" />

When you send a file as a URL instead of an upload, Eden AI has to reach out to that URL and download the file. By default those downloads leave our infrastructure from a shared pool of addresses that changes over time, which is a problem if the file sits behind a firewall or an IP whitelist on your side.

Static IP is an opt-in feature: once it is enabled on your organization, Eden AI fetches your file URLs through a dedicated egress proxy with a fixed address, so you can whitelist it once on your firewall and forget about it.

## The address to whitelist

We send you the address before we enable the feature for your organization, so you can whitelist it first, rather than publishing it here. What you can plan for in advance:

|           | Value                                                              |
| --------- | ------------------------------------------------------------------ |
| Format    | A single IPv4 address, not a range, so one firewall rule covers it |
| Location  | Paris, France (AWS `eu-west-3`)                                    |
| Direction | Outbound only, from Eden AI to your server                         |

The proxy runs in the same European region as the rest of Eden AI's infrastructure, so enabling it does not move any processing outside the EU. See [Servers Location](/docs/v3/data-governance/servers-location).

<Note>
  Whitelist the single address we give you, not the whole AWS range. We give notice before the address ever changes.
</Note>

## What it covers

Static IP applies to files **Eden AI downloads on your behalf**:

* Any [Universal AI](/docs/v3/quickstart/first-expert-model-call) call where `input.file` is a URL rather than a file ID from `/v3/upload`: OCR and the document parsers, image, video, translation
* Both synchronous and asynchronous features, including the fetch performed by a queued job
* Audio file URLs for speech-to-text

It does **not** apply to:

* **Inbound requests.** This is about traffic leaving Eden AI, not reaching it. Your calls to `api.edenai.run` are unaffected, and you do not need to whitelist anything to call the API.
* **Direct uploads.** If you send the file through `/v3/upload` or as raw bytes, nothing is fetched from your side, so there is no egress to whitelist.
* **Image URLs sent to an LLM.** Those URLs are passed through to the model provider, which fetches them from its own infrastructure. Whitelisting Eden AI's address will not help there. Upload the image or send it as base64 instead.
* **Calls to AI providers and webhook deliveries**, which keep using standard egress.

## Enabling it

Static IP is enabled per organization by the Eden AI team, not from the dashboard.

1. [Contact support](/docs/v3/general/support) and ask for static IP on your organization. Use the chat bubble on this page or your dedicated channel.
2. Tell us your organization name, and which hosts you will be fetching files from.
3. We send you the address to whitelist. Add it to your firewall rules.
4. Once your rule is in place, we enable the feature on your organization and your file fetches start going through it.

Once enabled it applies to every member of the organization and to every API key it owns. Nothing in your integration changes: the same `input.file` URL you already send is simply fetched from a known address.

<Tip>
  Confirm your firewall rule is live before we flip the flag. Fetches move to the proxy the moment it is on, so a missing rule means downloads start failing.
</Tip>

## Next Steps

<CardGroup cols={2}>
  <Card title="Servers Location" icon="location-dot" href="/docs/v3/data-governance/servers-location">
    Where Eden AI and its providers process your data
  </Card>

  <Card title="EU Endpoint" icon="earth-europe" href="/docs/v3/data-governance/eu-endpoint">
    Route requests through EU-eligible providers via api.eu.edenai.run
  </Card>
</CardGroup>
