# Set up ads.txt and sellers.json

`ads.txt` on your domain and your entry in Genuin's `sellers.json` tell buyers that Genuin, and any partner ad server you use, are authorized to sell your inventory; without them most programmatic demand will not bid. Reading time about 5 minutes.

## What Brand Control Center (BCC) generates

Under **Monetize → Sellers**, BCC produces the exact lines for your domain and, if you have apps, for `app-ads.txt`. Each line names the seller domain, your seller account ID, the relationship (DIRECT or RESELLER), and the certification authority ID. Your entry in Genuin's `sellers.json` is created automatically from your legal entity in [Choose your monetization agreement](https://begenuin.com/developers/get-started/any-business/choose-monetization-agreement).

## Steps

1. Copy the generated lines.
2. Publish them at `https://yourdomain.com/ads.txt` (append if the file exists). For apps, publish `app-ads.txt` on the developer website listed in the app store.
3. If your site cannot host a root file, choose **Use DNS redirect** and add the CNAME BCC shows.
4. For partner ad servers, add the lines that platform gives you as well; both sets must be present.
5. Choose **Verify**. BCC crawls, validates syntax, and shows any missing or duplicate lines.

## Keeping it current

BCC re-crawls daily and alerts the Revenue role (see [Invite your team and assign roles](https://begenuin.com/developers/get-started/any-business/invite-team-assign-roles)) if a line disappears. Adding a demand partner (see [Add brand partners and demand partners](https://begenuin.com/developers/get-started/any-business/add-partners)) that sells your inventory adds a line; BCC shows the diff for approval.

## Common errors

| Error | Fix |
| --- | --- |
| 404 on /ads.txt | Publish at the root, not in a subfolder; check CDN caching |
| Wrong relationship | Use the relationship BCC shows; do not change RESELLER to DIRECT |
| Subdomain mismatch | ads.txt lives on the root domain; subdomains inherit it |

## How it runs

The demand setup, packages, agreements, and seller files described here are drafted for you, priced against your floors and brand safety profile, and switched on only with your approval; money never moves on a change you did not approve.

**Support.** Help is available 24/7 from Brand Control Center and from every page of these docs. Ask in plain language; when a person is needed, an account manager, developer, or Ops engineer joins the same thread and stays on it until it is resolved. Every Business Account owner has this on every plan (see [24/7 Octo support: how Octo brings in account managers, developers, and Ops](https://begenuin.com/developers/get-started/any-business/24-7-octo-support-how-octo-brings-in-account-managers-developers-and-ops)).

## API & SDK

Access: the calls in the table are the proposed Business Account API (see [Business Account API: provisioning, OAuth, and the resource map](https://begenuin.com/developers/get-started/any-business/business-account-api-provisioning-oauth-and-the-resource-map)), authenticated with a key scoped to the account and a role or an OAuth client acting for it; every confirmation in this article becomes a proposal you can approve by API (`POST /proposals/{proposalId}:approve`). Live today, the server API under `/api/thirdparty` authenticates with a `gn-access-token` (see [Generate an access token](https://begenuin.com/developers/developer-resources/api/generate-access-token-using-authentication-api)), and [Live API today and the Business Account API roadmap](https://begenuin.com/developers/developer-resources/guides/live-api-today-and-the-business-account-api-roadmap) maps what is live to what is proposed.

| Call | Purpose |
| --- | --- |
| GET /brands/{brandId}/seller-files | ads.txt, app-ads.txt, and sellers.json lines per domain and app, with verification state |
| POST /brands/{brandId}/seller-files:verify | Re-crawl and validate seller files |

```js
// proposed server SDK (Business Account API)
import { Genuin } from '@genuin/sdk';
const genuin = new Genuin({ apiKey: process.env.GENUIN_KEY });
await genuin.sellerFiles.get(brandId);
await genuin.sellerFiles.verify(brandId);
```

Live today: [Go live with monetization in your feeds, apps, and partner pages](https://begenuin.com/developers/developer-resources/sdk/go-live-with-monetization-in-your-feeds-apps-and-partner-pages).

SDKs: Web SDK (see [Embed the Genuin Web SDK on your website](https://begenuin.com/developers/developer-resources/sdk/how-do-you-embed-and-configure-the-genuin-web-sdk-on-your-website)), iOS SDK (see [Integrate the Genuin iOS SDK](https://begenuin.com/developers/developer-resources/sdk/developer/genuin-sdk/native-compatibility/ios/how-to-integrate-and-power-your-brand-community-in-ios-apps)), Android SDK (see [Integrate the Genuin Android SDK](https://begenuin.com/developers/developer-resources/sdk/how-to-integrate-and-power-your-brand-community-in-android-apps)), React Native (see [Integrate the Genuin SDK with React Native apps](https://begenuin.com/developers/developer-resources/sdk/how-do-you-integrate-the-genuin-react-native-sdk-into-your-application)), and Flutter (see [Integrate the Genuin SDK with Flutter apps](https://begenuin.com/developers/developer-resources/sdk/how-do-you-integrate-the-genuin-flutter-sdk-into-your-application)) render Genuin and sign members in; the Node (`@genuin/sdk`) and Python (`genuin`) server SDKs are proposed with [Business Account API: provisioning, OAuth, and the resource map](https://begenuin.com/developers/get-started/any-business/business-account-api-provisioning-oauth-and-the-resource-map).
