Pepur API
The Pepur API lets you automate schedules, events, contacts, invites, guest-list approvals, and inbound guest syncs. All endpoints accept and return JSON.
Base URL
https://pepur.xyz
Authentication
Authenticate requests by passing your API key as a bearer token in the
Authorization
header. Keep your key secret — it grants full access to your account.
Authorization: Bearer <PEPUR_API_KEY>
Your IDs
Use these schedule IDs when creating events or contacts.
| Schedule ID | Name |
|---|
Create a schedule
/api/v1/schedules
Creates a schedule. Schedules own events and contacts.
Body parameters
-
schedule[title]string required - Name of the schedule.
-
schedule[description]string optional - What this schedule is for.
-
schedule[schedule_type]string optional - Type of schedule, e.g. "event".
curl -X POST https://pepur.xyz/api/v1/schedules \
-H "Authorization: Bearer <PEPUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"schedule": {
"title": "Community events",
"description": "Events imported through the API",
"schedule_type": "event"
}
}'
List schedules
/api/v1/schedules
Returns schedule IDs for event and contact operations.
Query parameters
curl https://pepur.xyz/api/v1/schedules \ -H "Authorization: Bearer <PEPUR_API_KEY>"
Create an event
/api/v1/events
Creates an event on a schedule. Pass auto_schedule: true to immediately open the guest list.
Body parameters
-
event[schedule_id]integer required - ID of the schedule the event belongs to.
-
event[name]string required - Event name.
-
event[event_date]string required - Date in MM-DD-YYYY format.
-
event[start_time]string optional - Start time, e.g. "7:00pm".
-
event[end_time]string optional - End time, e.g. "10:00pm".
-
event[people_needed]integer optional - Guest capacity.
-
event[location]string optional - Venue name.
-
event[full_address]string optional - Street address.
-
event[details]string optional - Public event details.
-
event[special_instructions]string optional - Instructions for the AI agent.
-
event[website]string optional - Event website URL.
-
event[tags]array optional - List of tag names, e.g. ["vip", "press"].
-
auto_scheduleboolean optional - Schedule the event immediately after creation.
curl -X POST https://pepur.xyz/api/v1/events \
-H "Authorization: Bearer <PEPUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"event": {
"schedule_id": "SCHEDULE_ID",
"name": "API Demo Event",
"event_date": "08-18-2026",
"start_time": "7:00pm",
"end_time": "10:00pm",
"people_needed": 30,
"location": "The venue",
"full_address": "123 Main St",
"tags": [
"vip",
"press"
]
},
"auto_schedule": true
}'
Create an event with Pepur AI
/api/v1/events/from_prompt
Uses Pepur's LLM service to turn a plain-language brief into a draft event for review.
Body parameters
-
schedule_idinteger required - ID of the schedule that will own the event.
-
promptstring required - Event brief including its date, time, location, and desired experience.
curl -X POST https://pepur.xyz/api/v1/events/from_prompt \
-H "Authorization: Bearer <PEPUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"schedule_id": "SCHEDULE_ID",
"prompt": "Plan a community dinner next month for 40 people at 123 Main St"
}'
List events
/api/v1/events
Returns all events across your schedules, newest first.
Query parameters
-
schedule_idinteger optional - Only return events for this schedule.
curl https://pepur.xyz/api/v1/events \ -H "Authorization: Bearer <PEPUR_API_KEY>"
Generate an event image
/api/v1/events/:event_id/generate_image
Queues Pepur's existing AI image generator using the event name and details. Poll GET /api/v1/events/:event_id until image_url is present.
Body parameters
curl -X POST https://pepur.xyz/api/v1/events/EVENT_ID/generate_image \
-H "Authorization: Bearer <PEPUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{}'
Add a person to a schedule
/api/v1/schedules/:schedule_id/contacts
Creates a contact, or connects an existing contact (matched by phone number) to a schedule.
Body parameters
-
contact[phone_number]string required - Phone number in E.164 format, e.g. +15551234567.
-
contact[first_name]string optional - First name.
-
contact[last_name]string optional - Last name.
-
contact[email]string optional - Email address.
curl -X POST https://pepur.xyz/api/v1/schedules/SCHEDULE_ID/contacts \
-H "Authorization: Bearer <PEPUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"contact": {
"first_name": "Jane",
"last_name": "Doe",
"phone_number": "+15551234567",
"email": "jane@example.com"
}
}'
Invite a guest
/api/v1/events/:event_id/invite
Invites a guest to an event and lets the Pepur agent coordinate the RSVP over SMS.
Body parameters
-
invite[phone_number]string required - Guest phone number. Alternatively pass invite[contact_id] for an existing contact.
-
invite[name]string optional - Full name. You can pass invite[first_name] and invite[last_name] instead.
-
invite[custom_prompt]string optional - Extra instructions for the AI agent when messaging this guest.
curl -X POST https://pepur.xyz/api/v1/events/EVENT_ID/invite \
-H "Authorization: Bearer <PEPUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"invite": {
"phone_number": "+15551234567",
"name": "Jane Doe",
"custom_prompt": "Invite Jane and mention the patio entrance."
}
}'
Add to guest list
/api/v1/events/:event_id/add_to_guestlist
Approves a guest directly onto the event guest list, skipping the SMS invite flow.
Body parameters
-
invite[phone_number]string required - Guest phone number. Alternatively pass invite[contact_id] for an existing contact.
-
invite[name]string optional - Full name. You can pass invite[first_name] and invite[last_name] instead.
curl -X POST https://pepur.xyz/api/v1/events/EVENT_ID/add_to_guestlist \
-H "Authorization: Bearer <PEPUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"invite": {
"phone_number": "+15551234567",
"name": "Jane Doe"
}
}'
Event webhooks
Send registrations from Luma, Eventbrite, Zapier, Google Sheets, Airtable, or any tool that can POST JSON. Each event has its own webhook URL — no authentication header required. See the integrations guide for platform-specific setup.
Example payload
{
"pepur_event_id": "EVENT_ID",
"platform": "zapier",
"platform_event_id": "external-event-id",
"event_name": "API Demo Event",
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"phone": "+15551234567"
}