Conference networking meetings

Put the meeting in both attendees’ calendars. One API call per pairing.

A conference matchmaking app pairs two people who have never met and gives them twenty minutes at a numbered table. The pairing is the easy part. Getting it into two calendars at two different companies, and keeping it there when one side moves, is what usually ends in a PDF agenda. CalendarPipe gives your app a calendar of its own: post the meeting with both attendees, and each of them receives an ordinary calendar invitation they accept in one click, in whatever calendar they already use.

Jakub Beneš

Jakub Beneš

Founder, CalendarPipe · Updated September 4, 2026

Pro plan · free for 14 days · no per-invitation charge

One meeting, end to end

One pairing, from matchmaking to the table.

Five calls, in order. Your app makes them; the attendees see none of it except an invitation that behaves.

  1. 01

    Create one calendar for the edition

    A hosted calendar has its own email address, an organiser name attendees will recognise, and the venue’s timezone. One per edition keeps each year’s meetings apart.

    POST/api/v1/hosted-calendars
    {
      "name": "Harbour Summit 2026",
      "timezone": "Europe/Lisbon",
      "organizerDisplayName": "Harbour Summit Meetings"
    }

    Response201 · calendarEmail: cal-…@in.calendarpipe.com

  2. 02

    Post the pairing as a meeting

    Two attendees, a twenty-minute slot, the table as the location. An idempotency key derived from your own meeting id makes a retry safe: the same key returns the same meeting and invites nobody twice.

    POST/api/v1/calendars/hosted:{id}/events
    Idempotency-Key: pairing-4821
    
    {
      "title": "Mira & Theo — Meeting",
      "start": {
        "dateTime": "2026-10-14T10:00:00+01:00",
        "timeZone": "Europe/Lisbon"
      },
      "end": {
        "dateTime": "2026-10-14T10:20:00+01:00",
        "timeZone": "Europe/Lisbon"
      },
      "location": "Table 14",
      "attendees": [
        { "email": "mira@example.com" },
        { "email": "theo@example.org" }
      ]
    }

    Response201 · id: evt_…, attendees[].status: NEEDS-ACTION

    In the attendee's calendar

    An invitation from “Harbour Summit Meetings” for Wednesday at 10:00, Table 14, with the other person named — in Google Calendar, Outlook or Apple Calendar, whichever they already open.

  3. 03

    Read back who accepted

    Every reply routes to the calendar’s own address and is recorded on the event. Your app reads a status per attendee, not a mailbox.

    GET/api/v1/calendars/hosted:{id}/events?start=2026-10-14T00:00:00Z&end=2026-10-14T23:59:59Z

    Response200 · attendees: [{ "email": "mira@…", "status": "ACCEPTED" }, { "email": "theo@…", "status": "NEEDS-ACTION" }]

    In the attendee's calendar

    One click on Yes. Nothing else is asked of them, and nothing tells them a third party was involved.

  4. 04

    Reschedule, and the invitation follows

    Change the slot or the table and an updated invitation goes out under the same identifier with a higher sequence number, so calendars replace the entry instead of showing two.

    PATCH/api/v1/events/{eventId}
    { "location": "Table 9" }

    Response200 · updated invitation sent to both

    In the attendee's calendar

    The event changes in place. No second entry, no stale one, no email asking them to delete the old one.

  5. 05

    Cancel, and it leaves both calendars

    Mark the meeting cancelled and each attendee receives a cancellation their calendar applies on its own. The record stays on your hosted calendar, marked as such.

    PATCH/api/v1/events/{eventId}
    { "status": "cancelled" }

    Response200 · cancellation sent to both

    In the attendee's calendar

    Gone from both calendars with a cancellation notice, rather than a meeting that quietly stops existing.

The tinted blocks are what the attendee sees. Nobody at their company connected anything, and nobody re-types a change — when the meeting moves, it moves for them too.

Why the schedule never reaches the calendar

You cannot ask 300 attendees to connect a calendar
Delegates come from hundreds of companies, each with an IT policy you will never see. A consent screen for your app is a request most of them will decline, and many are not allowed to approve. An invitation asks nothing of them but an inbox.
An attachment is a snapshot
An .ics file sent from your transactional mailer puts the meeting in the calendar once. Move the slot, swap the table, cancel the pairing — the file does not know, and the attendee turns up at the right time to the wrong table.
Doing it properly is a protocol, not a template
An invitation that updates and cancels cleanly is iTIP: a stable identifier, a sequence number that only goes up, an organiser address that can receive replies, and rendering that holds in Google, Outlook and Apple alike. It is more work than the matchmaking was.
The app still needs to know who accepted
Whether both sides said yes decides whether the table is booked. Replies arrive as email, in a shape every calendar client writes a little differently. Your app needs a status, not a mailbox to parse.

Who does what

What CalendarPipe handles, and what stays yours

The line is drawn at the calendar. Who meets whom is your application’s business; getting that into two calendars and keeping it true is ours.

What CalendarPipe handles for conference networking meetings, and what remains the event platform’s
DetailOwned byWhat that means
Sending the invitationCalendarPipePosted with attendees, the meeting goes out as a standard calendar invitation to each of them. There is no separate send step to forget.
ReschedulesCalendarPipeAn update re-sends under the same identifier with a higher sequence number, so calendars replace the entry rather than duplicating it.
CancellationsCalendarPipeMarking the meeting cancelled sends a cancellation to everyone on it.
Who acceptedCalendarPipeReplies route to the calendar’s own address and land on the event as accepted, declined, tentative or still waiting.
RetriesCalendarPipeAn idempotency key on the create makes a repeat return the original meeting, with nothing sent twice.
Who meets whom, and whenYour appPairing, slots and tables are your matchmaking’s decision. CalendarPipe never moves a meeting on its own.
The organiser lineYour appYou choose the name attendees see. CalendarPipe supplies the address behind it, so replies have somewhere to go.
The public agendaYour appSessions go on a second hosted calendar you fill; attendees subscribe to its feed from any calendar app.

How to set this up

About ten minutes, most of it deciding what the key is allowed to do.

  1. 01

    Start Pro and create a key

    Hosted calendars and the API are Pro features, free for 14 days. Generate a key from the API page with the event and hosted-calendar scopes and nothing else, so a leaked key cannot touch anything it does not need.

  2. 02

    Create a hosted calendar for the edition

    Name it, set the venue timezone and an organiser name attendees will recognise. The response carries the calendar’s email address and the token for its feed.

  3. 03

    Post a meeting for each pairing

    Title, start, end, the table as the location, and both attendees. Send an idempotency key made from your own meeting id, so a timeout can be retried without inviting anyone twice.

  4. 04

    Read the replies, forward the changes

    Poll the calendar’s events and read each attendee’s status. When your matchmaking moves or cancels a pairing, update the meeting and the invitation follows on its own.

  5. 05

    Publish the agenda alongside

    Sessions go on a second hosted calendar. Attendees subscribe to its feed from any calendar app, and it refreshes on the app’s own schedule.

Common questions

Do attendees need a CalendarPipe account?

No. They receive a standard calendar invitation from the organiser name you set and accept it in whatever calendar they already use. Nothing to install and nothing to sign up for, on either side of the meeting.

What do attendees see as the sender?

The organiser name on the hosted calendar, sent from an address at in.calendarpipe.com that receives their replies. Set the name to something they will recognise, such as the conference’s own, and it reads as coming from you.

Which calendar apps does this work with?

Any that handles ordinary invitations: Google Calendar, Outlook and Microsoft 365, Apple Calendar and the rest. The invitation follows the same iCalendar transport standard every mainstream client implements, so there is no per-app integration to maintain.

How many meetings can I send?

A meeting can carry up to 500 attendees, and an account can send up to 500 invitations and cancellations an hour. A conference booking a few hundred pairings a day fits comfortably; a script creating them all in one burst does not, and is told so with a 429 until the hour passes. Space the writes out and neither limit comes into view.

What if a request times out?

Send an idempotency key with every create — your own meeting id is the right choice. A retry with the same key returns the meeting the first attempt made and sends nothing a second time, so the safe response to a timeout is simply to try again.

Can I publish the full agenda as well?

Yes. Put the sessions on a second hosted calendar and give attendees its feed URL, which any calendar app can subscribe to. Feeds refresh on the app’s own schedule, usually within the hour, so use invitations rather than the feed for anything that must arrive on time.

Do I need a paid plan?

Yes. Hosted calendars and the API are on Pro: $4/month, or $40 a year, with a 14-day free trial. There is no per-invitation charge, and a calendar that goes quiet between editions costs nothing extra.

Start with a hosted calendar

Create a calendar, mint a key, post the first pairing. Pro is free for 14 days, and nothing is charged per invitation.

Keep reading