# LogoSyncer pricing

Machine-readable pricing reference. Human version: https://logosyncer.com/pricing
Base URL: https://logosyncer.com

## Tiers

| | Free | Pro |
| --- | --- | --- |
| Price | $0 | $9/month or $90/year (2 months free) |
| Credit card required | No | Yes (Stripe Checkout) |
| Logos served | 20 | Unlimited |
| "Powered by LogoSyncer" badge | Required (embed renders it automatically) | Removed |
| Full API + embed + MCP server | Yes | Yes |
| Daily scheduled sync + on-demand refresh (1 per 10 min) | Yes | Yes |
| Multiple walls | Yes | Yes |
| Removing a currently-served domain from your own wall | Yes (free on every tier, never metered) | Yes |
| Curated exclusion list (excluding domains that are NOT currently served; bulk, via API/MCP) | No (returns 403 pro_required) | Yes |

## Free-tier cap mechanics

- The 20-logo cap is applied at serve time: the 20 lowest-ranked currently-eligible domains, unioned across ALL of the account's walls (multiple walls cannot multiply the cap).
- Rank is immutable once assigned; churned or excluded domains free their slot for the next domain.
- `meta.attribution_required: true` in wall JSON tells you the badge must stay visible on custom (non-script-embed) renderings.

## Upgrade flow (agent-drivable; a human pays)

1. `POST /v1/billing/checkout_url` with body `{ "plan": "monthly" }` or `{ "plan": "annual" }` (authed, verified accounts, max 5/hour). Price IDs are resolved server-side; the payload never carries a price.
2. Response `200 { "url": "https://checkout.stripe.com/..." }`. Hand the URL to the HUMAN; they open it and pay via Stripe Checkout. An open session for the same account + plan is reused within its 24h validity.
3. After payment a webhook flips the plan. Poll `GET /v1/me` until `"plan": "pro"` (every ~10s; give up after ~15 min and re-ask the human).

Error statuses: 403 not_verified, 409 already_pro, 429 rate_limited (honor Retry-After), 503 not_configured.

Manage or cancel an existing subscription: `POST /v1/billing/portal_url` returns a Stripe Billing Portal URL (404 no_billing_customer if the account never paid).

## Downgrade behavior (cancel or failed payment)

- The wall keeps working: a live embed is never broken.
- The account returns to the Free tier: the top 20 ranked logos stay live, the rest stop serving, and the "Powered by LogoSyncer" badge returns.
- Pro-only exclusions of unserved domains stop being editable on Free, but removing an exclusion works on every plan, and pulling a currently-served logo off your wall stays free forever.

## Related

- Full agent reference: https://logosyncer.com/llms-full.txt
- Short index: https://logosyncer.com/llms.txt
- API mirror: https://logosyncer.com/md/api.md
- Quickstart mirror: https://logosyncer.com/md/quickstart.md
