Skip to content

KalebCole/partiful-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

63 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Banner

partiful-cli

Manage Partiful events from your terminal. JSON-first, script-friendly.

npm version license node

Try it now

npx partiful-cli --help

Install

# Install globally
npm install -g partiful-cli

# Or run without installing
npx partiful-cli <command>

# Or clone and link
git clone https://github.com/KalebCole/partiful-cli && cd partiful-cli
npm install && npm link

Features

  • πŸŽ‰ Events β€” create, list, get, update, cancel
  • πŸ‘₯ Guests β€” list RSVPs, send invites
  • πŸ“± Blasts β€” text all your guests at once
  • 🎨 Posters β€” browse and attach poster images
  • πŸ“‹ Templates β€” save and reuse event configs
  • πŸ“¦ Bulk β€” batch create/update from JSON
  • πŸ‘€ Watch β€” live RSVP polling with NDJSON output
  • πŸ”„ Clone β€” duplicate events to new dates
  • πŸ“€ Export β€” event + guests to JSON or CSV
  • 🩺 Doctor β€” diagnose auth and setup issues

Quick Start

# 1. Authenticate
partiful auth login +12065551234

# 2. Verify setup
partiful doctor

# 3. Create your first event
partiful events create --title "Game Night" --date "Apr 15 7pm" --location "My Place"

# 4. List your events
partiful events list

# 5. Invite and blast (use an eventId from step 4)
partiful guests list <eventId>
partiful blasts send <eventId> --message "See you tonight!"

Commands

auth β€” Manage authentication

partiful auth login +12065551234    # SMS-based auth
partiful auth status                # Check current auth
partiful auth logout                # Clear credentials

events β€” Manage events

partiful events list                # Upcoming events
partiful events list --past         # Past events
partiful events get <id>            # Event details
partiful events create --title "Party" --date "May 1 8pm" --location "Rooftop"
partiful events update <id> --title "New Title"
partiful events cancel <id>

events rsvp / events interested β€” RSVP to events

partiful events rsvp <id>                          # RSVP going (default)
partiful events rsvp <id> --status maybe           # going | maybe | declined
partiful events rsvp <id> --plus-one Maddie --plus-one Justin   # bring guests
partiful events rsvp <id> --name "Kaleb Cole" --message "Stoked!"
partiful events interested <id>                    # mark interest
partiful events interested <id> --remove           # remove interest

RSVP does a read-before-write: it updates your existing guest record if you already RSVP'd, otherwise creates one. Ticketed and questionnaire-gated events are refused with a clear error (use the app for those). The same verbs are available under explore (partiful explore rsvp <id>) for the discovery flow.

guests β€” Manage event guests

partiful guests list <eventId>      # All guests with RSVP status
partiful guests invite <eventId>    # Send invites

blasts β€” Text guests

partiful blasts send <eventId> --message "Doors open at 7!"

contacts β€” Manage contacts

partiful contacts list              # All contacts
partiful contacts list "alex"       # Search by name

cohosts β€” Manage co-hosts

partiful cohosts list <eventId>
partiful cohosts add <eventId> --name "Alex" --name "Jordan"
partiful cohosts remove <eventId>

posters β€” Browse poster catalog

partiful posters list
partiful posters search "birthday"
partiful posters get <posterId>

template β€” Event templates

partiful template list                          # List saved templates
partiful template show <name>                   # Show template details
partiful template save --name "Game Night"       # Save a template
partiful template edit <name>                   # Edit a template
partiful template delete <name>                 # Delete a template

bulk β€” Batch operations

partiful bulk create events.json                              # Create from JSON file
partiful bulk update --filter "title contains Game" --location "New Spot"  # Bulk update

schema β€” Introspect command parameters

partiful schema events.create       # Show params for events create

doctor β€” Health check

partiful doctor                     # Check auth, connectivity, setup

Helper commands

Helpers use the + prefix:

# Clone an event to next week
partiful +clone <eventId>
partiful +clone <eventId> --date "May 1 8pm" --title "Game Night v2"

# Watch RSVPs in real-time (NDJSON stream)
partiful +watch <eventId> --interval 15 --duration 30

# Export event + guest list
partiful +export <eventId> --format json --output party.json
partiful +export <eventId> --format csv

# Get shareable link
partiful +share <eventId>

Global Flags

--format <fmt> (json/table/csv/ndjson) Β· --dry-run Β· -y, --yes Β· --force Β· -v, --verbose Β· -o, --output <path> Β· --no-color

Auth Setup

Partiful doesn't have a public API. This CLI authenticates via SMS verification through Firebase.

partiful auth login +12065551234   # sends SMS code, completes auth
partiful auth status               # verify you're logged in

How it works:

  1. You provide your phone number (E.164 format, e.g. +12065551234)
  2. Partiful sends an SMS verification code to that number
  3. On macOS with imsg installed, the code is auto-retrieved from Messages
  4. Otherwise, you'll be prompted to enter it manually
  5. Credentials are saved to ~/.config/partiful/auth.json

Tokens auto-refresh when expired. Run partiful doctor if anything seems off.

JSON Output

All commands support --format json. Responses follow a consistent envelope:

{
  "status": "success",
  "data": { ... },
  "metadata": {}
}

events list returns one summary object per event. Each includes your own RSVP and host status:

{
  "id": "BiwCtA9kRMh8Od5TvuPq",
  "title": "Skills & Drills",
  "startDate": "2026-07-08T01:30:00.000Z",
  "endDate": null,
  "location": null,
  "status": "PUBLISHED",
  "isHost": false,
  "myRsvp": "GOING",
  "going": 12,
  "maybe": 14,
  "url": "https://partiful.com/e/BiwCtA9kRMh8Od5TvuPq"
}
  • myRsvp β€” your personal RSVP: GOING, MAYBE, DECLINED, SENT (invited, no reply yet), or null on events you host. Filter on this to sync only the events you've accepted, e.g. partiful events list | jq '.data[] | select(.myRsvp == "GOING")'.
  • isHost β€” true for events you own. (going/maybe are aggregate counts across all guests, not your status.)

Errors return { "status": "error", "error": { "code": 1, "type": "api_error", "message": "..." } }.

Exit codes: 0 success Β· 1 API error Β· 2 auth error Β· 3 validation Β· 4 not found Β· 5 internal.

Contributing

git clone https://github.com/KalebCole/partiful-cli && cd partiful-cli
npm install
npm link          # makes `partiful` available globally for testing
npm test          # run tests

License

MIT

About

Agentic CLI for creating Partiful events

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages