{"name":"Data Reaktor","description":"Job search desk. For a job seeker's target companies, Data Reaktor finds the people inside from public sources, scores a warm path to each (0–100) and drafts intros the user sends themselves. It never sends anything.","version":"1.5.0","product":"job_hunt","apiBase":"https://www.datareaktor.ai/api/v1","auth":{"type":"apiKey","header":"X-API-Key","in":"header","alternative":"Authorization: Bearer <key>","keyKind":"personal","keyPrefix":"drk_live_","obtain":"https://www.datareaktor.ai/settings/agents","availableOn":["free (during the beta)","search_pass","job_hunt"],"keysPerPlan":1,"beta":"During the beta, Free accounts get the Job Hunt allowances, including 1 agent key; paid checkout is closed.","defaultScopes":["search:read","search:write","people:discover","drafts:write","followups:write","connections:write"],"scopes":["search:read","search:write","people:discover","drafts:write","followups:write","connections:write"],"selfRegistration":{"open":true,"method":"POST","url":"https://www.datareaktor.ai/api/v1/agents/register","describe":"GET https://www.datareaktor.ai/api/v1/agents/register","body":{"name":"string, unique","acceptTerms":true,"purpose":"optional","homepage":"optional https URL"},"returns":"apiKey (shown once), capped free trial, expiry, limits, nextSteps","trialCredits":300,"limits":{"requestsPerMinute":60,"lookupsPerDay":60,"trialCredits":300,"trialDays":60,"creditCosts":{"contact_lookup":5,"domain_to_company":5,"people_discovery":5,"warm_path_score":2,"career_intro_draft":6,"profile_parse":3},"creditScope":"lifetime_of_trial","beta":true,"docs":"/api/v1/errors"},"manage":{"account":"https://www.datareaktor.ai/api/v1/agent/account","rotateKey":"https://www.datareaktor.ai/api/v1/agent/rotate-key","revoke":"https://www.datareaktor.ai/api/v1/agent/revoke"},"paidTopUp":"not offered to agents; past the trial the user creates a key at /settings/agents","claim":{"method":"POST","url":"https://www.datareaktor.ai/api/v1/agent/claim-link","note":"A link for the user. Signing in with it moves the account to them. Unclaimed trials run the company-based search only; lookup_contact returns CLAIM_REQUIRED."},"usePolicy":{"version":"2026-10-22","summary":"For one person's own job search only.","rules":["Use Data Reaktor only for the job search of the person you work for, with their knowledge.","No profiling or tracking individuals: look people up only as possible hiring managers, teammates or contacts at companies the person wants to work at.","No bulk collection, resale or re-publishing of people's details.","Never send messages automatically. Drafts are for the person to review and send themselves; log a send only after they confirm it.","Respect opt-outs: people who asked to be left out (datareaktor.ai/remove-me) are never shown."],"enforcement":"Unusual patterns (for example many single-person lookups across unrelated companies) pause the key automatically and are reviewed.","terms":"/terms-of-service#acceptable-use"}},"perKeyMonthlyCap":"Optional credit cap per key, set by the user. Spends the owner's plan (billing_source owner_plan).","revocation":"The user can revoke a key at any time; the next call returns 401.","oauth":{"status":"planned","phase":2,"note":"OAuth 2.1 delegation per the MCP authorization spec (for connector-style clients) is planned. Until then, use an agent key."}},"policies":{"no_auto_send":{"enforced":true,"summary":"Data Reaktor never sends email, LinkedIn messages, connection requests or any other message on the user's behalf. No API, MCP tool or UI control can send. Drafts are returned for the user to edit, copy and send from their own accounts.","draftDelivery":"user_sends","markSent":"Records a send the user reports. Requires user_reported: true; call it only after the user confirms they sent the message.","outboundEmail":"Email to the account holder only: receipts and account notices. Never to the user's contacts."},"data_sources":{"primary":["the user's résumé text","the user's own LinkedIn Connections.csv export (uploaded by the user; user-scoped; deletable)","public company pages (team, about, leadership)","public job postings","press releases and news","conference speaker lists","public GitHub organisations","publications"],"secondary":"Web-search result metadata only: name, title, URL and snippet.","sourceTypes":["connections_csv","company_page","job_posting","press","conference","github","publication","search_result"],"linkedin":"Never fetched, crawled, scraped or logged into. A LinkedIn profile URL appears only when a search engine returned it as a result link.","evidence":"Every person carries source_type and source_url (\"found via\"). A person without evidence is dropped.","email":"Shown only when found verbatim on a public page; otherwise \"No email found\". Addresses are never guessed.","visibility":"People found for a search are visible only to the user who ran it (and that user's own agent keys)."},"spend_caps":{"order":["plan_entitlement","key_monthly_cap","per_call_max_credits"],"summary":"Every call is checked, in order, against the owner's plan entitlement, the key's own monthly credit cap, then the per-call max_credits. Humans and their agents draw on one ledger.","estimateEndpoint":"/api/v1/estimate","maxCreditsRequiredOn":["find_inside_people"],"draftsPerDay":40,"errors":["PLAN_LIMIT_REACHED","KEY_SPEND_CAP_REACHED","RUN_CAP_REACHED","DRAFT_RATE_LIMITED","SCOPE_REQUIRED"],"nothingChargedOnRefusal":true}},"credits":{"definition":"A credit is a unit of work that only limits agent keys: the key's optional monthly cap (set in /settings/agents) and the per-run max_credits. Credits are never bought and have no money value. Your plan meters units (companies, people, scores, drafts), and those are what run out.","bought":false,"countsAgainst":["key_monthly_cap","per_call_max_credits"],"planMetersSeparately":true,"costs":{"profile_parse":3,"people_discovery_per_company":5,"warm_path_score_per_person":2,"draft":6,"contact_lookup":5},"responseField":"creditsCharged"},"status":{"version":"1.5.0","beta":true,"deprecatedTaskTypes":[],"changelogUrl":"https://www.datareaktor.ai/AGENTS.md#changelog"},"links":{"self":"https://www.datareaktor.ai/.well-known/agent.json","alias":"https://www.datareaktor.ai/agent.json","openapi":"https://www.datareaktor.ai/api/v1/openapi.json","errors":"https://www.datareaktor.ai/api/v1/errors","estimate":"https://www.datareaktor.ai/api/v1/estimate","plan":"https://www.datareaktor.ai/api/v1/plan","setup":"https://www.datareaktor.ai/api/v1/setup","mcp":"https://www.datareaktor.ai/mcp","llms":"https://www.datareaktor.ai/llms.txt","llmsFull":"https://www.datareaktor.ai/llms-full.txt","agentsDoc":"https://www.datareaktor.ai/AGENTS.md","contextDoc":"https://www.datareaktor.ai/CONTEXT.md","humanGuide":"https://www.datareaktor.ai/agents","pricing":"https://www.datareaktor.ai/pricing","keys":"https://www.datareaktor.ai/settings/agents","privacy":"https://www.datareaktor.ai/privacy-policy","terms":"https://www.datareaktor.ai/terms-of-service","legacyB2bDocs":"https://www.datareaktor.ai/legacy-b2b/AGENTS.md","support":"mailto:support@datareaktor.ai","changelog":"https://www.datareaktor.ai/AGENTS.md#changelog"},"mcp":{"endpoint":"https://www.datareaktor.ai/mcp","transport":"streamable-http","protocolVersion":"2025-03-26","auth":{"type":"apiKey","header":"X-API-Key","in":"header"},"toolset":"chosen by key kind: agent keys get the job-hunt tools below","tools":["get_profile","update_profile","parse_resume","upload_resume_file","import_connections","create_search","list_searches","add_target_company","list_targets","get_hiring_signals","estimate_cost","find_inside_people","get_job","list_people","score_warm_paths","draft_intro","list_drafts","rate_draft","get_writing_context","mark_sent","log_reply","record_outcome","list_followups","snooze_followup","check_plan","get_referral","update_search","delete_search","remove_target_company","update_draft","set_person_status","complete_followup","update_writing_context","delete_connections","clear_profile","delete_drafts","list_touches","undo_touch","report_product_feedback","lookup_contact","update_target_company","add_person","log_sent","get_setup_status","get_company","report_company_fact","suggest_companies"],"toolCount":47,"metaTools":["check_plan","estimate_cost","get_job","get_setup_status"],"resourceTemplates":[{"uriTemplate":"drk://search/{id}/board","mimeType":"application/json","description":"Compact board for one search"}],"documentation":"https://www.datareaktor.ai/AGENTS.md"},"capabilities":[{"id":"get_profile","mcpTool":"get_profile","rest":{"method":"GET","path":"/api/v1/job-profile","url":"https://www.datareaktor.ai/api/v1/job-profile"},"requiredScope":"search:read","mode":"sync","description":"The job seeker's profile (roles, level, employers, schools) and connection-import status."},{"id":"update_profile","mcpTool":"update_profile","rest":{"method":"PUT","path":"/api/v1/job-profile","url":"https://www.datareaktor.ai/api/v1/job-profile"},"requiredScope":"search:write","mode":"sync","description":"Update profile fields: target roles, level, function, locations, salary band, employers, schools."},{"id":"parse_resume","mcpTool":"parse_resume","rest":{"method":"POST","path":"/api/v1/job-profile/parse","url":"https://www.datareaktor.ai/api/v1/job-profile/parse"},"requiredScope":"search:write","mode":"sync","credits":3,"description":"Parse résumé text into a structured profile. Facts not in the text are dropped."},{"id":"upload_resume_file","mcpTool":"upload_resume_file","rest":{"method":"POST","path":"/api/v1/job-profile/resume-file","url":"https://www.datareaktor.ai/api/v1/job-profile/resume-file"},"requiredScope":"search:write","mode":"sync","credits":3,"description":"Upload a résumé file (PDF, DOCX, TXT, MD; ≤5 MB) as base64; parsed and saved like parse_resume. The file is not stored."},{"id":"import_connections","mcpTool":"import_connections","rest":{"method":"POST","path":"/api/v1/connections/import","url":"https://www.datareaktor.ai/api/v1/connections/import"},"requiredScope":"connections:write","mode":"sync","description":"Import the user's own LinkedIn Connections.csv export (CSV text). User-scoped; replaces the previous import. Returns skippedRows [{row, reason, detail}] (no_name, duplicate, malformed; up to 200). Connections at a target company become free people there."},{"id":"create_search","mcpTool":"create_search","rest":{"method":"POST","path":"/api/v1/searches","url":"https://www.datareaktor.ai/api/v1/searches"},"requiredScope":"search:write","mode":"sync","description":"Create a job search (name, target function, level, notes)."},{"id":"list_searches","mcpTool":"list_searches","rest":{"method":"GET","path":"/api/v1/searches","url":"https://www.datareaktor.ai/api/v1/searches"},"requiredScope":"search:read","mode":"sync","description":"List the user's active searches."},{"id":"add_target_company","mcpTool":"add_target_company","rest":{"method":"POST","path":"/api/v1/searches/{id}/targets","url":"https://www.datareaktor.ai/api/v1/searches/{id}/targets"},"requiredScope":"search:write","mode":"sync","description":"Add up to 25 target companies. No charge until people discovery runs."},{"id":"list_targets","mcpTool":"list_targets","rest":{"method":"GET","path":"/api/v1/searches/{id}/targets","url":"https://www.datareaktor.ai/api/v1/searches/{id}/targets"},"requiredScope":"search:read","mode":"sync","description":"Target companies with status and best warm-path score."},{"id":"get_hiring_signals","mcpTool":"get_hiring_signals","rest":{"method":"GET","path":"/api/v1/searches/{id}/targets/{targetId}/signals","url":"https://www.datareaktor.ai/api/v1/searches/{id}/targets/{targetId}/signals"},"requiredScope":"search:read","mode":"sync","description":"Hiring signals: open roles at a target company from public job listings, each with its URL and posted date when known. ?refresh=true re-checks (at most daily; search:write)."},{"id":"suggest_companies","mcpTool":"suggest_companies","rest":{"method":"GET","path":"/api/v1/company-suggestions","url":"https://www.datareaktor.ai/api/v1/company-suggestions"},"requiredScope":"search:read","mode":"sync","description":"Up to 10 companies hiring for the profile's target roles, from tracked public job listings, each with a reason and matching roles with URLs. Companies already on a search are left out. Add only the ones the user picks. Free."},{"id":"estimate_cost","mcpTool":"estimate_cost","rest":{"method":"POST","path":"/api/v1/estimate","url":"https://www.datareaktor.ai/api/v1/estimate"},"requiredScope":"search:read","mode":"sync","description":"Upper-bound credits and plan units for find_inside_people, with plan and key headroom. Call it first."},{"id":"find_inside_people","mcpTool":"find_inside_people","rest":{"method":"POST","path":"/api/v1/searches/{id}/people:discover","url":"https://www.datareaktor.ai/api/v1/searches/{id}/people:discover"},"requiredScope":"people:discover","mode":"durable_job","credits":"5 per company, plus scores and drafts","planMeter":"targetCompanies, insidePeople","description":"Durable job: up to 5 people per target company from public sources, warm paths scored, intros drafted for the best. Returns job_id; poll get_job. max_credits is required for agent keys.","polling":{"tool":"get_job","endpoint":"https://www.datareaktor.ai/api/v1/jobs/{jobId}","recommendedIntervalMs":3000,"terminalStatuses":["completed","failed","cancelled"]}},{"id":"get_job","mcpTool":"get_job","rest":{"method":"GET","path":"/api/v1/jobs/{jobId}","url":"https://www.datareaktor.ai/api/v1/jobs/{jobId}"},"requiredScope":"search:read","mode":"sync","description":"Progress, job log and terminal state of a find_inside_people job."},{"id":"list_people","mcpTool":"list_people","rest":{"method":"GET","path":"/api/v1/searches/{id}/people","url":"https://www.datareaktor.ai/api/v1/searches/{id}/people"},"requiredScope":"search:read","mode":"sync","description":"People found, each with source_type and source_url (\"found via\") and ranked warm paths."},{"id":"score_warm_paths","mcpTool":"score_warm_paths","rest":{"method":"POST","path":"/api/v1/searches/{id}/paths:score","url":"https://www.datareaktor.ai/api/v1/searches/{id}/paths:score"},"requiredScope":"search:write","mode":"sync","credits":2,"planMeter":"warmPathScores","description":"Deterministic 0–100 warm-path score per person (first degree, former colleague, alumni, mutual connection, cold), against the latest connections import; optional targetId. Adds imported connections at the companies first (free). A person is charged at most once. warning NO_CONNECTIONS_IMPORTED when no connections are imported."},{"id":"draft_intro","mcpTool":"draft_intro","rest":{"method":"POST","path":"/api/v1/people/{id}/drafts","url":"https://www.datareaktor.ai/api/v1/people/{id}/drafts"},"requiredScope":"drafts:write","mode":"sync","credits":6,"planMeter":"drafts","description":"Draft a LinkedIn connect note (≤300 chars), a LinkedIn message and an email. Returns delivery \"user_sends\". Never sent by Data Reaktor. Without mode, the best path decides who it goes to (a mutual connection → the connector, naming the person); a mode the path cannot support comes back with modeSwitched, or NO_CONNECTOR_PATH / NO_ALUMNI_PATH with strict: true. Names a job opening only with openingId (an id from get_hiring_signals) for an opening the user picked; otherwise it names none."},{"id":"list_drafts","mcpTool":"list_drafts","rest":{"method":"GET","path":"/api/v1/drafts","url":"https://www.datareaktor.ai/api/v1/drafts"},"requiredScope":"search:read","mode":"sync","description":"List drafts, optionally for one person. One active draft per person and mode; older not-sent versions a newer draft replaced are returned only with includeSuperseded=true (they carry version and supersededBy). A draft with stale: true was written for an older route (staleReason says why)."},{"id":"rate_draft","mcpTool":"rate_draft","rest":{"method":"POST","path":"/api/v1/drafts/{id}/feedback","url":"https://www.datareaktor.ai/api/v1/drafts/{id}/feedback"},"requiredScope":"drafts:write","mode":"sync","description":"The user's rating (up/down, reasons, note) and/or outcome (replied, meeting, no_reply, not_relevant, bounced) for a draft. Tunes future drafts for this user only."},{"id":"get_writing_context","mcpTool":"get_writing_context","rest":{"method":"GET","path":"/api/v1/writing-context","url":"https://www.datareaktor.ai/api/v1/writing-context"},"requiredScope":"search:read","mode":"sync","description":"What was learned about how the user writes: voice summary, rules, example snippets, rating counts. Private to the user."},{"id":"mark_sent","mcpTool":"mark_sent","rest":{"method":"POST","path":"/api/v1/drafts/{id}/mark-sent","url":"https://www.datareaktor.ai/api/v1/drafts/{id}/mark-sent"},"requiredScope":"followups:write","mode":"sync","description":"Record that the USER sent a draft. Requires user_reported: true. Schedules a follow-up 5 business days later."},{"id":"log_reply","mcpTool":"log_reply","rest":{"method":"POST","path":"/api/v1/people/{id}/replies","url":"https://www.datareaktor.ai/api/v1/people/{id}/replies"},"requiredScope":"followups:write","mode":"sync","description":"Record a reply the user received (optional occurred_at). Closes the open follow-up."},{"id":"record_outcome","mcpTool":"record_outcome","rest":{"method":"POST","path":"/api/v1/people/{id}/outcome","url":"https://www.datareaktor.ai/api/v1/people/{id}/outcome"},"requiredScope":"followups:write","mode":"sync","description":"How an outreach went, as the user reports it (replied, meeting, no_reply, not_relevant, bounced). replied and meeting close the open follow-up. Tunes this user's drafts only."},{"id":"list_followups","mcpTool":"list_followups","rest":{"method":"GET","path":"/api/v1/followups","url":"https://www.datareaktor.ai/api/v1/followups"},"requiredScope":"search:read","mode":"sync","description":"Open follow-ups, soonest first. When an item has due_outcome_prompt: true, ask the user \"Did they reply?\" and record the answer with record_outcome (or snooze 3 days for \"not yet\")."},{"id":"snooze_followup","mcpTool":"snooze_followup","rest":{"method":"POST","path":"/api/v1/followups/{id}/snooze","url":"https://www.datareaktor.ai/api/v1/followups/{id}/snooze"},"requiredScope":"followups:write","mode":"sync","description":"Push a follow-up back by 1–30 business days (days) or to a date (until, ISO)."},{"id":"check_plan","mcpTool":"check_plan","rest":{"method":"GET","path":"/api/v1/plan","url":"https://www.datareaktor.ai/api/v1/plan"},"requiredScope":"any","mode":"sync","description":"The owner's plan (beta flag, meters for this period, what a credit is) and this key's monthly cap headroom. \"any\" means any agent key from /settings/agents, whatever its scopes; older B2B keys get SCOPE_REQUIRED."},{"id":"get_referral","mcpTool":"get_referral","rest":{"method":"GET","path":"/api/v1/referral","url":"https://www.datareaktor.ai/api/v1/referral"},"requiredScope":"search:read","mode":"sync","description":"Invite link: a friend who signs up through it gets a discount on their first paid plan (default 20%). Counts of friends who joined and bought. The user shares the link; nothing is sent by Data Reaktor."},{"id":"update_search","mcpTool":"update_search","rest":{"method":"PATCH","path":"/api/v1/searches/{id}","url":"https://www.datareaktor.ai/api/v1/searches/{id}"},"requiredScope":"search:write","mode":"sync","description":"Rename a search, change its function/level/notes, or archive / restore it (status)."},{"id":"delete_search","mcpTool":"delete_search","rest":{"method":"DELETE","path":"/api/v1/searches/{id}?confirm=true","url":"https://www.datareaktor.ai/api/v1/searches/{id}?confirm=true"},"requiredScope":"search:write","mode":"sync","description":"Permanently delete a search and everything in it. Ask the user first; confirm: true."},{"id":"remove_target_company","mcpTool":"remove_target_company","rest":{"method":"DELETE","path":"/api/v1/searches/{id}/targets/{targetId}","url":"https://www.datareaktor.ai/api/v1/searches/{id}/targets/{targetId}"},"requiredScope":"search:write","mode":"sync","description":"Remove one company with its people, drafts and follow-ups. Ask the user first; confirm: true."},{"id":"update_draft","mcpTool":"update_draft","rest":{"method":"PATCH","path":"/api/v1/drafts/{id}","url":"https://www.datareaktor.ai/api/v1/drafts/{id}"},"requiredScope":"drafts:write","mode":"sync","description":"Save the user's edits to a draft's connect note, message or email."},{"id":"set_person_status","mcpTool":"set_person_status","rest":{"method":"PATCH","path":"/api/v1/people/{id}","url":"https://www.datareaktor.ai/api/v1/people/{id}"},"requiredScope":"search:write","mode":"sync","description":"Dismiss a person (not relevant), with an optional reason and note that steer later people searches, or bring them back."},{"id":"complete_followup","mcpTool":"complete_followup","rest":{"method":"POST","path":"/api/v1/followups/{id}/done","url":"https://www.datareaktor.ai/api/v1/followups/{id}/done"},"requiredScope":"followups:write","mode":"sync","description":"Mark a follow-up done."},{"id":"update_writing_context","mcpTool":"update_writing_context","rest":{"method":"PUT","path":"/api/v1/writing-context","url":"https://www.datareaktor.ai/api/v1/writing-context"},"requiredScope":"search:write","mode":"sync","description":"Edit or reset what was learned about how the user writes (reset needs confirm: true)."},{"id":"delete_connections","mcpTool":"delete_connections","rest":{"method":"DELETE","path":"/api/v1/connections","url":"https://www.datareaktor.ai/api/v1/connections"},"requiredScope":"connections:write","mode":"sync","description":"Delete every imported connection. Ask the user first; confirm: true."},{"id":"clear_profile","mcpTool":"clear_profile","rest":{"method":"DELETE","path":"/api/v1/job-profile?confirm=true","url":"https://www.datareaktor.ai/api/v1/job-profile?confirm=true"},"requiredScope":"search:write","mode":"sync","description":"Clear the résumé and every profile field to start over. Ask the user first; confirm: true."},{"id":"delete_drafts","mcpTool":"delete_drafts","rest":{"method":"POST","path":"/api/v1/drafts:delete","url":"https://www.datareaktor.ai/api/v1/drafts:delete"},"requiredScope":"drafts:write","mode":"sync","description":"Delete drafts by id, or every draft never marked sent, with their ratings and comments. Ask the user first; confirm: true."},{"id":"list_touches","mcpTool":"list_touches","rest":{"method":"GET","path":"/api/v1/people/{id}/touches","url":"https://www.datareaktor.ai/api/v1/people/{id}/touches"},"requiredScope":"search:read","mode":"sync","description":"The user's sent and reply records with one person."},{"id":"undo_touch","mcpTool":"undo_touch","rest":{"method":"DELETE","path":"/api/v1/touches/{id}?confirm=true","url":"https://www.datareaktor.ai/api/v1/touches/{id}?confirm=true"},"requiredScope":"followups:write","mode":"sync","description":"Undo a sent or reply record reported by mistake. Ask the user first; confirm: true."},{"id":"lookup_contact","mcpTool":"lookup_contact","rest":{"method":"POST","path":"/api/v1/tasks","url":"https://www.datareaktor.ai/api/v1/tasks"},"requiredScope":"people:discover","mode":"sync","credits":5,"description":"Body {\"taskType\":\"contact_lookup\",\"inputPayload\":{...}}. One person's public work details, and an email only when a cited public page prints it (never guessed). Covered by the job-search plan (Owner: unlimited; other plans 25 a day, DAILY_LIMIT_REACHED); 5 credits reserved on the key's monthly cap up front and refunded if the lookup fails. Private to the user: never shared or cached across users."},{"id":"update_target_company","mcpTool":"update_target_company","rest":{"method":"PATCH","path":"/api/v1/searches/{id}/targets/{targetId}","url":"https://www.datareaktor.ai/api/v1/searches/{id}/targets/{targetId}"},"requiredScope":"search:write","mode":"sync","description":"Fix a target company's name or website (domain; null clears it). Free. To search it again, estimate_cost then find_inside_people with targetIds: [targetId] (normal plan use). TARGET_ALREADY_IN_SEARCH when the new name is another company in the search."},{"id":"add_person","mcpTool":"add_person","rest":{"method":"POST","path":"/api/v1/searches/{id}/targets/{targetId}/people","url":"https://www.datareaktor.ai/api/v1/searches/{id}/targets/{targetId}/people"},"requiredScope":"search:write","mode":"sync","description":"Add a person by hand at one target company (source user_added): fullName, title, url, email, bucket. Free. A LinkedIn URL is stored as given, never fetched. An existing person by that name comes back with created: false."},{"id":"log_sent","mcpTool":"log_sent","rest":{"method":"POST","path":"/api/v1/people/{id}/touches","url":"https://www.datareaktor.ai/api/v1/people/{id}/touches"},"requiredScope":"followups:write","mode":"sync","description":"Body {kind: \"sent\", user_reported: true, channel?, occurred_at?, notes?}. Record a message the USER sent without a draft; schedules a follow-up 5 business days later like mark_sent. Free."},{"id":"get_setup_status","mcpTool":"get_setup_status","rest":{"method":"GET","path":"/api/v1/setup","url":"https://www.datareaktor.ai/api/v1/setup"},"requiredScope":"search:read","mode":"sync","description":"Start here for a new user: the setup checklist (résumé, what they want next, connections, first search, companies, people; draft and voice optional), done / skipped per step, nextStep with nextAction, and the running people search. Free. PATCH /setup (search:write) records connectionsRequested, skip, mode, dismiss."},{"id":"get_company","mcpTool":"get_company","rest":{"method":"GET","path":"/api/v1/companies/{domain}","url":"https://www.datareaktor.ai/api/v1/companies/{domain}"},"requiredScope":"search:read","mode":"sync","description":"Public facts about a company (Reaktor Core): what it does, industry, HQ, size, products, technologies, AI use (level 0-4 with quoted evidence), related companies, corporate family, certifications, email format, people who work there as published (name, title, source) and its daily hiring trend. Every fact has a source URL and date. status queued: a profile is being built. Free."},{"id":"report_company_fact","mcpTool":"report_company_fact","rest":{"method":"POST","path":"/api/v1/companies/{domain}/corrections","url":"https://www.datareaktor.ai/api/v1/companies/{domain}/corrections"},"requiredScope":"search:write","mode":"sync","description":"Report a wrong or outdated company fact (factId from get_company) with the user's words; it is held back and re-checked. Free."},{"id":"report_product_feedback","mcpTool":"report_product_feedback","rest":{"method":"POST","path":"/api/v1/product-feedback","url":"https://www.datareaktor.ai/api/v1/product-feedback"},"requiredScope":"any","mode":"sync","description":"Report a bug, a clearly wrong result or an idea to the Data Reaktor team (any key; 20 a day). Not shown to other users."}],"plans":{"currency":"USD","items":[{"id":"free","name":"Free","priceUsd":0,"billing":"free","periodDays":30,"grants":{"targetCompanies":2,"insidePeople":10,"warmPathScores":10,"drafts":5,"draftsPerDay":null,"followups":false,"agentKeys":0},"duringBeta":{"grants":{"targetCompanies":15,"insidePeople":75,"warmPathScores":null,"drafts":null,"draftsPerDay":40,"followups":true,"agentKeys":1},"note":"During the beta, Free accounts get the Job Hunt allowances, including 1 agent key; paid checkout is closed."}},{"id":"search_pass","name":"Search Pass","refundDays":14,"priceUsd":99,"billing":"one_time","periodDays":182,"grants":{"targetCompanies":90,"insidePeople":450,"warmPathScores":null,"drafts":null,"draftsPerDay":40,"followups":true,"agentKeys":1}},{"id":"job_hunt","name":"Job Hunt","pause":"Pause any time: no charge while paused; data kept.","refundDays":14,"priceUsd":29,"billing":"monthly","periodDays":31,"grants":{"targetCompanies":15,"insidePeople":75,"warmPathScores":null,"drafts":null,"draftsPerDay":40,"followups":true,"agentKeys":1}},{"id":"search_pass_ext","name":"Search Pass extension","availableTo":"Search Pass holders; adds 3 months and carries over what is left.","refundDays":14,"priceUsd":29,"billing":"one_time","periodDays":91,"grants":{"targetCompanies":45,"insidePeople":225,"warmPathScores":null,"drafts":null,"draftsPerDay":40,"followups":true,"agentKeys":1}}],"purchase":"https://www.datareaktor.ai/pricing","purchaseNote":"Plans are bought by the user in the web app; agent keys spend the plan, they do not buy it. Checkout accepts promotion codes, and a friend who signs up through the user's invite link (get_referral) gets a discount on their first paid plan (20% by default).","betaModeNote":"Beta mode is ON: paid checkout is disabled; the Free plan is available."},"rateLimits":{"apiKey":{"perMinute":60,"scope":"per API key"},"draftsPerDay":40,"headers":["X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Reset"],"resetFormat":"ISO 8601 UTC timestamp","retryAfter":"seconds, on 429"},"legacyApi":{"status":"supported for existing keys","docs":"https://www.datareaktor.ai/legacy-b2b/AGENTS.md","capabilities":"https://www.datareaktor.ai/api/v1/capabilities"},"contact":{"support":"support@datareaktor.ai","docs":"https://www.datareaktor.ai/api/v1/openapi.json","humanDocs":"https://www.datareaktor.ai/AGENTS.md"}}