SPH Media β€” Technical Discovery

Prepared by QUICKSALES.AI
Prepared for SPH Media Limited
Purpose Collect the five critical integration inputs required to replace all "TBD" placeholders in the technical proposal with real endpoints, credentials, and signed API contracts
Companion doc Business Discovery (full operational questionnaire)
Date 8 July 2026
Classification Private & Confidential

How to Use This Pack

  1. Assign one SPH owner per section (Commerce, ServiceNow, OneTrust, SMS, MoEngage).
  2. Complete every field marked SPH TO COMPLETE β€” leave blank if unknown and note expected date.
  3. Attach documents where requested (OpenAPI, architecture diagrams, API credentials via secure channel).
  4. Return to: proposals@quicksales.ai β€” Subject: SPH Technical Discovery β€” [Date]
  5. Target: Within 10 business days of contract signing (Week 1 of project).

What QUICKSALES.AI Will Produce After You Return This Pack

Deliverable When Owner
Signed Commerce API Integration Spec (no more TBD endpoints) Week 1 Day 5 QUICKSALES.AI + SPH Commerce
ServiceNow Provider Application configured in SPH UAT Week 2 SPH IT + QUICKSALES.AI
OneTrust consent flow wired to collection point Week 3 SPH Legal + QUICKSALES.AI
SMS fallback adapter implemented Week 2 QUICKSALES.AI
MoEngage Connected Channel config (Option B) Week 20 SPH Marketing + QUICKSALES.AI
Updated proposal Section 11 with your real instance URLs Week 1 Day 7 QUICKSALES.AI

A. Commerce Backend (Highest Priority β€” Blocks All RFP Journeys)

SPH owner: ____ Email: ____ Due: ____

RFP references: postal code verification, CS-123456 case refs, https://sph.sg/updatecc, https://sph.sg/xRfU, vacation suspend/extend, delivery status, payment verify.

A.1 System Identification

Field SPH TO COMPLETE
Commerce system name
Internal system code / project name
Technology stack (e.g. Java, .NET, custom)
Production API base URL https://
UAT / Sandbox API base URL https://
API documentation URL (Swagger/OpenAPI)
OpenAPI/Swagger file attached? Yes / No β€” File name:
Primary integration contact Name / Email

A.2 Authentication

Field SPH TO COMPLETE
Auth method OAuth 2.0 client credentials / API key / mTLS / Other:
Token endpoint (if OAuth)
Scopes required
Credential delivery method Secure vault / 1Password / SPH IAM portal
IP whitelist required for QUICKSALES.AI platform? Yes / No β€” IPs to whitelist:

A.3 Subscriber Identity Model

Field SPH TO COMPLETE
Primary subscriber key subscriber_id format example:
Lookup by WhatsApp MSISDN supported? Yes / No β€” Endpoint:
Lookup by email supported? Yes / No β€” Endpoint:
Multi-title subscription model One account / multiple subscriptions per title
Example test subscriber IDs (5) 1. 2. 3. 4. 5.

A.4 Outbound API Contract β€” SPH Confirms or Corrects Endpoints

QUICKSALES.AI proposes this contract based on RFP journeys. Strike through and correct any row that differs in your system.

# Operation Proposed method + path RFP journey Available? SPH actual endpoint
1 Lookup subscriber by MSISDN GET /api/v1/subscribers/lookup?msisdn={msisdn} All Y / N / Partial
2 Verify postal code (T1 auth) POST /api/v1/subscribers/verify Journey 1, 2 Y / N / Partial
3 Get delivery status GET /api/v1/delivery/{subscription_id}/status Journey 1 Y / N / Partial
4 Request redelivery POST /api/v1/delivery/{subscription_id}/redelivery Journey 1 Y / N / Partial
5 Get delivery options (doorstep fee) GET /api/v1/delivery/{subscription_id}/options Journey 1 Y / N / Partial
6 Create vacation suspension POST /api/v1/subscriptions/{id}/suspension Journey 2 Y / N / Partial
7 Update vacation suspension PATCH /api/v1/subscriptions/{id}/suspension/{ref} Journey 2 Y / N / Partial
8 Get billing / payment status GET /api/v1/billing/{subscriber_id}/status Journey 3 Y / N / Partial
9 Generate secure payment link POST /api/v1/billing/payment-link Journey 3 (sph.sg/xRfU) Y / N / Partial
10 Generate password reset link POST /api/v1/accounts/password-reset Journey 3 Option A Y / N / Partial
11 Verify payment method updated GET /api/v1/billing/{subscriber_id}/payment-method/status Journey 3 Y / N / Partial
12 Send email OTP (T2 auth) POST /api/v1/auth/otp/email Journey 3 Y / N / Partial
13 Validate OTP POST /api/v1/auth/otp/verify Journey 3 Y / N / Partial

A.5 Inbound Webhook Contract β€” Commerce β†’ QUICKSALES.AI (C1 Notifications)

Webhook URL (QUICKSALES.AI provides after sandbox provision): https://api.sph-media.quicksales.ai/v1/webhooks/commerce

Field SPH TO COMPLETE
Can Commerce push webhooks? Yes / No / Needs development
If No, estimated availability
Preferred auth HMAC-SHA256 header / OAuth / mTLS
Shared secret delivery
Retry policy on failure

Event types β€” confirm availability

Event type Required for RFP Commerce can emit? Payload fields available
payment_failed C1 Y / N subscriber_id, msisdn, amount, due_date, payment_update_url
renewal_reminder C1 Y / N subscriber_id, plan_name, renewal_date, amount
pending_payment C1 Y / N subscriber_id, amount, days_overdue
subscription_expiry C1 Y / N subscriber_id, plan_name, expiry_date
payment_confirmed C1 Y / N subscriber_id, amount, receipt_ref
welcome_message C1 Y / N subscriber_id, msisdn

Sample webhook payload (SPH to validate or provide actual sample)

{
  "event_id": "evt_20260708_001",
  "event_type": "payment_failed",
  "timestamp": "2026-07-08T09:00:00+08:00",
  "subscriber": {
    "subscriber_id": "SUB-XXXXXX",
    "msisdn": "6591234567",
    "email": "customer@example.com",
    "title": "Lianhe Zaobao Digital"
  },
  "payload": {
    "amount": 28.90,
    "currency": "SGD",
    "due_date": "2026-07-07",
    "payment_update_url": "https://sph.sg/updatecc"
  }
}

SPH comments / corrections to payload schema:


B. ServiceNow CSM

SPH owner: ____ Email: ____ Due: ____

B.1 Instance Details

Field SPH TO COMPLETE
Production instance URL https://
UAT / Sandbox instance URL https://
ServiceNow release/version e.g. Zurich, Xanadu, Yokohama
CSM module licensed? Yes / No
Agent Workspace licensed? Yes / No
AWA (Advanced Work Assignment) enabled? Yes / No
Existing WhatsApp integration? None / Twilio SN adapter / Cloud API SN adapter / Other
If existing β€” decommission or parallel?

B.2 Virtual Agent API Readiness

Field SPH TO COMPLETE
Plugin com.glide.cs.chatbot installed? Yes / No
VA Bot-to-Bot API tested before? Yes / No
OAuth client for integration β€” can provision? Yes / No
OAuth client ID (UAT) (secure channel)
Preferred auth for VA API OAuth 2.0 / Message Auth static token

B.3 Provider Application (QUICKSALES.AI as Primary Bot)

SPH IT creates in UAT; QUICKSALES.AI assists on call.

Field SPH TO COMPLETE
sys_cs_provider_application β€” Inbound ID assigned
message_auth record name
Outbound webhook URL registered https://api.sph-media.quicksales.ai/v1/webhooks/servicenow
Async outbound configured? Yes / No

B.4 Case & Interaction Tables

Field SPH TO COMPLETE
Case table sn_customerservice_case / Custom:
Interaction table interaction / Custom:
Custom fields for WhatsApp channel Field names:
AWA queue for WhatsApp escalations Queue name / sys_id:
Business hours schedule
SN KB table access for integration user? Yes / No

B.5 ServiceNow Contacts

Role Name Email
ServiceNow admin
CSM operations lead
Integration developer (if separate)

C. OneTrust (Consent β€” E1, E2, E3)

SPH owner: ____ Email: ____ Due: ____

E1: "These information would be kept within OneTrust"

C.1 Tenant

Field SPH TO COMPLETE
Production tenant hostname e.g. privacyportal.onetrust.com / custom:
UAT tenant hostname
OneTrust admin contact Name / Email
API access provisioned for integration? Yes / No

C.2 Collection Points & Purpose IDs

Purpose SPH TO COMPLETE
WhatsApp marketing opt-in purpose GUID
WhatsApp transactional/utility purpose GUID (if separate)
Collection point ID for WhatsApp opt-in at conversation close
Collection point JWT (requestInformation token) β€” UAT (secure channel)
Approved opt-in prompt text (E2)

C.3 API Endpoints Used

Operation OneTrust API SPH confirmed
Create consent receipt (opt-in) POST /request/v1/consentreceipts Y / N
Create identified consent receipt POST /request/v1/consentreceipts/identified Y / N
Check consent status (pre-marketing) GET /api/consent/v2/datasubjects/{id}/purposes Y / N
Revoke consent (STOP keyword) POST /request/v1/consentreceipts (OPT_OUT) Y / N

C.4 Identifier Model

Field SPH TO COMPLETE
Primary identifier for WhatsApp subscribers MSISDN / Email / subscriber_id
Identifier type value for API Phone / Email / Custom:
Marketing frequency cap policy e.g. max 2 per week

D. SMS Gateway (C1 Fallback)

SPH owner: ____ Email: ____ Due: ____

Field SPH TO COMPLETE
Current SMS provider Twilio / Vonage / Singtel / M1 / Wavecell / Infobip / MSG91 / Other:
Existing contract owner at SPH
API base URL
API documentation link
Authentication method API key / OAuth / Other
Sender ID / alphanumeric sender e.g. SPHMedia
Singapore SMS template registration required? Yes / No
Can provision UAT/test credentials? Yes / No β€” By date:
Estimated % subscribers without WhatsApp %

SMS fallback message approval

Notification Approved SMS text (or attach template doc)
payment_failed
renewal_reminder

E. MoEngage (Phase 2 β€” Option B: F1, F2)

SPH owner: ____ Email: ____ Due: ____

Field SPH TO COMPLETE
MoEngage deployed? Yes / No / Planned
Workspace / App ID
Data center region US / EU / India / Other
UAT workspace available? Yes / No
MoEngage admin contact Name / Email
Can create Connected App for external WhatsApp channel? Yes / No
Preferred campaign trigger method Webhook / S2S API / CSV upload
Planned Phase 2 go-live
Target consented audience size

MoEngage ↔ QUICKSALES.AI webhook (we provide URL in UAT)

Field SPH TO COMPLETE
Campaign webhook URL https://api.sph-media.quicksales.ai/v1/webhooks/moengage
Auth method agreed HMAC shared secret / API key
Delivery status callback URL (MoEngage tracking URL) (from MoEngage dashboard)

F. DNC Registry (F3 β€” Phase 2)

SPH owner: ____ Email: ____ Due: ____

Field SPH TO COMPLETE
Current DNC scrub process PDPC API / Internal batch / Third-party vendor
DNC vendor name (if third-party)
API or batch file format
Scrub frequency for campaigns Real-time / Daily batch
DNC integration contact Name / Email

G. Meta WABA & Policy Readiness

SPH owner: _______________ Email: _______________ Due: _______

Confirm current WhatsApp Business Account status so we can assess blocking risk before go-live. See proposal Section 14.

Field SPH TO COMPLETE
Meta Business Manager ID
WABA ID (WhatsApp Business Account)
Phone number(s) to use for SPH support +65 …
Business verification status Verified / Pending / Not started
Current quality rating (if known) GREEN / YELLOW / RED / Unknown
Current messaging tier / daily limit
Any past restrictions or number blocks? Yes β€” details: / No
Existing approved templates (count + categories) Utility: __ / Marketing: __ / Auth: __
Is this number currently used for other channels? Yes β€” which: / No β€” new number
Meta Business admin contact for WABA access Name / Email

H. Integration Sign-Off

Section SPH completed SPH signatory Date
A. Commerce ☐
B. ServiceNow ☐
C. OneTrust ☐
D. SMS ☐
E. MoEngage ☐
F. DNC ☐
G. Meta WABA ☐

Return completed pack to: proposals@quicksales.ai


QUICKSALES.AI will schedule a 2-hour Integration Contract Workshop within 48 hours of receiving Sections A + B to walk through endpoint mapping live with SPH technical leads.