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

# Confirm Media Company identity

> Confirm company identity, seller product, and billing country in the pre-application Task

`POST /api/v2/media-company-intake/confirm`

The Media Company pre-application identity, seller-product, and billing-country Task
(see [Confirming your company](/v2/setup/storefront-onboarding#confirming-your-company-media-company-signup))
confirms four things in one call: the company name and domain, its mutable
seller product, the ISO billing country of the contracting company,
and baseline Terms of Service acceptance with Privacy Policy disclosure. This endpoint is gated to the
early-access cohort enrolled in the `media-company-intake` rollout; an
unenrolled caller never reaches it (see [Start intake](#start-or-resume-intake)
below).

Reusing the sign-up email's verified domain unedited marks identity
`VERIFIED`; correcting the domain to anything else is recorded as an
unverified applicant claim (`CLAIMED`) — never treated as proof of control.

The billing country is the **sole** input to `billingMarket.derivedPlanCurrency`.
There is no currency picker and no silent USD fallback: an unsupported country
returns `422 BILLING_COUNTRY_UNSUPPORTED` instead of a currency.

`operatingMode` is `LISTING_ONLY` or `AGENTIC_MEDIA_COMPANY`. Listing is
included in both choices. `LISTING_ONLY` lists and manages inventory without
Scope3 merchandising, using an agent operated by the company, a partner, or
another provider. The agent can be connected during setup; it does not need to
exist at signup.
`AGENTIC_MEDIA_COMPANY` adds Scope3's
hosted Merchandising Agent, which the company trains for its business; its inventory can come from an ad server, modular
source, external Agent, or linked Storefront. The choice can be changed later
in Account settings or with
`PATCH /api/v2/storefront`. The initial capability state commits atomically
with this intake revision. The intake response remains the original audit
answer after onboarding; `GET /api/v2/storefront` is the authority for the
current setting. It does not describe who authored an Agent, choose a package,
or change how an individual inventory Source is treated.

## Request

```bash curl theme={null}
curl -X POST https://api.interchange.io/api/v2/media-company-intake/confirm \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "expectedRevision": 1,
    "companyName": "Acme Media",
    "companyDomain": "acme.com",
    "billingCountryAlpha2": "US",
    "operatingMode": "LISTING_ONLY",
    "acceptedTermsOfService": true
  }'
```

| Field                    | Type                                          | Required | Notes                                                                                                                                                                                                                                                      |
| ------------------------ | --------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `expectedRevision`       | integer                                       | Yes      | Optimistic-concurrency fence — the durable application's current revision                                                                                                                                                                                  |
| `companyName`            | string                                        | Yes      | Confirmed or corrected company name                                                                                                                                                                                                                        |
| `companyDomain`          | string                                        | Yes      | Confirmed or corrected bare registrable domain (no scheme, no path)                                                                                                                                                                                        |
| `billingCountryAlpha2`   | string                                        | Yes      | ISO 3166-1 alpha-2 country of the contracting company — not the applicant's personal location                                                                                                                                                              |
| `operatingMode`          | `"LISTING_ONLY"` \| `"AGENTIC_MEDIA_COMPANY"` | No       | Mutable seller product: listing without Scope3 merchandising, or listing plus Scope3 merchandising. Current onboarding sends this field; omission remains accepted temporarily for clients deployed before the selector and leaves the product unselected. |
| `acceptedTermsOfService` | `true`                                        | Yes      | Must reflect genuine applicant agreement. Recorded as a durable, idempotent Terms of Service acceptance                                                                                                                                                    |

## Response

```json 200 confirmed theme={null}
{
  "applicationId": "app_123",
  "expectedRevision": 2,
  "status": "RESEARCHING",
  "identity": {
    "proposedName": "Acme Media",
    "proposedDomain": "acme.com",
    "confirmedName": "Acme Media",
    "confirmedDomain": "acme.com",
    "verificationState": "VERIFIED",
    "userConfirmed": true
  },
  "billingMarket": {
    "suggestedCountryAlpha2": null,
    "confirmedCountryAlpha2": "US",
    "userConfirmed": true,
    "derivedPlanCurrency": "USD"
  },
  "operatingMode": "LISTING_ONLY",
  "unresolvedQuestion": null
}
```

| Field                                                 | Type                                                   | Description                                                                                                               |
| ----------------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| `applicationId`                                       | string                                                 | Durable intake application id                                                                                             |
| `expectedRevision`                                    | integer                                                | Current revision — pass this back on the next confirm call                                                                |
| `status`                                              | string                                                 | One of `AWAITING_IDENTITY_CONFIRMATION`, `RESEARCHING`, `NEEDS_APPLICANT_INPUT`, `EXCEPTION_REVIEW`, `APPROVED`, `DENIED` |
| `identity.proposedName` / `identity.proposedDomain`   | string                                                 | The originally-proposed company name/domain, derived from the sign-up email                                               |
| `identity.confirmedName` / `identity.confirmedDomain` | string \| null                                         | The applicant-confirmed values, once confirmed                                                                            |
| `identity.verificationState`                          | `"VERIFIED"` \| `"CLAIMED"` \| `"CONFLICTING"` \| null | `VERIFIED` only when the confirmed domain matches the verified sign-up email's domain unedited                            |
| `identity.userConfirmed`                              | boolean                                                | Whether the applicant has confirmed identity                                                                              |
| `billingMarket.suggestedCountryAlpha2`                | string \| null                                         | A prefetched country suggestion, when available                                                                           |
| `billingMarket.confirmedCountryAlpha2`                | string \| null                                         | The applicant-confirmed billing country                                                                                   |
| `billingMarket.userConfirmed`                         | boolean                                                | Whether the applicant has confirmed the billing country                                                                   |
| `billingMarket.derivedPlanCurrency`                   | string \| null                                         | The plan currency Scope3 derives from the confirmed billing country — never client-supplied                               |
| `operatingMode`                                       | `"LISTING_ONLY"` \| `"AGENTIC_MEDIA_COMPANY"` \| null  | Original applicant intake selection; null before the applicant chooses. Read Storefront for the mutable current setting.  |
| `unresolvedQuestion`                                  | string \| null                                         | A single outstanding question, only when `status` is `NEEDS_APPLICANT_INPUT`                                              |

A `RESEARCHING` status starts a short, usually few-second, admission check.
Poll `GET /api/v2/media-company-intake` (below) to observe the transition to
`APPROVED` or another terminal/interactive status; refreshing or re-calling
this Task always resumes the same durable state rather than restarting it.

## Errors

* `400 VALIDATION_ERROR` — malformed request body.
* `403 FEATURE_NOT_ENABLED` — the caller is not enrolled in Media Company intake.
* `409 CONFLICT` — either no intake application exists yet (call
  `POST /api/v2/media-company-intake` first) or `expectedRevision` does not
  match the current durable revision (optimistic-concurrency conflict —
  re-read with `GET /api/v2/media-company-intake` and retry with the current
  revision).
* `422 BILLING_COUNTRY_UNSUPPORTED` — the confirmed billing country is not
  yet supported for plan billing. The response includes the rejected
  `countryAlpha2` in `details`; no currency is guessed.

See [Errors](/v2/reference/errors) for the full error contract.

## Start or resume intake

`POST /api/v2/media-company-intake` is the Task's idempotent open action —
call it first to create (or replay) the durable application seeded from the
verified sign-up email domain. It returns the same view shape as this
endpoint's 200 response above, and returns `403 FEATURE_NOT_ENABLED` when the
caller is not enrolled.

`GET /api/v2/media-company-intake` reads the current durable state without
creating one — use it to poll a `RESEARCHING` application, or to resume after
a page refresh or re-login. Returns `404 NOT_FOUND` when no application
exists yet.

## Related

<CardGroup cols={2}>
  <Card title="Storefront tasks" href="/v2/storefront/tasks" icon="list-check">
    All core storefront operations.
  </Card>

  <Card title="Get readiness" href="/v2/storefront/tasks/get-readiness" icon="circle-check">
    Check whether your storefront is ready to go live, once admitted.
  </Card>
</CardGroup>
