Scam Search

POST/v1/scam-search

Search Malaysian scam databases for phone numbers, bank accounts, and company names. Results are aggregated from three sources: PDRM (Semakmule), ScamCheck.my, and the Securities Commission Malaysia Investor Alert List.

Plan requirement: Scam search requires a Pro plan or higher.

Request

Send as application/json.

ParameterTypeRequiredDescription
typestringYesSearch type: phone, bank_account, or company
querystringYesThe value to search for (e.g. phone number, bank account number, or company name)

Search types

TypeSourcesDescription
phonePDRM, ScamCheck.myMalaysian phone number (with or without country code)
bank_accountPDRMBank account number
companyPDRM, SC MalaysiaCompany or entity name

Data sources

PDRM Semakmule

Royal Malaysia Police commercial crime database. Supports phone, bank account, and company queries.

ScamCheck.my

Community-sourced caller ID and scam phone number database. Phone queries only.

Securities Commission Malaysia

SC Investor Alert List for unauthorized schemes and entities. Company queries only.

Examples

curl -X POST https://api.dokai.dev/v1/scam-search \
  -H "Authorization: Bearer dk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"type": "phone", "query": "0123456789"}'

Response

Returns 200 OK with an array of results from each data source. Sources are queried in parallel with results cached for 6-12 hours.

200 OK
{
  "scam_check": [
    {
      "source": "pdrm",
      "queried_at": "2026-03-10T12:00:00Z",
      "cached": false,
      "reports": [
        {
          "query_type": "phone",
          "query": "0123456789",
          "flagged": true,
          "risk_level": "high",
          "report_count": 5,
          "lookups": 120,
          "records": []
        }
      ]
    },
    {
      "source": "scamcheck_my",
      "queried_at": "2026-03-10T12:00:00Z",
      "cached": false,
      "reports": [
        {
          "query_type": "phone",
          "query": "0123456789",
          "flagged": true,
          "risk_level": "high",
          "report_count": 0,
          "lookups": 0,
          "records": [
            {
              "identifier": "+60 12-345 6789",
              "remarks": "Scam Caller"
            }
          ]
        }
      ]
    }
  ]
}

Company search example

200 OK — company search
{
  "scam_check": [
    {
      "source": "pdrm",
      "queried_at": "2026-03-10T12:00:00Z",
      "cached": false,
      "reports": [
        {
          "query_type": "company",
          "query": "ACME SDN BHD",
          "flagged": false,
          "risk_level": "none",
          "report_count": 0,
          "lookups": 0,
          "records": []
        }
      ]
    },
    {
      "source": "security_commission_malaysia",
      "queried_at": "2026-03-10T12:00:00Z",
      "cached": false,
      "reports": [
        {
          "query_type": "company",
          "query": "ACME SDN BHD",
          "flagged": true,
          "risk_level": "high",
          "report_count": 1,
          "lookups": 0,
          "records": [
            {
              "identifier": "ACME SDN BHD",
              "company_name": "ACME SDN BHD",
              "report_date": "15/01/2026",
              "website": "https://acme-invest.com",
              "remarks": "Unauthorised investment scheme"
            }
          ]
        }
      ]
    }
  ]
}

Response fields

Source object

FieldTypeDescription
sourcestringpdrm, scamcheck_my, or security_commission_malaysia
queried_atstringISO 8601 timestamp of when the source was queried
cachedbooleanWhether the result was served from cache
reportsarrayArray of report objects for each matched query

Report object

FieldTypeDescription
query_typestringThe type of query (phone, bank_account, company)
querystringThe search value
flaggedbooleanWhether the query was flagged as potentially fraudulent
risk_levelstringnone, low, medium, high, or unknown
report_countintegerNumber of scam reports filed (source-dependent)
lookupsintegerNumber of times this query has been looked up (source-dependent)
recordsarrayDetailed records from the source (if available)

Record object

FieldTypeDescription
identifierstring | nullMatched identifier (phone number, company name, etc.)
company_namestring | nullCompany or entity name (for company queries)
report_datestring | nullDate the record was reported
report_countinteger | nullNumber of reports for this specific record
websitestring | nullAssociated website (e.g. fraudulent investment sites from SC Malaysia)
remarksstring | nullAdditional notes or description

Risk levels

LevelMeaning
noneNot found in scam databases
lowFew reports or unverified entries
mediumMultiple reports filed
highConfirmed scam or on official alert list
unknownSource unavailable or returned an error

Automatic scam check on parse

When parsing documents with POST /v1/parse, the API automatically extracts phone numbers and company names from the parsed data and runs scam checks against all sources. Results are included in the scam_check field of the parse response.

Caching: Results are cached in Redis for 6 hours (phone/bank account) and 12 hours (company). Subsequent requests for the same query will return cached results instantly.