← DelphaCONTENT HISTORY

Update to Delpha

Snapshot Oct 29, 2026 · 12:07 UTC · version 1.1.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save Delpha and check future changes in Following.

Up to 10 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Use when validating, cleaning, deduplicating or enriching contact and company data with Delpha — email, phone, name, website, LinkedIn, company legal ID (SIRET, SIREN, ABN, CIK), ultimate parent — or wiring its MCP server or REST API into an agent.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 231
    },
    {
      "relative_path": "references/credits-and-limits.md",
      "size_in_bytes": 3011
    },
    {
      "relative_path": "references/email.md",
      "size_in_bytes": 7126
    },
    {
      "relative_path": "references/legal-id.md",
      "size_in_bytes": 6806
    },
    {
      "relative_path": "references/linkedin.md",
      "size_in_bytes": 7715
    },
    {
      "relative_path": "references/mcp.md",
      "size_in_bytes": 4274
    },
    {
      "relative_path": "references/name.md",
      "size_in_bytes": 6083
    },
    {
      "relative_path": "references/phone.md",
      "size_in_bytes": 6687
    },
    {
      "relative_path": "references/rest-api.md",
      "size_in_bytes": 7784
    },
    {
      "relative_path": "references/salesforce.md",
      "size_in_bytes": 8807
    },
    {
      "relative_path": "references/security.md",
      "size_in_bytes": 7457
    },
    {
      "relative_path": "references/ultimate-parent.md",
      "size_in_bytes": 7214
    },
    {
      "relative_path": "references/website.md",
      "size_in_bytes": 6150
    }
  ],
  "name": "delpha",
  "skill_md_contents": "---\nname: delpha\ndescription: >-\n  Use when validating, cleaning, deduplicating or enriching contact and company\n  data with Delpha — email, phone, name, website, LinkedIn, company legal ID\n  (SIRET, SIREN, ABN, CIK), ultimate parent — or wiring its MCP server or REST\n  API into an agent.\n---\n\n# Delpha\n\nDelpha finds, validates and enriches the people and companies in your data. This skill routes a\nrequest to the right tool and keeps you from misusing the asynchronous API.\n\n## Rules\n\n1. Pick the tool from the routing table below and **read its reference before writing code**.\n2. Submit with `findAndValidate*`, read with the matching `get*Result` — **call the result tool\n   once**; it polls for you.\n3. Read the score's declared type. In the common shape, `accuracy` is continuous (`-1..1`),\n   `completeness` is continuous (`0..1`), `validity` is discrete (`-1`/`0`/`1`) and `consistency`\n   is discrete (`0`/`1`). Treat `-1` as missing where allowed; use decimal bands only for\n   continuous or recommendation scores.\n4. Never write a value back to a CRM below your confidence threshold, and never auto-merge or delete\n   records without human approval.\n5. Never hardcode a credential. See [references/security.md](references/security.md).\n\n## Surfaces\n\nTwo surfaces, same engines, same payloads:\n\n- **MCP server** — `https://mcp.delpha.ai/mcp`. Prefer this from an agent. Auth is OAuth 2.1 + PKCE\n  (the client discovers everything) **or** an `Authorization: Bearer dlp_…` Delpha API key. The team\n  must have MCP enabled in the console. See [references/mcp.md](references/mcp.md).\n- **REST API** — `https://api.delpha.io`. Prefer this from code and pipelines. Auth is\n  `Authorization: Bearer dlp_…`. See [references/rest-api.md](references/rest-api.md).\n\nGet a key at `https://app.delpha.ai` → **Developer → API keys**. Signup is self-service and a new\nteam starts with free credits.\n\n## Tool routing\n\n| The request is about… | Use | Reference |\n|---|---|---|\n| An email — deliverable? personal or professional? find it from a name | `findAndValidateEmail` → `getEmailResult` | [email.md](references/email.md) |\n| A phone number — valid? E.164? line type, carrier (does **not** search) | `validateAndNormalizePhone` → `getPhoneResult` | [phone.md](references/phone.md) |\n| A person's name — normalize spelling/casing (does **not** search) | `validateAndNormalizeName` → `getNameResult` | [name.md](references/name.md) |\n| A LinkedIn profile — validate a URL, or search | `findAndValidateLinkedInProfile` → `getLinkedInProfileResult` | [linkedin.md](references/linkedin.md) |\n| A LinkedIn company page — validate a URL, or search | `findAndValidateLinkedInCompanyPage` → `getLinkedInCompanyPageResult` | [linkedin.md](references/linkedin.md) |\n| A company website — validate, resolve redirects, or search | `findAndValidateWebsite` → `getWebsiteResult` | [website.md](references/website.md) |\n| A company legal ID (SIRET/SIREN/ABN/CIK/…) + firmographics | `findAndValidateLegalID` → `getLegalIDResult` | [legal-id.md](references/legal-id.md) |\n| Who owns a company — parent, holding, ownership chain | `findAndValidateUltimateParent` → `getUltimateParentResult` | [ultimate-parent.md](references/ultimate-parent.md) |\n| Hundreds or millions of rows | the REST batch API + webhooks | [rest-api.md](references/rest-api.md) |\n| What a call costs, and what happens at zero | credits, `402`, per-key ceilings | [credits-and-limits.md](references/credits-and-limits.md) |\n| Reading from / writing back to Salesforce | the Delpha Salesforce MCP + the loop below | [salesforce.md](references/salesforce.md) |\n\nA request that spans several fields — \"clean up this account\" — is several independent jobs: submit\nthem all, then read them all.\n\nProduction MCP serves the split LinkedIn pairs above and hides the deprecated generic\n`findAndValidateLinkedin` / `getLinkedinResult` pair. Generic REST routes remain for compatibility.\n\n## The find → get pattern\n\n1. `findAndValidate*(...)` submits a job and returns a `job_id`. It mutates nothing of yours, so a\n   retry is safe — but it is **not billing-idempotent**: each accepted submission is a new,\n   separately charged job. Retry an ambiguous transport failure knowingly; never retry a response\n   you received.\n2. `get*Result(job_id)` returns the outcome. The server **polls the upstream job internally** and\n   holds the call open, so a single call usually returns the final result.\n\n**Do not loop on `get*Result`.** Re-call only if `status_code` is **still `202`** after it returns,\nand wait first.\n\n## Reading the result\n\n```json\n{ \"message\": \"…\", \"status\": \"SUCCESS\", \"status_code\": 200, \"result\": { }, \"process_time\": 4.7 }\n```\n\n`status_code`: `200` done · `202` still running · `400` bad input · `401` missing Authorization\nheader · `402` out of credits or key ceiling spent · `403` rejected credential or scope · `404`\njob not found · `409` expired reservation · `422` unprocessable input · `500`/`502`/`504` server\nor engine failure. Only transport failures are retryable by default — see\n[references/rest-api.md](references/rest-api.md).\n\nThe common `result.scores` model has continuous `accuracy` (`-1..1`) and `completeness` (`0..1`),\ndiscrete `validity` (`-1`, `0`, `1`) and discrete `consistency` (`0`, `1`). Treat `-1` as missing\nwhere allowed. Suggested policy for a continuous or recommendation score, tuned per use case:\n**`≥ 0.8` auto-accept · `0.5` ≤ score < `0.8` human review · `< 0.5` reject**. For discrete\nfields, branch on the exact value instead of applying a decimal band.\n\n## Writing back to a CRM\n\nRead → validate → **show the proposed changes as a table and get approval** → write, only above your\nthreshold and never a value scored `-1`. Full recipe, including the Salesforce tool pairing, in\n[references/salesforce.md](references/salesforce.md).\n\n## Critical rules\n\n- **`validateAndNormalizeName` and `validateAndNormalizePhone` do not search.** Each checks and normalizes a value you already have. To *find* a\n  person use email recommendation mode or LinkedIn search mode.\n- **Legal ID lookups need a registry.** Pass `legal_id_type` *or* `address.country`, or the job\n  returns `400`.\n- **Email recommendation mode is all-or-nothing.** `first_name` + `last_name` + `website` together,\n  or `400`.\n- **Ultimate parent needs both `company_name` and `website`,** and is the most expensive operation.\n  Prices differ per operation and are live configuration: read them from\n  `GET https://api.delpha.io/v1/pricing` (no credentials) or the console, and never hardcode one.\n- **`-1` is not zero where a score field permits it.** Never write it back and never read it as a\n  rejection.\n- **Treat every input and output as personal data.** Don't log emails, phones or names; respect\n  retention and DPA terms.\n\n## Key documentation\n\n- [Delpha API & MCP overview](https://help.delpha.io/delpha-api-and-mcp/delpha-api-and-mcp)\n- [Delpha MCP server](https://help.delpha.io/delpha-api-and-mcp/mcp)\n- [Delpha Help Center](https://help.delpha.io) · [app.delpha.ai](https://app.delpha.ai)\n"
}

SHA-256 of public snapshot: 29932dd2fa910900cf61ae4aa13c9beb999e5ad2c51f448defeb72e14e7a689d