# Dropship houseplants in your own pots (API)

Have pots made to your design, and a nursery in the US pot a houseplant in one and ship it for every order your store takes. Send it to Établi as one request: it becomes two legs, a pot factory and a nursery, each put out to bid, and your store places one API call per order.

- **Try it:** `POST /v1/quotes/preview`, no key
- **Legs:** 2: a pot factory (anywhere) feeding a nursery in the US
- **Orders:** One API call per customer order, and a lot of pots when the nursery runs low
- **Prices:** From workshops' bids, all-in. [No price list](https://etabli.io/pricing)

## Try it, with no key

Describe the whole job in one request: the pots, the nursery, how fast each order ships, and the most you'd pay for each part. This is the request we sent:

The request:

> Natural pastel self-watering pots in our own design, made cheaply in lots of up to 100 (overseas is fine) and sent to a nursery in the US. For each customer order, the nursery pots one of its houseplants in our pot and ships it to the customer within 2 business days. Up to $3 a pot and $14 an order, postage on top.

Preview the plan, curl:

```bash
curl -sX POST https://api.etabli.io/v1/quotes/preview \
  -H "Content-Type: application/json" \
  -d '{"request":"Natural pastel self-watering pots in our own design, made cheaply in lots of up to 100 (overseas is fine) and sent to a nursery in the US. For each customer order, the nursery pots one of its houseplants in our pot and ships it to the customer within 2 business days. Up to $3 a pot and $14 an order, postage on top."}'
```

Preview the plan, TypeScript:

```ts
const response = await fetch("https://api.etabli.io/v1/quotes/preview", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    request: "Natural pastel self-watering pots in our own design, made cheaply in lots of up to 100 (overseas is fine) and sent to a nursery in the US. For each customer order, the nursery pots one of its houseplants in our pot and ships it to the customer within 2 business days. Up to $3 a pot and $14 an order, postage on top.",
  }),
});
const plan = await response.json();
for (const leg of plan.legs) {
  console.log(leg.key, leg.title, `${leg.questions.length} open questions`);
}
```

Preview the plan, Python:

```python
import requests

plan = requests.post(
    "https://api.etabli.io/v1/quotes/preview",
    json={"request": "Natural pastel self-watering pots in our own design, made cheaply in lots of up to 100 (overseas is fine) and sent to a nursery in the US. For each customer order, the nursery pots one of its houseplants in our pot and ships it to the customer within 2 business days. Up to $3 a pot and $14 an order, postage on top."},
    timeout=120,
).json()
for leg in plan["legs"]:
    print(leg["key"], leg["title"], len(leg["questions"]), "open questions")
```

No key and no account. Planning takes up to a minute; nothing is ordered or sent to workshops. Ask the person before you send their name and email anywhere.

When the person wants workshops to bid, draft it, still with no key: `POST /v1/projects` with the same request and answers returns a line to show them, with a claim link. They check the plan and publish it on etabli.io. [Draft and claim](https://etabli.io/docs#draft-and-claim) has the calls.

## The plan it returns

### Two legs, linked

What the live API returned for the request above, on 9 October 2026; its dates count from that day. Each preview is written fresh, so yours will be worded differently. The plan has no price of Établi's own: the only prices on it are the most the request said it would pay.

2 legs: 2 workshops. **Pastel self-watering pots with dropshipped houseplants.** A factory makes the buyer's own-design natural pastel self-watering pots cheaply in lots of up to 100 and ships them to a US nursery. The nursery pots one of its houseplants in a pot for each customer order and ships it to the customer within 2 business days.

#### Leg 1 of 2 · Pastel self-watering pots in our own design (`pots`)

Manufacture the buyer's custom self-watering pots in lots and deliver them to the nursery.

- **Who does it:** Plastic or ceramic planter factory making custom self-watering pots to a customer's design in pastel colours, accepting small repeat orders of about 100 pieces.
- **Where the workshop can be:** Anywhere
- **Provided:**
  - Pot design (shape, dimensions, self-watering reservoir and wick or insert): Buyer's own design; file format and level of detail to be confirmed.
  - Natural pastel colour references: Buyer to provide colour targets (e.g. Pantone or physical swatches) for approval on samples.
  - Raw material, moulds/tooling and freight packaging (workshop supplies): Tooling or mould cost for the buyer's design must be quoted separately in the bid.
- **Work:** Quote and, once approved, build tooling or moulds for the buyer's self-watering pot design. Produce pre-production samples in the specified natural pastel colours for buyer approval before the first lot. Then manufacture repeat lots of up to 100 pots each on order, including all self-watering components, so pots arrive ready to plant. Pack each lot to survive international and domestic freight. In the bid, state: minimum order quantity, tooling/mould cost, sample timing, production lead time per lot, and who arranges freight and US customs and who pays import duties, with delivery to the nursery's US address.
- **Result:** Lots of up to 100 finished, undamaged, ready-to-plant self-watering pots delivered to the partner nursery's US receiving address, where the nursery leg pots houseplants in them for customer orders.
- **Most you'll pay:**
  - $3.00 a piece
  - Includes production of each pot including self-watering components, pastel colouring per approved samples, freight-grade packing and replacement or credit for pots found damaged or defective on arrival at the nursery
  - Excludes tooling/mould cost (quoted separately)
- **When:** Flexible
- **Proof:** Tracking number, photos and document
- **Where:** Partner nursery's US receiving address (nursery leg)
- **Rules:**
  - Overseas production is acceptable.
  - Pre-production samples must be approved by the buyer before the first lot.
  - Pots damaged or defective on arrival at the nursery are replaced or credited by the workshop; nursery to report with photos on receipt.
  - Bid must state MOQ, tooling cost, sample timing, lead time per lot, and freight/customs/duty responsibility.
  - Pots must be suitable for planting live houseplants (food-safe or plant-safe material, no harmful coatings).

We assumed:

- Pots are plastic (injection or blow moulded), as that is typical for cheap self-watering pots at $3; switch to ceramics if the buyer wants ceramic.
- Each lot of up to 100 pots is a separate order against this contract.
- Tooling/mould cost is quoted separately and is not included in the $3 per-pot ceiling.
- Proof of delivery is a tracking number, photos of packed lots, and shipping/customs documents.
- No firm deadline per lot; workshops state their own lead time.

Open questions, with Établi's suggested answers:

1. **Does the $3 per pot include freight, US customs clearance and import duties to the nursery (delivered duty paid), or are those paid on top?** Suggested: The $3 includes production and packing only; freight, customs and duties are quoted separately per lot, delivered to the nursery. Why we ask: Overseas freight and duties can approach or exceed the cost of a $3 pot, so this decides which bids fit.
2. **What material should the pots be: plastic or ceramic?** Suggested: Plastic (recycled PP or similar), matte finish. Why we ask: Material decides which factories can bid and drives tooling and unit cost.
3. **What size are the pots and what design files can you supply?** Suggested: About 12 cm (5 in) diameter, 11 cm tall with an inner pot and reservoir; we will supply 3D CAD files (STEP) and colour references. Why we ask: Pot dimensions and file readiness drive tooling cost, unit price and sample timing.
4. **Roughly how many pots do you expect to order in the first year, and how often will lots be ordered?** Suggested: About 1,200 pots in the first year, one lot of 100 per month. Why we ask: Factories set MOQs and amortise tooling against expected volume, which changes the per-pot price.
5. **Is there a budget limit for the one-time tooling/mould cost?** Suggested: Up to $2,000 for tooling, paid once. Why we ask: Tooling for custom moulded pots can range from a few hundred to several thousand dollars, which determines which bids are acceptable.

#### Leg 2 of 2 · Pot houseplants in our pots and ship each order (`nursery`)

Pot a houseplant in the buyer's pot for each customer order and ship it to the customer.

- **Who does it:** US houseplant nursery or grower that dropships individual potted plants to consumers, willing to pot in customer-supplied containers and ship within 2 business days.
- **Where the workshop can be:** United States
- **Gets from another leg:** Natural pastel self-watering pots in our design, delivered in lots of up to 100 · From leg 1 (Pastel self-watering pots in our own design)
- **Provided:**
  - Natural pastel self-watering pots in the buyer's design (from leg 1): Delivered in lots of up to 100 to the nursery's receiving address. Inspect on receipt and report damaged pots with photos so the factory can replace or credit them.
  - Houseplants sized to fit the pot (workshop supplies): Nursery lists the houseplant varieties it can offer; the buyer chooses which to sell.
  - Potting mix, self-watering wick setup if needed, and plant-safe shipping packaging (workshop supplies)
  - Customer order with shipping address: One order per customer purchase.
- **Work:** Receive and inspect pot lots, report any damage on receipt, and store the pots. Notify the buyer when pot stock runs low. For each order, pot one houseplant in one buyer pot, set up the self-watering reservoir, pack it to arrive healthy (secured soil, protected foliage, insulated if the weather calls for it), and ship it to the customer's address. Provide a list of available houseplants and the US states you can legally ship to, noting any California quarantine or Hawaii soil-free limits.
- **Result:** One healthy potted houseplant in the buyer's self-watering pot, delivered to the customer's address per order.
- **Most you'll pay:**
  - $14.00 a piece
  - Includes houseplant, potting mix and potting labor, packing materials, storage of buyer's pots, receiving inspection and damage reporting and low-stock notifications
  - Excludes postage, billed on top at cost and the pots, supplied by the pots leg
- **When:** Ships within 2 business days of each order
- **Proof:** Tracking number
- **Where:** Each customer's address within the US, carried on each order
- **Rules:**
  - State nursery license (needed to ship live plants)
  - Pots damaged on arrival must be reported with photos at receipt; the pot factory replaces or credits them.
  - Pots broken after acceptance while in the nursery's care are the nursery's cost.
  - The nursery declares which states it ships to and must follow California quarantine rules and Hawaii's soil-free requirement, or exclude those states.
  - Postage is passed through at cost with no markup.

We assumed:

- Price is per order of one potted plant: $14 all-in, excluding postage.
- Proof is a carrier tracking number per order.
- Low stock means 25 or fewer pots on hand, or about two weeks of orders, whichever is larger.
- Storage of up to one or two lots of pots is included in the per-order price.
- States the nursery cannot ship to are left to the bidder to declare.

Open questions, with Établi's suggested answers:

1. **About how many orders per week do you expect, and what is the peak week?** Suggested: About 20 orders a week, peaking at 60 in holiday weeks. Why we ask: Volume decides plant stock levels, staffing and whether a nursery can meet the 2-day ship time at $14.
2. **What are the pot's inner diameter and height, so nurseries can offer plants that fit?** Suggested: About 4 in inner diameter and 4 in tall, suited to plants grown in 4 in nursery pots. Why we ask: Pot size sets the plant size, which drives plant cost and shipping weight.

The response, abridged (each leg's `spec` has all eight fields, and `sourcing` says who to look for):

```json
{
  "title": "Pastel self-watering pots with dropshipped houseplants",
  "summary": "A factory makes the buyer's own-design natural pastel self-watering pots cheaply in lots of up to 100 and ships them to a US nursery. The nursery pots one of its houseplants in a pot for each customer order and ships it to the customer within 2 business days.",
  "legs": [
    {
      "key": "pots",
      "title": "Pastel self-watering pots in our own design",
      "role": "Manufacture the buyer's custom self-watering pots in lots and deliver them to the nursery.",
      "spec": {
        "price": {
          "ceilingCents": 300,
          "per": "unit",
          "includes": [
            "Production of each pot including self-watering components",
            "Pastel colouring per approved samples",
            "Freight-grade packing",
            "Replacement or credit for pots found damaged or defective on arrival at the nursery"
          ],
          "excludes": [
            "Tooling/mould cost (quoted separately)"
          ]
        },
        "deadline": {
          "kind": "flexible",
          "businessDays": null,
          "date": null
        },
        "…": "work, output, proof, where, rules"
      },
      "questions": [
        {
          "field": "price.includes",
          "text": "Does the $3 per pot include freight, US customs clearance and import duties to the nursery (delivered duty paid), or are those paid on top?",
          "suggestedAnswer": "The $3 includes production and packing only; freight, customs and duties are quoted separately per lot, delivered to the nursery."
        }
      ],
      "inputsFrom": [],
      "sourcing": {
        "countries": null,
        "…": "lookFor, searchTerms"
      }
    },
    {
      "key": "nursery",
      "title": "Pot houseplants in our pots and ship each order",
      "role": "Pot a houseplant in the buyer's pot for each customer order and ship it to the customer.",
      "spec": {
        "price": {
          "ceilingCents": 1400,
          "per": "unit",
          "includes": [
            "houseplant",
            "potting mix and potting labor",
            "packing materials",
            "storage of buyer's pots",
            "receiving inspection and damage reporting",
            "low-stock notifications"
          ],
          "excludes": [
            "postage, billed on top at cost",
            "the pots, supplied by the pots leg"
          ]
        },
        "deadline": {
          "kind": "per_order",
          "businessDays": 2,
          "date": null
        },
        "…": "work, output, proof, where, rules"
      },
      "questions": [
        {
          "field": "volume.perWeek",
          "text": "About how many orders per week do you expect, and what is the peak week?",
          "suggestedAnswer": "About 20 orders a week, peaking at 60 in holiday weeks."
        }
      ],
      "inputsFrom": [
        {
          "fromLeg": "pots",
          "item": "Natural pastel self-watering pots in our design, delivered in lots of up to 100"
        }
      ],
      "sourcing": {
        "countries": [
          "US"
        ],
        "…": "lookFor, searchTerms"
      }
    }
  ],
  "engine": "claude:claude-opus-5-5"
}
```

## From the plan to orders

1. **Answer the questions.** The plan above has 7 open questions (5 for leg 1, 2 for leg 2), each with a suggested answer. Ask the person, starting with the most they'd pay on each leg, then preview again with `answers`.
2. **Draft it; the person claims it.** `POST /v1/projects` with no key, the request and the answers, returns a line to show the person, with a claim link. They check both legs and their ceilings on etabli.io and publish them, and workshops bid on each.
3. **Choose the offers.** When bidding closes, Établi contacts the person to confirm the offers they choose: one contract per leg, linked, the factory's lots shipping to the nursery's receiving address.
4. **Order per customer.** Your store's checkout webhook places one order on the nursery's contract, with the customer's address. When the nursery runs low on pots, order a lot of up to 100 on the factory's contract; with no address, it ships to the nursery.

Placing orders through the API takes a buyer key ([auth](https://etabli.io/docs#auth)). Confirm orders with the person: they commit real money.

A customer's order, curl:

```bash
# A customer bought a plant: one order on the nursery's contract.
curl -sX POST https://api.etabli.io/v1/contracts/$NURSERY_CONTRACT_ID/orders \
  -H "Authorization: Bearer $ETABLI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042" \
  -d '{
    "quantity": 1,
    "reference": "order-1042",
    "address": { "name": "Sam Rivera", "line1": "100 Main St", "city": "Springfield", "region": "IL", "postalCode": "62701" }
  }'
```

A customer's order, TypeScript:

```ts
// A customer bought a plant: one order on the nursery's contract.
const order = await fetch(`https://api.etabli.io/v1/contracts/${contractId}/orders`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.ETABLI_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "order-1042", // a retry never orders twice
  },
  body: JSON.stringify({
    "quantity": 1,
    "reference": "order-1042",
    "address": {
      "name": "Sam Rivera",
      "line1": "100 Main St",
      "city": "Springfield",
      "region": "IL",
      "postalCode": "62701"
    }
  }),
}).then((response) => response.json());
```

Use your store's order number as the `Idempotency-Key`: if the webhook retries, Établi returns the first order instead of placing a second.

A lot of pots, curl:

```bash
# The nursery is running low: a lot of 100 pots, shipped to the nursery.
curl -sX POST https://api.etabli.io/v1/contracts/$POTS_CONTRACT_ID/orders \
  -H "Authorization: Bearer $ETABLI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pots-lot-12" \
  -d '{"quantity":100}'
```

A lot of pots, TypeScript:

```ts
// The nursery is running low: a lot of 100 pots, shipped to the nursery.
const order = await fetch(`https://api.etabli.io/v1/contracts/${contractId}/orders`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.ETABLI_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "pots-lot-12", // a retry never orders twice
  },
  body: JSON.stringify({
    "quantity": 100
  }),
}).then((response) => response.json());
```

## Use it from your agent

Add Établi's MCP server (`https://api.etabli.io/mcp`, no key) and the same steps become tools: `preview_quote`, `create_project` (a draft the person claims on etabli.io) and `get_project`; with a buyer key, awarding and ordering. Or install the skill, which tells an agent when Établi fits.

- **Claude Code:** `claude mcp add --transport http etabli https://api.etabli.io/mcp`
- **Codex:** `codex mcp add etabli --url https://api.etabli.io/mcp`. Or add it to `~/.codex/config.toml`, which the Codex CLI, the IDE extension and the ChatGPT desktop app share:

  ```toml
  [mcp_servers.etabli]
  url = "https://api.etabli.io/mcp"
  ```
- **Cursor:** [Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=etabli&config=eyJ1cmwiOiJodHRwczovL2FwaS5ldGFibGkuaW8vbWNwIn0=). Or open [cursor.com/install-mcp](https://cursor.com/install-mcp?name=etabli&config=eyJ1cmwiOiJodHRwczovL2FwaS5ldGFibGkuaW8vbWNwIn0%3D) in a browser.
- **VS Code (Copilot):** [Add to VS Code](https://vscode.dev/redirect/mcp/install?name=etabli&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.etabli.io%2Fmcp%22%7D). Or run `code --add-mcp '{"name":"etabli","type":"http","url":"https://api.etabli.io/mcp"}'`.
- **Gemini CLI:** `gemini mcp add --transport http etabli https://api.etabli.io/mcp`
- **Skill (70+ agents):** `npx skills add https://etabli.io`. Installs Établi's skill, `order-physical-work`, into the agents on your machine: when to use Établi and how to order with it.

Every other client, and the tools: [the MCP server](https://etabli.io/mcp). The API: [docs](https://etabli.io/docs).

## Use something else when…

- **Stock plants in the grower's own pots are fine.** A plant dropshipper with a catalog is simpler: fixed products and prices, no bidding. Some publish an order API for their members; House Plant Dropship does.
- **You pot and pack the plants yourself.** You need a shipping API for labels and rates, such as Shippo or EasyPost, not workshops.
- **You only need the pots.** Ask Établi for the pots leg on its own, or find a factory on a marketplace such as Alibaba.com if you'll handle the quotes, samples, freight and customs yourself.
- **Your customers are outside the US.** Établi's orders go to US addresses only.

## Good to know

- A nursery that ships live plants needs a state nursery license, and California and Hawaii restrict plants and soil: the plan asks bidders to say which states they can ship to.
- Orders go to US addresses and are priced in US dollars. Workshops can be in any country a leg allows.
- Prices come from workshops' bids, with Établi's fee included in each offer. Établi has no price list; the most you say you'd pay caps the bids. [Pricing](https://etabli.io/pricing).
- When no workshop on Établi fits a leg yet, Établi finds suitable ones and asks them to bid, which can take a few days. A person at Établi approves every message first.
- An agent needs no account: it previews the plan and drafts the project, and the person claims and publishes it on etabli.io. Buyer keys are for companies that run the whole loop through the API themselves: [request API access](https://etabli.io/#access).
- Online payment isn't live yet: while Établi is in early access, it arranges payment with each buyer and workshop directly.

## More guides

- [Printed packaging, split across warehouses](https://etabli.io/use/custom-packaging-api)
- [Get products manufactured](https://etabli.io/use/manufacturing-api)
- [An API for AI agents](https://etabli.io/use/api-for-ai-agents)
- [Three ways agents buy physical goods](https://etabli.io/use/how-ai-agents-buy-physical-goods)

The API, auth and every endpoint: [docs](https://etabli.io/docs). For agents, everything in one file: [llms-full.txt](https://etabli.io/llms-full.txt).

---

This is the markdown version of https://etabli.io/use/dropship-houseplants-api. Every page on etabli.io has one at the same path plus .md (https://etabli.io/index.md for the home page). For agents: an overview at https://etabli.io/llms.txt, and everything in one file at https://etabli.io/llms-full.txt.
