work_email — Orange Slice capability
Outcome-priced capability. One price for the answer, whichever providers it took. Everything we expose, with prices: https://orangeslice.ai/llms.txt
Finds a work email for a person. Runs a provider waterfall and validates the result, so a returned address has already passed verification. Billed only when an email is found.
Price
$0.05, charged per hit
Billed only when the answer is found. A miss costs nothing.
The price is a property of the outcome, not of the work behind it. Whichever vendor serves this call, and whatever it costs us, the number above is the number quoted before the run and charged after it.
Waterfall
Hops: work_email, peopledatalabs.personEnrich. Tried cheapest first
by the price each hop reserves, stopping at the first answer. A miss on one hop
is free and the next hop runs. The row that comes back
carries foundBy: which hop answered. --no-waterfall runs the first hop only;
--max-cost <usd> stops the route before its reserves would exceed the cap;
--prefer <ref> and --exclude <ref> reorder or drop a hop.
Call it
CLI
orangeslice enrich work_email --linkedin-url https://linkedin.com/in/jane-doe # or piped, one JSON object per line: cat people.ndjson | orangeslice enrich work_email
HTTP
curl -X POST 'https://orangeslice.ai/api/v1/run' \ -H 'Authorization: Bearer $ORANGESLICE_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"capability":"work_email","input":{"company":"<string>","domain":"<string>","firstName":"<string>"}}'
SDK
await services.person.contact.workEmail({ company: "…", domain: "…", firstName: "…" });
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
company | string | No | Company name the person works at |
domain | string | No | Company domain to target the work email at, e.g. stripe.com |
firstName | string | No | Person's first name |
lastName | string | No | Person's last name |
linkedinUrl | string | No | LinkedIn profile URL — the most reliable input when available |
Inputs may also be piped as NDJSON, one JSON object per line.
Output
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "email": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "email_type": { "anyOf": [ { "type": "string", "enum": [ "work", "personal" ] }, { "type": "null" } ] }, "work_emails": { "default": [], "type": "array", "items": { "type": "string" } }, "personal_emails": { "default": [], "type": "array", "items": { "type": "string" } }, "vendor": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "foundBy": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "email", "email_type", "work_emails", "personal_emails" ], "additionalProperties": false }
The field that carries the answer is email. It is
null — or empty — when nothing was found, which is how a miss is told from a
hit without knowing anything else about this entry.
Before you run
- Price it first.
orangeslice enrich work_email --dry-runreturns the exact dollar cost and spends nothing. - Large runs need approval. Above the spend-gate threshold a run exits 7 until it carries a plan token, and only a dry run mints one.
- Scopes: enrich
- Permitted uses: research, outreach, export
Exit codes
0 ok · 2 bad input · 3 auth · 4 not found · 5 provider ·
6 rate limited · 7 spend gate, nothing billed · 8 timeout ·
9 a third-party account needs connecting