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 header
Authorization: Bearer <PEPUR_API_KEY>

Your IDs

Use these schedule IDs when creating events or contacts.

Schedule ID Name

Create a schedule

POST /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".
Example request · cURL
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

GET /api/v1/schedules

Returns schedule IDs for event and contact operations.

Query parameters

Example request · cURL
curl https://pepur.xyz/api/v1/schedules \
  -H "Authorization: Bearer <PEPUR_API_KEY>"

Create an event

POST /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_schedule boolean optional
Schedule the event immediately after creation.
Example request · cURL
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

POST /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_id integer required
ID of the schedule that will own the event.
prompt string required
Event brief including its date, time, location, and desired experience.
Example request · cURL
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

GET /api/v1/events

Returns all events across your schedules, newest first.

Query parameters

schedule_id integer optional
Only return events for this schedule.
Example request · cURL
curl https://pepur.xyz/api/v1/events \
  -H "Authorization: Bearer <PEPUR_API_KEY>"

Generate an event image

POST /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

Example request · cURL
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

POST /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.
Example request · cURL
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

POST /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.
Example request · cURL
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

POST /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.
Example request · cURL
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.

Create an event to get an event-specific guest sync webhook.

Example payload

POST · JSON body
{
  "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"
}