{"openapi":"3.1.0","info":{"title":"Mollie Plotkin Group Speaker Inquiry API","version":"0.4.12","summary":"Find keynote speakers and send booking inquiries to Mollie Plotkin Group.","description":"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 (security is an empty list). Changelog: https:\/\/mollieplotkingroup.com\/wp-json\/mpg-inquiries\/v1\/changelog. Quickstart: https:\/\/mollieplotkingroup.com\/docs\/quickstart\/. Agent-readable documentation: https:\/\/mollieplotkingroup.com\/AGENTS.md.","contact":{"name":"Mollie Plotkin Group","url":"https:\/\/mollieplotkingroup.com\/contact\/"},"x-changelog":"https:\/\/mollieplotkingroup.com\/wp-json\/mpg-inquiries\/v1\/changelog.json"},"externalDocs":{"description":"Quickstart with code samples","url":"https:\/\/mollieplotkingroup.com\/docs\/quickstart\/"},"servers":[{"url":"https:\/\/mollieplotkingroup.com\/wp-json","description":"Production. Submissions are delivered to the booking team."},{"url":"https:\/\/mollieplotkingroup.com\/wp-json\/sandbox","description":"Sandbox. Same paths and responses; every submission is validated as a dry run and never delivered, stored or counted. No test credentials are needed."}],"paths":{"\/mpg-inquiries\/v1\/submit":{"post":{"operationId":"submitInquiry","summary":"Submit a speaker booking or general inquiry to Mollie Plotkin Group","description":"Sends an inquiry to the Mollie Plotkin Group booking team, who reply by email with availability and fees.\n\n- 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.\n- Submit when the person has asked to reach Mollie Plotkin Group, using the name and email address they give you.\n- 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.\n- 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.\n- Set submission_channel to ai_agent and agent_name to the name of your assistant or product.\n- 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.\n- Send an Idempotency-Key header (a UUID) and reuse it if you retry, so the team receives the inquiry once.\n- Use only documented request fields. If the person provides an organization website, put it in additional_fields with key organization_website.\n- 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.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Client-generated key (a UUID). Reuse it when retrying the same inquiry.","schema":{"type":"string","maxLength":128},"example":"550e8400-e29b-41d4-a716-446655440000"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/InquiryRequest"},"examples":{"speaker_inquiry":{"summary":"Ask about a specific speaker","value":{"form_name":"AI Agent Inquiry","inquiry_type":"speaker_inquiry","submission_channel":"ai_agent","agent_name":"Claude","contact_name":"Jordan Lee","contact_email":"jordan@example.com","company_organization":"Example Association","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.","dry_run":true}},"general_inquiry":{"summary":"Ask for recommendations","value":{"form_name":"AI Agent Inquiry","inquiry_type":"general_inquiry","submission_channel":"ai_agent","agent_name":"Claude","contact_name":"Jordan Lee","contact_email":"jordan@example.com","requested_speakers":"An AI or future-of-work speaker","additional_comments":"Looking for a 45-minute virtual keynote for 300 sales leaders in May 2027, budget around $20,000."}}}},"application\/x-www-form-urlencoded":{"schema":{"$ref":"#\/components\/schemas\/InquiryRequest"}}}},"responses":{"200":{"description":"dry_run was true and the inquiry is valid. Nothing was delivered.","headers":{"RateLimit-Limit":{"$ref":"#\/components\/headers\/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#\/components\/headers\/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#\/components\/headers\/RateLimit-Reset"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/DryRunResult"},"example":{"success":true,"code":"validation_passed","dry_run":true,"normalized":{"inquiry_type":"speaker_inquiry","contact_name":"Jordan Lee","contact_email":"jordan@example.com","event_date":"2027-04-15","event_format":"in_person","speakers":[{"speaker_id":27083,"speaker_name":"Kevin O'Leary","speaker_url":"https:\/\/mollieplotkingroup.com\/speaker\/kevin-oleary\/"}],"submission_channel":"ai_agent","agent_name":"Claude"}}}}},"202":{"description":"Availability inquiry sent to the booking team, who follow up by email with availability, fees and next steps.","headers":{"RateLimit-Limit":{"$ref":"#\/components\/headers\/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#\/components\/headers\/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#\/components\/headers\/RateLimit-Reset"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/InquiryAccepted"},"example":{"success":true,"code":"inquiry_accepted","conversion_eligible":false}}}},"400":{"description":"Invalid or unsupported request.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"code":"invalid_request","message":"Submission rejected.","data":{"status":400}}}}},"403":{"description":"recaptcha_required or recaptcha_failed.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"code":"recaptcha_required","message":"Verification required.","data":{"status":403}}}}},"409":{"description":"idempotency_in_progress: retry after Retry-After seconds with the same Idempotency-Key.","headers":{"Retry-After":{"$ref":"#\/components\/headers\/Retry-After"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"code":"idempotency_in_progress","message":"A submission with this idempotency key is still being delivered. Retry in a few seconds with the same key.","data":{"status":409}}}}},"422":{"description":"validation_failed: see data.field_errors and data.hints.","headers":{"RateLimit-Limit":{"$ref":"#\/components\/headers\/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#\/components\/headers\/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#\/components\/headers\/RateLimit-Reset"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"code":"validation_failed","message":"Validation failed.","data":{"status":422,"field_errors":{"event_date":"invalid_date"},"hints":{"event_date":"Use YYYY-MM-DD."},"documentation_url":"https:\/\/mollieplotkingroup.com\/wp-json\/mpg-inquiries\/v1\/openapi.json"}}}}},"429":{"description":"rate_limited: at most 20 requests, including dry runs, per client IP per 10-minute window. Wait Retry-After seconds.","headers":{"RateLimit-Limit":{"$ref":"#\/components\/headers\/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#\/components\/headers\/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#\/components\/headers\/RateLimit-Reset"},"Retry-After":{"$ref":"#\/components\/headers\/Retry-After"}},"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"code":"rate_limited","message":"Too many submissions. Retry after the number of seconds in the Retry-After header.","data":{"status":429,"retry_after":312}}}}},"502":{"description":"delivery_failed.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"code":"delivery_failed","message":"The inquiry could not be delivered.","data":{"status":502}}}}},"503":{"description":"inquiry_unavailable.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"code":"inquiry_unavailable","message":"The inquiry service is temporarily unavailable.","data":{"status":503}}}}}}}},"\/mpg-inquiries\/v1\/schema":{"get":{"operationId":"getInquirySchema","summary":"Read the inquiry field contract and agent guidance","description":"Returns documented submitInquiry fields with types, limits, aliases and examples, plus conditional rules and agent guidance.","responses":{"200":{"description":"Field contract.","content":{"application\/json":{"schema":{"type":"object"},"example":{"schema_version":"1.0","endpoint":"https:\/\/mollieplotkingroup.com\/wp-json\/mpg-inquiries\/v1\/submit","method":"POST","fields":{"contact_email":{"type":"string (email)","required":true,"max_length":254,"example":"jordan@example.com"}}}}}}}}},"\/mpg-inquiries\/v1\/changelog":{"get":{"operationId":"getChangelog","summary":"List API changes by version","description":"Returns the public, API-facing changes in each version, newest first, and whether any change was breaking. Check it when a response differs from what you expect.","responses":{"200":{"description":"Changelog.","content":{"application\/json":{"schema":{"type":"object","properties":{"current_version":{"type":"string"},"versions":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string"},"date":{"type":["string","null"],"format":"date"},"breaking":{"type":"boolean"},"changes":{"type":"array","items":{"type":"string"}}}}}}},"example":{"current_version":"0.4.12","versions":[{"version":"0.4.1","date":"2026-09-28","breaking":false,"changes":["Added a sandbox server."]}]}}}}}}},"\/mpg-speakers\/v1\/search":{"get":{"operationId":"searchSpeakers","summary":"Search Mollie Plotkin Group speakers","description":"Find speakers by name, topic, role, fee range or format. Use the id of a result as speaker_id in submitInquiry. Valid topic and role slugs and fee bands are listed at https:\/\/mollieplotkingroup.com\/wp-json\/mpg-speakers\/v1\/schema. The same search is available as web pages: https:\/\/mollieplotkingroup.com\/speakers\/ takes the same parameters, and https:\/\/mollieplotkingroup.com\/?s=<words> redirects there with them filled in. Results, order and filters are the same on every route. This endpoint never uses AI.","parameters":[{"name":"q","in":"query","description":"A speaker name, or words from published speaker profiles. One to three words that match a speaker's first and last name return that speaker; otherwise every word must start a word in the profile (\"grant\" matches \"grants\", not \"immigrant\").","schema":{"type":"string"},"example":"Kevin O'Leary"},{"name":"s","in":"query","description":"Plain-language search read by fixed rules, exactly as the website's \/?s= search: a speaker name, topic and role phrases, in-person or virtual, a fee such as \"under $20k\", and remaining words as q. Explicit parameters override what is read from s. The response adds interpreted and relaxed.","schema":{"type":"string"},"example":"virtual leadership speakers under $20k"},{"name":"topic","in":"query","description":"Topic slug or comma-separated topic slugs.","schema":{"type":"string"},"example":"artificial-intelligence"},{"name":"role","in":"query","description":"Role slug or comma-separated role slugs.","schema":{"type":"string"},"example":"author"},{"name":"fee","in":"query","description":"Fee bucket or comma-separated buckets: 5000-10000, 10000-15000, 15000-20000, 20000-30000, 30000-50000, 50000-100000, 100000-200000, 200000-plus.","schema":{"type":"string"},"example":"20000-30000"},{"name":"min_fee","in":"query","description":"Minimum fee overlap in USD.","schema":{"type":"number"},"example":10000},{"name":"max_fee","in":"query","description":"Maximum fee overlap in USD.","schema":{"type":"number"},"example":30000},{"name":"format","in":"query","description":"in-person or virtual.","schema":{"type":"string"},"example":"virtual"},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1},"example":1},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"example":20}],"responses":{"200":{"description":"Matching speakers.","content":{"application\/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","description":"Use as speaker_id."},"name":{"type":"string"},"canonical_url":{"type":"string","format":"uri"},"short_headline":{"description":"Short profile headline."},"topics":{"description":"Speaking topics."},"roles":{"description":"Roles."},"speaking_fee":{"description":"Published fee guidance."},"travels_from":{"description":"Home base."},"format_capabilities":{"description":"Supported event formats."},"headshot":{"description":"Headshot image."}}}},"total":{"type":"integer"},"total_pages":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"filters":{"type":"object","description":"The filters actually applied: topics, roles, fees, min_fee, max_fee, format and q."},"ignored_params":{"type":"array","description":"Every value the search did not use and why: unknown topic, role or fee band, a format other than in-person\/virtual, a non-numeric fee, or an unknown parameter. Empty when everything was used.","items":{"type":"object","properties":{"param":{"type":"string"},"value":{"type":["string","null"]},"reason":{"type":"string"}}}},"interpreted":{"type":"object","description":"Present when s was sent: what was understood (matched names, topics, roles, format, fee), the remaining text query, and directory_url, the website page that lists the same speakers."},"relaxed":{"type":"array","description":"Present when s was sent: dropped_text when leftover words would have left no results and were dropped; any_topic when no speaker covers every topic, so speakers covering any of them are shown.","items":{"type":"string"}}}},"example":{"items":[{"id":27083,"name":"Kevin O'Leary","canonical_url":"https:\/\/mollieplotkingroup.com\/speaker\/kevin-oleary\/","short_headline":"Entrepreneur, investor and Shark Tank star"}],"total":1,"total_pages":1,"page":1,"per_page":20}}}}}}}},"security":[],"components":{"schemas":{"InquiryRequest":{"type":"object","required":["form_name","contact_name","contact_email"],"properties":{"schema_version":{"type":"string","enum":["1.0"],"description":"Contract version used by the client.","examples":["1.0"]},"form_id":{"type":"string","maxLength":100,"description":"Stable machine-readable identifier for the form.","examples":["speaker-availability-123"]},"form_name":{"type":"string","maxLength":200,"description":"Human-readable name of the submitting form. API and agent clients can send a short label such as \"AI Agent Inquiry\".","examples":["Speaker Availability Inquiry \u2014 Kevin O'Leary"]},"inquiry_type":{"type":"string","enum":["general_inquiry","speaker_inquiry"],"description":"Controls conditional validation and routing. Defaults to general_inquiry.","examples":["speaker_inquiry"]},"contact_name":{"type":"string","maxLength":200,"description":"Full name of the person making the inquiry. Also accepted as: fullname.","examples":["Jordan Lee"]},"contact_email":{"type":"string","format":"email","maxLength":254,"description":"Email address used for follow-up. Also accepted as: email.","examples":["jordan@example.com"]},"company_organization":{"type":"string","maxLength":200,"description":"Company or organization planning the event. Also accepted as: company, organization.","examples":["Example Association"]},"event_location":{"type":"string","maxLength":300,"description":"Venue, city\/region, or virtual location. Also accepted as: location.","examples":["Philadelphia, PA"]},"event_type":{"type":"string","maxLength":100,"description":"Human-readable event category.","examples":["Annual leadership conference"]},"estimated_audience_size":{"type":"integer","minimum":1,"maximum":10000000,"description":"Estimated number of attendees. Also accepted as: audience_size.","examples":[750]},"speaker_budget":{"type":"integer","minimum":0,"maximum":1000000000,"description":"Estimated speaker budget in whole US dollars. Also accepted as: budget.","examples":[25000]},"event_date":{"type":"string","format":"date","maxLength":10,"description":"Event date in ISO YYYY-MM-DD format.","examples":["2027-04-15"]},"event_time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(:[0-5]\\d)?$","maxLength":8,"description":"Local event time in 24-hour HH:MM or HH:MM:SS format.","examples":["18:30"]},"event_format":{"type":"string","enum":["in_person","virtual","hybrid","undecided"],"description":"How the speaker will participate. Also accepted as: mode.","examples":["in_person"]},"requested_speakers":{"type":"string","maxLength":1000,"description":"Free-text requested speaker names when WordPress speaker IDs are not known. This does not satisfy the speakers requirement for speaker_inquiry. Also accepted as: requested_speaker.","examples":["Kevin O'Leary or a comparable entrepreneurship speaker"]},"speakers":{"type":"array","maxItems":25,"items":{"$ref":"#\/components\/schemas\/SpeakerReference"},"description":"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. Required when inquiry_type is speaker_inquiry. Also accepted as: speaker_ids.","examples":[[{"speaker_id":123}]]},"additional_comments":{"type":"string","maxLength":10000,"description":"Unstructured event requirements, goals, or comments. Required when inquiry_type is general_inquiry. Also accepted as: message.","examples":["We are planning a leadership summit for regional executives."]},"additional_fields":{"type":"array","maxItems":50,"items":{"$ref":"#\/components\/schemas\/AdditionalField"},"description":"Optional extension fields. Up to 50 items.","examples":[[{"key":"preferred_contact_method","label":"Preferred contact method","value":"Email"}]]},"submission_channel":{"type":"string","enum":["website","api","ai_agent"],"description":"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.","examples":["ai_agent"]},"agent_name":{"type":"string","maxLength":100,"description":"Name of the AI assistant or client application submitting on the person's behalf.","examples":["Claude"]},"dry_run":{"type":"boolean","description":"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.","examples":[true]},"idempotency_key":{"type":"string","maxLength":128,"description":"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.","examples":["550e8400-e29b-41d4-a716-446655440000"]},"source_page_id":{"type":"integer","description":"WordPress page or post ID where the form appeared.","examples":[456]},"source_page_title":{"type":"string","maxLength":300,"description":"Title of the source page. A valid source_page_id takes precedence.","examples":["Kevin O'Leary"]},"source_page_url":{"type":"string","format":"uri","description":"Canonical URL of the source page.","examples":["https:\/\/mollieplotkingroup.com\/speaker\/kevin-oleary\/"]},"referrer_url":{"type":"string","format":"uri","description":"Referring page URL.","examples":["https:\/\/www.google.com\/"]},"utm_source":{"type":"string","description":"UTM source attribution value.","examples":["google"]},"utm_medium":{"type":"string","description":"UTM medium attribution value.","examples":["cpc"]},"utm_campaign":{"type":"string","description":"UTM campaign attribution value.","examples":["leadership-speakers"]},"utm_content":{"type":"string","description":"UTM content attribution value.","examples":["availability-cta"]},"utm_term":{"type":"string","description":"UTM term attribution value.","examples":["keynote speaker"]},"recaptcha_token":{"type":"string","description":"Short-lived browser verification token used by the site forms. API and agent clients may omit it.","examples":["token supplied by reCAPTCHA"]}},"description":"additional_comments is required for general_inquiry; speakers is required for speaker_inquiry. Use documented fields only."},"SpeakerReference":{"type":"object","description":"One speaker, identified by speaker_id or speaker_url. A bare integer ID or URL string is also accepted as an item.","properties":{"speaker_id":{"type":"integer","minimum":1,"description":"Speaker ID (the id field from speaker search)."},"speaker_url":{"type":"string","format":"uri","description":"Speaker page URL on this site."}}},"AdditionalField":{"type":"object","required":["key"],"properties":{"key":{"type":"string","maxLength":100},"label":{"type":"string","maxLength":200},"value":{"type":"string","maxLength":5000,"description":"A string; an array of up to 50 scalar values is also accepted and joined with semicolons."}}},"InquiryAccepted":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string","enum":["inquiry_accepted"]},"conversion_eligible":{"type":"boolean","description":"Used by the website for advertising measurement. Always false for API and agent submissions."},"idempotent_replay":{"type":"boolean","description":"Present and true when this is the stored response to an earlier submission with the same idempotency key."}}},"DryRunResult":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string","enum":["validation_passed"]},"dry_run":{"type":"boolean"},"normalized":{"type":"object","description":"The inquiry as it would be delivered, including resolved speaker names and URLs."}}},"Error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"data":{"type":"object","properties":{"status":{"type":"integer"},"field_errors":{"type":"object","additionalProperties":{"type":"string"}},"hints":{"type":"object","additionalProperties":{"type":"string"}},"documentation_url":{"type":"string","format":"uri"}}}}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}