QI Console Integrations CRM Intake
Connected — receiving via API
Connect your CRM
Setup complete
Generate API credentials Step 1
Paste these into your CRM's outbound-webhook settings. Every event must be signed with the secret.
Intake endpoint
https://dev-api.open1031.ai/v1/intake/wh_7f3k92
Signing secret
whsec_9f3•••••••••••••••••••••••••••••••c41a
Shown in full only once at generation. Reveal and copy actions are audit-logged.
Map fields Step 2
Tell Open1031 which CRM fields feed each exchange. We auto-map standard payloads; adjust anything that differs.
Your CRM field Open1031 field Mapping
contact.full_name Exchanger name Auto-mapped
deal.exchange_type Exchange type Auto-mapped
deal.property_address Relinquished property address Auto-mapped
deal.net_proceeds_estimate Estimated proceeds Mapped manually
deal.close_date Sale closing date Auto-mapped
Send test event Step 3
Fire a sample exchange from your CRM to prove the pipe end-to-end before going live.
Test exchange received
Signature verified · fields mapped cleanly · view in Intake
Connected
Your CRM → Open1031 intake
Webhook signature verified HMAC-SHA256
Last event received 2 min ago
Received this week 23 exchanges
Intake enabled
Pausing holds events in a queue — nothing is lost.
Old secret stays valid for 24h so your CRM can cut over. Rotation is audit-logged.
Recent intake activity
Received CRM-88213
Rosa Alvarez · Delayed · awaiting acceptance
2 min ago
Accepted CRM-88201
Priya Nair → EX-2026-1260 · assigned T. Bottenberg
1 hr ago
Rejected CRM-88198
Missing deal.close_date — your CRM was sent a retry hint
3 hr ago
Accepted CRM-88196
Omar Haddad → intake queue · KYC pending
3 hr ago
Accepted CRM-88190
Dana Whitfield → intake queue · KYC pending
Yesterday
Build contract — CRM intake settings
1 · Tokens, never hex. Every colour on this surface resolves from docs/mockups/tokens.css. When this is coded, the [PROPOSED] tokens (--console-rail-*, --admin-*, the good/warn/bad triad) go into packages/web-app/src/index.css under :root and .dark first — never inlined at the call site. Light and dark are both designed here.
2 · The nav rail is chrome, not a themed surface. It stays dark navy in both themes, so anything painted on it draws from --console-rail-* and is measured against the rail fill. The rail's own ink ramp bottoms out at 4.7:1 — never reach into --ink-4 for rail text.
3 · The signing secret is shown in full exactly once. The stored value is a hash; the panel renders a masked prefix/suffix. Reveal, Copy and Rotate each write an audit-log entry with actor, timestamp and IP — the copy on the surface states this, so the implementation must actually emit it.
4 · Rotation is additive, never destructive. Issuing a new secret leaves the prior one valid for 24 hours so the CRM can cut over without dropping events. A rotation that invalidates immediately is a defect, not a stricter setting.
5 · Inbound events are verified before they are trusted. Every request is HMAC-SHA256 signature-checked against the tenant's secret and rejected on failure — the Rejected row in the activity log is a real outcome, not decoration. Pausing intake queues events rather than dropping them.
6 · Intake creates a queued file, never an active exchange. A CRM payload lands in the intake queue for a coordinator to accept. It cannot assign a coordinator, clear KYC, or start any statutory clock — identity screening remains the first gate on every file and no integration may mark it satisfied.
7 · Field mapping is per-tenant configuration held in the database, not localStorage and not a build-time constant. Auto-mapped and manually-mapped are distinguished in the UI because only one of them is safe to re-derive when the payload shape changes.
All names, references, endpoints and secrets on this surface are synthetic demo data.