CalendarDrop.My account

INTEGRATIONS

Connect event sources and AI tools.

CalendarDrop turns event information into editable WordPress drafts. An automation or AI tool that can make an authenticated HTTP request can submit event text to your WordPress site's CalendarDrop webhook.

This guide describes CalendarDrop 1.3.0. Read the web version, get setup help, or get the WordPress plugin.

Is this the right connection?

Use this workflow when you have permission to process incoming event details and want an editor to review drafts on a WordPress site. A community calendar, venue or local publication can use it to reduce repeated event entry.

If your goal is to write directly to Google Calendar or Outlook, continuously synchronize calendars, or insert an already structured event without AI extraction, this webhook is not that connection. There is no dedicated CalendarDrop MCP server or agent SDK described here. Use your tool's ordinary HTTP integration.

Set up the WordPress site

  1. Install and activate CalendarDrop. Activate The Events Calendar if you want native calendar events. In WordPress Settings → General, select a named city timezone such as Los Angeles.
  2. Choose how to pay for processing. My own AI provider and billing uses the provider, model and credentials configured in CalendarDrop's settings; a CalendarDrop subscription is not required. CalendarDrop subscription allowance includes processing and uses your site's event credits.
  3. For the allowance option, open CalendarDrop → Subscription. Follow the account connection steps for your trial or paid license. Then select CalendarDrop subscription allowance and choose Save processing mode. Connecting an account alone does not switch the mode. See the full connection steps.
  4. Open CalendarDrop → Settings → Advanced Integrations → Technical Webhook Details. Copy Webhook Target URL and configure the Secret Token in your integration's secure credential store. Use the generated URL because WordPress permalink settings can change its form.
  5. Authorize the integration for the intended source and site. Start with one fictional event, inspect the response and review the resulting draft. Even a test import can use provider processing and a draft credit.

Only the site owner or an authorized administrator should connect an integration. Do not paste webhook secrets, account connection codes, license keys, provider keys or passwords into a chat or model prompt. Configure authentication outside the model's event text. If a webhook secret is exposed, regenerate it in WordPress and update the authorized integration.

Submit event text

Send POST to the copied WordPress webhook URL, usually https://your-wordpress-site.example/wp-json/calendardrop/v1/ingest.

Set these headers in the integration:

Content-Type: application/json
X-CalendarDrop-Secret: <secret supplied by the credential store>

Example JSON body, using a fictional event:

{
  "subject": "Fictional event submission",
  "text": "Paper Lantern Making Circle. July 16, 2038, 6:00 PM to 7:15 PM, America/Los_Angeles. Venue: Alder Workshop Room. Organizer: Fictional Lantern Collective. Admission: Free. Website: https://example.org/lantern-circle. Bring plain paper. Materials provided."
}

text is the event source. Include the actual event title, date, local time, location and other available details there. subject is an optional log label, not a substitute for the event body. An optional sender string can carry the submitting sender; omit it if it is not needed. If no event website is extracted, the plugin may use the sender's non-consumer email domain as a fallback website, so include the event's real URL when known.

The webhook also accepts form fields and common email-forwarding aliases: body-plain, stripped-text, TextBody, text, then body, in that order. Send one body field, as a string. Subject aliases are subject and Subject; sender aliases are sender, from and From. An email-forwarding service must be configured separately; CalendarDrop does not supply a mailbox.

The supported input is source text for extraction. This route does not accept an events array for direct insertion, fetch a URL's contents, or process attachments merely because their names or links appear in the body. Use the upload workflow for files. Use the secret header rather than placing a secret in a URL that could be logged or shared.

Limits and credits

See current plans and service terms before choosing a paid allowance.

Read the result before taking another action

A successful response contains event IDs, per-event results and summary counts. This illustrative subset shows one created draft; actual results include additional fields:

{
  "status": "success",
  "event_id": 123,
  "events_created": 1,
  "events_merged": 0,
  "events_skipped": 0,
  "events_failed": 0,
  "total_events": 1,
  "events": [
    {
      "event_id": 123,
      "status": "success",
      "message": "Event imported successfully."
    }
  ]
}

HTTP 200 alone does not mean every event succeeded. Inspect events_failed, the other counts and each item in events. Event statuses can include success, fallback_success, skipped, merged and error. The overall status can also be batch_success. Messages are for people and may change; do not use their exact wording as a machine contract. An edit_link can be empty for an unauthenticated webhook caller. Review drafts through WordPress.

For subscription imports, replayed: true means CalendarDrop returned an existing result. It retains the original counts, which do not describe new creations on this request. A subscription_notice can mean drafts were saved but their credit confirmation is pending. Check WordPress and choose CalendarDrop → Subscription → Retry pending confirmations instead of resubmitting just to confirm credits.

Duplicates, interruptions and errors

Default duplicate handling skips a matching event. The plugin uses title/date-based checks, not an event ID supplied by your integration. Optional flag handling creates a separate review draft; merge updates an existing draft and skips non-drafts. Check your site's setting before automating submissions. Own-provider mode can make an AI request before identifying a duplicate.

The WordPress webhook does not accept a caller-controlled idempotency key. Subscription mode derives its own source, site, timezone and date identity and can recover recorded results. Do not assume an indefinite exactly-once guarantee across changed text, dates or site configuration.

If a request times out, stop automatic retries. Check the import log, drafts and pending confirmations first. Preserve the source and response. Follow the reported retry instructions; if the outcome remains unclear, contact support before altering the source or sending it again.

File integrations

For a person submitting files, use Upload Flyer or the optional private upload page. Subscription mode accepts PNG, JPEG, WebP and native PDFs up to 4 MiB. Text-based .docx files use extracted document text, subject to the text limit; embedded images are not the document's text source. The plugin's default decoded upload cap is 10 MiB, and your host can impose a smaller request limit.

An authorized file automation can use the separately enabled WordPress route POST /wp-json/calendardrop/v1/upload-flyer. Configure the correct REST URL for your WordPress permalink settings. The Private Upload URL shown in settings opens the human upload page; it is not the REST target. The file route has a different header, X-CalendarDrop-Upload-Secret, and uses the private upload link's secret, not the text webhook secret. Keep that secret in the integration's credential store. Send JSON string fields file_data (base64 file bytes or a base64 data URI), file_name and file_type (MIME type). This is not a multipart upload. Send the complete original file, not a first-page preview as a substitute for a PDF. Base64 increases the request size.

The private upload route defaults to 20 requests per hour per IP-based bucket; site configuration can change that limit. This limit does not describe the text webhook. Its success response includes success: true and the import result; errors generally return HTTP 400 with an error message. Authentication and host-level errors can differ. Apply the same draft, partial-failure and retry checks as above.

Permission and data handling

Submit only material you have permission to process. Keep unrelated correspondence, confidential records and secrets out of event source text. An agent should not choose a destination site, connect a paid account, or start chargeable imports beyond its owner's authorization.

In subscription mode, the selected source passes through CalendarDrop to Google Gemini for extraction. WordPress stores drafts and may retain uploads and import logs. CalendarDrop retains extracted results for recovery and separate account, billing and usage records. Own-provider mode sends extraction requests to the provider configured in WordPress. Read the data-use details for retention and provider handling.

For help, email josh@pennerstrategy.com with the CalendarDrop and WordPress versions, request time, status and a sanitized error. Do not send authentication values or confidential source documents. Back to CalendarDrop.