{
  "schemaVersion": "1.0",
  "item": {
    "slug": "popup-organizer",
    "name": "PopUp Organizer",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/eliaskress/popup-organizer",
    "canonicalUrl": "https://clawhub.ai/eliaskress/popup-organizer",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/popup-organizer",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=popup-organizer",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/popup-organizer"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/popup-organizer",
    "agentPageUrl": "https://openagent3.xyz/skills/popup-organizer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/popup-organizer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/popup-organizer/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "PopUp Organizer",
        "body": "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."
      },
      {
        "title": "Getting Started",
        "body": "Sign up or log in at https://usepopup.com/login\nSwitch to Organizer mode\nGo to Settings > API Keys\nClick Create API Key and copy the key (shown only once)"
      },
      {
        "title": "Authentication",
        "body": "All requests require a Bearer token in the Authorization header:\n\nAuthorization: Bearer pk_live_...\n\nThe token is provided via the POPUP_API_KEY environment variable.\n\nRate limit: 60 requests per minute per API key. HTTP 429 is returned with Retry-After: 60 if exceeded.\n\nBase URL: https://usepopup.com/api/v1/organizer"
      },
      {
        "title": "Search Vendors",
        "body": "GET /vendors\n\nSearch published vendor profiles by name, type, location, event type, or price range.\n\nParamTypeDescriptionqstringSearch query (name, type, city, description)typestringVendor category — see categories belowstatestring2-letter US state code (e.g. CA, NY)metrostringMetro area within state (requires state)eventstringEvent type filter — see event types belowpricestringPrice range: $, $$, $$$, $$$$sortstringnewest, name_asc, name_desc, ratingpagenumberPage number (default 1)limitnumberResults per page (default 20, max 100)\n\nReturns vendor profiles with businessName, businessType, homeCity, homeState, priceRange, averageRating, eventTypes, slug, and more."
      },
      {
        "title": "List Events",
        "body": "GET /open-events\n\nList your events.\n\nParamTypeDescriptionstatusstringFilter: open, closed, canceledpagenumberPage numberlimitnumberResults per page\n\nReturns events with title, eventDate, startTime, endTime, eventCity, eventState, vendorCap, expectedGuestCount, status, shareUrl, shortUrl, and qrCodeUrl."
      },
      {
        "title": "Get Event Detail",
        "body": "GET /open-events/{eventId}\n\nReturns the event object plus an applications array (each with businessId, status, quotedRate, engagementModel, and nested business info) and eventTerms."
      },
      {
        "title": "Create Event",
        "body": "POST /open-events\n\nCreate a new event listing.\n\nRequired 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).\n\nOptional fields: location, eventLat, eventLng, heroImageUrl, organizerBudget, boothFee, salesPercent, hiredBudget, venueSetting, requiresVerification, invoiceDueDays, termIds.\n\nEvents are pending admin approval before becoming publicly visible."
      },
      {
        "title": "Update Event",
        "body": "PATCH /open-events/{eventId}\n\nUpdate event fields or perform actions.\n\nActions: { \"action\": \"close\" } to close to new applications, { \"action\": \"reopen\" } to reopen.\n\nUpdatable fields: all the same fields as create. When key details change (date, time, venue, title), accepted vendors are notified."
      },
      {
        "title": "Cancel Event",
        "body": "DELETE /open-events/{eventId}\n\nCancel an event. All pending and accepted vendors are notified."
      },
      {
        "title": "List Applications",
        "body": "GET /open-events/{eventId}/applications\n\nList vendor applications for an event.\n\nParamTypeDescriptionstatusstringFilter: pending, accepted, declined, withdrawnpagenumberPage numberlimitnumberResults per page"
      },
      {
        "title": "Get Event QR Code",
        "body": "GET /open-events/{eventId}/qr\n\nReturns a PNG QR code image for the event share link."
      },
      {
        "title": "List Inquiries",
        "body": "GET /inquiries\n\nList your inquiries to vendors.\n\nParamTypeDescriptionstatusstringFilter: pending, quoted, booked, declinedpagenumberPage numberlimitnumberResults per page\n\nReturns inquiries with eventDate, eventType, guestCount, location, budget, message, status, quotedPrice, quoteMessage, and nested business info."
      },
      {
        "title": "Get Inquiry Detail",
        "body": "GET /inquiries/{id}\n\nGet a single inquiry with full detail."
      },
      {
        "title": "Create Inquiry",
        "body": "POST /inquiries\n\nSend a booking inquiry to a vendor.\n\nRequired: businessId (UUID).\n\nOptional: 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.\n\nThe vendor is notified by email and in-app notification."
      },
      {
        "title": "Update Inquiry",
        "body": "PATCH /inquiries/{id}\n\nUpdate a pending inquiry or respond to a quote.\n\nActions: { \"action\": \"accept_quote\" } (inquiry must be quoted), { \"action\": \"decline\" } (inquiry must be quoted).\n\nUpdatable fields (pending only): eventDate, eventType, guestCount, location, budget, message, startTime, endTime."
      },
      {
        "title": "Delete Inquiry",
        "body": "DELETE /inquiries/{id}\n\nDelete a pending inquiry. Only works on status=pending."
      },
      {
        "title": "List Invoices",
        "body": "GET /invoices\n\nList invoices for event applications and direct inquiries.\n\nParamTypeDescriptionpagenumberPage numberlimitnumberResults per page\n\nReturns invoices with eventTitle, eventDate, vendorName, engagementModel, amount (dollars), direction (receivable | payable), isPaid."
      },
      {
        "title": "List Saved Vendors",
        "body": "GET /saved\n\nList your bookmarked vendors."
      },
      {
        "title": "Save Vendor",
        "body": "POST /saved\n\nBookmark a vendor: { \"businessId\": \"...\" }"
      },
      {
        "title": "Remove Saved Vendor",
        "body": "DELETE /saved?businessId=...\n\nRemove a bookmarked vendor."
      },
      {
        "title": "Get Profile",
        "body": "GET /profile\n\nGet your organizer profile and account info."
      },
      {
        "title": "Update Profile",
        "body": "PATCH /profile\n\nUpdate your organizer profile.\n\nFields: companyName, companyType (brand | agency | planner | corporate), eventTypes (array), location, city, state, zip, phone, website, about, givesBack, nonProfit, forACause, rules."
      },
      {
        "title": "Response Format",
        "body": "All endpoints return JSON with { \"data\": ... } wrapper. List endpoints include { \"pagination\": { \"page\", \"limit\", \"total\", \"totalPages\" } }.\n\nError responses: { \"error\": \"message\" } with appropriate HTTP status (400, 401, 404, 429, 500)."
      },
      {
        "title": "Vendor Categories",
        "body": "Use these values for the type parameter when searching vendors:\n\nValueLabelfood_truckFoodbakeryBakery / DessertsbeverageBeverage / Coffee / BardjDJ / Entertainmentphoto_boothPhoto BoothphotographyPhotographylive_bandLive MusicfloristFlorist / Event FloralsballoonsBalloons / Balloon DecoryogaWellnessarts_craftsRetail VendorotherOther"
      },
      {
        "title": "Event Types",
        "body": "Use these values for eventType fields:\n\nwedding, corporate, birthday, festival, market, popup, fundraiser, community, holiday, private, other"
      }
    ],
    "body": "PopUp Organizer\n\nSearch 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.\n\nGetting Started\nSign up or log in at https://usepopup.com/login\nSwitch to Organizer mode\nGo to Settings > API Keys\nClick Create API Key and copy the key (shown only once)\nAuthentication\n\nAll requests require a Bearer token in the Authorization header:\n\nAuthorization: Bearer pk_live_...\n\n\nThe token is provided via the POPUP_API_KEY environment variable.\n\nRate limit: 60 requests per minute per API key. HTTP 429 is returned with Retry-After: 60 if exceeded.\n\nBase URL: https://usepopup.com/api/v1/organizer\n\nEndpoints\nSearch Vendors\n\nGET /vendors\n\nSearch published vendor profiles by name, type, location, event type, or price range.\n\nParam\tType\tDescription\nq\tstring\tSearch query (name, type, city, description)\ntype\tstring\tVendor category — see categories below\nstate\tstring\t2-letter US state code (e.g. CA, NY)\nmetro\tstring\tMetro area within state (requires state)\nevent\tstring\tEvent type filter — see event types below\nprice\tstring\tPrice range: $, $$, $$$, $$$$\nsort\tstring\tnewest, name_asc, name_desc, rating\npage\tnumber\tPage number (default 1)\nlimit\tnumber\tResults per page (default 20, max 100)\n\nReturns vendor profiles with businessName, businessType, homeCity, homeState, priceRange, averageRating, eventTypes, slug, and more.\n\nList Events\n\nGET /open-events\n\nList your events.\n\nParam\tType\tDescription\nstatus\tstring\tFilter: open, closed, canceled\npage\tnumber\tPage number\nlimit\tnumber\tResults per page\n\nReturns events with title, eventDate, startTime, endTime, eventCity, eventState, vendorCap, expectedGuestCount, status, shareUrl, shortUrl, and qrCodeUrl.\n\nGet Event Detail\n\nGET /open-events/{eventId}\n\nReturns the event object plus an applications array (each with businessId, status, quotedRate, engagementModel, and nested business info) and eventTerms.\n\nCreate Event\n\nPOST /open-events\n\nCreate a new event listing.\n\nRequired 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).\n\nOptional fields: location, eventLat, eventLng, heroImageUrl, organizerBudget, boothFee, salesPercent, hiredBudget, venueSetting, requiresVerification, invoiceDueDays, termIds.\n\nEvents are pending admin approval before becoming publicly visible.\n\nUpdate Event\n\nPATCH /open-events/{eventId}\n\nUpdate event fields or perform actions.\n\nActions: { \"action\": \"close\" } to close to new applications, { \"action\": \"reopen\" } to reopen.\n\nUpdatable fields: all the same fields as create. When key details change (date, time, venue, title), accepted vendors are notified.\n\nCancel Event\n\nDELETE /open-events/{eventId}\n\nCancel an event. All pending and accepted vendors are notified.\n\nList Applications\n\nGET /open-events/{eventId}/applications\n\nList vendor applications for an event.\n\nParam\tType\tDescription\nstatus\tstring\tFilter: pending, accepted, declined, withdrawn\npage\tnumber\tPage number\nlimit\tnumber\tResults per page\nGet Event QR Code\n\nGET /open-events/{eventId}/qr\n\nReturns a PNG QR code image for the event share link.\n\nList Inquiries\n\nGET /inquiries\n\nList your inquiries to vendors.\n\nParam\tType\tDescription\nstatus\tstring\tFilter: pending, quoted, booked, declined\npage\tnumber\tPage number\nlimit\tnumber\tResults per page\n\nReturns inquiries with eventDate, eventType, guestCount, location, budget, message, status, quotedPrice, quoteMessage, and nested business info.\n\nGet Inquiry Detail\n\nGET /inquiries/{id}\n\nGet a single inquiry with full detail.\n\nCreate Inquiry\n\nPOST /inquiries\n\nSend a booking inquiry to a vendor.\n\nRequired: businessId (UUID).\n\nOptional: 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.\n\nThe vendor is notified by email and in-app notification.\n\nUpdate Inquiry\n\nPATCH /inquiries/{id}\n\nUpdate a pending inquiry or respond to a quote.\n\nActions: { \"action\": \"accept_quote\" } (inquiry must be quoted), { \"action\": \"decline\" } (inquiry must be quoted).\n\nUpdatable fields (pending only): eventDate, eventType, guestCount, location, budget, message, startTime, endTime.\n\nDelete Inquiry\n\nDELETE /inquiries/{id}\n\nDelete a pending inquiry. Only works on status=pending.\n\nList Invoices\n\nGET /invoices\n\nList invoices for event applications and direct inquiries.\n\nParam\tType\tDescription\npage\tnumber\tPage number\nlimit\tnumber\tResults per page\n\nReturns invoices with eventTitle, eventDate, vendorName, engagementModel, amount (dollars), direction (receivable | payable), isPaid.\n\nList Saved Vendors\n\nGET /saved\n\nList your bookmarked vendors.\n\nSave Vendor\n\nPOST /saved\n\nBookmark a vendor: { \"businessId\": \"...\" }\n\nRemove Saved Vendor\n\nDELETE /saved?businessId=...\n\nRemove a bookmarked vendor.\n\nGet Profile\n\nGET /profile\n\nGet your organizer profile and account info.\n\nUpdate Profile\n\nPATCH /profile\n\nUpdate your organizer profile.\n\nFields: companyName, companyType (brand | agency | planner | corporate), eventTypes (array), location, city, state, zip, phone, website, about, givesBack, nonProfit, forACause, rules.\n\nResponse Format\n\nAll endpoints return JSON with { \"data\": ... } wrapper. List endpoints include { \"pagination\": { \"page\", \"limit\", \"total\", \"totalPages\" } }.\n\nError responses: { \"error\": \"message\" } with appropriate HTTP status (400, 401, 404, 429, 500).\n\nVendor Categories\n\nUse these values for the type parameter when searching vendors:\n\nValue\tLabel\nfood_truck\tFood\nbakery\tBakery / Desserts\nbeverage\tBeverage / Coffee / Bar\ndj\tDJ / Entertainment\nphoto_booth\tPhoto Booth\nphotography\tPhotography\nlive_band\tLive Music\nflorist\tFlorist / Event Florals\nballoons\tBalloons / Balloon Decor\nyoga\tWellness\narts_crafts\tRetail Vendor\nother\tOther\nEvent Types\n\nUse these values for eventType fields:\n\nwedding, corporate, birthday, festival, market, popup, fundraiser, community, holiday, private, other"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/eliaskress/popup-organizer",
    "publisherUrl": "https://clawhub.ai/eliaskress/popup-organizer",
    "owner": "eliaskress",
    "version": "2.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/popup-organizer",
    "downloadUrl": "https://openagent3.xyz/downloads/popup-organizer",
    "agentUrl": "https://openagent3.xyz/skills/popup-organizer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/popup-organizer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/popup-organizer/agent.md"
  }
}