Sales Intelligence — Get & Generate
Get Intelligence
Returns AI-generated intelligence + your personal note.
GET /api/v1/crs/listings/sales-intelligence/{listingId}?userId=agent_123
Response:
{
"listingId": "lst_abc",
"agentPitch": "Perfect for families seeking beachfront luxury. Private pool, included chef, and flexible cancellation.",
"conversionSignals": [
{ "type": "POSITIVE", "icon": "trend_up", "text": "High Conversion Probability" },
{ "type": "POSITIVE", "icon": "price_tag", "text": "15% cheaper than similar villas" },
{ "type": "NEGATIVE", "icon": "warning", "text": "Last 200m rough road" }
],
"salesTips": [
"Highlight the Full kitchen",
"Emphasize free cancellation",
"Distance from an already added property"
],
"bookingStats": {
"bookingsThisMonth": 12,
"lastBookedAgo": "2 days ago"
},
"humanReviewed": false,
"myNote": {
"note": "Swimming pool is very huge, great for kids",
"updatedAt": "2026-04-01T10:00:00Z"
}
}
Auto-Generation
If no intelligence exists or it's stale (older than 7 days), it's generated automatically on this GET call.
If humanReviewed=true, it's never regenerated — returns the human-edited version as-is.
Admin Triggers
Single listing
POST /api/v1/admin/sales-intelligence/generate/{listingId}
Bulk (list of IDs)
POST /api/v1/admin/sales-intelligence/generate/bulk
Content-Type: application/json
["lst_abc", "lst_def", "lst_ghi"]
Response:
{ "generated": 2, "skipped": 1, "failed": 0 }
All active listings
POST /api/v1/admin/sales-intelligence/generate/all
Response:
{ "generated": 145, "skipped": 12, "failed": 3 }
Skipped
Human-reviewed listings are always skipped — AI will never overwrite them.
Set Booking Stats (Manual)
PUT /api/v1/admin/sales-intelligence/{listingId}/booking-stats
{ "bookingsThisMonth": 12, "lastBookedAgo": "2 days ago" }
Independent of AI — never overwritten by generation.