Please see the full REST API documentation for API implementation details.

Resource: REST Hooks

REST hooks provide a way for API callers to dynamically configure callback requests for events they would like to be notified about. Examples include receiving a notification when a meeting is scheduled or when an Action Item is created.

The Lucid Meetings REST Hook mechanism follows the patterns described by Zapier for their Notification REST Hooks and by resthooks.org for "Skinny Payloads." With skinny payloads we deliver (POST) a notification that an event has occurred, along with a URL for the affected resource. To access the full resource, the recipient must retrieve (GET) the resource via normal, authenticated API calls.


Properties

#
Field Type Notes
hook_id integer
token_id integer Identifies the API token used to create the hook
organization_id tuple associated organization: {organization_id, name}
room_id tuple associated room: {room_id, name}
event tuple trigger event: {event, description}
target_url URL The target URL for the notification callback
create_ts timestamp
update_ts timestamp

My Hooks

#
GET /lucid/api/v1/hooks (must be logged in)
Query parameter Notes
organization_id (Integer) Restrict to hooks with the specified organization_id.
room_id (Integer) Restrict to hooks with the specified room_id.
target_url (String) Restrict to hooks with the specified target_url.
fields See Field Filtering
envelope See Enveloping

Sample Request

GET /lucid/api/v1/hooks?fields=hook_id,room_id,event
Content-Type: application/json; charset=utf-8
Content-Length: 653
X-Rate-Limit-Limit: 100
X-Rate-Limit-Remaining: 98
X-Rate-Limit-Reset: 60
X-Rate-Limit-Used: 2
X-Requestor: jtkeith@lucidmeetings.com
[
  {
    "hook_id": 10,
    "room_id": {
      "value": 74,
      "display": "Engineering Team"
    },
    "event": {
      "value": "meeting_scheduled",
      "display": "Meeting scheduled in a room"
    }
  },
  {
    "hook_id": 12,
    "room_id": {
      "value": 74,
      "display": "Engineering Team"
    },
    "event": {
      "value": "meeting_ended",
      "display": "Meeting session ended in a room"
    }
  }
]

Getting a Single Hook

#
GET /lucid/api/v1/hooks/:hook_id
Query parameter Notes
fields See Field Filtering
envelope See Enveloping

Sample Request

GET /lucid/api/v1/hooks/10
Content-Type: application/json; charset=utf-8
Content-Length: 813
X-Requestor: jtkeith@lucidmeetings.com
X-Rate-Limit-Limit: 100
X-Rate-Limit-Remaining: 99
X-Rate-Limit-Used: 1
X-Rate-Limit-Reset: 60
{
  "id": 10,
  "hook_id": 10,
  "organization_id": null,
  "room_id": {
    "value": 74,
    "display": "Engineering Team"
  },
  "target_url": "https:\/\/zapier.com\/hooks\/standard\/286082\/e139ef7fb5174f42953716e966621fc0\/",
  "event": {
    "value": "meeting_scheduled",
    "display": "Meeting scheduled in a room"
  },
  "create_ts": {
    "value": 1463464721,
    "iso_8601": "2016-05-17T05:58:41Z"
  },
  "update_ts": {
    "value": 1463464721,
    "iso_8601": "2016-05-17T05:58:41Z"
  }
}

Creating a Hook

#

Note: Hook creation automatically guards against creation of duplicate hooks. If you attempt to create a hook which matches on all four fields with one that already exists (and that belongs to you), the API will return the data for the existing hook, with a 200 (instead of 201) HTTP status.

POST /lucid/api/v1/hooks
Field Required Notes
organization_id no The organization associated with the event, if any
room_id no The room associated with the event, if any
event yes The event to monitor
target_url yes The URL to callback when the event occurs

Sample Request

POST /lucid/api/v1/hooks
Content-Type: application/json
{
  "event" : "meeting_scheduled",
  "target_url" : "http:\/\/example.com\/api\/events",
  "room_id" : 74
}
201 Created
Location: https://site.lucidmeetings.com/lucid/api/v1/hooks/18
Content-Type: application/json
{
  "id": 18,
  "hook_id": 18,
  "organization_id": null,
  "room_id": {
    "value": 74,
    "display": "Engineering Team"
  },
  "target_url": "http:\/\/example.com\/api\/events",
  "event": {
    "value": "meeting_scheduled",
    "display": "Meeting scheduled in a room"
  },
  "create_ts": {
    "value": 1463540109,
    "iso_8601": "2016-05-18T02:55:09Z"
  },
  "update_ts": {
    "value": 1463540109,
    "iso_8601": "2016-05-18T02:55:09Z"
  }
}

Deleting a Hook

#
DELETE /lucid/api/v1/hooks/:hook_id

Sample Request

DELETE /lucid/api/v1/hooks/10


204 No Content


Sending a Hook

#

When the Lucid Meetings service matches an event to a hook subscription, we POST event data to the target_url supplied when the hook was created.

POST data Notes
resource_url The URL for the resource associated with the event
event Hook data: event field
meeting_id The ID of the meeting associated with the event, if applicable (otherwise null)
meeting_series_id The ID of the meeting series associated with the event, if applicable (otherwise null)
organization_id Hook data: organization_id field
room_id Hook data: room_id field
hook_id Hook data: the resource identifier for this hook
Additional fields are included for some events:
from_room_id Event: meeting_room_changed. The room_id of the room the meeting was moved from.
to_room_id Event: meeting_room_changed. The room_id of the room the meeting was moved to.

If the target_url responds with a 410 Gone status code we immediately remove the subscription to the failing hook (unsubscribe). Additionally, excessive failures (multiple 4xx or 5xx failures) are logged and eventually unsubscribed as well.

POST target_url
Content-Type: application/json
{
  "resource_url" : "resource_url",
  "event" : "event",
  "organization_id" : organization_id,
  "room_id" : room_id,
  "hook_id" : hook_id
}

Sample Request

POST https://zapier.com/hooks/standard/286082/e139ef7fb5174f42953716e966621fc0/
Content-Type: application/json
{
  "resource_url" : "https://site.lucidmeetings.com/meetings/1489",
  "event" : "meeting_scheduled",
  "organization_id" : null,
  "room_id" : 74,
  "hook_id" : 18
}