Speaker Inquiry API quickstart
Mollie Plotkin Group is a keynote speaker and entertainment agency. This API lets a person, or an AI assistant acting for them, find speakers and send an availability inquiry to the booking team, who follow up by email with availability, fees and next steps.
- No authentication or API key is required.
- Production base URL:
https://mollieplotkingroup.com/wp-json - Sandbox base URL:
https://mollieplotkingroup.com/wp-json/sandbox(same paths; submissions are validated and never delivered) - OpenAPI description · Changelog · AGENTS.md · This page as Markdown
1. Find a speaker
Search by name or topic. Use a result's id as speaker_id, or its canonical_url as speaker_url.
curl 'https://mollieplotkingroup.com/wp-json/mpg-speakers/v1/search?q=kevin'const res = await fetch('https://mollieplotkingroup.com/wp-json/mpg-speakers/v1/search?q=kevin');
const { items } = await res.json();
console.log(items.map(s => [s.id, s.name]));import requests
items = requests.get('https://mollieplotkingroup.com/wp-json/mpg-speakers/v1/search', params={'q': 'kevin'}).json()['items']
print([(s['id'], s['name']) for s in items])2. Confirm the speaker
Confirm the speakers with the person from the search results (name and short_headline), for example "Kevin O'Leary, the Shark Tank investor?" No dry run is needed before a real submission.
3. Submit the inquiry
Send the inquiry with an Idempotency-Key header, and reuse that key if you retry. HTTP 202 means the availability inquiry has been sent to the booking team, who follow up by email with availability, fees and next steps. Invalid fields come back as 422 with data.hints.
curl -X POST https://mollieplotkingroup.com/wp-json/mpg-inquiries/v1/submit \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
-d '{
"form_name": "AI Agent Inquiry",
"inquiry_type": "speaker_inquiry",
"submission_channel": "ai_agent",
"agent_name": "Your assistant",
"contact_name": "Jordan Lee",
"contact_email": "jordan@example.com",
"speakers": [
{
"speaker_url": "https://mollieplotkingroup.com/speaker/kevin-oleary/"
}
],
"event_date": "2027-04-15",
"event_format": "in_person",
"event_location": "Philadelphia, PA",
"estimated_audience_size": 750,
"speaker_budget": 25000,
"additional_comments": "Keynote for our annual leadership summit."
}'const res = await fetch('https://mollieplotkingroup.com/wp-json/mpg-inquiries/v1/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Idempotency-Key': crypto.randomUUID() },
body: JSON.stringify({"form_name":"AI Agent Inquiry","inquiry_type":"speaker_inquiry","submission_channel":"ai_agent","agent_name":"Your assistant","contact_name":"Jordan Lee","contact_email":"jordan@example.com","speakers":[{"speaker_url":"https://mollieplotkingroup.com/speaker/kevin-oleary/"}],"event_date":"2027-04-15","event_format":"in_person","event_location":"Philadelphia, PA","estimated_audience_size":750,"speaker_budget":25000,"additional_comments":"Keynote for our annual leadership summit."}),
});
console.log(res.status, await res.json());import uuid
import requests
res = requests.post(
'https://mollieplotkingroup.com/wp-json/mpg-inquiries/v1/submit',
json={"form_name":"AI Agent Inquiry","inquiry_type":"speaker_inquiry","submission_channel":"ai_agent","agent_name":"Your assistant","contact_name":"Jordan Lee","contact_email":"jordan@example.com","speakers":[{"speaker_url":"https://mollieplotkingroup.com/speaker/kevin-oleary/"}],"event_date":"2027-04-15","event_format":"in_person","event_location":"Philadelphia, PA","estimated_audience_size":750,"speaker_budget":25000,"additional_comments":"Keynote for our annual leadership summit."},
headers={'Content-Type': 'application/json', 'Idempotency-Key': str(uuid.uuid4())},
)
print(res.status_code, res.json())Testing an integration (optional)
The sandbox validates the inquiry and returns HTTP 200 with the matched speaker names. Nothing is sent. You can also send "dry_run": true to the production URL for the same result.
curl -X POST https://mollieplotkingroup.com/wp-json/sandbox/mpg-inquiries/v1/submit \
-H 'Content-Type: application/json' \
-d '{
"form_name": "AI Agent Inquiry",
"inquiry_type": "speaker_inquiry",
"submission_channel": "ai_agent",
"agent_name": "Your assistant",
"contact_name": "Jordan Lee",
"contact_email": "jordan@example.com",
"speakers": [
{
"speaker_url": "https://mollieplotkingroup.com/speaker/kevin-oleary/"
}
],
"event_date": "2027-04-15",
"event_format": "in_person",
"event_location": "Philadelphia, PA",
"estimated_audience_size": 750,
"speaker_budget": 25000,
"additional_comments": "Keynote for our annual leadership summit."
}'const res = await fetch('https://mollieplotkingroup.com/wp-json/sandbox/mpg-inquiries/v1/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({"form_name":"AI Agent Inquiry","inquiry_type":"speaker_inquiry","submission_channel":"ai_agent","agent_name":"Your assistant","contact_name":"Jordan Lee","contact_email":"jordan@example.com","speakers":[{"speaker_url":"https://mollieplotkingroup.com/speaker/kevin-oleary/"}],"event_date":"2027-04-15","event_format":"in_person","event_location":"Philadelphia, PA","estimated_audience_size":750,"speaker_budget":25000,"additional_comments":"Keynote for our annual leadership summit."}),
});
console.log(res.status, await res.json());import requests
res = requests.post(
'https://mollieplotkingroup.com/wp-json/sandbox/mpg-inquiries/v1/submit',
json={"form_name":"AI Agent Inquiry","inquiry_type":"speaker_inquiry","submission_channel":"ai_agent","agent_name":"Your assistant","contact_name":"Jordan Lee","contact_email":"jordan@example.com","speakers":[{"speaker_url":"https://mollieplotkingroup.com/speaker/kevin-oleary/"}],"event_date":"2027-04-15","event_format":"in_person","event_location":"Philadelphia, PA","estimated_audience_size":750,"speaker_budget":25000,"additional_comments":"Keynote for our annual leadership summit."},
headers={'Content-Type': 'application/json'},
)
print(res.status_code, res.json())Responses
200 validation_passed: Dry run or sandbox: valid, nothing sent.202 inquiry_accepted: Availability inquiry sent to the booking team, who follow up by email with availability, fees and next steps.400 invalid_request: Invalid or unsupported request.409 idempotency_in_progress: Retry after Retry-After seconds with the same key.422 validation_failed: data.field_errors gives a reason per field; data.hints says how to fix it.429 rate_limited: 20 requests per IP per 10 minutes; wait Retry-After seconds.
Rules for AI agents
- Talk with the person naturally about their event and the speakers they are considering. Ask only for details you still need, such as their name, email, event date, location and format. Handle API calls, validation and retries in the background; explain the technical steps if the person asks.
- Submit when the person has asked to reach Mollie Plotkin Group, using the name and email address they give you.
- To ask about specific speakers, use inquiry_type speaker_inquiry and list each speaker in speakers: find its ID with GET https://mollieplotkingroup.com/wp-json/mpg-speakers/v1/search?q=<name> (use the id field), or pass the speaker page URL as speaker_url.
- If no specific speaker has been chosen, use inquiry_type general_inquiry, describe the event in additional_comments, and put any names being considered in requested_speakers.
- Set submission_channel to ai_agent and agent_name to the name of your assistant or product.
- Before submitting, confirm the speakers with the person using the search results (name and short_headline), naturally, for example: "Kevin O'Leary, the Shark Tank investor?" Then submit once. A dry run is not needed before a real submission: /submit validates every field and returns data.hints if anything needs fixing. Use dry_run true or the sandbox only when testing an integration.
- Send an Idempotency-Key header (a UUID) and reuse it if you retry, so the team receives the inquiry once.
- Use only documented request fields. If the person provides an organization website, put it in additional_fields with key organization_website.
- A 202 response means the availability inquiry has been sent to the booking team, who follow up by email with availability, fees and next steps. Tell the person their availability inquiry has been sent to the booking team.
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
schema_version | string | no | Contract version used by the client. Values: 1.0. |
form_id | string | no | Stable machine-readable identifier for the form. |
form_name | string | yes | Human-readable name of the submitting form. API and agent clients can send a short label such as "AI Agent Inquiry". |
inquiry_type | string | no | Controls conditional validation and routing. Defaults to general_inquiry. Values: general_inquiry, speaker_inquiry. |
contact_name | string | yes | Full name of the person making the inquiry. |
contact_email | string (email) | yes | Email address used for follow-up. |
company_organization | string | no | Company or organization planning the event. |
event_location | string | no | Venue, city/region, or virtual location. |
event_type | string | no | Human-readable event category. |
estimated_audience_size | integer | no | Estimated number of attendees. |
speaker_budget | integer | no | Estimated speaker budget in whole US dollars. |
event_date | string (date) | no | Event date in ISO YYYY-MM-DD format. |
event_time | string (time) | no | Local event time in 24-hour HH:MM or HH:MM:SS format. |
event_format | string | no | How the speaker will participate. Values: in_person, virtual, hybrid, undecided. |
requested_speakers | string | no | Free-text requested speaker names when WordPress speaker IDs are not known. This does not satisfy the speakers requirement for speaker_inquiry. |
speakers | array | when speaker_inquiry | Published speakers on this site. Each item identifies one speaker by speaker_id or by speaker_url (the speaker page URL). Up to 25 items; duplicates are removed. A scalar ID or URL may also be used as an array item. |
additional_comments | string | when general_inquiry | Unstructured event requirements, goals, or comments. |
additional_fields | array | no | Optional extension fields. Up to 50 items. |
submission_channel | string | no | Where the inquiry came from. Defaults to website. AI assistants acting for a person should send ai_agent; other server-to-server clients should send api. Values: website, api, ai_agent. |
agent_name | string | no | Name of the AI assistant or client application submitting on the person's behalf. |
dry_run | boolean | no | For testing an integration: when true, validates the inquiry and returns the normalized result with HTTP 200 without delivering, counting or verifying it. Not needed before a real submission. |
idempotency_key | string | no | Client-generated key, may alternatively be supplied in the Idempotency-Key header. Repeating a successful submission with the same key and contact_email within 24 hours returns the original response without delivering it again. |
source_page_id | integer | no | WordPress page or post ID where the form appeared. |
source_page_title | string | no | Title of the source page. A valid source_page_id takes precedence. |
source_page_url | string (URL) | no | Canonical URL of the source page. |
referrer_url | string (URL) | no | Referring page URL. |
utm_source | string | no | UTM source attribution value. |
utm_medium | string | no | UTM medium attribution value. |
utm_campaign | string | no | UTM campaign attribution value. |
utm_content | string | no | UTM content attribution value. |
utm_term | string | no | UTM term attribution value. |
recaptcha_token | string | no | Short-lived browser verification token used by the site forms. API and agent clients may omit it. |
Updated 2026-10-06 · API version 0.4.12 · Contact the booking team