{"openapi":"3.1.0","info":{"title":"CRM Data Intelligence API","version":"1.0.0","description":"Normalize CRM exports, explain duplicate matches, and suggest cleanup steps from the records and facts supplied in the request. Paid with x402 exact USDC on Base. No account is required.","contact":{"email":"support@brainiac.software"},"x-guidance":"BRAINIAC.software is a pay-per-call API for software agents. No account or API key is required.\nPayment uses the x402 protocol with exact USDC on Base (chain id 8453). Each POST operation has a fixed USD price.\nHow to call an operation:\n1. POST a JSON body matching the operation's requestBody schema to the operation path. Include an Idempotency-Key header (64 hex characters, 32 random bytes).\n2. If you have not paid, the server responds 402 with payment requirements in the body. Pay the exact amount to the payTo address on Base.\n3. Retry the identical request with the same Idempotency-Key and add a payment-signature header containing the x402 payment payload. On success (200) the operation result is returned.\n4. Reuse the same Idempotency-Key only for retries of the same operation and request body; it will not be charged twice.\nAll outputs are compliance prechecks, drafts, or data lookups for human review. They are not official determinations, legal advice, identity confirmation, or certified filings. Verify time-sensitive or official data with the cited source before acting."},"servers":[{"url":"https://www.brainiac.software"}],"paths":{"/api/v1/crm-intelligence/contact-normalize":{"post":{"operationId":"normalize_crm_contacts","summary":"Normalize CRM contacts","description":"Normalize names, emails, phone numbers, company names, and addresses from a CSV or JSON contact export. Original values stay beside the normalized values.","tags":["crm-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"contacts":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"firstName":{"type":"string","minLength":1,"maxLength":80},"lastName":{"type":"string","minLength":1,"maxLength":80},"fullName":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","minLength":1,"maxLength":254},"phone":{"type":"string","minLength":1,"maxLength":40},"company":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":120},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false}},"csv":{"type":"string","minLength":1,"maxLength":200000},"json":{"type":"string","minLength":1,"maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/csv","application/json","text/plain"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000}},"required":["mediaType","fileBase64"],"additionalProperties":false}},"additionalProperties":false},"example":{"csv":"first_name,last_name,email,phone,company,street,notes\nAda,Lovelace,Ada@Analytical.example,\"(555) 010-1234\",Analytical Engines Inc.,1 King St,skip\n"}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"crmModified":{"type":"boolean"},"detailsInvented":{"type":"boolean"},"status":{"type":"string"},"recordCount":{"type":"number"},"contacts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"row":{"type":"number"},"nameComposed":{"type":"boolean"},"original":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}},"additionalProperties":true},"normalized":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}},"additionalProperties":true},"emailStatus":{"type":"string"},"phoneDigits":{"type":"string"}},"additionalProperties":true}},"issues":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"code":{"type":"string"},"recordId":{"type":"string"},"field":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"checkedAt":"2026-11-03T11:00:00.000Z","crmModified":false,"detailsInvented":false,"status":"normalized","recordCount":1,"contacts":[{"id":"row:1","row":1,"nameComposed":true,"original":{"firstName":"Ada","lastName":"Lovelace","fullName":"","email":"Ada@Analytical.example","phone":"(555) 010-1234","company":"Analytical Engines Inc.","title":"","street":"1 King St","city":"","region":"","postalCode":"","country":""},"normalized":{"firstName":"Ada","lastName":"Lovelace","fullName":"Ada Lovelace","email":"ada@analytical.example","phone":"5550101234","company":"Analytical Engines Inc.","title":"","street":"1 King Street","city":"","region":"","postalCode":"","country":""},"emailStatus":"valid","phoneDigits":"5550101234"}],"issues":[{"kind":"ignored","code":"unknown_column","recordId":"","field":"notes","detail":"The column notes is not a supported CRM field and was ignored."}],"limitations":["No CRM system was contacted or changed.","Contact details, company attributes, and relationships are not invented.","Enrichment copies only caller-supplied facts into empty fields.","A fuzzy match is a suggestion with a confidence level, not a completed merge.","Records with different email addresses are not treated as the same person."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]}}},"/api/v1/crm-intelligence/company-normalize":{"post":{"operationId":"normalize_crm_companies","summary":"Normalize CRM companies","description":"Normalize company names, domains, phone numbers, and addresses from a CSV or JSON company export. A trailing legal suffix stays in the name and is used only as a match key.","tags":["crm-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"companies":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"name":{"type":"string","minLength":1,"maxLength":200},"domain":{"type":"string","minLength":1,"maxLength":200},"phone":{"type":"string","minLength":1,"maxLength":40},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80},"industry":{"type":"string","minLength":1,"maxLength":120}},"additionalProperties":false}},"csv":{"type":"string","minLength":1,"maxLength":200000},"json":{"type":"string","minLength":1,"maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/csv","application/json","text/plain"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000}},"required":["mediaType","fileBase64"],"additionalProperties":false}},"additionalProperties":false},"example":{"csv":"name,website,industry\nAnalytical Engines Inc.,https://www.Analytical.example,Software\n"}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"crmModified":{"type":"boolean"},"detailsInvented":{"type":"boolean"},"status":{"type":"string"},"recordCount":{"type":"number"},"companies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"row":{"type":"number"},"original":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"phone":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"}},"additionalProperties":true},"normalized":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"phone":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"}},"additionalProperties":true},"phoneDigits":{"type":"string"}},"additionalProperties":true}},"issues":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"checkedAt":"2026-11-03T11:00:00.000Z","crmModified":false,"detailsInvented":false,"status":"normalized","recordCount":1,"companies":[{"id":"row:1","row":1,"original":{"name":"Analytical Engines Inc.","domain":"https://www.Analytical.example","phone":"","street":"","city":"","region":"","postalCode":"","country":"","industry":"Software"},"normalized":{"name":"Analytical Engines Inc.","domain":"analytical.example","phone":"","street":"","city":"","region":"","postalCode":"","country":"","industry":"Software"},"phoneDigits":""}],"issues":[],"limitations":["No CRM system was contacted or changed.","Contact details, company attributes, and relationships are not invented.","Enrichment copies only caller-supplied facts into empty fields.","A fuzzy match is a suggestion with a confidence level, not a completed merge.","Records with different email addresses are not treated as the same person."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]}}},"/api/v1/crm-intelligence/duplicate-contact-detect":{"post":{"operationId":"detect_duplicate_contacts","summary":"Detect duplicate contacts","description":"Find duplicate contacts with explainable rules and confidence levels. Different email addresses are not treated as the same person. Safe merge suggestions copy only empty fields and do not change a CRM.","tags":["crm-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"contacts":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"firstName":{"type":"string","minLength":1,"maxLength":80},"lastName":{"type":"string","minLength":1,"maxLength":80},"fullName":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","minLength":1,"maxLength":254},"phone":{"type":"string","minLength":1,"maxLength":40},"company":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":120},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false}},"csv":{"type":"string","minLength":1,"maxLength":200000},"json":{"type":"string","minLength":1,"maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/csv","application/json","text/plain"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000}},"required":["mediaType","fileBase64"],"additionalProperties":false}},"additionalProperties":false},"example":{"contacts":[{"id":"c1","firstName":"Ada","lastName":"Lovelace","email":"Ada@Analytical.example","phone":"(555) 010-1234","company":"Analytical Engines Inc.","street":"1 King St"},{"id":"c2","fullName":"Ada Lovelace","email":"ada@analytical.example","phone":"5550101234","company":"Analytical Engines","street":"1 King Street","title":"Engineer"},{"id":"c3","firstName":"Grace","lastName":"Hopper","email":"grace@navy.example","company":"Navy"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"crmModified":{"type":"boolean"},"detailsInvented":{"type":"boolean"},"status":{"type":"string"},"recordCount":{"type":"number"},"pairs":{"type":"array","items":{"type":"object","properties":{"leftId":{"type":"string"},"leftRow":{"type":"number"},"rightId":{"type":"string"},"rightRow":{"type":"number"},"rule":{"type":"string"},"confidence":{"type":"number"},"level":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"merges":{"type":"array","items":{"type":"object","properties":{"survivorId":{"type":"string"},"duplicateId":{"type":"string"},"safe":{"type":"boolean"},"rule":{"type":"string"},"confidence":{"type":"number"},"copies":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{"type":"string"}},"additionalProperties":true}},"conflicts":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"survivor":{"type":"string"},"duplicate":{"type":"string"}},"additionalProperties":true}}},"additionalProperties":true}},"issues":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"checkedAt":"2026-11-03T11:00:00.000Z","crmModified":false,"detailsInvented":false,"status":"checked","recordCount":3,"pairs":[{"leftId":"c1","leftRow":1,"rightId":"c2","rightRow":2,"rule":"email_exact","confidence":0.99,"level":"confirmed","detail":"Both emails normalize to ada@analytical.example."}],"merges":[{"survivorId":"c1","duplicateId":"c2","safe":true,"rule":"email_exact","confidence":0.99,"copies":[{"field":"title","value":"Engineer"}],"conflicts":[{"field":"company","survivor":"Analytical Engines Inc.","duplicate":"Analytical Engines"}]}],"issues":[],"limitations":["No CRM system was contacted or changed.","Contact details, company attributes, and relationships are not invented.","Enrichment copies only caller-supplied facts into empty fields.","A fuzzy match is a suggestion with a confidence level, not a completed merge.","Records with different email addresses are not treated as the same person."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/api/v1/crm-intelligence/duplicate-company-detect":{"post":{"operationId":"detect_duplicate_companies","summary":"Detect duplicate companies","description":"Find duplicate companies by a normalized domain or company-name key, and flag fuzzy name matches with a confidence level. Different domains are not merged. Suggestions do not change a CRM.","tags":["crm-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"companies":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"name":{"type":"string","minLength":1,"maxLength":200},"domain":{"type":"string","minLength":1,"maxLength":200},"phone":{"type":"string","minLength":1,"maxLength":40},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80},"industry":{"type":"string","minLength":1,"maxLength":120}},"additionalProperties":false}},"csv":{"type":"string","minLength":1,"maxLength":200000},"json":{"type":"string","minLength":1,"maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/csv","application/json","text/plain"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000}},"required":["mediaType","fileBase64"],"additionalProperties":false}},"additionalProperties":false},"example":{"companies":[{"id":"co1","name":"Analytical Engines Inc.","domain":"https://www.Analytical.example","street":"1 King St"},{"id":"co2","name":"Analytical Engines","domain":"analytical.example","industry":"Software"},{"id":"co3","name":"Analytical Engine","domain":"other.example"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"crmModified":{"type":"boolean"},"detailsInvented":{"type":"boolean"},"status":{"type":"string"},"recordCount":{"type":"number"},"pairs":{"type":"array","items":{"type":"object","properties":{"leftId":{"type":"string"},"leftRow":{"type":"number"},"rightId":{"type":"string"},"rightRow":{"type":"number"},"rule":{"type":"string"},"confidence":{"type":"number"},"level":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"merges":{"type":"array","items":{"type":"object","properties":{"survivorId":{"type":"string"},"duplicateId":{"type":"string"},"safe":{"type":"boolean"},"rule":{"type":"string"},"confidence":{"type":"number"},"copies":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{"type":"string"}},"additionalProperties":true}},"conflicts":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"survivor":{"type":"string"},"duplicate":{"type":"string"}},"additionalProperties":true}}},"additionalProperties":true}},"issues":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"checkedAt":"2026-11-03T11:00:00.000Z","crmModified":false,"detailsInvented":false,"status":"checked","recordCount":3,"pairs":[{"leftId":"co1","leftRow":1,"rightId":"co2","rightRow":2,"rule":"domain_exact","confidence":0.99,"level":"confirmed","detail":"Both domains normalize to analytical.example."}],"merges":[{"survivorId":"co1","duplicateId":"co2","safe":true,"rule":"domain_exact","confidence":0.99,"copies":[{"field":"industry","value":"Software"}],"conflicts":[{"field":"name","survivor":"Analytical Engines Inc.","duplicate":"Analytical Engines"}]}],"issues":[],"limitations":["No CRM system was contacted or changed.","Contact details, company attributes, and relationships are not invented.","Enrichment copies only caller-supplied facts into empty fields.","A fuzzy match is a suggestion with a confidence level, not a completed merge.","Records with different email addresses are not treated as the same person."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/api/v1/crm-intelligence/record-enrichment-from-input":{"post":{"operationId":"enrich_crm_records_from_input","summary":"Enrich CRM records from input","description":"Copy caller-supplied facts into empty contact fields. A fact never overwrites a value that is already present, and no contact detail is invented.","tags":["crm-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"contacts":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"firstName":{"type":"string","minLength":1,"maxLength":80},"lastName":{"type":"string","minLength":1,"maxLength":80},"fullName":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","minLength":1,"maxLength":254},"phone":{"type":"string","minLength":1,"maxLength":40},"company":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":120},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false}},"csv":{"type":"string","minLength":1,"maxLength":200000},"json":{"type":"string","minLength":1,"maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/csv","application/json","text/plain"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000}},"required":["mediaType","fileBase64"],"additionalProperties":false},"facts":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"match":{"type":"string","enum":["email","domain","company"]},"value":{"type":"string","minLength":1,"maxLength":254},"phone":{"type":"string","minLength":1,"maxLength":40},"title":{"type":"string","minLength":1,"maxLength":120},"company":{"type":"string","minLength":1,"maxLength":200},"industry":{"type":"string","minLength":1,"maxLength":120},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80},"domain":{"type":"string","minLength":1,"maxLength":200}},"required":["match","value"],"additionalProperties":false}}},"additionalProperties":false},"example":{"contacts":[{"id":"c1","firstName":"Ada","lastName":"Lovelace","email":"ada@analytical.example","phone":"(555) 010-1234","company":"Analytical Engines"},{"id":"c3","firstName":"Grace","lastName":"Hopper","email":"grace@navy.example","company":"Navy"}],"facts":[{"match":"email","value":"ada@analytical.example","phone":"+44 20 7946 0991","title":"Mathematician"},{"match":"email","value":"grace@navy.example","phone":"+1 555 010 9999","title":"Rear Admiral"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"crmModified":{"type":"boolean"},"detailsInvented":{"type":"boolean"},"status":{"type":"string"},"recordCount":{"type":"number"},"contacts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"row":{"type":"number"},"nameComposed":{"type":"boolean"},"original":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}},"additionalProperties":true},"normalized":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}},"additionalProperties":true},"emailStatus":{"type":"string"},"phoneDigits":{"type":"string"}},"additionalProperties":true}},"suggestions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"added":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":true}},"conflicts":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"current":{"type":"string"},"supplied":{"type":"string"}},"additionalProperties":true}}},"additionalProperties":true}},"issues":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"checkedAt":"2026-11-03T11:00:00.000Z","crmModified":false,"detailsInvented":false,"status":"suggested","recordCount":2,"contacts":[{"id":"c1","row":1,"nameComposed":true,"original":{"firstName":"Ada","lastName":"Lovelace","fullName":"","email":"ada@analytical.example","phone":"(555) 010-1234","company":"Analytical Engines","title":"","street":"","city":"","region":"","postalCode":"","country":""},"normalized":{"firstName":"Ada","lastName":"Lovelace","fullName":"Ada Lovelace","email":"ada@analytical.example","phone":"5550101234","company":"Analytical Engines","title":"","street":"","city":"","region":"","postalCode":"","country":""},"emailStatus":"valid","phoneDigits":"5550101234"},{"id":"c3","row":2,"nameComposed":true,"original":{"firstName":"Grace","lastName":"Hopper","fullName":"","email":"grace@navy.example","phone":"","company":"Navy","title":"","street":"","city":"","region":"","postalCode":"","country":""},"normalized":{"firstName":"Grace","lastName":"Hopper","fullName":"Grace Hopper","email":"grace@navy.example","phone":"","company":"Navy","title":"","street":"","city":"","region":"","postalCode":"","country":""},"emailStatus":"valid","phoneDigits":""}],"suggestions":[{"id":"c1","added":[{"field":"title","value":"Mathematician","source":"caller_fact"}],"conflicts":[{"field":"phone","current":"5550101234","supplied":"+442079460991"}]},{"id":"c3","added":[{"field":"phone","value":"+15550109999","source":"caller_fact"},{"field":"title","value":"Rear Admiral","source":"caller_fact"}],"conflicts":[]}],"issues":[],"limitations":["No CRM system was contacted or changed.","Contact details, company attributes, and relationships are not invented.","Enrichment copies only caller-supplied facts into empty fields.","A fuzzy match is a suggestion with a confidence level, not a completed merge.","Records with different email addresses are not treated as the same person."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.04"},"protocols":[{"x402":{}}]}}},"/api/v1/crm-intelligence/data-quality-audit":{"post":{"operationId":"audit_crm_data_quality","summary":"Audit CRM data quality","description":"Report missing names, invalid emails, short phone numbers, missing companies, and duplicate records. A company is not inferred from an email domain.","tags":["crm-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"contacts":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"firstName":{"type":"string","minLength":1,"maxLength":80},"lastName":{"type":"string","minLength":1,"maxLength":80},"fullName":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","minLength":1,"maxLength":254},"phone":{"type":"string","minLength":1,"maxLength":40},"company":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":120},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false}},"csv":{"type":"string","minLength":1,"maxLength":200000},"json":{"type":"string","minLength":1,"maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/csv","application/json","text/plain"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000}},"required":["mediaType","fileBase64"],"additionalProperties":false},"companies":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"name":{"type":"string","minLength":1,"maxLength":200},"domain":{"type":"string","minLength":1,"maxLength":200},"phone":{"type":"string","minLength":1,"maxLength":40},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80},"industry":{"type":"string","minLength":1,"maxLength":120}},"additionalProperties":false}}},"additionalProperties":false},"example":{"contacts":[{"id":"c1","firstName":"Ada","lastName":"Lovelace","email":"ada@analytical.example","company":"Analytical Engines"},{"id":"c2","email":"ada@analytical.example","company":"Analytical Engines"},{"id":"c4","firstName":"No","lastName":"Mail","email":"not-an-email","phone":"123"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"crmModified":{"type":"boolean"},"detailsInvented":{"type":"boolean"},"status":{"type":"string"},"contactCount":{"type":"number"},"companyCount":{"type":"number"},"duplicateCount":{"type":"number"},"issues":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"code":{"type":"string"},"recordId":{"type":"string"},"field":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"checkedAt":"2026-11-03T11:00:00.000Z","crmModified":false,"detailsInvented":false,"status":"checked","contactCount":3,"companyCount":0,"duplicateCount":1,"issues":[{"kind":"missing","code":"missing","recordId":"c2","field":"fullName","detail":"The contact has no name."},{"kind":"conflict","code":"invalid_email","recordId":"c4","field":"email","detail":"The email could not be normalized. It was not corrected."},{"kind":"conflict","code":"phone_short","recordId":"c4","field":"phone","detail":"The phone number has fewer than 7 digits, so it was not used for matching."},{"kind":"missing","code":"missing","recordId":"c4","field":"company","detail":"The contact has no company. A company was not inferred from the email domain."},{"kind":"duplicate","code":"email_exact","recordId":"c1","field":"c2","detail":"Both emails normalize to ada@analytical.example."}],"limitations":["No CRM system was contacted or changed.","Contact details, company attributes, and relationships are not invented.","Enrichment copies only caller-supplied facts into empty fields.","A fuzzy match is a suggestion with a confidence level, not a completed merge.","Records with different email addresses are not treated as the same person."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.04"},"protocols":[{"x402":{}}]}}},"/api/v1/crm-intelligence/contact-relationship-match":{"post":{"operationId":"match_contacts_to_companies","summary":"Match contacts to companies","description":"Link each contact to a company that was supplied in the same request, by company-name key or email domain. A company that was not supplied is not created.","tags":["crm-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"contacts":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"firstName":{"type":"string","minLength":1,"maxLength":80},"lastName":{"type":"string","minLength":1,"maxLength":80},"fullName":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","minLength":1,"maxLength":254},"phone":{"type":"string","minLength":1,"maxLength":40},"company":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":120},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false}},"companies":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"name":{"type":"string","minLength":1,"maxLength":200},"domain":{"type":"string","minLength":1,"maxLength":200},"phone":{"type":"string","minLength":1,"maxLength":40},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80},"industry":{"type":"string","minLength":1,"maxLength":120}},"additionalProperties":false}},"csv":{"type":"string","minLength":1,"maxLength":200000},"json":{"type":"string","minLength":1,"maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/csv","application/json","text/plain"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000}},"required":["mediaType","fileBase64"],"additionalProperties":false}},"additionalProperties":false},"example":{"contacts":[{"id":"c1","firstName":"Ada","lastName":"Lovelace","email":"ada@analytical.example","company":"Analytical Engines Inc."},{"id":"c3","firstName":"Grace","lastName":"Hopper","email":"grace@navy.example","company":"Navy"},{"id":"c5","fullName":"Charles Babbage","company":"Other Engines"}],"companies":[{"id":"co1","name":"Analytical Engines","domain":"analytical.example"},{"id":"co2","name":"Other Engines","domain":"other.example"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"crmModified":{"type":"boolean"},"detailsInvented":{"type":"boolean"},"status":{"type":"string"},"relationships":{"type":"array","items":{"type":"object","properties":{"contactId":{"type":"string"},"companyId":{"type":"string"},"rule":{"type":"string"},"confidence":{"type":"number"},"level":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"issues":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"checkedAt":"2026-11-03T11:00:00.000Z","crmModified":false,"detailsInvented":false,"status":"matched","relationships":[{"contactId":"c1","companyId":"co1","rule":"email_domain","confidence":0.95,"level":"confirmed","detail":"The email domain analytical.example matches the supplied company domain."},{"contactId":"c3","companyId":"","rule":"","confidence":0,"level":"unmatched","detail":"No supplied company matches the contact name or email domain. A company was not created."},{"contactId":"c5","companyId":"co2","rule":"company_name","confidence":0.9,"level":"confirmed","detail":"The contact company key matches the supplied company name key."}],"issues":[],"limitations":["No CRM system was contacted or changed.","Contact details, company attributes, and relationships are not invented.","Enrichment copies only caller-supplied facts into empty fields.","A fuzzy match is a suggestion with a confidence level, not a completed merge.","Records with different email addresses are not treated as the same person."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/api/v1/crm-intelligence/database-cleanup-report":{"post":{"operationId":"report_a_crm_cleanup","summary":"Report a CRM cleanup","description":"Combine normalized records, duplicate pairs, safe merge suggestions, caller-fact enrichment, relationship matches, and quality issues. No external CRM is changed.","tags":["crm-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"contacts":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"firstName":{"type":"string","minLength":1,"maxLength":80},"lastName":{"type":"string","minLength":1,"maxLength":80},"fullName":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","minLength":1,"maxLength":254},"phone":{"type":"string","minLength":1,"maxLength":40},"company":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":120},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false}},"csv":{"type":"string","minLength":1,"maxLength":200000},"json":{"type":"string","minLength":1,"maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/csv","application/json","text/plain"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000}},"required":["mediaType","fileBase64"],"additionalProperties":false},"companies":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"name":{"type":"string","minLength":1,"maxLength":200},"domain":{"type":"string","minLength":1,"maxLength":200},"phone":{"type":"string","minLength":1,"maxLength":40},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80},"industry":{"type":"string","minLength":1,"maxLength":120}},"additionalProperties":false}},"facts":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"match":{"type":"string","enum":["email","domain","company"]},"value":{"type":"string","minLength":1,"maxLength":254},"phone":{"type":"string","minLength":1,"maxLength":40},"title":{"type":"string","minLength":1,"maxLength":120},"company":{"type":"string","minLength":1,"maxLength":200},"industry":{"type":"string","minLength":1,"maxLength":120},"street":{"type":"string","minLength":1,"maxLength":200},"city":{"type":"string","minLength":1,"maxLength":80},"region":{"type":"string","minLength":1,"maxLength":80},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string","minLength":1,"maxLength":80},"domain":{"type":"string","minLength":1,"maxLength":200}},"required":["match","value"],"additionalProperties":false}}},"additionalProperties":false},"example":{"json":"{\"contacts\":[{\"id\":\"c1\",\"firstName\":\"Ada\",\"lastName\":\"Lovelace\",\"email\":\"Ada@Analytical.example\",\"phone\":\"(555) 010-1234\",\"company\":\"Analytical Engines Inc.\",\"street\":\"1 King St\"},{\"id\":\"c2\",\"fullName\":\"Ada Lovelace\",\"email\":\"ada@analytical.example\",\"phone\":\"5550101234\",\"company\":\"Analytical Engines\",\"street\":\"1 King Street\",\"title\":\"Engineer\"},{\"id\":\"c3\",\"firstName\":\"Grace\",\"lastName\":\"Hopper\",\"email\":\"grace@navy.example\",\"company\":\"Navy\"}],\"companies\":[{\"id\":\"co1\",\"name\":\"Analytical Engines Inc.\",\"domain\":\"https://www.Analytical.example\",\"street\":\"1 King St\"},{\"id\":\"co2\",\"name\":\"Analytical Engines\",\"domain\":\"analytical.example\",\"industry\":\"Software\"}]}","facts":[{"match":"email","value":"ada@analytical.example","phone":"+44 20 7946 0991","title":"Mathematician"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"crmModified":{"type":"boolean"},"detailsInvented":{"type":"boolean"},"status":{"type":"string"},"contactCount":{"type":"number"},"companyCount":{"type":"number"},"contacts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"row":{"type":"number"},"nameComposed":{"type":"boolean"},"original":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}},"additionalProperties":true},"normalized":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"fullName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}},"additionalProperties":true},"emailStatus":{"type":"string"},"phoneDigits":{"type":"string"}},"additionalProperties":true}},"companies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"row":{"type":"number"},"original":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"phone":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"}},"additionalProperties":true},"normalized":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"phone":{"type":"string"},"street":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"},"industry":{"type":"string"}},"additionalProperties":true},"phoneDigits":{"type":"string"}},"additionalProperties":true}},"contactPairs":{"type":"array","items":{"type":"object","properties":{"leftId":{"type":"string"},"leftRow":{"type":"number"},"rightId":{"type":"string"},"rightRow":{"type":"number"},"rule":{"type":"string"},"confidence":{"type":"number"},"level":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"companyPairs":{"type":"array","items":{"type":"object","properties":{"leftId":{"type":"string"},"leftRow":{"type":"number"},"rightId":{"type":"string"},"rightRow":{"type":"number"},"rule":{"type":"string"},"confidence":{"type":"number"},"level":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"merges":{"type":"array","items":{"type":"object","properties":{"survivorId":{"type":"string"},"duplicateId":{"type":"string"},"safe":{"type":"boolean"},"rule":{"type":"string"},"confidence":{"type":"number"},"copies":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{"type":"string"}},"additionalProperties":true}},"conflicts":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"survivor":{"type":"string"},"duplicate":{"type":"string"}},"additionalProperties":true}}},"additionalProperties":true}},"suggestions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"added":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{"type":"string"},"source":{"type":"string"}},"additionalProperties":true}},"conflicts":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"current":{"type":"string"},"supplied":{"type":"string"}},"additionalProperties":true}}},"additionalProperties":true}},"relationships":{"type":"array","items":{"type":"object","properties":{"contactId":{"type":"string"},"companyId":{"type":"string"},"rule":{"type":"string"},"confidence":{"type":"number"},"level":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"issues":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"checkedAt":"2026-11-03T11:00:00.000Z","crmModified":false,"detailsInvented":false,"status":"suggested","contactCount":3,"companyCount":2,"contacts":[{"id":"c1","row":1,"nameComposed":true,"original":{"firstName":"Ada","lastName":"Lovelace","fullName":"","email":"Ada@Analytical.example","phone":"(555) 010-1234","company":"Analytical Engines Inc.","title":"","street":"1 King St","city":"","region":"","postalCode":"","country":""},"normalized":{"firstName":"Ada","lastName":"Lovelace","fullName":"Ada Lovelace","email":"ada@analytical.example","phone":"5550101234","company":"Analytical Engines Inc.","title":"","street":"1 King Street","city":"","region":"","postalCode":"","country":""},"emailStatus":"valid","phoneDigits":"5550101234"},{"id":"c2","row":2,"nameComposed":false,"original":{"firstName":"","lastName":"","fullName":"Ada Lovelace","email":"ada@analytical.example","phone":"5550101234","company":"Analytical Engines","title":"Engineer","street":"1 King Street","city":"","region":"","postalCode":"","country":""},"normalized":{"firstName":"","lastName":"","fullName":"Ada Lovelace","email":"ada@analytical.example","phone":"5550101234","company":"Analytical Engines","title":"Engineer","street":"1 King Street","city":"","region":"","postalCode":"","country":""},"emailStatus":"valid","phoneDigits":"5550101234"},{"id":"c3","row":3,"nameComposed":true,"original":{"firstName":"Grace","lastName":"Hopper","fullName":"","email":"grace@navy.example","phone":"","company":"Navy","title":"","street":"","city":"","region":"","postalCode":"","country":""},"normalized":{"firstName":"Grace","lastName":"Hopper","fullName":"Grace Hopper","email":"grace@navy.example","phone":"","company":"Navy","title":"","street":"","city":"","region":"","postalCode":"","country":""},"emailStatus":"valid","phoneDigits":""}],"companies":[{"id":"co1","row":1,"original":{"name":"Analytical Engines Inc.","domain":"https://www.Analytical.example","phone":"","street":"1 King St","city":"","region":"","postalCode":"","country":"","industry":""},"normalized":{"name":"Analytical Engines Inc.","domain":"analytical.example","phone":"","street":"1 King Street","city":"","region":"","postalCode":"","country":"","industry":""},"phoneDigits":""},{"id":"co2","row":2,"original":{"name":"Analytical Engines","domain":"analytical.example","phone":"","street":"","city":"","region":"","postalCode":"","country":"","industry":"Software"},"normalized":{"name":"Analytical Engines","domain":"analytical.example","phone":"","street":"","city":"","region":"","postalCode":"","country":"","industry":"Software"},"phoneDigits":""}],"contactPairs":[{"leftId":"c1","leftRow":1,"rightId":"c2","rightRow":2,"rule":"email_exact","confidence":0.99,"level":"confirmed","detail":"Both emails normalize to ada@analytical.example."}],"companyPairs":[{"leftId":"co1","leftRow":1,"rightId":"co2","rightRow":2,"rule":"domain_exact","confidence":0.99,"level":"confirmed","detail":"Both domains normalize to analytical.example."}],"merges":[{"survivorId":"c1","duplicateId":"c2","safe":true,"rule":"email_exact","confidence":0.99,"copies":[{"field":"title","value":"Engineer"}],"conflicts":[{"field":"company","survivor":"Analytical Engines Inc.","duplicate":"Analytical Engines"}]},{"survivorId":"co1","duplicateId":"co2","safe":true,"rule":"domain_exact","confidence":0.99,"copies":[{"field":"industry","value":"Software"}],"conflicts":[{"field":"name","survivor":"Analytical Engines Inc.","duplicate":"Analytical Engines"}]}],"suggestions":[{"id":"c1","added":[{"field":"title","value":"Mathematician","source":"caller_fact"}],"conflicts":[{"field":"phone","current":"5550101234","supplied":"+442079460991"}]},{"id":"c2","added":[],"conflicts":[{"field":"phone","current":"5550101234","supplied":"+442079460991"},{"field":"title","current":"Engineer","supplied":"Mathematician"}]},{"id":"c3","added":[],"conflicts":[]}],"relationships":[{"contactId":"c1","companyId":"co1","rule":"email_domain","confidence":0.95,"level":"confirmed","detail":"The email domain analytical.example matches the supplied company domain."},{"contactId":"c2","companyId":"co1","rule":"email_domain","confidence":0.95,"level":"confirmed","detail":"The email domain analytical.example matches the supplied company domain."},{"contactId":"c3","companyId":"","rule":"","confidence":0,"level":"unmatched","detail":"No supplied company matches the contact name or email domain. A company was not created."}],"issues":[],"limitations":["No CRM system was contacted or changed.","Contact details, company attributes, and relationships are not invented.","Enrichment copies only caller-supplied facts into empty fields.","A fuzzy match is a suggestion with a confidence level, not a completed merge.","Records with different email addresses are not treated as the same person."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.12"},"protocols":[{"x402":{}}]}}}},"components":{"schemas":{"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}