PopUp Organizer

TotalClaw 作者 totalclaw

搜索并雇用移动供应商参加 PopUp 上的活动。查找美食车、DJ、照相亭等,创建活动列表、发送预订查询并管理发票。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~eliaskress-popup-organizer
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~eliaskress-popup-organizer/file -o eliaskress-popup-organizer.md
## 概述(中文)

搜索并雇用移动供应商参加 PopUp 上的活动。查找美食车、DJ、照相亭等,创建活动列表、发送预订查询并管理发票。

## 原文

# PopUp Organizer

Search and hire mobile vendors — food trucks, DJs, photo booths, florists, live bands, and more — for any event. Create event listings, send booking inquiries, manage applications, track invoices, and save favorite vendors.

---

## Getting Started

1. Sign up or log in at <https://usepopup.com/login>
2. Switch to **Organizer** mode
3. Go to **Settings > API Keys**
4. Click **Create API Key** and copy the key (shown only once)

---

## Authentication

All requests require a Bearer token in the `Authorization` header:

```
Authorization: Bearer pk_live_...
```

The token is provided via the `POPUP_API_KEY` environment variable.

**Rate limit:** 60 requests per minute per API key. HTTP 429 is returned with `Retry-After: 60` if exceeded.

**Base URL:** `https://usepopup.com/api/v1/organizer`

---

## Endpoints

### Search Vendors

`GET /vendors`

Search published vendor profiles by name, type, location, event type, or price range.

| Param | Type | Description |
|-------|------|-------------|
| `q` | string | Search query (name, type, city, description) |
| `type` | string | Vendor category — see categories below |
| `state` | string | 2-letter US state code (e.g. `CA`, `NY`) |
| `metro` | string | Metro area within state (requires `state`) |
| `event` | string | Event type filter — see event types below |
| `price` | string | Price range: `$`, `$$`, `$$$`, `$$$$` |
| `sort` | string | `newest`, `name_asc`, `name_desc`, `rating` |
| `page` | number | Page number (default 1) |
| `limit` | number | Results per page (default 20, max 100) |

Returns vendor profiles with `businessName`, `businessType`, `homeCity`, `homeState`, `priceRange`, `averageRating`, `eventTypes`, `slug`, and more.

---

### List Events

`GET /open-events`

List your events.

| Param | Type | Description |
|-------|------|-------------|
| `status` | string | Filter: `open`, `closed`, `canceled` |
| `page` | number | Page number |
| `limit` | number | Results per page |

Returns events with `title`, `eventDate`, `startTime`, `endTime`, `eventCity`, `eventState`, `vendorCap`, `expectedGuestCount`, `status`, `shareUrl`, `shortUrl`, and `qrCodeUrl`.

### Get Event Detail

`GET /open-events/{eventId}`

Returns the event object plus an `applications` array (each with `businessId`, `status`, `quotedRate`, `engagementModel`, and nested `business` info) and `eventTerms`.

### Create Event

`POST /open-events`

Create a new event listing.

**Required fields:** `title`, `description`, `eventType`, `eventDate` (YYYY-MM-DD), `startTime` (HH:mm), `endTime` (HH:mm), `eventPlaceName`, `eventAddress1`, `eventCity`, `eventState` (2-letter), `eventZip`, `vendorCap` (1-1000), `feePayer` (`organizer_pays` | `vendor_pays` | `none`), `expectedGuestCount` (1-100000), `vendorCategoriesWanted` (array, 1-20 items).

**Optional fields:** `location`, `eventLat`, `eventLng`, `heroImageUrl`, `organizerBudget`, `boothFee`, `salesPercent`, `hiredBudget`, `venueSetting`, `requiresVerification`, `invoiceDueDays`, `termIds`.

Events are pending admin approval before becoming publicly visible.

### Update Event

`PATCH /open-events/{eventId}`

Update event fields or perform actions.

**Actions:** `{ "action": "close" }` to close to new applications, `{ "action": "reopen" }` to reopen.

**Updatable fields:** all the same fields as create. When key details change (date, time, venue, title), accepted vendors are notified.

### Cancel Event

`DELETE /open-events/{eventId}`

Cancel an event. All pending and accepted vendors are notified.

---

### List Applications

`GET /open-events/{eventId}/applications`

List vendor applications for an event.

| Param | Type | Description |
|-------|------|-------------|
| `status` | string | Filter: `pending`, `accepted`, `declined`, `withdrawn` |
| `page` | number | Page number |
| `limit` | number | Results per page |

### Get Event QR Code

`GET /open-events/{eventId}/qr`

Returns a PNG QR code image for the event share link.

---

### List Inquiries

`GET /inquiries`

List your inquiries to vendors.

| Param | Type | Description |
|-------|------|-------------|
| `status` | string | Filter: `pending`, `quoted`, `booked`, `declined` |
| `page` | number | Page number |
| `limit` | number | Results per page |

Returns inquiries with `eventDate`, `eventType`, `guestCount`, `location`, `budget`, `message`, `status`, `quotedPrice`, `quoteMessage`, and nested `business` info.

### Get Inquiry Detail

`GET /inquiries/{id}`

Get a single inquiry with full detail.

### Create Inquiry

`POST /inquiries`

Send a booking inquiry to a vendor.

**Required:** `businessId` (UUID).

**Optional:** `bookingType` (`catering` | `vending`), `eventDate` (YYYY-MM-DD), `eventType`, `guestCount`, `location`, `eventPlaceName`, `eventAddress1`, `eventCity`, `eventState`, `eventZip`, `budget`, `message`, `phone`, `startTime` (HH:mm), `endTime` (HH:mm), `estimatedPrice`.

The vendor is notified by email and in-app notification.

### Update Inquiry

`PATCH /inquiries/{id}`

Update a pending inquiry or respond to a quote.

**Actions:** `{ "action": "accept_quote" }` (inquiry must be `quoted`), `{ "action": "decline" }` (inquiry must be `quoted`).

**Updatable fields (pending only):** `eventDate`, `eventType`, `guestCount`, `location`, `budget`, `message`, `startTime`, `endTime`.

### Delete Inquiry

`DELETE /inquiries/{id}`

Delete a pending inquiry. Only works on `status=pending`.

---

### List Invoices

`GET /invoices`

List invoices for event applications and direct inquiries.

| Param | Type | Description |
|-------|------|-------------|
| `page` | number | Page number |
| `limit` | number | Results per page |

Returns invoices with `eventTitle`, `eventDate`, `vendorName`, `engagementModel`, `amount` (dollars), `direction` (`receivable` | `payable`), `isPaid`.

---

### List Saved Vendors

`GET /saved`

List your bookmarked vendors.

### Save Vendor

`POST /saved`

Bookmark a vendor: `{ "businessId": "..." }`

### Remove Saved Vendor

`DELETE /saved?businessId=...`

Remove a bookmarked vendor.

---

### Get Profile

`GET /profile`

Get your organizer profile and account info.

### Update Profile

`PATCH /profile`

Update your organizer profile.

**Fields:** `companyName`, `companyType` (`brand` | `agency` | `planner` | `corporate`), `eventTypes` (array), `location`, `city`, `state`, `zip`, `phone`, `website`, `about`, `givesBack`, `nonProfit`, `forACause`, `rules`.

---

## Response Format

All endpoints return JSON with `{ "data": ... }` wrapper. List endpoints include `{ "pagination": { "page", "limit", "total", "totalPages" } }`.

Error responses: `{ "error": "message" }` with appropriate HTTP status (400, 401, 404, 429, 500).

---

## Vendor Categories

Use these values for the `type` parameter when searching vendors:

| Value | Label |
|-------|-------|
| `food_truck` | Food |
| `bakery` | Bakery / Desserts |
| `beverage` | Beverage / Coffee / Bar |
| `dj` | DJ / Entertainment |
| `photo_booth` | Photo Booth |
| `photography` | Photography |
| `live_band` | Live Music |
| `florist` | Florist / Event Florals |
| `balloons` | Balloons / Balloon Decor |
| `yoga` | Wellness |
| `arts_crafts` | Retail Vendor |
| `other` | Other |

## Event Types

Use these values for `eventType` fields:

`wedding`, `corporate`, `birthday`, `festival`, `market`, `popup`, `fundraiser`, `community`, `holiday`, `private`, `other`