Use this guide to test an Interchange-powered, customer-branded app in ChatGPT
before preparing its public submission. ChatGPT currently labels this
developer-mode connection a Plugin.
A developer-mode connection is private test configuration. Its name, icon, and
description do not publish an app, change the Interchange MCP server’s
identity, or automatically carry into another customer’s submission.
Before you start
You need:
- a ChatGPT account or workspace that permits Developer mode;
- an Interchange account with access to a buyer or seller account enrolled in
the v3 preview that you will demonstrate;
- an owner-approved app name and short description; and
- a square PNG icon, ideally 256 x 256 pixels and no larger than the limit
displayed by ChatGPT. The current form accepts at most 10 KB.
Use a review or demo account with representative data. Do not record production
credentials, access tokens, private customer data, or real campaign spend.
1. Add your plugin in Developer mode
- In ChatGPT, open Settings → Security and login.
- Turn on Developer mode. Availability depends on the ChatGPT account and
workspace policy.
- Open the ChatGPT Plugins page and select the
plus button.
- Complete New Plugin with these values:
- Review the custom-server warning and select I understand and want to
continue only if the endpoint exactly matches your private-label handoff.
- Select Create and complete the app’s sign-in flow with a reviewer whose
home Interchange account is the account assigned to this private-label app.
The hostname is account-bound and refuses a different active account.
- Review the tools and metadata ChatGPT discovers from the server.
If ChatGPT cannot create the connection, copy the private-label URL from the
handoff again, check that OAuth is selected, and confirm that your workspace
allows custom MCP servers. Do not edit the URL path or fall back to the shared
Interchange endpoint. The v3 authentication guide explains
which Interchange account and permissions the login grants.
2. Verify the connection
Start a new chat, enable the plugin from the tools menu, and ask:
Confirm that the result names the assigned account before demonstrating any
workflow. If it does not, reconnect with the dedicated reviewer identity for
that account; do not switch a private-label app into another account. Then test
the exact prompts you plan to give reviewers:
- a read that returns useful account data;
- a representative write that shows the expected confirmation before it runs;
- a follow-up that reuses an identifier from the prior result; and
- an unsupported or unsafe request that produces the intended clarification,
refusal, or safe fallback.
Use demo fixtures for writes and stop before creating real spend. If you change
tool metadata or deploy a server update, refresh the connection and rerun the
tests in a new conversation.
3. Record the review video
Record one clean end-to-end session while the developer-mode plugin is enabled.
The recording should show:
- the app name and icon in ChatGPT;
- the plugin selected for a new conversation;
get_status confirming the review account;
- at least one representative read workflow;
- the confirmation and result for a safe demo write, when the app supports
writes; and
- the expected behavior for one negative test.
Keep the browser URL, app identity, prompts, confirmations, and final results
legible. Hide password-manager overlays, credentials, OAuth tokens, personal
data, internal admin screens, and unrelated browser tabs. Store the recording
in the customer’s approved file-sharing system; do not commit video files to a
source repository.
The video is part of the submission handoff and a useful reproduction artifact.
OpenAI’s portal requirements can change, so check the live form to determine
whether to upload the recording, link it, or retain it for reviewer follow-up.
For reference, watch the
example review video created for the Interchange app.
4. Prepare the public submission
Developer-mode branding is not a public listing. The intended handoff is one
app-specific submission bundle rather than a request to assemble each upload by
hand. An account admin prepares it in Settings → ChatGPT app:
- Enter the owner-approved listing name, subtitle, description, category, and
public website, support, privacy, and Terms URLs.
- Upload the exact 256 × 256 directory PNG and 48 × 48 composer PNG.
- Enter a dedicated hostname, then create both displayed DNS records: the
tenant-specific TXT ownership challenge and the CNAME routing target. The
hostname must also have a valid HTTPS certificate. A DNS provider that
proxies the CNAME and supplies the certificate is supported: activation
verifies a same-host routing proof when public DNS flattens the CNAME record,
but that routing proof never replaces the tenant-specific TXT proof.
- Select Verify DNS and HTTPS. Only an approved hostname-to-account mapping
can affect MCP identity, OAuth resource URLs, UI origin, or branding.
- Paste the OpenAI verification token. Its displayed challenge URL returns the
raw token and nothing else. Replacing the hostname clears the token and
approval; replacing or removing the token requires explicit confirmation.
- Download the submission bundle.
The bundle contains:
chatgpt-app-submission.json with the current tool annotations and test
prompts for the private-label app;
- the approved 256 x 256 directory icon and 48 x 48 composer icon;
listing.json with the approved listing fields, exact production MCP URL,
and widget domain;
- UI CSP and generated tool-annotation review files;
- a release-note draft and link to the current public guide;
- a reviewer checklist with the public URLs, MCP server, credential controls,
recording reminder, and fresh-scan reminder; and
- a README and a plain-text list of test prompts.
OpenAI performs the live tool and skill scans in the submission portal. Review
those results there immediately before submission; they are not cached in the
downloaded ZIP.
The verification token is public at the challenge URL but deliberately excluded
from the ZIP, logs, and reviewer handoff. Never reuse another customer’s bundle
or replace its exact private-label MCP URL with the shared Interchange endpoint.
The publisher still completes the requirements that cannot safely be generated:
- select the verified business or individual identity that will publish the
app;
- confirm Apps Management write access for each submitter;
- confirm the domain-verification challenge published from Settings before
pressing Verify in OpenAI;
- create a dedicated, least-privileged reviewer identity on a synthetic,
no-spend demo account. Deliver its credentials only through the submission
portal, ensure they work without MFA, SMS, email confirmation, or
private-network access, and rotate or revoke them when review ends;
- approve country availability, policy attestations, and the generated listing
and release copy; and
- approve the final review video and its sharing location.
Follow OpenAI’s current submission guide
when completing the portal. Scan the production server again immediately before
submission and review every discovered tool, annotation, skill, domain, and
validation result.
Understand the white-label boundary
Interchange does not infer ChatGPT branding or publisher details from an AdCP
partner registration, seller profile, or MCP connection. In particular:
- adding a partner AdCP endpoint does not turn it into a ChatGPT MCP endpoint;
- a customer’s logo and listing copy must be uploaded in that customer’s
developer-mode configuration and public submission;
- the verified publisher identity, public policies, and support details must
match the organization submitting the app. When the app uses Interchange,
the customer’s privacy policy must also disclose the relevant Interchange
data handling; and
- a customer-owned MCP host requires its own production endpoint, OAuth
metadata, tools, annotations, UI resources, security review, and submission.
Do not use the shared https://api.interchange.io/mcp/v3 endpoint for a
private-label Developer-mode connection or public submission. OpenAI verifies
one exact token at the host-level /.well-known/openai-apps-challenge path;
changing only the MCP URL path cannot separate multiple app challenges on the
same host.
A customer-owned public app therefore needs either a dedicated,
customer-controlled hostname that serves its MCP, OAuth, and verification
challenge, or an explicit arrangement approved by both Interchange and OpenAI.
Control of an Interchange account does not grant control of the
api.interchange.io domain.