Skip to content

Discover people in an app

POST/v1/organization/{orgId}/crm/apps/{appId}/discover

US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com

Reads who the connected app holds and compares them with the organization's contacts by email: contacts from a CRM or AMS (HubSpot, Salesforce, iMIS), or the speakers of one event from an event platform (Cvent, Swoogo, Bizzabo, ON24, Goldcast; send remoteEventId), and members from iMIS. An event's attendees are counted, not returned: bring them in with POST …/crm/apps/{appId}/attendees. Each kind says as (contacts or people). Writes nothing, in Sessionboard or in the app, so read:crm is enough. Review the rows, then send the chosen ones to POST …/crm/import with source set to the app id. Requires read:crm. Refused for a key restricted to particular events. Also at POST /v1/org/{orgId}/crm/apps/{appId}/discover, and at POST /v1/crm/apps/{appId}/discover with the organization taken from the token.

Request example

Terminal window
curl --request POST \
--url 'https://public-api.sessionboard.com/v1/organization/{orgId}/crm/apps/{appId}/discover' \
--header 'x-access-token: <api-token>' \
--header 'Content-Type: application/json' \
--data '{
"kinds": [
"<string>"
],
"remoteEventId": "<string>",
"defaultType": "speaker"
}'

Try it

Authorization

Your token stays in this page. It is sent only to the region above and is never saved; it is gone when you leave or reload the page.

Path parameters
Body application/json
POST

Authorizations

  • x-access-tokenstringheader

    Organization API token. Generate from Organization Settings → API Tokens.

  • AuthorizationBearer <token>headeror

    OAuth 2.1 access token. Obtained via the OAuth PKCE flow at /oauth/token.

Send one of these. See Authentication.

Path parameters

  • orgIdstringpathrequired

    Your organization ID. Any other organization returns 404.

  • appIdstringpathrequired

    The app ID, from GET …/crm/apps.

Request body

application/json

  • kindsstring[]

    Which of the app's people_kinds; all by default.

  • remoteEventIdstring

    The app's event, when the app has needs_event.

  • defaultTypestring

    The type found people get when the app does not say.

    Allowed values
    "speaker", "sme", "influencer", "exhibitor", "sponsor"
{
"kinds": [
"<string>"
],
"remoteEventId": "<string>",
"defaultType": "speaker"
}

Responses

200application/json

OK

  • successboolean
  • payloadCrmDiscovery
    Show child attributes
    • sourceobject
      Show child attributes
      • app_idstring
      • namestring
    • foundinteger
    • by_typeobject
    • newinteger
    • existinginteger
    • invalidinteger
    • truncatedboolean

      The app held more than one discovery returns.

    • not_availableobject

      Kind → why the app does not share it.

    • rowsobject[]
      Show child attributes
      • emailstring
      • first_namestring | null
      • last_namestring | null
      • companystring | null
      • titlestring | null
      • typesstring[]
        Allowed values
        "speaker", "sme", "influencer", "exhibitor", "sponsor"
      • statusstring
        Allowed values
        "new", "existing", "invalid"
      • contact_idstring | null

        With existing: the contact the row matches.

      • reasonstring | null

        With invalid: why.

      • source_kindstring
      • asstring

        Where brought-in rows land: contacts, or people (members, prospects, customers).

        Allowed values
        "contacts", "people"
    • asobject

      Kind → where its rows land. Attendees of an event platform are only counted here; bring them in with POST …/crm/apps/{appId}/attendees.

401

Missing, invalid or expired token.

403application/json

  • SCOPE_REQUIRED: the token lacks read:crm.
  • ORG_WIDE_TOKEN_REQUIRED: the key is restricted to particular events; use a key without an event restriction.
  • FORBIDDEN: the token's user cannot read the organization's contacts.
  • successboolean
  • errorstring
    Allowed values
    "VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
  • codestring

    A more specific reason: exists, read_only, platform_customer.

  • messagestringrequired
  • contactCrmContact

    With code: exists: the contact that has the email.

    Show child attributes
    • idstring
    • first_namestring
    • last_namestring | null
    • namestring
    • emailstring<email>
    • companystring | null
    • titlestring | null

      Job title.

    • avatar_urlstring | null
    • typesstring[]
      Allowed values
      "speaker", "sme", "influencer", "exhibitor", "sponsor"
    • tagsCrmTag[]
      Show child attributes
      • idstring
      • namestring
    • events_countinteger
    • sessions_countinteger
    • last_activity_atstring<date-time> | null
    • activeboolean

      An active contact in the last 365 days.

    • sourcestring | null

      Where the contact came from.

    • created_atstring<date-time>
    • hrefstring

      The contact in Sessionboard CRM.

    • stageobject | null

      The contact's pipeline stage; null when not in the pipeline.

      Show child attributes
      • idstring
      • labelstring

404application/json

NOT_FOUND: orgId is not the token's organization, or the contact, tag or app is not in it.

  • successboolean
  • errorstring
    Allowed values
    "VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
  • codestring

    A more specific reason: exists, read_only, platform_customer.

  • messagestringrequired
  • contactCrmContact

    With code: exists: the contact that has the email.

    Show child attributes
    • idstring
    • first_namestring
    • last_namestring | null
    • namestring
    • emailstring<email>
    • companystring | null
    • titlestring | null

      Job title.

    • avatar_urlstring | null
    • typesstring[]
      Allowed values
      "speaker", "sme", "influencer", "exhibitor", "sponsor"
    • tagsCrmTag[]
      Show child attributes
      • idstring
      • namestring
    • events_countinteger
    • sessions_countinteger
    • last_activity_atstring<date-time> | null
    • activeboolean

      An active contact in the last 365 days.

    • sourcestring | null

      Where the contact came from.

    • created_atstring<date-time>
    • hrefstring

      The contact in Sessionboard CRM.

    • stageobject | null

      The contact's pipeline stage; null when not in the pipeline.

      Show child attributes
      • idstring
      • labelstring

429

The token's request limit (100 requests per 15 minutes by default) or, for writes, its daily write quota. Wait Retry-After seconds.

  • Retry-Afterintegerheader

    Seconds to wait before retrying.

Response examples

{
"success": true,
"payload": {
"source": {
"app_id": "<string>",
"name": "<string>"
},
"found": 123,
"by_type": {
"key": 123
},
"new": 123,
"existing": 123,
"invalid": 123,
"truncated": true,
"not_available": {
"key": "<string>"
},
"rows": [
{
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"company": "<string>",
"title": "<string>",
"types": [
"speaker"
],
"status": "new",
"contact_id": "<string>",
"reason": "<string>",
"source_kind": "<string>",
"as": "contacts"
}
],
"as": {
"key": "contacts"
}
}
}