data_sources

Create data source

Create an ingestion source into a table. type says who runs it and is required: the same Sales Navigator link is a valid ai_search and a valid sender_search, so a link's shape never decides.

ai_search: exactly one of url, payload.prompt or payload.filters; the pool runs it for credits, no sender. sender_search: sender_profile_sid plus url, unless payload.surface is my_network or messenger; payload.repeat reruns it. post_engagement: sender_profile_sid plus a post, profile or company page link (preview_post_engagement reads it back first); payload.window, relevance, collect and repeat tune it; every person lands with what they did. find_people: payload.company_sids and/or company_filter, plus a prompt or filters; always people. webhook: payload.records_path; the answer carries ingest_url (the credential: rotate to revoke). csv is refused: upload it, then import_data_source.

Refusals are 422, the reason in field_errors[field][0].rule: url needs_sender (only a Sales Navigator search runs on the pool: the rest is a sender_search), url post_engagement (a post link in a search kind), link_not_recognized, object_type or payload.target agreement, payload in, payload.collect required, and on sender_profile_sid linkedin_account_missing, sales_nav_required, recruiter_required or recruiter_signed_out. No dedup. When NOT: blocking identifiers (create_stoplist_entry); feeding people into outreach (workflow sources).

Contract:

  • MCP tool create_data_source, registry package mcp.playtables/data_sources, mount playtables.sources.
  • Operation create, response envelope create.
  • Flags: none.
post/api/data-sources

Request

  • Base URL
    https://beta.getsales.io/playtables/v1
  • Auth
    HTTP bearer and API key in header Team-SID

Request body

playtable_sidstring required

Target table (pt_tb_…) receiving promoted objects. Required for every kind.

type'ai_search' | 'sender_search' | 'post_engagement' | 'find_people' | 'csv' | 'webhook' required

Required. ai_search | sender_search | post_engagement | find_people | webhook. csv is accepted by the shape rule and then refused with the way in: upload the file through upload-csv, then confirm it with import_data_source.

urlstring uri

LinkedIn link of an ai_search, sender_search or post_engagement: /search/results, /sales/search, /sales/lists, /talent/search?searchHistoryId=, /mynetwork, /messaging; post_engagement: /posts, /feed/update, lnkd.in, /in/{slug}, /company/{slug}.

object_type'people' | 'company'

What the rows become: people | company. Required for a description-mode ai_search. Elsewhere optional and checked for agreement with the link (or with the kind: find_people and webhook always bring people).

namestring

Defaults from the kind and its link ("Sales Navigator saved search", "My network", "AI search: <the description>").

sender_profile_sidstring

The sender profile whose own LinkedIn account collects (ub_sp_); required for sender_search and post_engagement, prohibited elsewhere. Must be live, hold a LinkedIn account and the licence the link needs (Sales Navigator, or an active Recruiter session).

tag_sidsstring[]

Each tag must exist (cr_tg_…); applied to every promoted object.

on_duplicate'skip' | 'move'

Default 'skip'.

add_tags_to_duplicateboolean

Default false - merge tag_sids onto matched duplicates.

Response

create success envelope.

successtrue required
operation'create' required
already_existsboolean required
ingest_urlstring

type=webhook only: {api_base}/external/ingest/{ingest_key} - the endpoint the customer CRM POSTs records to. The URL IS the credential: hand it to the user over a channel they trust, and rotate it to revoke.

Changes

No recorded changes to this operation across all 1 revision of this API.