canonical: https://jentic.com/apis/madethis.com/madethis

# MadeThis API

The MadeThis API runs the business side of a small online product for builders who bring their own coding agent: products, checkout links, orders, customers, and Stripe-backed subscriptions and payouts. Products created through it sync to Stripe when active, orders can be refunded fully or partially or marked shipped with tracking, and shareable checkout URLs are issued for any active product. The same business account also sends email from a provisioned inbox, runs cold-email sequences against imported or searched leads, publishes social posts, launches and pauses Meta ad campaigns, and registers custom domains. Risky actions can be parked as confirmations that the owner confirms or rejects, and a usage endpoint reports the credit balance and whether writes are currently allowed.

## For AI agents

Run a small online business with MadeThis: create products and checkout links, refund and ship orders, email customers, run outreach sequences, post to social, and launch Meta ads under a spend policy.

## Scope

Does not host a full multi-store storefront, file taxes, or run payroll. Use for running a small product business's sales, email, outreach, social, and ads only.

## Capabilities

- Create a product with priceAmountCents and pricingModel, sync it to Stripe, and issue a shareable checkout link
- Refund an order fully or partially, or mark a physical order shipped with carrier and trackingNumber
- Send email from the business inbox and read email threads with their messages
- Import or search leads by jobTitles, industries, and locations, then enrol them in a cold-email sequence
- Publish or schedule a social post across connected platforms and retry a failed post
- Launch a Meta ad campaign, read campaign insights, change the daily budget, or pause it
- Review parked confirmations and confirm or reject each action before it executes

## Use cases

### Coding agent launching a product through Jentic

A builder asks their coding agent to put a new template up for sale. Through Jentic the agent searches for 'create a product', loads the MadeThis product operation with its input schema, and posts the name and priceAmountCents, then requests a checkout link for the new productId. The business-scoped API key is injected at call time, so the agent never holds it.

Example prompt: Call POST /products with name 'Notion Budget Template' and priceAmountCents 1900, then POST /checkout-links with the returned productId and return the checkout URL

### Order fulfilment and refunds

Once sales arrive, someone has to ship physical goods and handle refund requests. MadeThis lists orders newest first, marks a physical order shipped with an optional carrier and trackingNumber, and refunds an order fully or partially with amountCents and a reason; the refund call requires an Idempotency-Key so a retry cannot refund twice.

Example prompt: Call GET /orders, then POST `/orders/{id}/ship` with carrier and trackingNumber for each unshipped physical order

### Cold-email outreach to a defined audience

A founder wants outbound without wiring a separate lead tool and mail sender. MadeThis searches leads matching an ideal customer profile by jobTitles, industries, locations, and company size, billed per Apollo enrichment, or imports a list the founder already has. A sequence is created as a draft with steps and an icpDescription and sends nothing until leads are enrolled, and enrolment is held for confirmation.

Example prompt: Call POST `/leads/search` with jobTitles ['Head of Marketing'] and industries ['Software'], then POST /sequences with name, icpDescription, and steps, then POST `/sequences/{id}/leads` with the leadIds

### Meta ads under a spend policy

Paid acquisition is where an agent mistake costs real money. MadeThis creates and launches a Meta campaign asynchronously under the business spend policy, reports campaign insights that lag Meta by roughly thirty minutes, and changes the daily budget only when the expected current budget matches; budget increases are spend-gated while pausing a campaign is always available.

Example prompt: Call GET `/ads/{id}/insights` for a campaign and, if cost per result is above target, call POST `/ads/{id}/pause`

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/products` | Create a product |
| POST | `/checkout-links` | Get a checkout URL for a product |
| GET | `/orders` | List orders |
| POST | `/orders/{id}/refund` | Refund an order |
| POST | `/email/send` | Send an email from the business inbox |
| POST | `/sequences` | Create a cold-email sequence |
| POST | `/ads/publish` | Create and launch a Meta campaign |
| POST | `/confirmations/{id}/confirm` | Confirm a parked action |

## Key resources

- **Products and checkout links** — Products synced to Stripe when active, with shareable checkout URLs
- **Orders, customers, and subscriptions** — Orders with refund and ship actions, customer records with tags and notes, and Stripe Billing Portal sessions
- **Email, leads, and sequences** — Business inbox sending and threads, lead search and import, and cold-email sequences
- **Ads and social posts** — Meta campaigns with budget and insights, and social posts across connected accounts
- **Confirmations** — Parked actions the owner confirms or rejects before they execute

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 52 / 100
- **Maturity:** Non-Ready
- **Dimensions:**
  - Foundational Compliance: 35 / 100
  - Developer Experience & Jentic Compatibility: 63 / 100
  - AI-Readiness & Agent Experience: 43 / 100
  - Agent Usability: 89 / 100
  - Security: 60 / 100
  - AI Discoverability: 53 / 100
- **View full report:** https://jentic.com/apis/madethis.com/madethis/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring MadeThis by hand means minting a business-scoped bearer key, sending Idempotency-Key headers on writes, and handling parked confirmations and async ad publishing. Through Jentic you install once, import MadeThis from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** MadeThis puts resource ids in the URL path, such as `/orders/{id}/refund` and `/ads/{id}/budget`, so a rule can pin your agent to one order or one campaign and the operations you pick. You choose the operations it may call, so money-moving ones like refunds, ad publishing, or budget changes are not included unless you add them.
- **Credential handling:** Your MadeThis API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'refund an order' or 'pause an ad campaign', and Jentic returns the matching MadeThis operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Gumroad** — Sell digital products and memberships with hosted checkout
- **Shopify** — Full e-commerce platform for stores with large product ranges
- **Shippo** — Shipping rates, labels, and tracking across carriers
- **Instantly** — Dedicated cold-email outreach platform

## FAQ

### What authentication does the MadeThis API use?

The MadeThis API authenticates with a business-scoped API key in the mt_live_ format, sent as an HTTP bearer token, per its OpenAPI spec. You mint it with the madethis login CLI command or in dashboard settings. The two CLI pairing operations, POST `/cli-auth/start` and POST `/cli-auth/poll`, need no key. Through Jentic the key is stored by your own instance and attached at call time.

### Can I refund an order with the MadeThis API?

Yes. POST `/orders/{id}/refund` refunds an order fully, or partially when you pass amountCents, with an optional reason and note. The operation requires an Idempotency-Key header, so a retried call does not issue a second refund.

### What are the rate limits for the MadeThis API?

The OpenAPI spec does not specify request rate limits, though it notes a per-inbox daily cap on email sends and gates spending by credit balance, which GET /usage reports. Check the MadeThis site at https://www.madethis.com for current limits.

### Is there a MadeThis MCP server?

You don't need an MCP server to give your agent MadeThis. Jentic connects it directly from the API Directory: import it, store your API key once, and your agent calls the products, orders, email, and ads operations it needs, discovered on demand rather than loaded into its context up front.

### How do I create a checkout link through Jentic?

Search Jentic for 'get a checkout link for a product', load the POST /checkout-links operation, and run it with the productId of an active product to get a shareable URL. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Can I limit what my agent is allowed to do with the MadeThis API?

Yes. For example, a rule that allows GET /orders, GET `/ads/{id}/insights`, and POST `/ads/{id}/pause` lets the agent review sales and stop a costly campaign while it cannot refund orders, publish ads, or raise a budget. Jentic logs each call the agent makes.

### What are MadeThis confirmations?

Some actions, such as enrolling leads in a sequence or resuming one, are held as confirmations instead of running immediately. GET /confirmations lists them, POST `/confirmations/{id}/confirm` executes one exactly once, and POST `/confirmations/{id}/reject` ensures it never runs.
