{"openapi":"3.1.0","info":{"title":"Deepline GTM API","description":"Pay-per-call access to Deepline GTM tooling: waterfall email discovery across 79+ providers, phone finding, person and company enrichment, decision-maker lookup, and competitor ad intelligence. Waterfalls stop at the first provider that returns a hit. No accounts, no subscriptions — pay per request with x402.","version":"1.0.0","x-guidance":"Email discovery: POST /api/email/work with { \"first_name\", \"last_name\", \"domain\" } finds a verified work email. POST /api/email/from-linkedin with { \"linkedin_url\" } works from a profile URL alone. POST /api/email/personal finds personal emails — pass linkedin_url, or first_name + last_name + company_name. POST /api/email/validate with { \"email\" } checks deliverability. Enrichment: POST /api/person/from-email with { \"email\" } (work email, not webmail) or { \"linkedin_url\" } reverses it into name/title/company/LinkedIn. POST /api/company/enrich with { \"domain\" } (or company_name or linkedin) returns a company profile. POST /api/phone/find with { \"first_name\", \"last_name\" } plus domain/linkedin_url context finds mobile numbers. POST /api/linkedin/find with { \"first_name\", \"last_name\", \"domain\" } resolves a LinkedIn profile URL. POST /api/person/job-change with { \"linkedin_url\", \"current_domain\" } detects job changes. Prospecting: POST /api/contacts/by-role with { \"roles\": [\"VP Engineering\"], \"domain\": \"acme.com\" } finds decision makers; optional \"seniority\" and \"limit\" narrow results. POST /api/ads/search with { \"platform\": \"facebook|google|linkedin\", \"domain\": \"acme.com\" } returns active ads; for { \"platform\": \"tiktok\" } pass \"keyword\" (brand name) instead of domain. Play-backed routes (contacts/by-role, email/work, email/from-linkedin, email/personal, phone/find, linkedin/find, person/job-change) share one Deepline workspace concurrency pool — typically ~5 concurrent plays, each taking ~60–90s. If you receive PLAY_CONCURRENCY_LIMIT (429), wait for Retry-After seconds and cap parallel play calls; you were not charged. GET /api/health is unprotected. See /openapi.json for full request/response schemas."},"servers":[{"url":"https://stable-deepline.dev"}],"tags":[{"name":"Ads"},{"name":"Company"},{"name":"Contacts"},{"name":"Email"},{"name":"Linkedin"},{"name":"Person"},{"name":"Phone"}],"paths":{"/api/company/enrich":{"post":{"operationId":"company_enrich","summary":"Enrich Company — merged 30+ field profile from Apollo, Crustdata, and PeopleDataLabs: revenue, headcount, industry, funding, valuation, tech stack, social profiles, SIC/NAICS codes, HQ address.","tags":["Company"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"description":"Company domain to enrich (for example stripe.com).","type":"string"},"company_name":{"description":"Company name fallback when domain is unavailable.","type":"string"},"linkedin":{"description":"LinkedIn company page id or full company URL.","type":"string"}}}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/email/work":{"post":{"operationId":"email_work","summary":"Find Work Email — waterfall search across 79+ providers (Apollo, Hunter, Prospeo, …) for a verified work email from a name and company domain. Stops at the first provider that returns a hit.","tags":["Email"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.04"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string","minLength":1,"description":"Contact first name."},"last_name":{"type":"string","minLength":1,"description":"Contact last name."},"domain":{"type":"string","minLength":1,"description":"Company domain (for example acme.com)."},"company_name":{"description":"Optional company name hint.","type":"string"},"linkedin_url":{"description":"Optional standard LinkedIn profile URL — enables LinkedIn-native fallback providers.","type":"string"}},"required":["first_name","last_name","domain"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/email/from-linkedin":{"post":{"operationId":"email_from-linkedin","summary":"Email from LinkedIn — waterfall search (Findymail, Prospeo, Lusha, …) that resolves a LinkedIn profile URL into a verified work email.","tags":["Email"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.17"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"linkedin_url":{"type":"string","minLength":1,"description":"Standard LinkedIn profile URL in /in/ format."}},"required":["linkedin_url"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/email/personal":{"post":{"operationId":"email_personal","summary":"Find Personal Email — waterfall search (Dropleads, LeadMagic, PeopleDataLabs) for a personal email address. Best coverage with a LinkedIn URL plus first and last name.","tags":["Email"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string","minLength":1,"description":"Contact first name."},"last_name":{"type":"string","minLength":1,"description":"Contact last name."},"linkedin_url":{"description":"LinkedIn profile URL — improves coverage.","type":"string"},"domain":{"description":"Company domain context.","type":"string"},"company_name":{"description":"Company name context.","type":"string"}},"required":["first_name","last_name"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/email/validate":{"post":{"operationId":"email_validate","summary":"Validate Email — ZeroBounce deliverability check for an email address (valid / catch-all / invalid).","tags":["Email"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","minLength":1,"description":"Email address to validate."},"ip_address":{"description":"Optional signup IP address used by ZeroBounce for enrichment.","type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/person/from-email":{"post":{"operationId":"person_from-email","summary":"Person from Email — reverse an email address into the person behind it: name, title, company, and LinkedIn URL.","tags":["Person"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.12"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"description":"Business/work email address to enrich. Personal webmail domains such as gmail.com are rejected.","type":"string"},"linkedin_url":{"description":"LinkedIn profile URL to enrich.","type":"string"}}}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/person/job-change":{"post":{"operationId":"person_job-change","summary":"Job Change Check — detect whether a contact has changed jobs by comparing their LinkedIn profile against the company domain you have on record.","tags":["Person"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.15"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"linkedin_url":{"type":"string","minLength":1,"description":"LinkedIn profile URL (/in/ format) of the contact to check."},"current_domain":{"description":"Bare domain of the company you have on record — used to detect a change.","type":"string"}},"required":["linkedin_url"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/linkedin/find":{"post":{"operationId":"linkedin_find","summary":"Find LinkedIn Profile — resolve a person into their LinkedIn profile URL from name plus company domain, company name, or email.","tags":["Linkedin"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string","minLength":1,"description":"Contact first name."},"last_name":{"type":"string","minLength":1,"description":"Contact last name."},"domain":{"description":"Company domain context.","type":"string"},"company_name":{"description":"Company name context.","type":"string"},"email":{"description":"Optional known email context.","type":"string"}},"required":["first_name","last_name"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/phone/find":{"post":{"operationId":"phone_find","summary":"Find Mobile Phone — locate a validated mobile number with automatic region-based provider routing. Strongest coverage in US/CA and Western Europe.","tags":["Phone"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.50"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string","minLength":1,"description":"Contact first name."},"last_name":{"type":"string","minLength":1,"description":"Contact last name."},"domain":{"description":"Company domain context.","type":"string"},"email":{"description":"Optional known email context.","type":"string"},"linkedin_url":{"description":"LinkedIn profile URL — improves coverage.","type":"string"}},"required":["first_name","last_name"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/contacts/by-role":{"post":{"operationId":"contacts_by-role","summary":"Find Decision Makers — accumulate contacts at a company matching the given roles (and optional seniority) across Dropleads, Apollo, Icypeas, Prospeo, and Crustdata.","tags":["Contacts"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.25"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"roles":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Primary persona intent for contact lookup, e.g. [\"VP Engineering\", \"Head of Security\"]."},"company_name":{"description":"Company name for human context and provider fallbacks.","type":"string"},"domain":{"description":"Company domain for contact lookup (for example acme.com).","type":"string"},"linkedin_company_url":{"description":"Optional LinkedIn company URL in /company/ format for domain-less lookup.","type":"string"},"seniority":{"description":"Broad seniority intent, e.g. [\"C-Level\", \"VP\", \"Director\", \"Manager\", \"Senior\"].","type":"array","items":{"type":"string"}},"limit":{"description":"Optional result cap per waterfall step (1–100). Use 1 for cheapest lookups.","type":"integer","minimum":1,"maximum":100}},"required":["roles"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}},"/api/ads/search":{"post":{"operationId":"ads_search","summary":"Ad Intelligence — a company's active ads on Facebook, Google, LinkedIn, or TikTok (via Adyntel): creative copy, spend signals, and targeting.","tags":["Ads"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["facebook","google","linkedin","tiktok"],"description":"Ad platform to query for active ads."},"domain":{"description":"Company domain in normalized form (for example company.com, no https:// or www). Required for facebook, google, and linkedin.","type":"string"},"keyword":{"description":"Keyword to search the TikTok ad library. Required for tiktok (brand name works well).","type":"string"},"media_type":{"description":"Optional Google ad format filter (google only).","type":"string","enum":["text","image","video"]},"country_code":{"description":"Optional TikTok country filter (tiktok only): a European country code or \"ALL\". Omit for global results.","type":"string"}},"required":["platform"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Payment Required"}}}}}}