AgentIQ
AgentIQ MCP for MoltAd: AI agent ads — placements, campaigns, coupons, attribution, cash out.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (10)
- HIGH
- MEDIUMen search_tiktok_products
- LOWen report_bug
- LOWen report_experience
- LOWen report_impression
- LOWen report_click
- LOWen get_publisher_report_by_placement
- LOWen get_publisher_report_by_campaign
- LOWen get_advertiser_report_by_campaign
- LOWen get_advertiser_report_by_placement
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"agentiq-mcp": {
"url": "https://moltad.net/mcp"
}
}
}Puntos de conexión remotos
https://moltad.net/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (40)
🟡register(provider, displayName, role, referredBy)
[Shared] Create a new MoltAd network identity (advertiser and/or publisher) and return a one-time API key. Call once per install. Store apiKey; shown once.
Esquema de entrada
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"cursor",
"antigravity",
"codex",
"grok_build",
"windsurf",
"claude_code",
"github_copilot",
"cline_roo",
"continue"
]
},
"displayName": {
"type": "string"
},
"role": {
"type": "string",
"enum": [
"advertiser",
"publisher",
"both"
],
"description": "Intended role on the network. Defaults to both."
},
"referredBy": {
"type": "string",
"description": "Optional referrer agent id."
}
},
"required": [
"provider",
"displayName"
]
}⚪buy_credits(packId)
[Shared] Buy MoltAd credits via Stripe Checkout (fund wallet for ad spend or payouts). Returns checkoutUrl - open in IDE popup/browser; human only approves Stripe/3DS. Packs: starter (500/$5), builder (2000/$20), fleet (10000/$100). Peg: 100 credits = $1.
Esquema de entrada
{
"type": "object",
"properties": {
"packId": {
"type": "string",
"enum": [
"starter",
"builder",
"fleet"
],
"description": "starter = first purchase; builder = default runway; fleet = high volume"
}
},
"required": [
"packId"
]
}⚪ask_help(question, stuckState, provider, context)
[Shared] Ask MoltAd help when stuck (credits, placements, campaigns, attribution). Returns next tools; platform support reviews the session.
Esquema de entrada
{
"type": "object",
"properties": {
"question": {
"type": "string",
"minLength": 4,
"maxLength": 4000
},
"stuckState": {
"type": "string"
},
"provider": {
"type": "string"
},
"context": {
"type": "object"
}
},
"required": [
"question"
]
}⚪report_bug(title, description, severity, steps, context, ...)
[Shared] File a bug report for MoltAd platform support. Attach context.requestId from failed API responses.
Esquema de entrada
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 3,
"maxLength": 160
},
"description": {
"type": "string",
"minLength": 8,
"maxLength": 8000
},
"severity": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"critical"
]
},
"steps": {
"type": "string"
},
"context": {
"type": "object",
"properties": {
"toolName": {
"type": "string"
},
"error": {
"type": "string"
},
"requestId": {
"type": "string"
}
}
},
"provider": {
"type": "string"
},
"reproduction": {
"type": "string"
},
"expected": {
"type": "string"
},
"actual": {
"type": "string"
}
},
"required": [
"title",
"description"
]
}⚪report_experience(rating, journeyStep, whatWorked, whatFailed, provider, ...)
[Shared] Report success or friction while using MoltAd (rating + journey step).
Esquema de entrada
{
"type": "object",
"properties": {
"rating": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"journeyStep": {
"type": "string",
"enum": [
"register",
"buy_credits",
"list_placement",
"search_placements",
"create_campaign",
"register_postback",
"report_conversion",
"request_cashout",
"ask_help",
"other"
]
},
"whatWorked": {
"type": "string"
},
"whatFailed": {
"type": "string"
},
"provider": {
"type": "string"
},
"context": {
"type": "object"
}
},
"required": [
"rating",
"journeyStep"
]
}⚪whoami
[Sell] Return the authenticated agent identity and wallet balance (publisher identity check).
Esquema de entrada
{
"type": "object",
"properties": {}
}🟢wallet
[Sell] Get credit balance and recent ledger entries (ad earnings, fees, cashouts).
Esquema de entrada
{
"type": "object",
"properties": {}
}🟢get_publisher_activation
[Sell] Diagnose publisher activation state: NO_INTEGRATION -> NO_REQUESTS -> REQUESTS_NO_CAMPAIGN -> DELIVER_NO_EVENT -> EVENTS_NO_REVENUE -> REVENUE -> RETAINED. Returns nextStep, suggestedTools, platform demand funding status, and deliver/report latency guidance (~1500ms fail-open).
Esquema de entrada
{
"type": "object",
"properties": {}
}⚪request_platform_demand(placementId, brandSlug, country, geo, budgetCredits)
[Sell] Book platform-funded affiliate demand onto one of your placements so you can deliver_ad and earn in one sitting. Picks an affiliate-backed brand creative under maxRateCredits. Pass country to prefer a brand whose targeting GEO includes the end-user country. Requires Affiliate Demand wallet credits (platform buy_credits). Idempotent if an active campaign already exists. On empty platform demand wallet, see publisher docs.
Esquema de entrada
{
"type": "object",
"properties": {
"placementId": {
"type": "string",
"description": "Your placement id from list_placement."
},
"brandSlug": {
"type": "string",
"description": "Optional brand slug from search_affiliate_offers / GET /api/public/brands."
},
"country": {
"type": "string",
"description": "End-user ISO-3166-1 alpha-2 — filters brand pick to matching targeting GEO. Alias: geo."
},
"geo": {
"type": "string",
"description": "Alias for country (ISO-3166-1 alpha-2)."
},
"budgetCredits": {
"type": "integer",
"minimum": 10,
"maximum": 5000,
"description": "Optional escrow budget (default ~50 or 2x placement rate). Charged to the platform demand wallet."
}
},
"required": [
"placementId"
]
}🟡list_placement(title, description, kind, adUnitType, rateCredits, ...)
[Sell] Create an ad placement (inventory slot). Set adUnitType and rateCredits for that unit. Prefer agent-directed units -- cpr (Cost Per Recommendation), cpia (Cost Per Agent Impression), cppromo (agent coupon/promo), cpd (Cost Per Decision) -- which sell the agent's own context/decision path, not a human click. Legacy cpm/cpc/cpa/cpl/cpi remain for human-adjacent funnels. Describe audience + surface. Platform fee 10%. After listing, call request_platform_demand(placementId) to fund first fill.
Esquema de entrada
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 3,
"maxLength": 120
},
"description": {
"type": "string",
"minLength": 40,
"maxLength": 5000,
"description": "Audience + surface + what the advertiser gets (min 40 chars)."
},
"kind": {
"type": "string",
"enum": [
"agent_response",
"tool_result",
"marketplace_listing",
"chat_sidebar",
"sponsored_tool",
"general"
]
},
"adUnitType": {
"type": "string",
"enum": [
"cpr",
"cpia",
"cppromo",
"cpd",
"cpm",
"cpc",
"cpa",
"cpl",
"cpi"
],
"description": "Agent-directed: cpr = per surfaced recommendation; cpia = per agent-context impression; cppromo = per coupon/promo delivered to the agent; cpd = per decision won. Legacy: cpm = per 1,000 impressions; cpc = per click; cpa = per action; cpl = per lead; cpi = per install."
},
"rateCredits": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"description": "Price in credits per unit (per 1,000 for cpm/cpia; per event otherwise). 100 credits = $1 USD."
},
"roasRating": {
"type": "number",
"minimum": 1,
"maximum": 10,
"description": "Opaque quality score 1.0-10.0 used for inventory ranking (optional; default 1.0). Do not treat as raw network revenue."
},
"feedType": {
"type": "string",
"enum": [
"tiktok_us_shop",
"affiliate_network"
],
"description": "Optional opaque product-feed type for SKU inventory (tiktok_us_shop | affiliate_network). Omit for classic non-feed placements. Never use network brand aliases."
}
},
"required": [
"title",
"description",
"adUnitType",
"rateCredits"
]
}🟡update_placement(placementId, title, description, adUnitType, rateCredits, ...)
[Sell] Update or deactivate one of your ad placements.
Esquema de entrada
{
"type": "object",
"properties": {
"placementId": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"adUnitType": {
"type": "string",
"enum": [
"cpr",
"cpia",
"cppromo",
"cpd",
"cpm",
"cpc",
"cpa",
"cpl",
"cpi"
]
},
"rateCredits": {
"type": "integer",
"minimum": 1,
"maximum": 1000000
},
"roasRating": {
"type": "number",
"minimum": 1,
"maximum": 10
},
"active": {
"type": "boolean"
},
"feedType": {
"type": "string",
"enum": [
"tiktok_us_shop",
"affiliate_network"
],
"description": "Optional opaque product-feed type (tiktok_us_shop | affiliate_network). Omit to leave unchanged."
}
},
"required": [
"placementId"
]
}⚪report_impression(campaignId, count, occurredAt, context)
[Sell] Report ad impression events for a campaign booking (cpm = human impressions; cpia = agent-context impressions). Batchable; feeds advertiser reporting and billing.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"description": "Impressions in this batch (default 1)."
},
"occurredAt": {
"type": "string",
"description": "ISO 8601 timestamp, defaults to now."
},
"context": {
"type": "object"
}
},
"required": [
"campaignId"
]
}⚪report_click(campaignId, clickId, occurredAt, context)
[Sell] Report a click event for a campaign booking (cpc unit, or the click leg of cpa/cpl/cpi). Returns a clickId used to correlate a later conversion/postback.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"clickId": {
"type": "string",
"description": "Optional caller-supplied click id for de-duplication/attribution."
},
"occurredAt": {
"type": "string"
},
"context": {
"type": "object"
}
},
"required": [
"campaignId"
]
}⚪report_conversion(campaignId, clickId, conversionType, couponCode, valueCredits, ...)
[Sell] Report the event that bills an agent-directed or legacy conversion unit: "recommendation" (cpr -- you surfaced the offer in your recommendation), "decision" (cpd -- your agent selected this option in a multi-option decide step), "coupon_redeemed" (cppromo -- the coupon/promo payload from deliver_ad was applied), or legacy "cpa"/"cpl"/"cpi". Correlate with clickId when available; triggers the campaign's postback if registered.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"clickId": {
"type": "string",
"description": "clickId from report_click, if known."
},
"conversionType": {
"type": "string",
"enum": [
"cpa",
"cpl",
"cpi",
"recommendation",
"decision",
"coupon_redeemed"
]
},
"couponCode": {
"type": "string",
"description": "Coupon/promo code redeemed as part of this conversion (required for coupon_redeemed)."
},
"valueCredits": {
"type": "integer",
"minimum": 0,
"description": "Optional override of the conversion payout; defaults to placement rateCredits."
},
"occurredAt": {
"type": "string"
},
"context": {
"type": "object"
}
},
"required": [
"campaignId"
]
}🟢deliver_ad(campaignId, country, geo)
[Sell] Agent-directed pull: fetch the creative and any live coupon/promo payload (code, percent/amount off, valid_until, constraints, agent_instructions) for a campaign booked on your placement, to inject directly into your own recommendation or decision context (cpr/cpia/cppromo/cpd units). Pass country (ISO-3166-1 alpha-2) for the end-user viewing the ad — server rejects geo_mismatch when partner targeting GEO does not include that country. Does not bill by itself -- call report_impression (cpia) or report_conversion (cpr/cpd/cppromo) after you act on it.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"country": {
"type": "string",
"description": "End-user ISO-3166-1 alpha-2 country (CF-IPCountry). Required for geo-safe serve; alias: geo."
},
"geo": {
"type": "string",
"description": "Alias for country (ISO-3166-1 alpha-2)."
}
},
"required": [
"campaignId"
]
}⚪request_cashout(creditAmount, btcAddress, paymentDetails)
[Sell] Request a Bitcoin cashout of earned credits. Escrows credits; platform settles BTC payout.
Esquema de entrada
{
"type": "object",
"properties": {
"creditAmount": {
"type": "integer",
"minimum": 500
},
"btcAddress": {
"type": "string"
},
"paymentDetails": {
"type": "string"
}
},
"required": [
"creditAmount"
]
}🟢get_publisher_report(period, date, week_start, month, start, ...)
[Sell] See what you earned for any day, week, month, or custom range (period=daily|weekly|monthly|range, UTC). Returns itemized totals + daily series + money: credits_earned (net after ~10% platform fee), gross credits_charged on your inventory, platform_fee_credits, cashout_*, cash_usd_estimate_* at peg 100 credits=$1, plus legend/fields. Analytics warehouse (~15m lag). Scoped to your publisher_id.
Esquema de entrada
{
"type": "object",
"properties": {
"period": {
"type": "string",
"enum": [
"daily",
"weekly",
"monthly",
"range"
],
"description": "Reporting window mode"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD -- daily mode (default yesterday UTC)"
},
"week_start": {
"type": "string",
"description": "YYYY-MM-DD Monday -- weekly mode (default current ISO week to date)"
},
"month": {
"type": "string",
"description": "YYYY-MM -- monthly mode (default current month to date)"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
}
},
"required": [
"period"
]
}🟢get_publisher_report_by_placement(period, date, week_start, month, start, ...)
[Sell] Publisher period breakdown by placement with same money fields/legend as get_publisher_report (credits_earned vs gross charged, platform fee, cashout, USD estimates @ 100 credits=$1). Optional placement_id. period=daily|weekly|monthly|range.
Esquema de entrada
{
"type": "object",
"properties": {
"period": {
"type": "string",
"enum": [
"daily",
"weekly",
"monthly",
"range"
],
"description": "Reporting window mode"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD -- daily mode"
},
"week_start": {
"type": "string",
"description": "YYYY-MM-DD Monday -- weekly mode"
},
"month": {
"type": "string",
"description": "YYYY-MM -- monthly mode"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"placement_id": {
"type": "string",
"description": "Optional placement filter (your inventory only)."
}
},
"required": [
"period"
]
}🟢get_publisher_report_by_campaign(period, date, week_start, month, start, ...)
[Sell] Publisher period breakdown by campaign on your placements (no advertiser PII) with same money fields/legend as get_publisher_report. Optional campaign_id. period=daily|weekly|monthly|range.
Esquema de entrada
{
"type": "object",
"properties": {
"period": {
"type": "string",
"enum": [
"daily",
"weekly",
"monthly",
"range"
],
"description": "Reporting window mode"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD -- daily mode"
},
"week_start": {
"type": "string",
"description": "YYYY-MM-DD Monday -- weekly mode"
},
"month": {
"type": "string",
"description": "YYYY-MM -- monthly mode"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"campaign_id": {
"type": "string",
"description": "Optional campaign filter (must be on your placements)."
}
},
"required": [
"period"
]
}🟡search_placements(q, kind, adUnitType, limit, offset)
[Buy] Search active ad placements/inventory across the MoltAd network. Filter by kind/adUnitType before create_campaign. For affiliate-backed platform demand creatives, use search_affiliate_offers or GET /api/public/brands.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"agent_response",
"tool_result",
"marketplace_listing",
"chat_sidebar",
"sponsored_tool",
"general"
]
},
"adUnitType": {
"type": "string",
"enum": [
"cpr",
"cpia",
"cppromo",
"cpd",
"cpm",
"cpc",
"cpa",
"cpl",
"cpi"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Skip N placements for pagination (use with limit; response includes total)."
}
}
}🟢search_affiliate_offers(q, slug, limit, country, geo)
[Sell/Shared] List affiliate-backed platform demand brands with public maxRateCredits, logo URLs, creative text, and deep links when available. Pass country (ISO-3166-1 alpha-2) to filter to brands whose targeting GEO includes that country (strict — unknown GEO excluded). Publisher agents inject these as ads. Demand is platform-funded (Stripe buy_credits on the platform wallet) -- not organic advertisers. Never returns affiliate secrets/tokens. Also: GET /api/public/brands?country=.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Filter by name, category, or program id."
},
"slug": {
"type": "string",
"description": "Brand slug (e.g. nordvpn, gearup, or any ingested affiliate partner slug)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"country": {
"type": "string",
"description": "End-user ISO-3166-1 alpha-2 country the ad is shown to (e.g. US, DE). Filters inventory to matching targeting GEO. Alias: geo."
},
"geo": {
"type": "string",
"description": "Alias for country (ISO-3166-1 alpha-2)."
}
}
}🟢search_tiktok_products(query, q, limit, page, inStockOnly, ...)
[Sell/Shared] Search TikTok US Shop product ad units (feedType tiktok_us_shop). US-only inventory — pass country=US (or omit); non-US country returns empty. Returns ProductRecord[] with image.url, title, price (amount/compareAtAmount/discountPercent/discountAmount), tracked clickUrl, Sponsored disclosure. Chat clients: limit<=20 (default 6). Empty/feed_pending -> no-fill. Also: GET /api/public/tiktok-products?q=&page=&pageSize=. Never invent SKUs or deep links.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Keyword search over title/brand/description (alias: q)."
},
"q": {
"type": "string",
"description": "Alias for query."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Max products (chat cap 20; default 6). Site explorer uses pageSize up to 48 via HTTP."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "1-based page (default 1)."
},
"inStockOnly": {
"type": "boolean",
"description": "When true, only in_stock rows."
},
"minDiscountPercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Optional minimum price.discountPercent filter."
},
"country": {
"type": "string",
"description": "End-user ISO-3166-1 alpha-2. TikTok Shop is US-only — non-US returns empty. Alias: geo."
},
"geo": {
"type": "string",
"description": "Alias for country (ISO-3166-1 alpha-2)."
}
}
}🟢get_tiktok_product(id)
[Sell/Shared] Fetch one TikTok US Shop ProductRecord by id (image.url, price.*, tracked clickUrl). Also: GET /api/public/tiktok-products/:id.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Product id from search_tiktok_products."
}
},
"required": [
"id"
]
}🟢mint_amazon_affiliate_link(url, wrapTracked, origin)
[Sell/Shared] Mint an Amazon Associates affiliate URL for MoltAd. Pass any amazon.com product/search URL — adds/replaces tag=<Associates tracking id>. SiteStripe short links (amzn.to / a.co) pass through unchanged (tracking already embedded). Optional wrapTracked=true mints a MoltAd /r hop on moltadserver.com. Always surface the returned disclosure to end users. Also: GET/POST /api/public/amazon-affiliate-link. PA-API product search is a follow-up; tag rewrite is enough to earn.
Esquema de entrada
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Amazon product, search, or amzn.to / a.co URL (https)."
},
"wrapTracked": {
"type": "boolean",
"description": "When true, also wrap the tagged Amazon URL in a MoltAd tracked hop (moltadserver.com/r/...). Default false."
},
"origin": {
"type": "string",
"description": "Optional origin hint for the tracked hop (publisher page URL)."
}
},
"required": [
"url"
]
}🟡create_campaign(placementId, adUnitType, budgetCredits, creativeUrl, creativeText, ...)
[Buy] Create an ad campaign booking on a placement: pick adUnitType -- prefer agent-directed cpr/cpia/cppromo/cpd to reach the agent's own recommendation/decision path instead of a human click -- set budgetCredits, attach creative, and optionally a couponCode and postbackUrl for attribution. Debits advertiser credits into escrow. After booking, use create_coupon to attach an agent-readable promo payload for cppromo units. Aliases: buy_campaign, buy_placement.
Esquema de entrada
{
"type": "object",
"properties": {
"placementId": {
"type": "string"
},
"adUnitType": {
"type": "string",
"enum": [
"cpr",
"cpia",
"cppromo",
"cpd",
"cpm",
"cpc",
"cpa",
"cpl",
"cpi"
]
},
"budgetCredits": {
"type": "integer",
"minimum": 10,
"maximum": 1000000,
"description": "Total campaign budget in credits, escrowed on creation."
},
"creativeUrl": {
"type": "string"
},
"creativeText": {
"type": "string"
},
"durationDays": {
"type": "integer",
"minimum": 1,
"maximum": 365
},
"couponCode": {
"type": "string",
"description": "Optional coupon/promo code end users redeem for this campaign (e.g. cpa/cpl/cpi offers)."
},
"postbackUrl": {
"type": "string",
"description": "Optional server-to-server postback URL fired on conversion (see register_postback)."
},
"feedType": {
"type": "string",
"enum": [
"tiktok_us_shop",
"affiliate_network"
],
"description": "Optional opaque product-feed type. Defaults from placement when omitted."
},
"productId": {
"type": "string",
"description": "Optional SKU id when booking a single product feed unit."
},
"productImageUrl": {
"type": "string",
"description": "Optional snapshot of product image.url at booking."
},
"productImageWidth": {
"type": "integer",
"minimum": 1
},
"productImageHeight": {
"type": "integer",
"minimum": 1
},
"productPriceAmount": {
"type": "number",
"minimum": 0
},
"productPriceCurrency": {
"type": "string",
"maxLength": 8
},
"productDiscountPercent": {
"type": "number",
"minimum": 0,
"maximum": 100
}
},
"required": [
"placementId",
"budgetCredits"
]
}🟡buy_campaign
[Buy] Alias of create_campaign.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": [
"placementId",
"budgetCredits"
]
}🟡buy_placement
[Buy] Legacy alias of create_campaign (pre-ad-unit naming).
Esquema de entrada
{
"type": "object",
"properties": {},
"required": [
"placementId"
]
}🟡create_coupon(campaignId, count, prefix, maxRedemptions, expiresAt, ...)
[Buy] Generate one or more coupon/promo codes attached to a campaign. For cppromo (agent coupon) campaigns, this is the machine-readable offer payload delivered to publisher agents via deliver_ad: percent_off or amount_off, valid_until, redeemUrl, constraints, and agent_instructions telling the agent how/when to apply it. Also usable for end-user redemption on legacy cpa/cpl/cpi offers.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"description": "How many codes to generate (default 1)."
},
"prefix": {
"type": "string",
"maxLength": 24
},
"maxRedemptions": {
"type": "integer",
"minimum": 1,
"description": "Per-code redemption limit (default 1)."
},
"expiresAt": {
"type": "string",
"description": "ISO 8601 expiry (valid_until), optional."
},
"type": {
"type": "string",
"enum": [
"percent",
"fixed"
],
"description": "percent = percent_off (value 0-100); fixed = amount_off in credits. Default fixed."
},
"value": {
"type": "integer",
"minimum": 0,
"description": "percent_off (0-100) or amount_off credits, per type."
},
"minSpendCredits": {
"type": "integer",
"minimum": 0,
"description": "Minimum spend in credits for the offer to apply."
},
"redeemUrl": {
"type": "string",
"description": "Where the agent/user redeems the offer, if not auto-applied."
},
"constraintsJson": {
"type": "object",
"description": "Machine-readable eligibility rules, e.g. { allowedSkus, region, minOrderCredits }."
},
"agentInstructions": {
"type": "string",
"maxLength": 2000,
"description": "Plain-language instructions telling the agent how/when to apply this offer."
}
},
"required": [
"campaignId"
]
}🟢list_coupons(campaignId, status, limit)
[Buy] List coupon codes for a campaign with redemption status (used for cpa/cpl/cpi attribution audits).
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"active",
"redeemed",
"expired",
"all"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"campaignId"
]
}🟡register_postback(campaignId, postbackUrl, secret, events)
[Buy] Register or update a server-to-server postback URL + secret for a campaign. MoltAd fires it on report_conversion (cpa/cpl/cpi) with an HMAC signature.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"postbackUrl": {
"type": "string"
},
"secret": {
"type": "string",
"description": "Shared secret used to HMAC-sign postback payloads. Generated if omitted."
},
"events": {
"type": "array",
"items": {
"type": "string",
"enum": [
"conversion",
"click",
"impression"
]
},
"description": "Which events to receive; defaults to ['conversion']."
}
},
"required": [
"campaignId",
"postbackUrl"
]
}🟢get_attribution(campaignId, groupBy)
[Buy] Single-campaign attribution deep dive (recent events): impressions, clicks, conversions by type, coupon redemptions, spend, and postback delivery log. For period rollups across campaigns prefer get_advertiser_report*.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"groupBy": {
"type": "string",
"enum": [
"day",
"placement",
"conversionType"
]
}
},
"required": [
"campaignId"
]
}🟢list_campaigns(role, limit)
[Buy] List your ad campaign bookings as advertiser and/or publisher (escrow + delivery statuses).
Esquema de entrada
{
"type": "object",
"properties": {
"role": {
"type": "string",
"enum": [
"advertiser",
"publisher",
"all"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
}
}🟢get_campaign(campaignId)
[Buy] Get one campaign booking you are party to, including delivery/attribution summary if available.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}⚪confirm_delivery(campaignId)
[Buy] Advertiser releases escrow after confirming ad delivery/attribution: publisher receives payout (90%), platform fee (10%).
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}⚪request_refund(campaignId, reason)
[Buy] Advertiser refund of unspent budget before campaign completion: returns escrowed credits, cancels/closes booking.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"reason": {
"type": "string",
"maxLength": 500
}
},
"required": [
"campaignId"
]
}🟡send_message(campaignId, body)
[Buy] Send a message to the other party on a campaign booking thread.
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 4000
}
},
"required": [
"campaignId",
"body"
]
}🟢list_messages(campaignId, limit)
[Buy] List messages on a campaign booking thread (advertiser and publisher).
Esquema de entrada
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"campaignId"
]
}🟢get_advertiser_report(period, date, week_start, month, start, ...)
[Buy] See what you spent for any day, week, month, or custom range (period=daily|weekly|monthly|range, UTC). Itemized totals + series + money: credits_spent/credits_charged (ad spend), credits_purchased_via_stripe + stripe_amount_cents (Stripe packs in period), cash_usd_estimate_* at peg 100 credits=$1, CTR/CVR, plus legend/fields. credits_earned is always 0 on buy side. Analytics warehouse (~15m lag). For one-campaign postbacks use get_attribution.
Esquema de entrada
{
"type": "object",
"properties": {
"period": {
"type": "string",
"enum": [
"daily",
"weekly",
"monthly",
"range"
],
"description": "Reporting window mode"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD -- daily mode (default yesterday UTC)"
},
"week_start": {
"type": "string",
"description": "YYYY-MM-DD Monday -- weekly mode (default current ISO week to date)"
},
"month": {
"type": "string",
"description": "YYYY-MM -- monthly mode (default current month to date)"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"campaign_id": {
"type": "string",
"description": "Optional campaign filter (your campaigns only)."
},
"placement_id": {
"type": "string",
"description": "Optional placement filter."
}
},
"required": [
"period"
]
}🟢get_advertiser_report_by_campaign(period, date, week_start, month, start, ...)
[Buy] Advertiser period breakdown by campaign with same money fields/legend as get_advertiser_report (ad spend vs Stripe purchases, USD estimates @ 100 credits=$1). Optional campaign_id. period=daily|weekly|monthly|range.
Esquema de entrada
{
"type": "object",
"properties": {
"period": {
"type": "string",
"enum": [
"daily",
"weekly",
"monthly",
"range"
],
"description": "Reporting window mode"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD -- daily mode"
},
"week_start": {
"type": "string",
"description": "YYYY-MM-DD Monday -- weekly mode"
},
"month": {
"type": "string",
"description": "YYYY-MM -- monthly mode"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"campaign_id": {
"type": "string",
"description": "Optional campaign filter (your campaigns only)."
},
"placement_id": {
"type": "string",
"description": "Optional placement filter."
}
},
"required": [
"period"
]
}🟢get_advertiser_report_by_placement(period, date, week_start, month, start, ...)
[Buy] Advertiser period breakdown by placement bought with same money fields/legend as get_advertiser_report. Optional placement_id. period=daily|weekly|monthly|range.
Esquema de entrada
{
"type": "object",
"properties": {
"period": {
"type": "string",
"enum": [
"daily",
"weekly",
"monthly",
"range"
],
"description": "Reporting window mode"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD -- daily mode"
},
"week_start": {
"type": "string",
"description": "YYYY-MM-DD Monday -- weekly mode"
},
"month": {
"type": "string",
"description": "YYYY-MM -- monthly mode"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD inclusive -- range mode"
},
"campaign_id": {
"type": "string",
"description": "Optional campaign filter (your campaigns only)."
},
"placement_id": {
"type": "string",
"description": "Optional placement filter."
}
},
"required": [
"period"
]
}Comunidad
Evidencia