> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentpowers.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Selling Skills

> How to publish skills, set prices, and receive payouts

## Becoming a Seller

### Prerequisites

Before publishing, you need:

1. **A display name** on your profile. Set it at [agentpowers.ai/dashboard/settings/profile](https://agentpowers.ai/dashboard/settings/profile) or via the API.
2. **Stripe Connect** (for paid skills only). Complete onboarding at [agentpowers.ai/dashboard/become-seller](https://agentpowers.ai/dashboard/become-seller). Free skills can be published without Stripe.

### Payout Onboarding

Before receiving payouts, complete the onboarding process via the dashboard or API:

<Tabs>
  <Tab title="Dashboard">
    Go to [agentpowers.ai/dashboard/become-seller](https://agentpowers.ai/dashboard/become-seller) and click "Connect Stripe" to start the onboarding flow.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    curl -X POST "https://api.agentpowers.ai/v1/sellers/connect" \
      -H "Authorization: Bearer TOKEN"
    ```

    This returns an onboarding URL. Complete the form to enable payouts.
  </Tab>
</Tabs>

### Check Seller Status

To check whether the current user has completed seller onboarding:

```bash theme={null}
curl -H "Authorization: Bearer TOKEN" \
  "https://api.agentpowers.ai/v1/sellers/status"
```

Returns `is_seller` (true if onboarding is complete), `charges_enabled`, and `payouts_enabled`. This is a read-only endpoint with no side effects.

### Check Earnings

View your earnings in the [Seller Dashboard](https://agentpowers.ai/dashboard/earnings) or via the API:

```bash theme={null}
curl -H "Authorization: Bearer TOKEN" \
  "https://api.agentpowers.ai/v1/sellers/earnings"
```

Returns total earnings and sale count.

## Setting Up Your Profile

### Display Name Requirement

Before publishing, you must set a display name on your profile. Go to [Dashboard > Settings > Profile](https://agentpowers.ai/dashboard/settings/profile) to set it, or use the API:

```bash theme={null}
curl -X PATCH "https://api.agentpowers.ai/v1/users/profile" \
  -H "Authorization: Bearer TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"display_name": "My Name"}'
```

Your display name is automatically slugified into a URL-safe profile path (e.g. `"John Doe"` -> `/sellers/john-doe`). If your chosen display name conflicts with an existing slug, a number suffix is appended automatically (`john-doe-2`).

You can also update your bio and social links from the profile settings page.

## Publishing a Skill

### 1. Prepare Your Skill

Create a `.skill`, `.md`, or `.agent` file with YAML frontmatter:

```yaml theme={null}
---
title: My Awesome Skill
description: A skill that does amazing things
category: development
---

# My Awesome Skill

Instructions for Claude when using this skill...
```

For agents, include `tools` and/or `model` in the frontmatter:

```yaml theme={null}
---
name: Code Reviewer
description: An autonomous code review agent
tools: Read, Glob, Grep, Bash
model: sonnet
---
```

You can also prepare a directory with multiple files and ZIP it for upload.

<Note>
  Maximum upload size is **10 MB**. Most skills are well under 500 KB.
</Note>

### 2. Publish

<Tabs>
  <Tab title="Website">
    1. Go to [agentpowers.ai/dashboard/publish](https://agentpowers.ai/dashboard/publish)
    2. Drop your `.skill`, `.agent`, `.md`, or `.zip` file
    3. The form auto-fills from your frontmatter (title, description, category, type)
    4. Review the details, set a price if desired, and click **Publish**

    The file type determines whether it's published as a skill or agent:

    * `.skill` files are published as skills
    * `.agent` files are published as agents
    * `.md` files with `tools` or `model` in frontmatter are published as agents, otherwise as skills
    * `.zip` files require you to select the type manually
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    ap login
    ap publish ./my-skill --price 5.00
    ```

    The CLI:

    1. Packages your directory as a ZIP
    2. Creates the skill record via `POST /v1/skills`
    3. Uploads the package via `POST /v1/skills/{slug}/upload`

    Your skill starts at **v1.0.0**. Omit `--price` for free skills (defaults to \$0).
  </Tab>
</Tabs>

### 3. Publishing Updates

Already published? `ap publish` detects the existing skill and creates a new version:

```bash theme={null}
ap publish ./my-skill --bump patch     # v1.0.0 → v1.0.1 (default)
ap publish ./my-skill --bump minor     # v1.0.0 → v1.1.0
ap publish ./my-skill --bump major     # v1.0.0 → v2.0.0
```

Or set an explicit version:

```bash theme={null}
ap publish ./my-skill --version 2.0.0
```

Add a changelog message:

```bash theme={null}
ap publish ./my-skill --bump minor --changelog "Added dark mode support"
```

Change the price during an update:

```bash theme={null}
ap publish ./my-skill --bump patch --price 9.99
```

**Omitting `--price` on updates preserves the existing price.** Only pass `--price` when you want to change it. To switch a paid skill to free, explicitly pass `--price 0`.

**How it works:**

1. The CLI detects the existing skill (POST returns 409)
2. Sends a `PATCH /v1/skills/{slug}` to create a new version
3. Uploads the updated package
4. The new version enters the security pipeline while the **previous version stays live**

**One pending version at a time.** If a version is still awaiting security review, you cannot publish another until it completes.

You can also update metadata (title, description, category) during re-publish -- just change the frontmatter and run `ap publish` again.

### 4. Unpublishing

Temporarily remove a skill from the marketplace:

```bash theme={null}
ap unpublish my-skill
```

Archived skills are hidden from search and cannot be purchased, but existing buyers retain download access. To re-list:

```bash theme={null}
ap republish my-skill
```

### 5. Security Review

Every submission passes through the security pipeline automatically:

1. **Static validation** -- File type checks, dangerous pattern scanning
2. **Malware detection** -- Scanned for known malware
3. **AI security review** -- Semantic analysis for injection, auth flaws, data exposure
4. **Agent-specific checks** (for agents) -- Tool access audit, instruction analysis

Outcomes:

* **Pass** -- Listed immediately
* **Warn** -- Listed with a warning badge
* **Block** -- Rejected with detailed findings

## Pricing

<Warning>
  Before listing a paid skill or agent, you must complete Stripe Connect
  onboarding from your [Seller Dashboard](/dashboard/seller). Free skills
  and agents can be published at any time without Stripe setup.
</Warning>

* Skills are free by default (omit `--price` or use `--price 0`)
* Set a price with `ap publish ./my-skill --price 5.00` (in dollars)
* **Minimum price for paid skills is \$5.00**
* AgentPowers takes a **15% platform fee**; you receive 85% via payouts

### Seller Tiers and Price Caps

New sellers start at Tier 0 with a **\$25 maximum price** per skill. As you build a verified sales history, your tier upgrades automatically:

| Tier                 | Requirements           | Max Price | Payout Delay |
| -------------------- | ---------------------- | --------- | ------------ |
| Tier 0 (New)         | Default                | \$25      | 14 days      |
| Tier 1 (Established) | 5+ sales AND 30+ days  | \$100     | 7 days       |
| Tier 2 (Trusted)     | 20+ sales AND 90+ days | \$1,000   | 2 days       |

Your current tier, payout delay, and price limit are returned in the `GET /v1/sellers/earnings` response.

<Note>
  Payout delays protect both buyers and sellers. As your account builds trust, delays decrease automatically.
</Note>

## Seller Dashboard

Track your sales performance with dedicated seller endpoints (all require authentication).

### Your Skills

View all your published skills with revenue data:

```bash theme={null}
curl -H "Authorization: Bearer TOKEN" \
  "https://api.agentpowers.ai/v1/sellers/skills"
```

### Recent Sales

See your most recent sales with buyer information:

```bash theme={null}
curl -H "Authorization: Bearer TOKEN" \
  "https://api.agentpowers.ai/v1/sellers/sales?limit=20"
```

### Revenue Analytics

Get daily revenue timeseries (default 30 days, range 1-365):

```bash theme={null}
curl -H "Authorization: Bearer TOKEN" \
  "https://api.agentpowers.ai/v1/sellers/revenue?days=30"
```

Per-skill revenue breakdown:

```bash theme={null}
curl -H "Authorization: Bearer TOKEN" \
  "https://api.agentpowers.ai/v1/sellers/revenue/breakdown"
```

### Activity Feed

Combined feed of purchases and installs:

```bash theme={null}
curl -H "Authorization: Bearer TOKEN" \
  "https://api.agentpowers.ai/v1/sellers/activity?limit=20"
```

### Public Seller Profile

Your public profile is available at:

```bash theme={null}
curl "https://api.agentpowers.ai/v1/sellers/my-name"
curl "https://api.agentpowers.ai/v1/sellers/my-name/skills"
```

These are public endpoints -- no authentication required for viewers.

## Reviews on Your Skills

Buyers can leave 1-5 star reviews on your skills. Review ratings are displayed in skill detail views (`rating_average` and `rating_count` fields on `GET /v1/detail/{slug}`). You can view reviews on any of your skills:

```bash theme={null}
curl "https://api.agentpowers.ai/v1/skills/my-skill/reviews"
```

Self-reviews are prevented -- you cannot review your own skills.

## ClawHub Claims

If you authored a skill on ClawHub (the free marketplace), you can claim ownership:

```bash theme={null}
ap claim my-clawhub-skill
```

Claims are verified against your GitHub account. Most claims are processed automatically.

## Admin API Reference

<Warning>
  All endpoints in this section require admin privileges. Requests from
  non-admin accounts return `403 Forbidden`.
</Warning>

These features are API-only. There is no frontend dashboard for them; use `curl` or a REST client.

### API-Only Admin Features

The following capabilities are available exclusively through the API:

* **Claims management** — Review and resolve ClawHub ownership claims
* **Abuse flags** — Inspect and action flagged accounts or skills
* **Category CRUD** — Create, update, and delete marketplace categories
* **Refund processing** — Initiate refunds on completed purchases
* **Pending deletion management** — Review accounts scheduled for deletion and cancel if needed
* **Marketing email** — Send bulk opt-in email to users

### Marketing Email

Send a marketing email to all opted-in users:

```bash theme={null}
curl -X POST "https://api.agentpowers.ai/v1/admin/marketing-email" \
  -H "Authorization: Bearer ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "New skills available this week",
    "body": "Check out the latest additions to the marketplace..."
  }'
```

**Response:**

```json theme={null}
{
  "sent": 1042,
  "skipped": 87
}
```

`sent` is the count of emails dispatched. `skipped` is the count of users who have opted out of marketing email.

### Refund Processing

Initiate a refund on a completed purchase by its ID:

```bash theme={null}
curl -X POST "https://api.agentpowers.ai/v1/admin/refunds/{purchase_id}" \
  -H "Authorization: Bearer ADMIN_TOKEN"
```

**Response:**

```json theme={null}
{
  "refund_id": "re_1abc...",
  "status": "succeeded",
  "amount_cents": 500
}
```

The Stripe `charge.refunded` webhook fires automatically and handles the DB update, license revocation, and buyer notification email. The admin endpoint only initiates the refund.

### Pending Deletions

List accounts that have requested deletion and are awaiting the retention window:

```bash theme={null}
curl -H "Authorization: Bearer ADMIN_TOKEN" \
  "https://api.agentpowers.ai/v1/admin/pending-deletions"
```

Cancel a scheduled deletion (e.g., after a fraud review or user appeal):

```bash theme={null}
curl -X POST "https://api.agentpowers.ai/v1/admin/cancel-deletion/{user_id}" \
  -H "Authorization: Bearer ADMIN_TOKEN"
```

### Category Management

Create a new category:

```bash theme={null}
curl -X POST "https://api.agentpowers.ai/v1/admin/categories" \
  -H "Authorization: Bearer ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Finance",
    "description": "Skills for financial analysis and reporting",
    "icon": "chart-line"
  }'
```

Update an existing category (partial update — only supply fields to change):

```bash theme={null}
curl -X PUT "https://api.agentpowers.ai/v1/admin/categories/{slug}" \
  -H "Authorization: Bearer ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"description": "Updated description"}'
```

Delete a category (blocked if any non-archived skills reference it):

```bash theme={null}
curl -X DELETE "https://api.agentpowers.ai/v1/admin/categories/{slug}" \
  -H "Authorization: Bearer ADMIN_TOKEN"
```

<Note>
  Category slugs are immutable after creation. The `id` field is auto-generated
  as `cat-{slug}` (e.g., `cat-finance`).
</Note>

## Need Help?

<CardGroup cols={2}>
  <Card title="Email Support" icon="envelope" href="mailto:support@agentpowers.ai">
    Reach us at **[support@agentpowers.ai](mailto:support@agentpowers.ai)** for account issues, billing questions, or technical help.
  </Card>

  <Card title="Discord Community" icon="discord" href="https://discord.gg/ECAzvrvHA">
    Join the **AgentPowers Discord** to get help from the team and other creators in real time.
  </Card>
</CardGroup>
