Docs / Agent API
Agent API
Everything Flypify does, callable by your AI agent: find winning products, the ads already selling them and where to source them, then build the store, connect a domain and set up the ad campaign. 76 capabilities over REST or MCP, with one API key.
- capabilities
- 76
- capabilities
- that build or edit
- 32
- that build or edit
- protocols: REST, MCP
- 2
- protocols: REST, MCP
Quickstart
Create a key in your account under AI agent access, then send it as Authorization: Bearer flypify_live_… (or X-Flypify-Key). The base URL is https://api.flypify.com/api/v1.
# Who am I, what can my plan call?
curl https://api.flypify.com/api/v1/me \
-H "Authorization: Bearer $FLYPIFY_KEY"
# Ranked winning products in a category
curl "https://api.flypify.com/api/v1/products/discover?category=Health&sort=Rising&limit=10" \
-H "Authorization: Bearer $FLYPIFY_KEY"
# AliExpress candidates for a product
curl "https://api.flypify.com/api/v1/suppliers/match?title=posture+corrector" \
-H "Authorization: Bearer $FLYPIFY_KEY"
# The winning ads in a niche
curl "https://api.flypify.com/api/v1/ads/search?niche=Health&limit=10" \
-H "Authorization: Bearer $FLYPIFY_KEY"Responses are JSON. GET /api/v1 lists every capability (and, with a key, which ones your plan can call); the full machine-readable contract is openapi.json, which agent frameworks can load as tools directly.
From idea to a selling store
- Find. products.discover ranks winners; products.get returns the supplier link, landed cost and forecast.
- Verify. ads.search and brands.search show the ads already scaling the product; suppliers.match finds more AliExpress options.
- Sell. store_products.push puts it in Shopify as a draft, or whop_store.add_product lists it with checkout.
- Brand. storefront.update and storefront.brand set up the store; domains.attach connects your domain.
- Advertise. ads.copy and ads.create_creative make the ad, campaigns.create drafts the campaign, launch_preview shows the cost.
Plans, limits and money
- The Agent API is part of Pro and Shipper. Pro covers discovery and reads (products, ads, brands, suppliers, your stores) and pushing winners to Shopify. Shipper adds everything that builds, edits or advertises: storefronts, pages, domains, Whop products, campaigns, and winning-ad reveals. Free accounts get
402 subscription_required. - Daily call limits per account: Pro 2,000, Shipper 20,000 (reset 00:00 UTC). A few capabilities that call AI models or AliExpress have their own daily cap, shown on each one. Your plan’s own budgets still apply underneath, for example product reveals.
- Calls that charge credits or start ad spend (building a page, launching or resuming a campaign) answer
403 agent_spend_disabledfor now: your agent prepares everything, and you press launch in the app.campaigns.launch_previewalways shows exactly what a launch would charge. - Connecting Shopify, Whop or an ad account is a one-time human click in the app; after that your agent can use them.
Capability reference
Product discovery · 16
Winning products with revenue, margin, saturation and a forecast band, plus trends, TikToks and upsells.
- GET
/products/discoverRanked winning products with revenue, margin, saturation and a forecast band. Filter by category, sort by Best/Newest/Profit/LowRisk/Rising.
query: category?, sort? (Best|Newest|Profit|LowRisk|Rising), interest?, limit?
products.discoverPro + ShipperUses plan budget - GET
/products/searchSearch the winners you have already revealed by keyword; locked_count says how many more match.
query: q, niche?, limit?
products.searchPro + Shipper - POST
/products/search/refreshReveal a fresh batch of winners matching a keyword (spends one browse refresh).
query: q, niche?
products.search_refreshPro + ShipperUses plan budget - GET
/products/browseThe winners you have revealed in a niche, plus how many more are locked.
query: niche?
products.browsePro + Shipper - GET
/products/dailyToday's hand-ranked daily picks.
query: niche?, sort?, interest?
products.dailyPro + Shipper - GET
/products/nichesList the product categories (niches).
No inputs
products.nichesPro + Shipper - GET
/products/{opp_id}Full detail for one winner: its supplier link(s), landed cost, margin, forecast.
path: opp_id
products.getPro + Shipper500/day - POST
/products/claimClaim a winner into your current store's pipeline.
body: {opportunity_id}
products.claimPro + Shipper - GET
/products/resolveResolve a supplier URL (e.g. an AliExpress listing) to the Flypify winner it sources.
query: url
products.resolve_supplier_urlPro + Shipper - GET
/products/similarWinners similar to a given product.
query: q, limit?
products.similarPro + Shipper - GET
/products/evidenceMarket evidence for a product: sales signals and sources behind its score.
query: q, niche?, limit?
products.evidencePro + Shipper - GET
/products/from-urlResolve a product URL (TikTok Shop, AliExpress, store page) to a Flypify winner.
query: url
products.from_urlPro + Shipper - GET
/products/upsellsSuggested upsell and bundle products for a winner.
query: title, interest?
products.upsellsPro + Shipper - GET
/products/tiktoksTop winners that have a winning TikTok (reveal the video with products.reveal_video).
query: limit?
products.tiktoksPro + Shipper - POST
/products/{opp_id}/winning-adReveal the top-performing TikTok ad for a winner (spends one video reveal).
path: opp_id
products.reveal_videoShipperUses plan budget - GET
/products/trendsRising search and social trend keywords.
query: niche?
products.trendsPro + Shipper
Winning ads and brands · 6
Search scaling Meta and TikTok ads, reveal their links, and study the brands behind them.
- GET
/ads/searchSearch the winning-ads library (Meta + TikTok) by niche, format and sort.
query: niche, sort?, limit?, sources?, surface?
ads.searchPro + Shipper - POST
/ads/{ad_key}/revealReveal one ad's links: the ad, its landing page and the advertiser.
path: ad_key
ads.revealPro + ShipperUses plan budget - GET
/ads/formatsThe ad formats (hook styles) the library classifies.
query: niche?
ads.formatsPro + Shipper - GET
/ads/nichesThe niches the ad library covers.
No inputs
ads.nichesPro + Shipper - GET
/brandsBrands running winning ads, with their stores and ad counts.
query: q?, niche?, sort?, page?, limit?, range?, shopify?, monthly_visits_min?
brands.searchPro + Shipper - GET
/brands/{brand_key}One brand: its store, products and live ads.
path: brand_key
brands.getPro + Shipper
Supplier links · 3
Ranked AliExpress candidates with price, orders and rating for any product. products.get returns a winner's own supplier link.
- GET
/suppliers/matchAliExpress candidate listings for a product title, ranked (keyword matches, not verified).
query: title, niche?, brand?
suppliers.matchPro + Shipper300/day - GET
/suppliers/aliexpress/searchSearch AliExpress listings with price, orders and rating.
query: q, limit?
suppliers.aliexpress_searchPro + Shipper300/day - GET
/suppliers/aliexpress/matchThe best AliExpress candidate for a product title (keyword match, not verified).
query: title, niche?, brand?
suppliers.aliexpress_matchPro + Shipper300/day
Stores and products · 16
Create and switch stores, push and publish products to Shopify, read sales.
- GET
/storesYour stores and which one is current.
No inputs
stores.listPro + Shipper - POST
/storesCreate a store (name, niche). Connecting Shopify still needs one human click.
body: {name, niche}
stores.createShipper - GET
/stores/currentYour current store.
No inputs
stores.currentPro + Shipper - POST
/stores/selectSwitch the current store.
body: {store_id}
stores.selectShipper - GET
/stores/shopify/productsThe products live in your connected Shopify store.
query: search?, cursor?, limit?
stores.shopify_productsPro + Shipper - GET
/stores/shopify/products/{product_id}One Shopify product.
path: product_id (numeric)
stores.shopify_productPro + Shipper - GET
/stores/insightsStore insights: traffic and conversion.
No inputs
stores.insightsPro + ShipperEarly access - GET
/stores/salesStore sales over time.
query: range?
stores.salesPro + ShipperEarly access - GET
/themesStore themes you can install.
No inputs
themes.listPro + Shipper - GET
/store-productsProducts you have saved in Flypify (drafts and published).
No inputs
store_products.listPro + Shipper - GET
/store-products/draftsYour draft products.
No inputs
store_products.draftsPro + Shipper - GET
/store-products/publishedYour published products.
No inputs
store_products.publishedPro + Shipper - POST
/store-products/draftSave a winner as a draft product with your title, price and copy.
body: {opportunity_id, title, price, description?}
store_products.draftShipper - POST
/store-products/pushPush a winner to your Shopify store as a draft product.
body: {opportunity_id, title, price, description?}
store_products.pushPro + Shipper - POST
/store-products/publishPublish a product live in your Shopify store.
body: {product_id}
store_products.publishShipper - POST
/store-products/archiveArchive a product.
body: {product_id}
store_products.archiveShipper
Storefront, pages and domains · 19
Create and edit a hosted store, its brand and landing pages, list products on Whop, attach a custom domain.
- GET
/storefrontYour Flypify storefront: brand, products, slug.
No inputs
storefront.getShipper - PUT
/storefrontCreate or edit your storefront.
body: {name, slug?, tagline?, support_email?, shipping_note?, returns_note?}
storefront.updateShipper - PUT
/storefront/brandEdit the storefront brand: name, colours, logo, tagline.
body: {auto: true} or {palette, fonts}
storefront.brandShipper - PUT
/storefront/products/{row_id}Edit one storefront product: title, price, copy, images.
path: row_id; body: {listed: bool}
storefront.productShipper - GET
/pages/{row_id}A product's landing page.
path: row_id
pages.getShipperEarly access - PUT
/pages/{row_id}Edit a product landing page.
path: row_id; body: {version, sections: [...]}
pages.updateShipperEarly access - PUT
/pages/{row_id}/bundlesSet a landing page's bundle offers.
path: row_id; body: {prices: {1, 2, 3}}
pages.bundlesShipperEarly access - POST
/pages/{row_id}/buildGenerate a full product landing page (copy + images, about 80 credits).
path: row_id
pages.buildShipperCreditsApp only for nowEarly access - POST
/pages/{row_id}/sections/{kind}/regenerateRewrite one landing-page section.
path: row_id, kind
pages.regenerate_sectionShipper60/dayEarly access - POST
/pages/{row_id}/images/{slot}/regenerateRegenerate one landing-page image.
path: row_id, slot; body: {note?}
pages.regenerate_imageShipperCreditsApp only for nowEarly access - GET
/whop-store/statusWhether your Whop store is connected and ready.
No inputs
whop_store.statusPro + Shipper - GET
/whop-store/draftThe draft Whop store Flypify prepared for you.
query: opportunity_id
whop_store.draftShipper - GET
/whop-store/productsProducts listed in your Whop store.
No inputs
whop_store.productsShipper - POST
/whop-store/productsList a winner as a real Whop product with checkout. build_page=true also builds its page (credits).
body: {opportunity_id, price, stock?, text?, image_urls?, build_page?}
whop_store.add_productShipper - GET
/whop-store/products/{row_id}One Whop store product.
path: row_id
whop_store.productShipper - GET
/whop-store/siteYour store website.
No inputs
whop_store.siteShipperEarly access - POST
/whop-store/siteCreate or edit your store website.
no body: creates or adopts your Whop website
whop_store.update_siteShipperEarly access - POST
/domains/checkCheck a custom domain's DNS for your store.
no body: verifies the attached domain's DNS
domains.checkShipperEarly access - POST
/domainsAttach a custom domain you own to your store.
body: {hostname}
domains.attachShipperEarly access
Ads and campaigns · 16
Ad copy, creatives, reach estimates, campaign drafts, launch, pause and results.
- GET
/campaigns/statusWhether your ad account is connected and ready to launch.
No inputs
campaigns.statusPro + Shipper - GET
/campaigns/setupSetup checklist: ad account, page, pixel, payment.
No inputs
campaigns.setupShipper - POST
/campaigns/pixel-checkCheck your store's Meta pixel is firing.
body: {url} (https)
campaigns.pixel_checkShipper - POST
/campaigns/brandingSet the ad account's brand name and logo.
multipart: logo?, banner?, description?
campaigns.brandingShipper - POST
/ads/copyDraft ad copy (headlines, primary text) for a product.
body: {product_title?, destination_url?}
ads.copyShipper50/day - POST
/ads/creativesUpload a finished ad video (MP4/MOV) as a creative for campaigns.
body: {render_id}
ads.create_creativeShipper - GET
/ads/creatives/{render_id}Poll a creative upload until it is ready.
path: render_id
ads.get_creativeShipper - POST
/campaigns/reachEstimate audience reach for a budget and targeting.
body: {countries, age_min?, age_max?, gender?}
campaigns.reachShipper - POST
/campaignsCreate a campaign draft (product, creative, budget, targeting). Nothing spends until launch.
body: {client_request_id, render_id, file_id, title, goal, copy, cta, url, budget, schedule, audience, social accounts}
campaigns.createShipper - GET
/campaignsYour campaigns with status and results.
query: range?, after?
campaigns.listShipper - GET
/campaigns/{campaign_id}One campaign: status, spend, results.
path: campaign_id; query: range?
campaigns.getShipper - GET
/campaigns/{campaign_id}/launch-previewExactly what launching will charge and publish, plus the preview token launch needs.
path: campaign_id; query: action? (launch|resume)
campaigns.launch_previewShipper - POST
/campaigns/{campaign_id}/launchLaunch the campaign: it goes live and spends your ad budget.
path: campaign_id; body: {confirm_token (from launch_preview), acknowledged: true}
campaigns.launchShipperSpends ad budgetApp only for now - POST
/campaigns/{campaign_id}/pausePause a live campaign.
path: campaign_id
campaigns.pauseShipper - POST
/campaigns/{campaign_id}/resumeResume a paused campaign (it spends again).
path: campaign_id; body: {confirm_token, acknowledged: true}
campaigns.resumeShipperSpends ad budgetApp only for now - DELETE
/campaigns/{campaign_id}Delete a campaign draft.
path: campaign_id (drafts only)
campaigns.deleteShipper
Use it over MCP
The same capabilities are MCP tools at https://api.flypify.com/mcp/ (streamable HTTP, keep the trailing slash). Paste this into your MCP client and replace the key:
{
"mcpServers": {
"flypify": {
"url": "https://api.flypify.com/mcp/",
"headers": {
"Authorization": "Bearer flypify_live_YOUR_API_KEY"
}
}
}
}Typed tools cover the most common steps; flypify_capabilities lists everything and flypify_call runs any capability by name.
find_winnersSearch proven winning products by niche, price and trend.
get_winnerFull sourcing detail for one winner: supplier, costs, ads (uses 1 reveal).
push_to_shopifyAdd a winner to your Shopify store as a draft product.
account_statusYour plan, Shopify connection and today's reveal budget.
list_nichesThe product niches Flypify covers.
search_productsKeyword search over the winners you have revealed.
winner_from_urlTurn a TikTok Shop, AliExpress or store URL into a Flypify winner.
search_adsSearch scaling Meta and TikTok ads in a niche.
search_brandsBrands running winning ads, with their stores and traffic.
find_suppliersRanked AliExpress candidates for any product title.
search_aliexpressAliExpress listings with price, orders and rating.
list_campaignsYour ad campaigns with status and results.
create_campaignCreate an ad campaign draft. Nothing spends until launch.
launch_campaignLaunch a campaign after showing you its launch preview.
attach_domainAttach a custom domain you own to your store.
flypify_capabilitiesEverything else your agent can do, and what your plan allows.
flypify_callRun any capability: stores, storefront edits, pages, creatives and more.
Errors
Gateway errors share one shape: {"error": {"code": "…", "message": "…"}}. Errors from a capability itself (for example a price under the margin floor) come back as that capability returns them.
- 401
missing_api_keyNo key on the request. - 401
invalid_api_keyThe key is unknown or revoked. - 402
subscription_requiredThe account is not on Pro or Shipper. - 403
plan_upgrade_requiredA Shipper capability called on Pro. - 403
agent_spend_disabledThe call charges credits or ad budget, which agents cannot do yet. - 404
unknown_capabilityNo such route. GET /api/v1 lists them all. - 405
method_not_allowedThe path exists under another method. - 413
body_too_largeThe request body is over 16 MB. - 422
missing_path_paramsA path parameter is empty. - 422
invalid_path_paramsA path parameter is not one plain segment (no /, \, %, ? or #). - 429
too_many_in_flightMore than 8 calls running at once on one account. - 429
rate_limitedDaily limit reached: the account's (Pro 2,000, Shipper 20,000 calls) or one capability's. Resets 00:00 UTC. - 502
upstream_errorThe capability failed inside Flypify. Safe to retry reads. - 503
gateway_unboundThe API is restarting. Retry in a few seconds. - 503
busyThe Agent API is at capacity. Retry in a few seconds. - 504
upstream_timeoutTook over 120 s. It may still complete: check its status before retrying.
Questions? Contact support. API terms are in the terms.