Skip to main content
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

  1. In ChatGPT, open SettingsSecurity and login.
  2. Turn on Developer mode. Availability depends on the ChatGPT account and workspace policy.
  3. Open the ChatGPT Plugins page and select the plus button.
  4. Complete New Plugin with these values:
  1. Review the custom-server warning and select I understand and want to continue only if the endpoint exactly matches your private-label handoff.
  2. 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.
  3. 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:
  1. the app name and icon in ChatGPT;
  2. the plugin selected for a new conversation;
  3. get_status confirming the review account;
  4. at least one representative read workflow;
  5. the confirmation and result for a safe demo write, when the app supports writes; and
  6. 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:
  1. Enter the owner-approved listing name, subtitle, description, category, and public website, support, privacy, and Terms URLs.
  2. Upload the exact 256 × 256 directory PNG and 48 × 48 composer PNG.
  3. 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.
  4. Select Verify DNS and HTTPS. Only an approved hostname-to-account mapping can affect MCP identity, OAuth resource URLs, UI origin, or branding.
  5. 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.
  6. 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.