# Greenset > Greenset draws ads from an online store, drafts them as Whop ad campaigns, starts them and reads their numbers. AI agents and your own code use it through the Greenset API (REST at https://app.greenset.ai/v1) or its MCP server (https://app.greenset.ai/mcp); both act for the one workspace an API key belongs to, with the same scopes, limits and spend checks. - Authentication: `Authorization: Bearer $GREENSET_KEY`, a `gsk_live_` key made under Developers in Greenset (shown once). Keys in URLs are refused, and there is no CORS: call from a server, a terminal or an editor. - Limits by plan, per key: Free 30, the trial 60, Premium 120, Agency 300 requests a minute; twice that across a workspace's keys; one budget shared by /v1 and /mcp. 429 answers carry Retry-After. Images a day: Free 6, Premium trial 15, Premium no daily count (fair use), Agency no daily count (fair use). - Every answer carries X-Request-Id; error bodies are {"error": {"code", "message", "request_id"}}. - Money: a draft never spends. `activate_draft` (POST /v1/drafts/{id}/activate) needs the `activate` scope and the daily budget typed back as `confirm_budget_usd`. The hard daily cap counts each budget at its worst day, 210% of it. The API can lower limits, never raise them. - MCP: https://app.greenset.ai/mcp, Streamable HTTP, protocol versions 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26. One tool per /v1 operation; tools/list shows the ones the key's scopes allow. ## Docs - [API reference](https://app.greenset.ai/docs): the whole API as one page for people, readable without signing in: quickstart, every operation with curl, JavaScript and Python, errors, limits, webhooks, MCP setup - [Full reference](https://app.greenset.ai/llms-full.txt): every operation with its scope, parameters, body fields, example and errors; webhook events; MCP setup for Claude Code, Claude, Codex, Cursor, Warp, Windsurf, VS Code, Gemini CLI; in one Markdown file - [OpenAPI 3.1 document](https://app.greenset.ai/v1/openapi.json): the machine-readable reference the API and the MCP tools are generated from - [MCP server](https://app.greenset.ai/mcp): POST one JSON-RPC 2.0 message per request with the Authorization header ## Operations - [get_account: GET /v1/account](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1account/get): Setup lamps, balance, caps and this key. Scope `read`. - [list_stores: GET /v1/stores](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1stores/get): Connected stores. Scope `read`. - [add_store: POST /v1/stores](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1stores/post): Add a store by URL. Scope `stores`. - [draw_concepts: POST /v1/concepts](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1concepts/post): Draw up to six ads from a store. Scope `studio`. - [get_concept: GET /v1/concepts/{id}](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1concepts~1%7Bid%7D/get): One concept. Scope `read`. - [get_concept_image: GET /v1/concepts/{id}/images/{format}](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1concepts~1%7Bid%7D~1images~1%7Bformat%7D/get): A concept's rendered image. Scope `read`. - [list_drafts: GET /v1/drafts](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1drafts/get): Drafts, newest first. Scope `read`. - [create_draft: POST /v1/drafts](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1drafts/post): Draft an ad from a concept. Scope `drafts`. - [get_draft: GET /v1/drafts/{id}](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1drafts~1%7Bid%7D/get): One draft, with its planned Whop requests. Scope `read`. - [activate_draft: POST /v1/drafts/{id}/activate](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1drafts~1%7Bid%7D~1activate/post): Start a live draft spending. Scope `activate`; moves money. - [stop_all: POST /v1/stop-all](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1stop-all/post): Pause every live campaign. Scope `stop`. - [list_campaigns: GET /v1/campaigns](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1campaigns/get): Campaigns with Whop's numbers. Scope `read`. - [list_events: GET /v1/events](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1events/get): What Whop told Greenset, newest first. Scope `read`. - [get_guardrails: GET /v1/guardrails](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1guardrails/get): Spend cap, ROAS floor, CPA target and autonomy. Scope `autopilot`. - [tighten_guardrails: PUT /v1/guardrails](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1guardrails/put): Tighten guardrails. Scope `autopilot`. - [list_webhooks: GET /v1/webhooks](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1webhooks/get): Webhook endpoints. Scope `webhooks`. - [create_webhook: POST /v1/webhooks](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1webhooks/post): Add a webhook endpoint. Scope `webhooks`. - [delete_webhook: DELETE /v1/webhooks/{id}](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1webhooks~1%7Bid%7D/delete): Delete a webhook endpoint. Scope `webhooks`. - [test_webhook: POST /v1/webhooks/{id}/test](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1webhooks~1%7Bid%7D~1test/post): Send a test event now. Scope `webhooks`. - [list_webhook_deliveries: GET /v1/webhooks/{id}/deliveries](https://app.greenset.ai/v1/openapi.json#/paths/~1v1~1webhooks~1%7Bid%7D~1deliveries/get): An endpoint's delivery log. Scope `webhooks`. ## Optional - [Terms](https://app.greenset.ai/terms): the terms of service - [Privacy](https://app.greenset.ai/privacy): what Greenset keeps and why