{"name":"nowyourlink-advertiser","title":"nowyourlink — Advertiser tools (OAuth)","description":"Browse auctions and own bid history, place sealed bids, manage creatives, saved cards, settings, passkeys and agent connections, read reports and affiliate data, and request privacy actions under a delegated OAuth 2.1 grant with spending limits.","icon":"https://preview.nowyourlink.com/icon-512.png","icons":[{"src":"https://preview.nowyourlink.com/icon-512.png","mimeType":"image/png","sizes":["512x512"]}],"version":"1.0.0","serverUrl":"https://api.nowyourlink.com/mcp","transport":"streamable-http","protocolVersions":["2026-07-28","2025-06-18"],"authentication":{"required":true,"type":"oauth2","authorization_servers":["https://api.nowyourlink.com"],"scopes":["account:read","account:write","reports:read","billing:read","billing:write","security:read","security:write","privacy:write","connections:read","connections:write","bids:read","bids:write","creatives:read","creatives:write","invoices:read","affiliate:read","affiliate:write"]},"tools":[{"name":"list_auctions","description":"Read the website's rolling 365-day auction calendar, status, planned close and your own active bid counts. Missing mirror rows remain NOT_CREATED; no competitor amounts.","inputSchema":{"type":"object","properties":{"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["bids:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["bids:read"]}]}},{"name":"get_auction","description":"Read one auction's calendar state, your own bid chain and the same coarse bidder-count bucket as the website. Never returns competitor bids.","inputSchema":{"type":"object","properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."}},"additionalProperties":false,"required":["day"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["bids:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["bids:read"]}]}},{"name":"list_bid_history","description":"Read your bids across days with bounded pagination and the website's payment-failure and cancelled states. The won filter includes failed settlement.","inputSchema":{"type":"object","properties":{"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."},"status":{"type":"string","enum":["all","active","won","lost","superseded","cancelled","payment_failed"]},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0,"maximum":10000}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["bids:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["bids:read"]}]}},{"name":"create_creative","description":"Create an empty creative draft or clone your existing creative and attached media. A clone starts as a draft and requires moderation; it does not bid or publish.","inputSchema":{"type":"object","properties":{"clone_from":{"type":"string","maxLength":128},"headline":{"type":"string","maxLength":80},"description":{"type":"string","maxLength":180},"target_url":{"type":"string","format":"uri"},"display_url":{"type":"string","maxLength":2048,"description":"Text shown on the ad as its display URL."},"cta_label":{"type":"string","enum":["learn-more","shop-now","sign-up","book","download","contact"],"description":"Call-to-action button label. Required before submit_creative."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"delete_creative","description":"Delete your eligible creative under the website's in-use and shared-asset guards. This removes the creative; it cannot delete another account's media.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Your creative ID."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"get_creative_download","description":"Create a private temporary download URL for your creative's website download rendition. The URL expires after 15 minutes; keep it out of public artifacts.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Your creative ID."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:read"]}]}},{"name":"list_payment_methods","description":"Read your saved cards and default payment method. Returns card summaries, never full card numbers or secrets.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["billing:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["billing:read"]}]}},{"name":"set_default_payment_method","description":"Set an owned saved card as your default under existing billing and settlement guards. Does not change the card on an existing bid.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Your saved payment method ID."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["billing:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["billing:write"]}]}},{"name":"remove_payment_method","description":"Remove an owned saved card. The website's last-card and active-settlement guards still apply.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Your saved payment method ID."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["billing:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["billing:write"]}]}},{"name":"open_billing_portal","description":"Open the hosted Stripe portal to update your billing address. This portal does not collect a new card; use prepare_account_action for the website's card form.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["billing:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["billing:write"]}]}},{"name":"list_passkeys","description":"Read your registered passkey names and dates without private key material.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["security:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["security:read"]}]}},{"name":"remove_passkey","description":"Remove one of your registered passkeys. You must explicitly choose the key; this removes a login method.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Your passkey ID."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["security:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["security:write"]}]}},{"name":"request_marketing_consent","description":"Request the existing double-opt-in email for your account. The email recipient must confirm; this call cannot grant marketing consent.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["account:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["account:write"]}]}},{"name":"withdraw_marketing_consent","description":"Withdraw your marketing consent using the website's consent, preference and audit transaction. Mandatory service messages remain enabled.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["account:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["account:write"]}]}},{"name":"request_data_export","description":"Request the website's data-export action. The current website returns not implemented; report that response honestly and never invent a bundle.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["privacy:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["privacy:write"]}]}},{"name":"request_account_erasure","description":"Queue account erasure through the existing privacy workflow, subject to unpaid-invoice retention guards. Ask for explicit erasure authorization; queue acceptance does not prove deletion.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["privacy:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["privacy:write"]}]}},{"name":"list_agent_connections","description":"Read your OAuth agent connections and their granted scopes and spending limits. Never exposes access tokens or expands a grant.","inputSchema":{"type":"object","properties":{"cursor":{"type":"string","maxLength":2048}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["connections:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["connections:read"]}]}},{"name":"revoke_agent_connection","description":"Revoke a selected owned agent connection and clear its spending tally. Revoking this connection can stop further tool calls. Cannot create a grant or raise a mandate.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"The owned provider grant ID from list_agent_connections."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["connections:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["connections:write"]}]}},{"name":"prepare_account_action","description":"Prepare the website step for a device-bound or personally approved action. Returns requires_user_action and the deployment's URL; never claims completion or raises a mandate.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["register_passkey","add_payment_method","first_bid","push_enrollment","authorize_agent"]}},"additionalProperties":false,"required":["action"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["account:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["account:read"]}]}},{"name":"get_affiliate_account","description":"Read your affiliate partner profile and activation status. The tool returns a null partner until you activate it. It never exposes your postback signing secret.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"partner":{"type":["object","null"]}},"required":["partner"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}]}},{"name":"activate_affiliate","description":"Activate your affiliate partner account only after you explicitly accept the terms at https://preview.nowyourlink.com/affiliate/terms. Requires your verified email. Never infer acceptance from a request to view affiliate data.","inputSchema":{"type":"object","properties":{"terms_accepted":{"type":"boolean","const":true,"description":"True only after the user explicitly accepts the linked affiliate terms."},"display_name":{"type":"string","maxLength":120,"pattern":"\\S"}},"required":["terms_accepted"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"partner":{"type":"object"}},"required":["partner"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:write"]}]}},{"name":"get_affiliate_connect_status","description":"Refresh your Stripe Connect payout readiness and requirements. This updates cached readiness flags and does not initiate a transfer or a payout.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"outputSchema":{"type":"object","properties":{"configured":{"type":"boolean"},"account_id":{"type":["string","null"]},"transfers_active":{"type":"boolean"},"payouts_enabled":{"type":"boolean"},"ready":{"type":"boolean"},"requirements_due":{"type":"array","items":{"type":"string"}}},"required":["configured","account_id","transfers_active","payouts_enabled","ready","requirements_due"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}]}},{"name":"start_affiliate_onboarding","description":"Create a short-lived Stripe-hosted onboarding link for your affiliate payout account. Open it yourself to provide bank details and verification directly to Stripe; never provide those details in chat. Each call issues a fresh link.","inputSchema":{"type":"object","properties":{"country":{"type":"string","enum":["DE","AT","BE","ES","FI","FR","IE","IT","LU","NL","PT"],"description":"Payout account country; defaults to DE."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"outputSchema":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"expires_at":{"type":"string"}},"required":["url","expires_at"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:write"]}]}},{"name":"get_affiliate_stats","description":"Read your affiliate estimates, approved commissions and audience share. Estimates are not payable; referred advertisers' sealed bids remain private.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}]}},{"name":"get_affiliate_links","description":"Create direct homepage/Spotlight or advertiser-signup referral URLs and disclosed banner snippets. Opening a link does not itself attribute commission. Campaign and subid are stable placement labels, not visitor or click IDs.","inputSchema":{"type":"object","properties":{"destination":{"type":"string","enum":["spotlight","advertiser"],"description":"Defaults to spotlight (homepage). Advertiser opens signup."},"campaign":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,80}$"},"subid":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,80}$"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}]}},{"name":"list_affiliate_payouts","description":"Read your payout history. A Stripe transfer and a completed bank payout are distinct states.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:read"]}]}},{"name":"request_affiliate_payout","description":"Reserve and request an eligible affiliate payout through Stripe Connect. Requires verified payout readiness, a released balance of at least EUR 25 and an idempotency key. Can move real money.","inputSchema":{"type":"object","properties":{"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{8,128}$","description":"Client-chosen key; the same key returns the same result."},"payout_id":{"type":"string","pattern":"^[0-9a-fA-F-]{36}$","description":"Retry this owned returned bank payout, reusing its existing Stripe transfer. Omit to request a new eligible payout."}},"required":["idempotency_key"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:write"]}]}},{"name":"configure_affiliate_postback","description":"Set your public HTTPS callback URL for signed affiliate commission and payout events. Internal/private destinations and redirects are rejected. An empty URL disables delivery.","inputSchema":{"type":"object","properties":{"postback_url":{"type":"string","maxLength":2048}},"required":["postback_url"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["affiliate:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["affiliate:write"]}]}},{"name":"get_profile","description":"Read the profile for your authenticated connection. Its opaque account id stays the same across token refresh, reconnection and changes to display name.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"pattern":"\\S","description":"Opaque immutable user identifier, unique within this app. The app never reassigns it."},"name":{"type":"string","description":"Display name for the authenticated account."}},"required":["id"],"additionalProperties":false},"_meta":{"openai/profile":true,"securitySchemes":[{"type":"oauth2","scopes":["account:read"]}]},"securitySchemes":[{"type":"oauth2","scopes":["account:read"]}]},{"name":"get_account","description":"Read account and first-bid prerequisites, including satisfied, blocked and unknown states, existing next actions and required browser steps. Optionally supply day, ad_id and amount_cents for a concrete bid. Onboarding grants no spending rights.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."},"ad_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"amount_cents":{"type":"integer","minimum":0,"maximum":100000000}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["account:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["account:read"]}]}},{"name":"list_my_bids","description":"List the advertiser's own bids for one auction day, with amount and status.","inputSchema":{"type":"object","required":["day"],"additionalProperties":false,"properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["bids:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["bids:read"]}]}},{"name":"place_bid","description":"Place a sealed bid in EUR cents for one auction day with an approved creative. Spends real money within the mandate. Requires idempotency_key. If the result is unknown, read list_my_bids for this day first and reuse the original request and key; never use a new key for a retry. Acceptance is not a win or delivered advertising.","inputSchema":{"type":"object","required":["day","ad_id","amount_cents","idempotency_key"],"additionalProperties":false,"properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."},"ad_id":{"type":"string","description":"Id of an approved creative."},"amount_cents":{"type":"integer","minimum":100,"maximum":100000000},"idempotency_key":{"type":"string","pattern":"^[\\x21-\\x7e]{1,255}$","description":"Client-chosen key; the same key returns the same result."},"payment_method_id":{"type":"string","maxLength":255,"pattern":"^pm_[A-Za-z0-9_]+$","description":"Optional owned saved card for a new bid. Bid increases use the account default card."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["bids:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["bids:write"]}]}},{"name":"increase_bid","description":"Raise an existing bid to a higher amount in EUR cents. Spends the difference within the mandate. Requires idempotency_key.","inputSchema":{"type":"object","required":["day","ad_id","amount_cents","idempotency_key","bid_id"],"additionalProperties":false,"properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."},"ad_id":{"type":"string","description":"Id of an approved creative."},"amount_cents":{"type":"integer","minimum":100,"maximum":100000000},"idempotency_key":{"type":"string","pattern":"^[\\x21-\\x7e]{1,255}$","description":"Client-chosen key; the same key returns the same result."},"bid_id":{"type":"string","description":"Id of the bid to raise."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["bids:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["bids:write"]}]}},{"name":"list_creatives","description":"List the advertiser's creatives with their moderation state, optionally filtered by that state.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","enum":["draft","pending","approved","rejected","revoked"]}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:read"]}]}},{"name":"get_creative","description":"Read one creative by id, with its copy, image and moderation state.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Id of the creative to read."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:read"]}]}},{"name":"upload_creative","description":"Upload an image creative (JPEG, PNG, WebP or GIF, max 10 MB) from a public https URL and create a draft with headline, description, target URL and a call-to-action label. Submit it with submit_creative.","inputSchema":{"type":"object","required":["image_url","headline","description","target_url","cta_label"],"additionalProperties":false,"properties":{"image_url":{"type":"string","format":"uri","description":"Public https URL of the image to upload."},"headline":{"type":"string","maxLength":80},"description":{"type":"string","maxLength":180},"target_url":{"type":"string","format":"uri"},"cta_label":{"type":"string","enum":["learn-more","shop-now","sign-up","book","download","contact"],"description":"Call-to-action button label. Required before submit_creative."},"display_url":{"type":"string","maxLength":2048,"description":"Text shown on the ad as its display URL."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"update_creative","description":"Edit the headline, description, target URL, display URL or call-to-action label of an owned draft creative. Supply at least one field. Use it to repair a draft whose copy was refused, instead of uploading the image again.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Id of the draft creative."},"headline":{"type":"string","maxLength":80},"description":{"type":"string","maxLength":180},"target_url":{"type":"string","format":"uri"},"cta_label":{"type":"string","enum":["learn-more","shop-now","sign-up","book","download","contact"],"description":"Call-to-action button label. Required before submit_creative."},"alt_text":{"type":"string","maxLength":160,"description":"Caption for the attached asset."},"display_url":{"type":"string","maxLength":2048,"description":"Text shown on the ad as its display URL."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"submit_creative","description":"Submit a draft creative for moderation. Copy that fails the moderation preflight is refused with 422; try sandbox_upload_creative first. Only an approved creative can carry a bid.","inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Id of the draft creative to submit."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"list_invoices","description":"List the advertiser's invoices with amounts, payment status and the hosted invoice document.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["invoices:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["invoices:read"]}]}},{"name":"get_account_settings","description":"Read your company profile, VAT verification state, contact preferences and hosted billing/security links. Preferences do not prove marketing consent or browser push enrollment.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["account:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["account:read"]}]}},{"name":"update_company_profile","description":"Correct your company name and VAT ID while your account permits correction. Supply both fields; null clears the VAT ID. Existing verification, country and billing locks still apply.","inputSchema":{"type":"object","properties":{"company_name":{"type":"string","maxLength":200},"vat_id":{"type":["string","null"],"maxLength":32}},"required":["company_name","vat_id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["account:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["account:write"]}]}},{"name":"set_notification_preference","description":"Enable or disable one supported email or push topic for your account. You cannot disable mandatory service messages. Marketing requires existing confirmed consent; push enrollment needs browser permission.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","enum":["new_auction_open","outbid_recovery","winback","holiday","product_email","account_security","auction_outcome","payment_receipt","outbid","closing_soon"]},"channel":{"type":"string","enum":["email","push"]},"enabled":{"type":"boolean"}},"required":["topic","channel","enabled"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["account:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["account:write"]}]}},{"name":"list_reports","description":"List your saved campaign reports by UTC day, newest first, with bounded pagination. Reports preserve historical spend. Missing conversion tracking yields null metrics rather than a claim of zero sales.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"before":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["reports:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["reports:read"]}]}},{"name":"get_report","description":"Read your saved campaign report for one UTC auction day, including clicks, observed conversions, revenue, spend and return on ad spend. Unknown tracking stays null; this does not expose another advertiser's report.","inputSchema":{"type":"object","properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."}},"required":["day"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["reports:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["reports:read"]}]}},{"name":"get_spotlight_stats","description":"Read performance for a Spotlight you own on one UTC day. Statistics exclude bots and withhold aggregates that mix advertisers. Unknown tracking stays null; sealed competitor bids remain private.","inputSchema":{"type":"object","properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."}},"required":["day"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["reports:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["reports:read"]}]}},{"name":"start_video_upload","description":"Create a video creative draft and multipart upload for your rendered MP4, MOV or WebM. Returns ad_id, asset_id, upload_id, key and part_size. Upload actual bytes directly with signed URLs; this tool does not generate or render video.","inputSchema":{"type":"object","properties":{"mime":{"type":"string","enum":["video/mp4","video/quicktime","video/webm"]},"content_length":{"type":"integer","minimum":1,"maximum":4999999999}},"required":["mime","content_length"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"get_video_upload_urls","description":"Sign up to 50 multipart PUT URLs for your video upload; URLs expire after 15 minutes. Use returned part_size and retain each PUT response ETag. Upload URLs are private temporary capabilities; never publish them.","inputSchema":{"type":"object","properties":{"asset_id":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9_-]+$"},"upload_id":{"type":"string","maxLength":2048},"key":{"type":"string","maxLength":1024},"part_numbers":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"integer","minimum":1,"maximum":299}}},"required":["asset_id","upload_id","key","part_numbers"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"complete_video_upload","description":"Finalize your multipart upload using actual ETags and enqueue metadata validation and video transcoding. Queue acceptance does not complete transcoding, approve the creative or publish the ad. Check get_video_status before submitting the creative.","inputSchema":{"type":"object","properties":{"asset_id":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9_-]+$"},"upload_id":{"type":"string","maxLength":2048},"key":{"type":"string","maxLength":1024},"ad_id":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9_-]+$"},"parts":{"type":"array","minItems":1,"maxItems":299,"items":{"type":"object","properties":{"part_number":{"type":"integer","minimum":1,"maximum":299},"etag":{"type":"string","maxLength":128}},"required":["part_number","etag"],"additionalProperties":false}}},"required":["asset_id","ad_id","upload_id","key","parts"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"get_video_status","description":"Read transcoding status for your own video asset. Only ready permits creative submission; a queued, processing or failed upload does not prove readiness or moderation approval.","inputSchema":{"type":"object","properties":{"asset_id":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["asset_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:read"]}]}},{"name":"abort_video_upload","description":"Abort your incomplete multipart upload and optionally remove its empty draft ad. Supply the original asset_id, upload_id and key. This cannot withdraw a live ad or undo a completed transcode.","inputSchema":{"type":"object","properties":{"asset_id":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9_-]+$"},"upload_id":{"type":"string","maxLength":2048},"key":{"type":"string","maxLength":1024},"ad_id":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["asset_id","upload_id","key"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"replace_creative_video","description":"Start a replacement video upload on your existing draft. This detaches the draft's current media before the new upload completes. Confirm this specific replacement first; a failed upload does not restore the old attachment.","inputSchema":{"type":"object","properties":{"mime":{"type":"string","enum":["video/mp4","video/quicktime","video/webm"]},"content_length":{"type":"integer","minimum":1,"maximum":4999999999},"id":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["id","mime","content_length"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}},{"name":"sandbox_place_bid","description":"Read the prerequisites for this concrete bid, including account, company, identity, card, owned creative approval, live auction and spending mandate. Writes nothing and spends nothing. Readiness is a snapshot; place_bid rechecks the gates.","inputSchema":{"type":"object","required":["day","ad_id","amount_cents","idempotency_key"],"additionalProperties":false,"properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Auction day in UTC, YYYY-MM-DD."},"ad_id":{"type":"string","description":"Id of an approved creative."},"amount_cents":{"type":"integer","minimum":100,"maximum":100000000},"idempotency_key":{"type":"string","pattern":"^[\\x21-\\x7e]{1,255}$","description":"Client-chosen key; the same key returns the same result."},"payment_method_id":{"type":"string","maxLength":255,"pattern":"^pm_[A-Za-z0-9_]+$","description":"Optional owned saved card for a new bid. Bid increases use the account default card."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["bids:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["bids:write"]}]}},{"name":"sandbox_upload_creative","description":"Validate creative copy and the image URL shape without uploading anything, and run the moderation preflight over the copy. Returns a verdict (pass, review, block or unavailable) with the signals behind it, so the copy can be fixed before upload. Writes nothing.","inputSchema":{"type":"object","required":["image_url","headline","description","target_url","cta_label"],"additionalProperties":false,"properties":{"image_url":{"type":"string","format":"uri","description":"Public https URL of the image to upload."},"headline":{"type":"string","maxLength":80},"description":{"type":"string","maxLength":180},"target_url":{"type":"string","format":"uri"},"cta_label":{"type":"string","enum":["learn-more","shop-now","sign-up","book","download","contact"],"description":"Call-to-action button label. Required before submit_creative."},"display_url":{"type":"string","maxLength":2048,"description":"Text shown on the ad as its display URL."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["creatives:write"]}]}}]}