Crustdata
DATA · DATA & ANALYTICS
Company and people search, enrichment, and live professional-network lookups on their own key.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
crustdata_delete_watch_by_dataset_by_watch_idWRITECancel one entity watch. DESTRUCTIVE and not reversible through this API: the watch stops running and Crustdata publishes no un-cancel endpoint. via DELETE /watch/{dataset}/{watch_id}
crustdata_delete_watch_by_dataset_search_by_watch_idWRITECancel one discovery watch. DESTRUCTIVE and not reversible through this API: the watch stops running and Crustdata publishes no un-cancel endpoint. via DELETE /watch/{dataset}/search/{watch_id}
crustdata_delete_watch_by_watch_idWRITECancel one watch by its numeric id. DESTRUCTIVE and not reversible through this API: the watch stops running and Crustdata publishes no un-cancel endpoint. Its recorded runs stay readable. via DELETE /watch/{watch_id}
crustdata_get_account_creditsREADRead the account's credit summary. The balance sits under the `account` key, never at the top level. Free, consumes no credits, and takes no arguments -- which is why it is the endpoint this integration probes a pasted key against. via GET /account/credits
crustdata_get_account_endpointsREADRead what this account may call, endpoint by endpoint: whether it is `enabled` or `disabled`, which response fields are enabled, the effective rate limit in requests per minute, and the account's own per-result and per-premium-field prices. THIS IS THE TOOL THAT ANSWERS "why did that call return 403". PASS A FILTER: unfiltered the response is roughly 76 KB on a single line, because the field lists run to 558 entries for `/company/enrich` alone. `path` matches one endpoint, `category` matches a product group (`Company`, `Person`, `Jobs`, `Web`, `LinkedIn & Social`, `Other`, case-insensitively) and `status` keeps only the enabled or only the disabled ones. Free. via GET /account/endpoints
crustdata_get_account_usage_errorsREADGroup this account's failed API requests over a time window, optionally narrowed to particular API keys or endpoints. Free. via GET /account/usage/errors
crustdata_get_account_usage_eventsREADList this account's individual API calls, newest first, filtered by time window, API key, endpoint, product, status, status class, client surface or error, and paged with an opaque `cursor`. `hide_free` drops the calls that cost nothing. Free. via GET /account/usage/events
crustdata_get_account_usage_events_by_request_idREADRead one usage event by its request id, together with the request that was stored for it -- the call to make when an agent's earlier request needs explaining. Free. via GET /account/usage/events/{request_id}
crustdata_get_account_usage_summaryREADAggregate this account's API usage into one row per combination of the dimensions named in `group_by` (day, product, endpoint, component, API key, client surface, client platform or status class), bucketed by day or hour over a `start`/`end` window. Free. via GET /account/usage/summary
crustdata_get_batchREADList this account's batch jobs, most recent first, optionally filtered by status and paged with an opaque `cursor`. via GET /batch
crustdata_get_batch_by_batch_idREADRead one batch job's current state: its status, counts, error message when it has one, and -- once `status` is `completed` -- its `download_url`/`download_urls`. Check `result_count` before downloading: a completed job with zero results can still carry a URL pointing at a file that was never written, which answers 404. via GET /batch/{batch_id}
crustdata_get_watch_by_datasetREADList the entity watches on one dataset -- the watches that track a FIXED set of records and report when the fields you chose change -- optionally filtered by status and paged with `limit`/`offset`. Only `person` and `company` have entity watches. via GET /watch/{dataset}
crustdata_get_watch_by_dataset_by_watch_idREADRead one entity watch on one dataset, in the same shape create, list and update return. via GET /watch/{dataset}/{watch_id}
crustdata_get_watch_by_dataset_by_watch_id_runsREADList one watch's runs on one dataset, newest first, paged by an integer `cursor`. `only_credited` narrows the page to the runs that were charged. via GET /watch/{dataset}/{watch_id}/runs
crustdata_get_watch_by_dataset_by_watch_id_runs_by_run_id_summaryREADRead one run of one watch on one dataset in full: its counts, its activity log and what each delivery channel answered. via GET /watch/{dataset}/{watch_id}/runs/{run_id}/summary
crustdata_get_watch_by_dataset_searchREADList the discovery watches on one dataset -- the watches that run a SEARCH on a schedule and report the entities that newly match -- optionally filtered by status and paged with `limit`/`offset`. via GET /watch/{dataset}/search
crustdata_get_watch_by_dataset_search_by_watch_idREADRead one discovery watch on one dataset, in the same shape create, list and update return. via GET /watch/{dataset}/search/{watch_id}
crustdata_get_watch_by_watch_idREADRead one watch by its numeric id, whichever dataset and kind it belongs to -- the dataset-agnostic address, for when all you have is the id. via GET /watch/{watch_id}
crustdata_get_watch_by_watch_id_runsREADList one watch's runs, newest first, paged by an integer `cursor`. `only_credited` narrows the page to the runs that were charged. via GET /watch/{watch_id}/runs
crustdata_get_watch_by_watch_id_runs_by_run_id_summaryREADRead one run of one watch in full: its counts, its activity log and what each delivery channel answered. via GET /watch/{watch_id}/runs/{run_id}/summary
crustdata_patch_watch_by_dataset_by_watch_idWRITEChange an entity watch's mutable settings. ONLY four keys are accepted: sending `track`, `fields`, `dataset`, `kind`, `api_version`, `filters`, `sorts` or `on` is answered 400. via PATCH /watch/{dataset}/{watch_id}
crustdata_patch_watch_by_dataset_search_by_watch_idWRITEChange a discovery watch's name, config or delivery channels. ONLY those three keys are accepted: sending `filters`, `sorts`, `on`, `fields`, `dataset`, `kind` or `api_version` is answered 400. via PATCH /watch/{dataset}/search/{watch_id}
crustdata_patch_watch_by_watch_idWRITEChange one watch's mutable settings by its numeric id. The accepted keys differ by kind -- an entity watch and a discovery watch take different sets, and sending a key the watch's kind does not accept is answered 400. via PATCH /watch/{watch_id}
crustdata_post_batch_company_enrichWRITEEnrich many companies asynchronously, with the same identifier types and field selection as the synchronous company enrich. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /batch/company/enrich
crustdata_post_batch_company_professional_network_search_liveWRITERun a live professional-network company search asynchronously. Provide either `filters` (a flat list of `{field, type, value}`) or a `professional_network_search_url`; omitting both is answered 400. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /batch/company/professional_network/search/live
crustdata_post_batch_company_searchWRITERun one company-search filter group asynchronously; the job walks the paginated result set server-side until `max_results` is reached or the results run out. The synchronous paging parameters (`limit`, `page`, `preview`) are ignored here. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /batch/company/search
crustdata_post_batch_job_searchWRITEDeliver every indexed job listing for a set of Crustdata company ids asynchronously. There is no `filters` or `max_results` control on this endpoint -- it walks the whole result set for those companies. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /batch/job/search
crustdata_post_batch_person_contact_enrichWRITELook up contact details for many professional-network profile URLs asynchronously. `professional_network_profile_urls` is the only identifier type accepted and `fields` is REQUIRED -- it names which contact kinds to retrieve. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /batch/person/contact/enrich
crustdata_post_batch_person_enrichWRITEEnrich many people asynchronously, with the same identifier types and field selection as the synchronous person enrich. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /batch/person/enrich
crustdata_post_batch_person_identifyWRITEResolve many person identifiers to dataset records asynchronously. This is the one endpoint on the account with no rate limit at all. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /batch/person/identify
crustdata_post_batch_person_professional_network_enrich_liveWRITERetrieve many professional-network profiles fresh from the web asynchronously. `professional_network_profile_urls` is the only identifier type accepted. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /batch/person/professional_network/enrich/live
crustdata_post_batch_person_professional_network_search_liveWRITERun a live professional-network person search asynchronously. Provide either `filters` or a `professional_network_search_url`; omitting both is answered 400. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /batch/person/professional_network/search/live
crustdata_post_batch_person_searchWRITERun one person-search filter group asynchronously; the job walks the paginated result set server-side until `max_results` is reached or the results run out. The synchronous paging parameters are ignored here. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /batch/person/search
crustdata_post_batch_person_verifyWRITECheck asynchronously whether professional-network profile URLs still resolve to live profiles. `professional_network_profile_urls` is required; omitting it is answered 400. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /batch/person/verify
crustdata_post_batch_social_post_professional_network_enrich_liveWRITERetrieve professional-network posts for many identifiers asynchronously. Provide exactly ONE identifier type -- profile URLs, post URLs, company professional-network URLs, Crustdata company ids, company names or company domains; none or more than one is answered 400. Each list may also be sent as a single comma-separated string. Returns immediately with a `batch_id` and a `status_url`: NO DATA comes back at submit time. Poll `crustdata_get_batch_by_batch_id` until `status` is `completed`, then read `download_url`/`download_urls` -- and check `result_count` first, because a completed job with `result_count: 0` can carry a `download_url` pointing at a file that was never written. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /batch/social_post/professional_network/enrich/live
crustdata_post_company_enrichWRITERead full company profiles from the dataset -- basic info, headcount and its growth, role distribution, funding, revenue estimates, markets, industries and locations -- by name, domain, Crustdata company id or professional-network profile URL, one entry per identifier. Provide exactly ONE identifier type per request, and name `fields` to keep the response small: the unfiltered company record carries 558 response fields. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /company/enrich
crustdata_post_company_identifyWRITEResolve 1 to 25 company names, domains, Crustdata company ids or professional-network profile URLs to the companies that match, one entry per identifier submitted. Provide exactly ONE identifier type per request. Use this to turn a messy name or domain into a `crustdata_company_id` before enriching. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /company/identify
crustdata_post_company_professional_network_search_liveWRITERun a company search against the professional network in real time, 25 results per page, from `filters` or by replaying a saved `professional_network_search_url`. Slower and more expensive than the indexed dataset search; use it when freshness matters more than cost. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /company/professional_network/search/live
crustdata_post_company_searchWRITESearch Crustdata's indexed company dataset with structured `filters`, a natural-language `search` block, or both -- at least one is required -- plus sorts, field selection and cursor pagination. Build filter values with `crustdata_post_company_search_autocomplete` so a filter names values the dataset really holds. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /company/search
crustdata_post_company_search_autocompleteWRITESuggest valid values for one `/company/search` filter field, so a filter is built from values the dataset actually holds rather than from a guess that silently matches nothing. via POST /company/search/autocomplete
crustdata_post_job_professional_network_search_liveWRITERetrieve one company's job listings from the professional network at request time rather than from the index. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /job/professional_network/search/live
crustdata_post_job_searchWRITESearch the indexed job-listing dataset with filters, sorts, field selection, aggregations and pagination -- what roles a set of companies is hiring for, where, and since when. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /job/search
crustdata_post_job_search_autocompleteWRITESuggest valid values for one `/job/search` field, so a filter is built from values the dataset actually holds. via POST /job/search/autocomplete
crustdata_post_person_contact_enrichWRITELook up business emails, personal emails and phone numbers for people named by professional-network profile URL or by business email -- exactly ONE identifier type per request -- optionally restricted to the contact tiers you want. The `verified` request mode costs extra per result. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /person/contact/enrich
crustdata_post_person_enrichWRITERead full person profiles from the dataset by professional-network profile URL -- current and past roles, seniority, skills, education and the company each role belongs to -- one entry per identifier. Name `fields` to keep the response small: the unfiltered person record carries 235 response fields. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /person/enrich
crustdata_post_person_professional_network_enrich_liveWRITERetrieve a person's profile from the professional network at request time, rather than from the indexed dataset. Same identifier types as the dataset enrich; slower and more expensive, and the right call when the profile changed more recently than the index. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /person/professional_network/enrich/live
crustdata_post_person_professional_network_search_liveWRITERun a person search against the professional network in real time, from `filters` plus a page number or by replaying a saved `professional_network_search_url`. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /person/professional_network/search/live
crustdata_post_person_searchWRITESearch Crustdata's indexed person dataset with `filters` (optionally grouped with and/or), sorts, a result limit and cursor pagination. Build filter values with `crustdata_post_person_search_autocomplete`. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /person/search
crustdata_post_person_search_autocompleteWRITESuggest valid values for one `/person/search` filter field, so a filter is built from values the dataset actually holds. via POST /person/search/autocomplete
crustdata_post_social_post_professional_network_enrich_liveWRITERead professional-network posts at request time for exactly ONE identifier: a person's profile URL, a single post URL, or a company (name, domain, Crustdata company id or professional-network URL). Either `page` or `limit` is required -- not both -- unless a `social_post_url` names a single post. Posts come back in a `posts` array. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /social_post/professional_network/enrich/live
crustdata_post_social_post_professional_network_search_liveWRITESearch professional-network posts at request time by keyword, author and date rather than reading one author's feed. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /social_post/professional_network/search/live
crustdata_post_social_post_searchWRITESearch Crustdata's indexed social-post dataset -- the cheaper, less fresh counterpart to the live post search. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. PLAN-GATED: this endpoint is an enterprise/plan entitlement, so an account without it is answered 403 with `error.type: permission_error` naming the endpoint. That is the account's tier, not a broken connection and not a bad key -- read `crustdata_get_account_endpoints` to see which endpoints this account may call. via POST /social_post/search
crustdata_post_watch_by_datasetWRITECreate an entity watch on one dataset: `track` names the records to watch and `fields` the fields whose change should notify. The response also reports which of the identifiers you supplied could not be read. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /watch/{dataset}
crustdata_post_watch_by_dataset_by_watch_id_testWRITESend a test notification for an existing entity watch and report what each channel answered, together with the exact envelope delivered. Every field is optional. via POST /watch/{dataset}/{watch_id}/test
crustdata_post_watch_by_dataset_searchWRITECreate a discovery watch on one dataset: a saved search that runs on a schedule and notifies the channels in `on` about entities that newly match. `filters` is required on an ordinary watch; on a realtime watch (`config.is_realtime: true`) `realtime_filters` is what it runs on and `filters` becomes optional. Preview one first with `crustdata_post_watch_by_dataset_search_by_watch_id_test` or by reading the create response's `can_create`. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /watch/{dataset}/search
crustdata_post_watch_by_dataset_search_by_watch_id_testWRITESend a test notification for an existing discovery watch and report what each channel answered, together with the exact envelope delivered. Every field is optional, so an empty body is valid. via POST /watch/{dataset}/search/{watch_id}/test
crustdata_post_watch_by_dataset_testWRITEBuild a sample notification from an in-progress entity watch config WITHOUT saving anything -- the same `track` and `fields` a create would carry -- and report what each channel answered. via POST /watch/{dataset}/test
crustdata_post_web_enrich_liveWRITEFetch the content of one or more URLs, one result per URL requested. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /web/enrich/live
crustdata_post_web_search_liveWRITERun a web search and get ranked results with their titles, URLs and snippets. SPENDS CREDITS: Crustdata charges per result returned, and premium fields, premium filters and premium request modes cost extra per result. `crustdata_get_account_endpoints` reports this account's own per-endpoint and per-field prices, and `crustdata_get_account_credits` its remaining balance. via POST /web/search/live
Often connected alongside
Put Crustdata behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.