Partner Launch API
Review the Feel.cash Partner Launch API for approved teams, including authentication, supported chains, and one-call or prepare-and-execute launches.
Access by approval. The API contract is public, but API keys and sponsored allowances are available only to approved Feel partners.
The Feel Partner Launch API lets an approved team launch official Feel coins on Base or Robinhood Chain from its own server. Base remains the default when the request omits chain. The API supports both a one-call launch and an optional two-step prepare -> execute flow that reveals the future CREATE2 contract address before deployment.
The API is ready for approved pilot integrations. The production base URL is:
https://api.feel.cashWhat makes a launch official
An official Feel launch must pass through the Feel app or this API. Feel then:
validates the launch configuration;
records durable creator and launch provenance;
applies the official Creator Fees settlement;
indexes the coin and makes it available on Feel;
enforces idempotency, quotas, and recovery;
uses the same versioned Doppler recipes as the Feel launch UI.
Doppler Airlock remains permissionless. Calling it directly is possible, but that deployment is not automatically treated as an official Feel launch and does not automatically receive Feel attribution, Creator Fees settlement, or listing.
Partner attribution is private backend provenance. The partner name, API key, client ID, and API launch source are not added to the token contract or public token metadata, and Feel does not display a public “partner launch” label. The normal creator account remains visible in the same places as a launch made through the Feel UI.
Partner API or x402?
Feel offers two separate server-to-server launch lanes:
Access
Approved Feel account and API key
Public; no API key
Identity
Creator is derived from the approved key
Accountless launch with later ownership claim
Payment
Sponsored pilot allowance
1 USDC per launch through x402
Future CA
Optional prepare -> execute
One-call payment flow
Chains
Base or Robinhood Chain
Base or Robinhood Chain
Limits
Client quota and minimum interval
Payment and public API limits
Use the Partner API when the launch must belong to an approved Feel creator, use Feel Creator Fees settlement immediately, or expose the future CA before deployment. Use x402 for an accountless agent or service that can pay per launch and does not need an invite-only credential.
Request access
Access is tied to one Feel account and is granted manually.
Sign in to Feel.cash.
Open Account -> Developer.
Enter your work email and briefly describe what you are building.
Select Request API access.
Wait for the Feel team to review the request.
After approval, refresh Account -> Developer.
Select Create API key.
Copy the full key immediately into your server-side secret manager.
The full key is revealed only once. Feel stores a hash, not the plaintext key, so it cannot be shown again later. The pilot does not offer self-service key rotation or revocation. If a key may have been exposed, contact the Feel team through your partner channel without including the key itself.
An approved account can create only one pilot key. A second key-creation attempt is rejected with 409 api_key_already_created. This is an Account -> Developer key-management error, not a launch endpoint error.
The approved team decides which of its backend services may use the key. Do not share it with end users or put it in client-side software.
Protect the API key
Keys have this form:
Treat the key like a production signing credential:
use it only from a trusted backend;
store it in a secret manager or encrypted environment variable;
never put it in browser, mobile, desktop, or bot client code;
never commit it to source control;
never include it in a URL or query parameter;
never paste it into Telegram, Slack, email, support tickets, logs, analytics, or error trackers;
never expose it through a frontend proxy endpoint.
Send it only in the Bearer authorization header:
Choose a launch workflow
Both workflows create the same type of official Feel launch.
Direct launch
Use POST /v1/partner/launches for a one-call experience. Feel validates, prepares, sponsors, and deploys the launch. Internally, the backend still builds and simulates the CREATE2 deployment before broadcasting.
This is the simplest choice when you do not need the contract address in advance.
Prepare, then execute
Use POST /v1/partner/launches/prepare when you need the future contract address before deployment—for example, to prepare separately signed buys, bundles, monitoring, or indexing infrastructure.
prepare validates and resolves the inputs, reserves the Feel identity and slug, freezes the Doppler configuration, mines the vanity salt, simulates the deployment, and returns the predicted CREATE2 address.
It is not a premint:
no contract exists onchain;
no supply exists;
no transaction is signed or broadcast;
no sponsored launch allowance is consumed.
The prepared reservation is valid for at most 24 hours and occupies the client's single active-job slot. execute reloads and deploys exactly that persisted configuration. The request cannot replace its address, curve, fee wallets, salt, token URI, or other deployment parameters.
Request schema
Direct and prepared launches accept the same JSON body.
Provide either prompt, or both name and symbol. Explicit fields take precedence over values inferred from prompt.
prompt
string
1–2,000 characters
name
string
1–50 characters
symbol
string
1–12 characters; starts with A–Z; remaining characters A–Z or 0–9
chain
string
base (default) or robinhood
listed
boolean
false (default) keeps the coin unlisted; true opts into Feel.cash UI discovery
description
string or null
Up to 500 characters
imagePrompt
string or null
1–2,000 characters; used only when image is omitted
image
object or null
Final image source as inline base64 or a trusted Feel CDN URL; takes precedence over imagePrompt
socials.x
HTTPS URL or null
Up to 2,048 characters
socials.telegram
HTTPS URL or null
Up to 2,048 characters
socials.website
HTTPS URL or null
Up to 2,048 characters
launchMode
string
standard, the only supported value; may be omitted
tradeFeelingPreset
string
balanced (default), fast-start, or late-rush
disableReferralFee
boolean
Set to true to remove the 0.15% referral fee and use a 1.35% terminal swap fee; omitted/false keeps the standard 1.50% fee
Unknown fields are rejected.
Choose a chain
Set chain explicitly when launching on Robinhood Chain:
Omitting chain launches on Base. Partner launches use Feel's server-owned Doppler configuration and WETH pairing on both networks. The selected chain is part of the idempotent launch identity and cannot be changed between retries, preparation, and execution.
Choose visibility
Partner launches are unlisted by default. Omit listed or send "listed": false to keep the coin out of Feel.cash UI discovery surfaces: feeds, featured placements, search, and public profiles. It is also omitted from the sitemap.
An unlisted coin is still live: its direct coin page, trading, and holdings remain available. Send "listed": true when the coin should appear in Feel.cash UI discovery.
Feel fixes the visibility choice during preparation. Retrying or resuming the same idempotent job preserves the original value, and execute cannot change it.
Images
Send an inline JPEG, PNG, or WebP image as base64:
The encoded data value may contain up to 7,000,000 characters.
A URL reference is accepted only when it is an HTTPS asset already hosted on Feel's trusted CDN. Arbitrary remote image URLs are not fetched.
An explicit image is authoritative and is not regenerated or visually modified by AI. If both image and imagePrompt are present, Feel uses image and ignores imagePrompt.
Feel still validates and normalizes the supplied file before storing it on its trusted CDN. The server auto-rotates it, crops it to a 1,024 × 1,024 square, flattens transparency onto a white background, and encodes it as JPEG at 90% quality. This preserves the supplied visual rather than creating a new one, but it is not a byte-for-byte copy of the upload. The approved partner remains responsible for the image content it submits.
If no explicit image is supplied, Feel can generate one from imagePrompt, the launch prompt, or the resolved coin identity.
Trade Feeling presets
Every partner launch uses the standard launch mode, which supports the named Trade Feeling presets:
Available presets are balanced (the default), fast-start, and late-rush.
Degen mode has been retired. Requests that send launchMode: "degen" or disableSniperFees are rejected with HTTP 400.
Unsupported overrides
The pilot is intentionally narrow and uses WETH pairing and Feel-owned configuration on both supported chains. Do not send:
unsupported chain values or pair-token overrides;
userId, creator ID, partner ID, or client ID;creator-wallet or fee-recipient overrides;
raw salt, pool, tick, curve, hook, gas, or transaction parameters;
developer-buy fields such as
devBuyUsd.
The creator identity and fee ownership are derived exclusively from the Feel account approved for the API key. The key authorizes launching; it does not authorize spending funds from the creator's wallet. A partner may use the prepared contract address for its own separately authorized transactions.
Idempotency
Every logical launch must use a stable UUID in the Idempotency-Key header:
Generate the UUID once and persist it with your launch record. Repeating the same endpoint with the same key and identical body returns or resumes the same job. It does not create a second launch or consume quota twice.
Token names, symbols, and descriptions do not need to be unique. To create a new token and contract address with identical metadata, use a new Idempotency-Key. Reusing the same key with an identical request returns the existing job and contract address; reusing it with different content returns 409 idempotency_conflict.
Reusing the key with different content—or switching between direct and prepared execution—returns 409 idempotency_conflict.
After a timeout, connection reset, ambiguous 5xx, or process crash, do not invent a new key. Retry the original request first.
Direct launch quickstart
The endpoint returns 201 when the launch finishes during the request, 202 while durable work continues, or 422 for a terminal launch failure.
Prepare and execute quickstart
1. Prepare
A completed preparation returns 201:
A response may initially be 202. Poll statusUrl or retry the same prepare request until prepared is non-null.
2. Confirm no deployment yet
Before execution, the returned address has no contract bytecode. This is an optional integration check:
The result should be 0x before execute.
3. Execute
The execute body is empty:
Do not send a new launch body or a new idempotency key to execute. Repeating the endpoint is safe and returns the same durable job and deployment result.
Check job status
Only a key belonging to the same approved client can access the job.
Public job statuses are pending, processing, succeeded, and failed.
A successful response contains the final address and transaction:
Poll with exponential backoff and jitter. A reasonable starting interval is 2 seconds, capped around 15 seconds. Stop on succeeded or failed.
If preflight stopped before its resolved snapshot was persisted, GET cannot reconstruct removed inline image bytes. Retry the originating POST with the same body and Idempotency-Key. A status read may resume a direct job or an already accepted execution, but it never executes an unaccepted prepared job.
TypeScript example
In production, validate response JSON at runtime and handle 202, 409, 422, 429, and retryable 503 responses explicitly.
Sponsored pilot limits
Default limits are shown in Account -> Developer and enforced per approved client:
20 accepted launches per rolling 24 hours;
at least 60 seconds between accepted launches;
one active launch job at a time;
one non-expiring product key.
prepare alone does not consume launch allowance. Allowance is consumed when execute crosses the atomic sponsorship boundary. Direct launch crosses that boundary within its one-call flow. Retrying an already accepted job does not consume another allowance.
An abandoned unaccepted job stops blocking a different idempotency key after 25 hours when it has no live worker lease. A prepared reservation normally expires after 24 hours.
Errors
Except for validation failures, immediate request errors return an HTTP status and stable code:
400
no code
Header or body validation failed; the body contains error, details, and optionally formErrors
401
invalid_api_key
Key is missing, malformed, expired, revoked, or incorrect
403
api_access_disabled
Feel disabled the approved client
404
launch_not_found
The job does not exist for this client
409
idempotency_conflict
The UUID was reused with different content or execution mode
409
launch_in_progress
Another launch for the client is active
409
launch_not_prepared
Execute was requested before preparation completed
409
invalid_execution_mode
Execute was requested for a direct-launch job
409
prepared_launch_expired
The prepared reservation expired
409
prepared_configuration_changed
Executable parameters no longer match the prepared hash
429
launch_rate_limited
The minimum launch interval has not elapsed
429
launch_quota_exceeded
The rolling sponsored allowance is exhausted
503
persistence_unavailable
Durable storage or authentication is temporarily unavailable
Execution-stage failures are persisted on the durable job in its error field. Terminal failures return the job with HTTP 422; retryable failures normally return the job with HTTP 202 so the same operation can be resumed:
HTTP
Job error
Meaning
422
content_rejected
Content policy rejected the request
422
image_rejected
The image could not be accepted
422
terminal launch code
The launch cannot succeed without changed input
202
preflight_unavailable
Text, image, moderation, or simulation work is temporarily unavailable
202
prepare_unavailable
The reserved launch could not be prepared yet
202
sponsorship_unavailable
The sponsorship boundary could not be completed yet
202
launch_unavailable
Deployment or recovery is temporarily unavailable
The 202 and 422 rows above describe responses from the operation POST endpoints. GET /v1/partner/launches/<job-id> normally returns HTTP 200 for a job that exists, including one with a persisted failure. Always inspect its status and error fields.
Invalid or unsupported public options fail request validation with HTTP 400. For example, an unknown tradeFeelingPreset or the retired launchMode: "degen" is a validation error. The internal unsupported_configuration guard is a defensive 422 for a resolved launch that violates a server invariant; schema-valid partner requests should not normally encounter it.
429 responses include Retry-After when available. Respect it before retrying. For retryable failures, reuse the original request and idempotency key.
Ownership and Creator Fees
The API key maps to one approved Feel account. Feel derives the canonical creator and fee ownership server-side; requests cannot redirect either one.
The resulting coin follows the same ownership, Creator Fees, recovery, and public Feel indexing path as a launch made in the app. The public contract and metadata do not reveal the partner client or API key.
Front-running considerations
Revealing a CREATE2 address before deployment necessarily creates a window in which other parties know the future CA. Feel fails closed if bytecode appears at that address before Feel broadcasts, unless Feel's durable send ledger proves the deployment was broadcast by Feel. The API never adopts an unproven third-party deployment as an official launch.
Partners remain responsible for the privacy and ordering of any transactions they prepare around the predicted address.
Support and security
Use your Feel partner channel for onboarding, quota, and operational questions. Never paste an API key into that channel.
If a credential may have been exposed:
stop sending new requests with it;
contact the Feel team immediately through the partner channel;
provide the visible key prefix or last four characters, never the secret;
wait for the team to disable or replace the key through internal tooling.
For public market data that does not require launch authorization, use the Public API v1.
Last updated
Was this helpful?

