Skip to content

Person language

POST https://api.kingminos.com/v1/person/language

Try it in the console

Can we engage this person in English — and if not, in what language? Outbound sequences, ad targeting and localized campaigns read the answer.

Send a person: email, linkedin_url, or both (top level or under person). You get back:

  • english: whether English works (yes, likely, unconfirmed or unknown);
  • recommended_language: the ISO 639-1 code to engage in;
  • local_language: the strongest non-English language, for localized sequences and ads;
  • languages: every candidate, ranked, with the evidence behind it.

first_name and last_name are match-only. They only reject a profile that belongs to someone else (person_mismatch). A name never infers, scores or steers a language.

person.language answers for API tenant keys (osr_…). It does not stamp Salesforce Contacts or Leads.

Terminal window
curl 'https://api.kingminos.com/v1/person/language' \
-H 'Authorization: Bearer <your-key>' \
-H 'Content-Type: application/json' \
-d '{
"linkedin_url": "https://www.linkedin.com/in/example",
"first_name": "Anna",
"last_name": "Schmidt",
"routing": { "path": "balance" }
}'

You pay for what the vendors return. Misses, vendor errors and unconfigured sources cost 0. Only routing.path is read.

routing.path What it does Max credits
speed One profile read, then one quick language judge (0 credits). No fallback. 1
balance (default) LeadMagic, AI Ark and Findymail in order. Stops once listed languages land. 3
accuracy Every structured source with no early stop, then the language judge. 3

Typical spend on balance: 1 credit for LinkedIn input, 2 for email input. Any other routing.path (including coverage and legacy aliases such as auto and value) returns 400 invalid_routing.

Every path is capped at 10 seconds from the start of the request. A call that was sent to a vendor and then timed out still bills.

Your own keys: vendor keys you store in Vendor keys take precedence and bill the same credits.

Field Meaning
result.detected false when no language evidence was found at all.
result.english yes: English evidence at medium or high. likely: only low English evidence. unconfirmed: other languages found, no English. unknown: nothing detected. It is never “no”.
result.recommended_language ISO 639-1 code. English whenever english is yes, otherwise the strongest other language. Medium or high only.
result.local_language Strongest non-English language. Medium or high only.
result.languages Every candidate, ranked: code, name, confidence, level, evidence[]. Low guesses appear only here.
result.flags See below.
result.person The matched profile, or null.

Confidence is a heuristic score, not a calibrated probability. Levels: high is 0.75 or more, medium is 0.5 or more, low is under 0.5.

answer.summary reads as the answer, for example English: yes (high). Local language: German (high).

Outcomes:

Result answer.outcome / reason es_decision Credits
A medium or high recommendation hit / exact_one hit what ran
Only low evidence no_decision / ambiguous ambiguous what ran
Nothing found no_decision / zero_hits miss 0
Profile belongs to someone else no_decision / person_mismatch miss 0
Every vendor errored or timed out no_decision / provider_error error 0
No vendor could run no_decision / compliance_blocked, status_down, max_credits_reached or not_configured noop 0

Stamp rule: write recommended_language only on a billed hit when answer.confidence meets your acceptance floor (balance paths expect medium+) and neither conflicting_signals nor unconfirmed_identity is flagged. See GET /v1/recipes/guidance.

Strongest first:

  1. Language use: prose the person wrote on their profile. Headlines and job titles count only for non-English.
  2. Listed languages: the languages listed on the profile.
  3. LinkedIn locale settings.
  4. Location country: location alone never reaches high. Minority and regional languages are never candidates.
  5. Support-only: company languages and the work-email country domain. They add weight to a language that already has evidence and never create one.

Agreement between independent sources adds weight. English prose may make english yes; it never erases local_language. Profile text is used in-process and never returned.

Flag Meaning
weak_signals Every candidate is low.
multilingual_country The location has several official languages (CH, BE, CA, IN, LU, SG, ZA…).
conflicting_signals Two equally strong languages from disjoint evidence. Do not stamp.
unconfirmed_identity You sent a name but the profile carries none. Do not stamp.

Answers are cached for 30 days, per path. A repeat call replays with usage.cached: true at 0 credits and no vendor call. An answer is not cached when a source errored, timed out or was skipped, when compliance is set, or when your own vendor key answered.

To force a fresh run, send one of:

  • skip_cache: true;
  • X-Router-Cache: bypass;
  • Cache-Control: no-cache.

DELETE /v1/subjects/email:<address> or li:<slug> erases cached answers.

400 validation_failed with one of these reasons:

  • email_or_linkedin_required
  • invalid_linkedin_url

Also 400 invalid_routing. Business misses stay HTTP 200.