# Sell on AWS Marketplace

URL: /products/offers/sell-on-aws-marketplace · Id: `guide:sell-on-aws-marketplace`

> Say "list us on AWS Marketplace" and your Offers sell there, the marketplace bills the buyer, and each payout lands in your books net of its fee.

Some buyers spend only through their cloud bill. A marketplace that bills the buyer itself pays the [Startup](/business/nouns/startup) later, and each sale still lands as an [Order](/business/nouns/order) in your books.

Needs: [Ship an API](/products/api/ship-an-api)

**Before it runs**

- Who says yes: You. Your agent shows you the run and waits for your [Approval](/business/nouns/approval).
- You leave the chat: The other service’s sign-in page, to let it connect.

## What you get
- 1 connected seller account on the marketplace (Integration)
- 1 listing for each published Offer, at the same price (Offer)
- 1 Order per marketplace sale, marked as collected by the marketplace (Order)
- 1 lines in your books from each payout statement, after the marketplace fee (Entry)

## Your agent does
**For agents**

- Guide: `guide:sell-on-aws-marketplace`, status `beta`. Page: [/products/offers/sell-on-aws-marketplace.md](/products/offers/sell-on-aws-marketplace.md).
- Approval: ask the founder first. Show the run, then wait for their Approval; a refusal ends it.
- Leaves the chat: The other service’s sign-in page, to let it connect.
- Needs first: [Ship an API](/products/api/ship-an-api).
- Run: call the steps in order, each through the API, SDK, CLI or MCP tab below; a later step passes the `$id` an earlier one returns. Each value marked example is the sample business’s: pass the founder’s own.

| Step | Verb | Inputs (type, required, this guide’s value) | Returns |
| --- | --- | --- | --- |
| 1 | [`Integration.connect`](/business/nouns/integration/connect) (`verb:Integration.connect`) | `system` System (an id), required: example `"billing"`; `scope` string, required: example `"startup"`; `grants` string[], required: example `["listings","orders","payouts"]`; `venue` string: example `"aws-marketplace"` | `integration` Integration, `connectUrl` url |
| 2 | [`Integration.sync`](/business/nouns/integration/sync) (`verb:Integration.sync`) | `integration` Integration (an id), required: the `$id` step 1 returns | `integration` Integration |

Returns: the last call answers with `integration` and its `action`, whose `status` is `done`, `pending` (waiting on an Approval or a Worker), `failed`, `canceled` or `refused`:

```json
{
  "api": "https://api.sb/leaseline.app",
  "integration": {
    "$id": "https://api.sb/leaseline.app/integrations/integration_1",
    "$type": "Integration",
    "scope": "startup",
    "grants": [
      "listings",
      "orders",
      "payouts"
    ],
    "venue": "aws-marketplace"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Integration.sync",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Make a private offer for Harbor Residential there”, or “List the data product too”.

Calls: `Integration.connect` → `Integration.sync`

Ask:

```text
List renewal dates on AWS Marketplace.
Sell through AWS Marketplace.
Let buyers put us on their cloud bill.
```

API:

```bash
# 1. Integration.connect
INTEGRATION=$(curl -X POST https://api.sb/leaseline.app/integrations/connect \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"system":"billing","scope":"startup","grants":["listings","orders","payouts"],"venue":"aws-marketplace"}' | jq -r '.integration["$id"] | split("/") | last')

# 2. Integration.sync
curl -X POST https://api.sb/leaseline.app/integrations/$INTEGRATION/sync \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

SDK:

```ts
import { $ } from 'startup-builder'

const { integration } = await $.Integration.connect({ system: 'billing', scope: 'startup', grants: ['listings', 'orders', 'payouts'], venue: 'aws-marketplace' })
await $.Integration.sync({ integration: integration.$id })
```

CLI:

```bash
INTEGRATION=$(npx startup-builder do Integration.connect --json '{"system":"billing","scope":"startup","grants":["listings","orders","payouts"],"venue":"aws-marketplace"}' | jq -r '.integration["$id"] | split("/") | last')
npx startup-builder do Integration.sync --json '{"integration":"'"$INTEGRATION"'"}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "const { integration } = await $.Integration.connect({ system: 'billing', scope: 'startup', grants: ['listings', 'orders', 'payouts'], venue: 'aws-marketplace' })\nreturn await $.Integration.sync({ integration: integration.$id })"
  }
}
```

## Change it
- Make a private offer for Harbor Residential there.
- List the data product too.
- How much did the marketplace pay us last month?

## Under the hood
- Systems: [Billing](/systems/billing), [Ledger](/systems/ledger)
- Nouns: [Integration](/business/nouns/integration), [Order](/business/nouns/order), [Entry](/business/nouns/entry)
- Events: [`Integration.connected`](/business/events/Integration.connected), [`Integration.synced`](/business/events/Integration.synced)