Webhooks: Event metadata not included

Hi everyone,

I’m obligated to look for your help with this issue. We are currently using the Events API to create and update events. We are using .Net and serializing our requests, so far so good. The problem is when we receive webhooks event.updated from Google. The metadata for the event is not included in the payload of the webhook nor is it being included when querying the event through its ID.

We found out that the metadata is only included when we query the event from the organizer’s Grant ID, but not included when we query through a participant’s Grant ID. This affects how we link that event to our system, we’ve already tried using the organizer’s email to retrieve the original event, however now we have faced a challenge where the email of the organizer is not the same as the grantId, due to domain change from the provider. Any help would be highly appreciated. Thanks.

Below you can find the two jsons for each event, the first one is the event queried through the participant’s grantId (which is the same object we recieve in our events.updated webhook), the second one is the same event queried with the organizer’s grantId (I’ve removed delicate information such as grantIds or email):

{
  "request_id": "1793817699-6390ccc9-2599-46fc-a5ab-22743deca7e1",
  "data": {
    "busy": true,
    "calendar_id": "",
    "description": "Peer Group Meeting for this is a demo",
    "text_description": "Peer Group Meeting for this is a demo",
    "hide_participants": false,
    "ical_uid": "",
    "location": "Cam Test Place: 5 Wild Plum Lane, Columbine Valley, CO 80123",
    "organizer": {
      "name": "",
      "email": ""
    },
    "participants": [
      {
        "email": "",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Brian  Holtz",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Reyna Glynn",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Gordon Patrick",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Tim Buttrill",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Brando jaffeth Fernandez serrano",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Connor Green",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Manuel Chairez",
        "status": "yes"
      }
    ],
    "resources": [],
    "read_only": true,
    "reminders": {
      "use_default": true,
      "overrides": []
    },
    "title": "this is a demo Peer Group Meeting",
    "visibility": "public",
    "creator": {
      "name": "",
      "email": ""
    },
    "html_link": "",
    "grant_id": "",
    "id": "",
    "object": "event",
    "status": "confirmed",
    "when": {
      "start_timezone": "America/Denver",
      "end_timezone": "America/Denver",
      "object": "timespan",
      "start_time": 1757012400,
      "end_time": 1757026800
    },
    "created_at": 1756407018,
    "updated_at": 1756407022
  }
}

Event object using Organizer’s GrantId:

{
  "request_id": "1799410709-90fd2c89-4ee5-496f-8f05-a3bdd3291831",
  "data": {
    "busy": true,
    "calendar_id": "",
    "capacity": 15,
    "description": "Peer Group Meeting for this is a demo",
    "text_description": "Peer Group Meeting for this is a demo",
    "hide_participants": false,
    "ical_uid": "",
    "location": "Cam Test Place: 5 Wild Plum Lane, Columbine Valley, CO 80123",
    "metadata": {
      "addressId": "d76ead56-843f-11f0-8d86-4201ac192019",
      "agendaDocumentId": "",
      "createdByApplicationUserId": "63e786d8-4d7c-11ee-af26-4201ac192003",
      "groupId": "18767ae2-ee11-11ef-b152-4201ac192011",
      "location": "Cam Test Place",
      "meetingId": "00000000-0000-0000-0000-000000000000",
      "meetingType": "fa786977-7fb2-4180-a8d0-53b57dc7492b",
      "meetingUrl": "",
      "replacingMeetingId": "",
      "timeZoneId": "3"
    },
    "organizer": {
      "name": "",
      "email": ""
    },
    "participants": [
      {
        "email": "",
        "name": "Peter  Delgado",
        "phone_number": "6198618133",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Connor Green",
        "phone_number": "7208792706",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Brian  Holtz",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Reyna Glynn",
        "phone_number": "3335769286",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Gordon Patrick",
        "phone_number": "6788005369",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Tim Buttrill",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Manuel Chairez",
        "status": "yes"
      },
      {
        "email": "",
        "name": "Brando jaffeth Fernandez serrano",
        "status": "yes"
      }
    ],
    "resources": [],
    "read_only": false,
    "reminders": {
      "use_default": true,
      "overrides": []
    },
    "title": "this is a demo Peer Group Meeting",
    "visibility": "public",
    "creator": {
      "name": "",
      "email": ""
    },
    "html_link": "",
    "grant_id": "",
    "id": "",
    "object": "event",
    "status": "confirmed",
    "when": {
      "start_timezone": "America/Denver",
      "end_timezone": "America/Denver",
      "object": "timespan",
      "start_time": 1757012400,
      "end_time": 1757026800
    },
    "created_at": 1756407018,
    "updated_at": 1756407019
  }
}

May I have some help or answer that might clear my doubts about the webhook behavior? Is this expected behavior or not?

Hi

I am the manager for Webhooks team. How are you setting up this metadata? Is it through Nylas API ?

Hi, thanks for replying.

Yes, we are using Nylas API to create the event. We are using the https://api.us.nylas.com/v3/ api url, we serialize our request and send it like this:

image

The calendarId is the ‘primary’ calendar. Here you can find an example of the payload (httpContent) we send with the metadata included (Emails removed):

{
  "busy": true,
  "capacity": 15,
  "conferencing": {
    "autocreate": {
      "settings": null
    },
    "details": null,
    "provider": "Google Meet"
  },
  "description": "Peer Group Meeting for Brando Test 22",
  "hide_participants": false,
  "location": "",
  "metadata": {
    "meetingId": "00000000-0000-0000-0000-000000000000",
    "groupId": "891860d6-46da-11f0-a9f8-42010a3a300b",
    "meetingType": "a67f7dee-98e4-11ee-9032-42010a3a3004",
    "addressId": null,
    "location": null,
    "meetingUrl": null,
    "agendaDocumentId": null,
    "createdByApplicationUserId": "cf5cf2b8-3722-11f0-ad61-42010a3a300b",
    "timeZoneId": "3",
    "replacingMeetingId": null
  },
  "participants": [
    {
      "comment": null,
      "email": "",
      "name": "Test 2 Brando",
      "phone_number": null,
      "status": "yes"
    }
  ],
  "resources": null,
  "recurrence": null,
  "reminders": {
    "use_default": true,
    "overrides": null
  },
  "title": "Brando Test 22 Peer Group Meeting",
  "visibility": "public",
  "when": {
    "start_time": 1756845000,
    "end_time": 1756852200,
    "start_timezone": "America/Denver",
    "end_timezone": "America/Denver"
  }
}

Keep in mind this is a different JSON from the original post; however, the structure is the same.

Got it. Will create a ticket on our side to track the issue.

Hi,

I’m one of the engineers on the Webhooks team. Metadata is associated with a specific event and grant id, so it won’t be available on the event for other grant ids.

Please let me know if you have any additional questions!