Download OpenAPI specification:Download
This API follows the JSONAPI specification. See more here https://jsonapi.org/.
You can use Gleanin to run campaigns for all of your events. Each event can have many campaigns, speakers, sessions.
When creating speakers or sessions you have to inform the ID of the event they are going to belong to.
The number of active events you can have depends on your subscription level. We have specific endpoints to archive or activate events, leaving space so you can create more events when necessary.
The Events API allows you to create, update and archive events.
You can also include associated objects to response body of your request.
You can include campaigns
, sessions
, speakers
, and images
.
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events
include | string Example: include=speakers Includes associated objects into the response. See the "included" element on the JSON body. Options: See here how you can fetch included associations. |
{- "data": [
- {
- "type": "events",
- "id": "2",
- "attributes": {
- "title": "Tech Show",
- "slug": "112ab77a5513a40e5d4fb50c442a4a5adcae61ba",
- "account_id": "8efc0e43-e065-4811-b51c-d640140681e7",
- "state": "active",
- "conversion_heartbeats": {
- "conversion_request_domains": [
- "test.com"
], - "first_convert_request_at": "2019-11-18T14:31:20.000Z",
- "last_convert_request_at": "2019-11-18T14:31:20.000Z",
- "conversion_request_count": 65
}, - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
], - "included": [
- {
- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
]
}
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"events","attributes":{"title":"My Event", "account_id":"6e56b49c-a887-43ce-b119-cd751544148a"}}}' \
https://app.gleanin.com/api/clients/v1/events
title
and account_id
are mandatory.
You can see your account_id
on the URL when clicking on My Events at https://admin.gleanin.com.
object |
{- "data": {
- "type": "events",
- "attributes": {
- "title": "Widget Expo",
- "account_id": "5565917e-ee42-458f-9a70-c66ca407fae8"
}
}
}
{- "data": {
- "type": "events",
- "id": "1",
- "attributes": {
- "title": "Widget Expo",
- "slug": "112ab77a5513a40e5d4fb50c442a4a5adcae61ba",
- "account_id": "8efc0e43-e065-4811-b51c-d640140681e7",
- "state": "active",
- "conversion_heartbeats": {
- "conversion_request_domains": [
- "test.com"
], - "first_convert_request_at": "2019-11-18T14:31:20.000Z",
- "last_convert_request_at": "2019-11-18T14:31:20.000Z",
- "conversion_request_count": 65
}, - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
}
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/1
id required | integer The ID of the Event |
{- "data": {
- "type": "events",
- "id": "1",
- "attributes": {
- "title": "Widget Expo",
- "slug": "112ab77a5513a40e5d4fb50c442a4a5adcae61ba",
- "account_id": "8efc0e43-e065-4811-b51c-d640140681e7",
- "state": "active",
- "conversion_heartbeats": {
- "conversion_request_domains": [
- "test.com"
], - "first_convert_request_at": "2019-11-18T14:31:20.000Z",
- "last_convert_request_at": "2019-11-18T14:31:20.000Z",
- "conversion_request_count": 65
}, - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
}
curl -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"events","attributes":{"title":"My new Event"}}}' \
https://app.gleanin.com/api/clients/v1/events/1
id required | integer The ID of the Event |
object |
{- "data": {
- "type": "events",
- "attributes": {
- "title": "Widget Expo",
- "account_id": "5565917e-ee42-458f-9a70-c66ca407fae8"
}
}
}
{- "type": "events",
- "id": "1",
- "attributes": {
- "title": "Widget Expo",
- "slug": "112ab77a5513a40e5d4fb50c442a4a5adcae61ba",
- "account_id": "8efc0e43-e065-4811-b51c-d640140681e7",
- "state": "active",
- "conversion_heartbeats": {
- "conversion_request_domains": [
- "test.com"
], - "first_convert_request_at": "2019-11-18T14:31:20.000Z",
- "last_convert_request_at": "2019-11-18T14:31:20.000Z",
- "conversion_request_count": 65
}, - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
It changes the state of the event to archive.
All campaigns will be suspended and will no longer receive click and conversion reporting. All links that your speakers shared will continue to work and point to your website.
curl -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/1/archive
id required | integer The ID of the Event |
{- "type": "events",
- "id": "1",
- "attributes": {
- "title": "Widget Expo",
- "slug": "112ab77a5513a40e5d4fb50c442a4a5adcae61ba",
- "account_id": "8efc0e43-e065-4811-b51c-d640140681e7",
- "state": "active",
- "conversion_heartbeats": {
- "conversion_request_domains": [
- "test.com"
], - "first_convert_request_at": "2019-11-18T14:31:20.000Z",
- "last_convert_request_at": "2019-11-18T14:31:20.000Z",
- "conversion_request_count": 65
}, - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
It changes the state of the event to active.
The number active events you can have depends on your subscription level.
curl -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/1/activate
id required | integer The ID of the Event |
{- "type": "events",
- "id": "1",
- "attributes": {
- "title": "Widget Expo",
- "slug": "112ab77a5513a40e5d4fb50c442a4a5adcae61ba",
- "account_id": "8efc0e43-e065-4811-b51c-d640140681e7",
- "state": "active",
- "conversion_heartbeats": {
- "conversion_request_domains": [
- "test.com"
], - "first_convert_request_at": "2019-11-18T14:31:20.000Z",
- "last_convert_request_at": "2019-11-18T14:31:20.000Z",
- "conversion_request_count": 65
}, - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
A campaign represents a specific way of announcing your event. You can create as many campaigns as you want for each event, having different colors, images, and texts.
There are two types of campaigns: speakers and attendees.
In a speakers campaign, the speakers advocate the event. When you create multiple campaigns, each speaker will have a different link to share. Gleanin generates different images for each speaker as options for sharing, according to the styles of your campaign. Consult Sessions and Speakers documentation to see how to create them using the API and how to get links to share for your campaigns.
An attendee campaign is a simplified version where your audience will advocate the event. You have a single link to share and you can use our embed tool to include the share feature in your event website.
A campaign can also have multiple themes. You can create different combinations of texts, images, and colors and let the speakers or attendees pick up the one they like.
Currently, you can't create campaigns and themes using the API, only consult campaigns.
Examples of images of the campaigns you can create using the product:
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/campaigns
include | string Example: include=themes You can include associated objects into the response. The options are "themes" and "event". See here how you can fetch included associations. |
{- "data": [
- {
- "type": "campaigns",
- "id": "1",
- "attributes": {
- "event_id": "1",
- "name": "#3 attendees",
- "stakeholders_group": "speakers",
- "greeting_title": "Hi There",
- "greeting_subtitle_known": "We have created some images for you. Simply choose a favourite and share.",
- "greeting_cta": "Click here",
- "suggested_post": "See you there",
- "attendee_title": "Pick an image to help spread the word",
- "attendee_subtitle": "Invite your colleagues",
- "attendee_select_network_text": "Select where you want to share",
- "metadata": {
- "og_title": "Join me at Expo 2022",
- "og_description": "Register now",
- "twitter_title": "Join me at Expo 2022",
- "twitter_description": "Register now"
}, - "conversion_count": 100,
- "last_conversion_at": "2022-01-31T22:41:40.997Z",
- "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "event": {
- "id": "1",
- "type": "events"
}
}
}
], - "included": [
- {
- "type": "events",
- "id": "1",
- "attributes": {
- "title": "Widget Expo",
- "slug": "112ab77a5513a40e5d4fb50c442a4a5adcae61ba",
- "account_id": "8efc0e43-e065-4811-b51c-d640140681e7",
- "state": "active",
- "conversion_heartbeats": {
- "conversion_request_domains": [
- "test.com"
], - "first_convert_request_at": "2019-11-18T14:31:20.000Z",
- "last_convert_request_at": "2019-11-18T14:31:20.000Z",
- "conversion_request_count": 65
}, - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
]
}
A session is a panel, talk, or meeting at your event.
When you create a campaign and you select type "speakers", the campaign will have a different share image for each session.
A session can have multiple speakers, each speaker can share his own image.
A session must belong to an event, all API operations have to include the Event ID on the URL of the request.
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/sessions?include=speakers
include | string Example: include=speakers Includes speakers data on the response. See here how you can fetch included associations. |
{- "data": [
- {
- "type": "sessions",
- "id": "2",
- "attributes": {
- "external_idx": "xyz123",
- "title": "Renewable Energy",
- "schedule": "2nd Sep, 1pm CET",
- "speaker_count": 4,
- "event_id": 8,
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
], - "included": [
- {
- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
]
}
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"sessions","attributes":{"title":"Widget API","schedule":"7pm, 5 June 2021"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/sessions
event_id required | integer The ID of the Event |
object |
{- "data": {
- "type": "sessions",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "3pm 1st Sep 2021",
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "streams": [
- "keynote"
]
}
}
}
{- "data": {
- "type": "sessions",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "1st Sep, 3pm CET",
- "speaker_count": 3,
- "event_id": 9,
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}, - "included": [
- {
- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
]
}
If the informed external_idx
already exists in our DB, the record will be updated.
Otherwise, a new record will be created.
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"sessions","attributes":{"external_idx":"123abc","title":"Widget API","schedule":"7pm, 5 June 2021"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/sessions/upsert
event_id required | integer The ID of the Event |
object |
{- "data": {
- "type": "sessions",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "3pm 1st Sep 2021",
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "streams": [
- "keynote"
]
}
}
}
{- "data": {
- "type": "sessions",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "1st Sep, 3pm CET",
- "speaker_count": 3,
- "event_id": 9,
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}, - "included": [
- {
- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
]
}
This endpoint is used to update a Session.
Only the informed fields will be updated.
The speaker_ids
list represents the speakers of the session.
Informing a new list of speaker_ids
will replace the current list.
curl -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"sessions","attributes":{"title":"The new Widget API"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/sessions/913
event_id required | integer The ID of the Event |
id required | integer The ID of the Session |
object |
{- "data": {
- "type": "sessions",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "3pm 1st Sep 2021",
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "streams": [
- "keynote"
]
}
}
}
{- "data": {
- "type": "sessions",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "1st Sep, 3pm CET",
- "speaker_count": 3,
- "event_id": 9,
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}, - "included": [
- {
- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
]
}
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/sessions/913
event_id required | integer The ID of the Event |
id required | integer The ID of the Session |
include | string Example: include=speakers Includes speakers data on the response. See here how you can fetch included associations. |
{- "data": {
- "type": "sessions",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "1st Sep, 3pm CET",
- "speaker_count": 3,
- "event_id": 9,
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}, - "included": [
- {
- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
]
}
curl -X DELETE \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/sessions/913
event_id required | integer The ID of the Event |
id required | integer The ID of the Session |
{- "errors": {
- "field_name": [
- "Error message",
- "Error message 2"
]
}
}
Create all speaker <> session relationships in a
single request using your IDs.
Takes an array of objects, each of which represents a speaker to session
relationship.
If a relationship with a given session_idx
is included in the payload, it
is assumed that ALL speaker relationships for that session are included in
the payload; all existing relationships for that session will be replaced.
When implementing an integration we recommend first calling upsert
for each speaker and each session, ignoring the relationships. Then use
this refresh_all
endpoint to create all relationships.
{
"speaker_sessions": [
{
"session_idx": "session-123",
"speaker_idx": "speaker-456"
},
{
"session_idx": "session-123",
"speaker_idx": "speaker-897"
},
{
"session_idx": "another-session-456",
"speaker_idx": "speaker-897"
}
]
}
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"speaker_sessions":[{"session_idx":"session-123","speaker_idx":"speaker-456"},{"session_idx":"session-123","speaker_idx":"speaker-897"}]}' \
https://app.gleanin.com/api/clients/v1/events/26/session_speakers/refresh_all
Remove all relationships not in the payload.
We're not always aware that sessions and speakers have been deleted from
your platform. To help accommodate this, passing
the purge_absent
flag will remove all speaker <> session
relationships before creating the ones in the payload. Purging all
relationships means speakers won't get links promoting deleted sessions.
The default behaviour is to leave sessions not in the
payload unaltered.
{
"speaker_sessions": [
...
],
"purge_absent": true
}
event_id required | integer The ID of the Event |
required | Array of objects |
purge_absent | boolean Default: false Unassign speakers from sessions that aren't in the payload. Default is false. |
{- "speaker_sessions": [
- {
- "session_idx": "session-123",
- "speaker_idx": "speaker-456"
}
], - "purge_absent": true
}
A speaker or panelist is a member of a session.
Each speaker will have its own link to share one or many campaigns. The image to share includes the information of the speaker you provide through the web app or through the API.
The attributes are name, job title, company, headshot, and e-mail. Only name is mandatory. Gleanin doesn't send any e-mail to speakers, this attribute will be useful only for your own purposes (e.g. mail merge).
A speaker must belong to an event, all API operations have to include the Event ID on the URL of the request. You can see the ID of your event at https://admin.gleanin.com.
You can associate a speaker to one or more sessions. A session can have up to five speakers.
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/speakers
event_id required | integer The ID of the Event |
include | string Example: include=sessions Includes sessions data on the response. See here how you can fetch included associations. |
{- "data": [
- {
- "type": "speakers",
- "id": "2",
- "attributes": {
- "external_idx": "xyz123",
- "name": "David Coverdale",
- "job_title": "Singer",
- "company_name": "Deep Purple",
- "email": "david@purple.com",
- "session_count": 2,
- "event_id": 9,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "sessions": {
- "data": [
- {
- "id": "1",
- "type": "sessions"
}
]
}
}
}
], - "included": [
- {
- "type": "sessions",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "1st Sep, 3pm CET",
- "speaker_count": 3,
- "event_id": 9,
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
]
}
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"speakers","attributes":{"name":"John Smith","company_name":"Smith SA","job_title": "VP"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/speakers
event_id required | integer The ID of the Event |
object |
{- "data": {
- "type": "speakers",
- "attributes": {
- "external_idx": "123abc",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_ids": [
- 3
]
}
}
}
{- "data": {
- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
}
If the informed external_idx
already exists in our DB, the record will be updated.
Otherwise, a new record will be created.
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"speakers","attributes":{"external_idx":"123abc","name":"John Smith","company_name":"Smith SA","job_title": "VP"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/speakers/upsert
event_id required | integer The ID of the Event |
object |
{- "data": {
- "type": "speakers",
- "attributes": {
- "external_idx": "123abc",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_ids": [
- 3
]
}
}
}
{- "data": {
- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
}
This endpoint is used to update a Speaker.
Only the informed fields will be updated.
The session_ids
list represents the sessions where the speaker is attending.
Informing a new list of session_ids
will replace the current list.
curl -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"speakers","attributes":{"name":"Ajay API"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/speakers/2177
event_id required | integer The ID of the Event |
id required | integer The ID of the Speaker |
object |
{- "data": {
- "type": "speakers",
- "attributes": {
- "external_idx": "123abc",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_ids": [
- 3
]
}
}
}
{- "data": {
- "type": "speakers",
- "id": "2",
- "attributes": {
- "external_idx": "xyz123",
- "name": "David Coverdale",
- "job_title": "Singer",
- "company_name": "Deep Purple",
- "email": "david@purple.com",
- "session_count": 2,
- "event_id": 9,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "sessions": {
- "data": [
- {
- "id": "1",
- "type": "sessions"
}
]
}
}
}, - "included": [
- {
- "type": "sessions",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "1st Sep, 3pm CET",
- "speaker_count": 3,
- "event_id": 9,
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
]
}
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/speakers/913
event_id required | integer The ID of the Event |
id required | integer The ID of the Speaker |
include | string Example: include=sessions Includes sessions data on the response. See here how you can fetch included associations. |
{- "data": {
- "type": "speakers",
- "id": "2",
- "attributes": {
- "external_idx": "xyz123",
- "name": "David Coverdale",
- "job_title": "Singer",
- "company_name": "Deep Purple",
- "email": "david@purple.com",
- "session_count": 2,
- "event_id": 9,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "sessions": {
- "data": [
- {
- "id": "1",
- "type": "sessions"
}
]
}
}
}, - "included": [
- {
- "type": "sessions",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "title": "The Post-pandemic World",
- "schedule": "1st Sep, 3pm CET",
- "speaker_count": 3,
- "event_id": 9,
- "speaker_ids": [
- 3
], - "tracks": [
- "keynote"
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}, - "relationships": {
- "speakers": {
- "data": [
- {
- "id": "1",
- "type": "speakers"
}
]
}
}
}
]
}
curl -X DELETE \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/speakers/913
If you delete a speaker his shared images will not be destroyed, so you can keep consulting the results of your event at the Shared Images API.
event_id required | integer The ID of the Event |
id required | integer The ID of the Speaker |
{- "errors": {
- "field_name": [
- "Error message",
- "Error message 2"
]
}
}
Upload a image file using multipart form-data.
This is an alternative for the image_url
attribute you can set
when creating or updating a speaker. In this endpoint you can upload a
binary file.
curl -X PUT \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-F "image=@/home/user1/Desktop/headshot.jpg" \
https://app.gleanin.com/api/clients/v1/events/26/speakers/2177/headshot
id required | integer The ID of the Speaker |
object |
{- "type": "speakers",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "job_title": "Organist and co-founder",
- "company_name": "Deep Purple",
- "email": "john@purple.com",
- "session_count": 3,
- "event_id": 8,
- "session_ids": [
- 3
], - "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
Create all speaker <> session relationships in a
single request using your IDs.
Takes an array of objects, each of which represents a speaker to session
relationship.
If a relationship with a given session_idx
is included in the payload, it
is assumed that ALL speaker relationships for that session are included in
the payload; all existing relationships for that session will be replaced.
When implementing an integration we recommend first calling upsert
for each speaker and each session, ignoring the relationships. Then use
this refresh_all
endpoint to create all relationships.
{
"speaker_sessions": [
{
"session_idx": "session-123",
"speaker_idx": "speaker-456"
},
{
"session_idx": "session-123",
"speaker_idx": "speaker-897"
},
{
"session_idx": "another-session-456",
"speaker_idx": "speaker-897"
}
]
}
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"speaker_sessions":[{"session_idx":"session-123","speaker_idx":"speaker-456"},{"session_idx":"session-123","speaker_idx":"speaker-897"}]}' \
https://app.gleanin.com/api/clients/v1/events/26/session_speakers/refresh_all
Remove all relationships not in the payload.
We're not always aware that sessions and speakers have been deleted from
your platform. To help accommodate this, passing
the purge_absent
flag will remove all speaker <> session
relationships before creating the ones in the payload. Purging all
relationships means speakers won't get links promoting deleted sessions.
The default behaviour is to leave sessions not in the
payload unaltered.
{
"speaker_sessions": [
...
],
"purge_absent": true
}
event_id required | integer The ID of the Event |
required | Array of objects |
purge_absent | boolean Default: false Unassign speakers from sessions that aren't in the payload. Default is false. |
{- "speaker_sessions": [
- {
- "session_idx": "session-123",
- "speaker_idx": "speaker-456"
}
], - "purge_absent": true
}
Get campaign links to present to attendees and speakers in another platform.
Speakers campaigns have individual links for each speaker.
Attendees campaigns have master links only.
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/campaigns/4/links
The response will be different according to the type of the campaign.
For an attendees campaign, the links object contains the URLs:
splash_screen
and image_preview
.
For a speakers campaign, the links object contains a list of links, one for each speaker of your event.
{- "data": {
- "type": "links",
- "id": "1",
- "attributes": {
- "event_id": 1,
- "campaign_id": 2,
- "links": [
- {
- "external_idx": "123abc",
- "name": "John Smith",
- "email": "john@smith.com",
- "sessions": [
- "The future of inovation"
]
}
], - "omitted_links": [
- {
- "external_idx": "string",
- "name": "string",
- "email": "string",
- "omission_code": "GLN-OM-SP-1",
- "omission_reason": "Speaker would have no image to select: They have no headshot but the headshot-less option is hidden."
}
]
}
}
}
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/exhibitors
event_id required | integer The ID of the Event |
include | string Example: include=event |
{- "data": [
- {
- "type": "exhibitors",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
- "image_filename": "logo.png",
- "event_id": 8,
- "slug": "b88d57d6",
- "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
]
}
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"exhibitors","attributes":{"name":"John Smith","stand_code":"123"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/exhibitors
event_id required | integer The ID of the Event |
object |
{- "data": {
- "type": "exhibitors",
- "attributes": {
- "external_idx": "123abc",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
}
}
}
{- "data": {
- "type": "exhibitors",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
- "image_filename": "logo.png",
- "event_id": 8,
- "slug": "b88d57d6",
- "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
}
If the informed external_idx
already exists in our DB, the record will be updated.
Otherwise, a new record will be created.
curl -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"exhibitors","attributes":{"external_idx":"123abc","name":"John Smith","stand_code": "123"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/exhibitors/upsert
event_id required | integer The ID of the Event |
object |
{- "data": {
- "type": "exhibitors",
- "attributes": {
- "external_idx": "123abc",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
- "image_filename": "logo.png",
- "slug": "b88d57d6",
}
}
}
{- "data": {
- "type": "exhibitors",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
- "image_filename": "logo.png",
- "event_id": 8,
- "slug": "b88d57d6",
- "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
}
This endpoint is used to update Exhibitor. Only the informed fields will be updated.
curl -X PUT \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-d '{"data":{"type":"exhibitors","attributes":{"name":"Ajay API"}}}' \
https://app.gleanin.com/api/clients/v1/events/26/exhibitors/2177
event_id required | integer The ID of the Event |
id required | integer The ID of the Exhibitor |
object |
{- "data": {
- "type": "exhibitors",
- "attributes": {
- "external_idx": "123abc",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
}
}
}
{- "data": {
- "type": "exhibitors",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
- "image_filename": "logo.png",
- "event_id": 8,
- "slug": "b88d57d6",
- "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
}
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/exhibitors/913
event_id required | integer The ID of the Event |
id required | integer The ID of the Exhibitor |
{- "data": {
- "type": "exhibitors",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
- "image_filename": "logo.png",
- "event_id": 8,
- "slug": "b88d57d6",
- "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}
}
curl -X DELETE \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
https://app.gleanin.com/api/clients/v1/events/26/exhibitors/913
If you delete exhibitor his shared images will not be destroyed, so you can keep consulting the results of your event at the Shared Images API.
event_id required | integer The ID of the Event |
id required | integer The ID of the Exhibitor |
{- "errors": {
- "field_name": [
- "Error message",
- "Error message 2"
]
}
}
Upload a image file using multipart form-data.
This is an alternative for the logo_url
attribute you can set
when creating or updating exhibitor. In this endpoint you can upload a
binary file.
curl -X PUT \
-H 'Content-Type: multipart/form-data' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-F "image=@/home/user1/Desktop/headshot.jpg" \
https://app.gleanin.com/api/clients/v1/events/26/exhibitors/2177/logo
id required | integer The ID of the Exhibitor |
object |
{- "type": "exhibitors",
- "id": "1",
- "attributes": {
- "external_idx": "abc123",
- "name": "John Lord",
- "stand_code": "Exhibitor stand number",
- "email": "john@purple.com",
- "image_filename": "logo.png",
- "event_id": 8,
- "slug": "b88d57d6",
- "created_at": "2022-11-18T14:31:20.000Z",
- "updated_at": "2023-03-31T19:45:40.997Z"
}
}