Order/Transaction Screening

POST http://localhost/api/v1/screen scope: screen.check

One consolidated call that screens an entire order/transaction — IP, billing/shipping address, email, phone, username, card BIN, device, and cross-order location anomalies (smart_detection) — reusing the same checks as this API's other endpoints, and returns a single shield_score/shield_status decision plus any matched Workflow Automation rules. Any field left out simply comes back null in its section rather than a guessed value.

Parameters

Field Type Optional Description
ip string Optional Defaults to the caller's own IP.
user_order_id string Optional Your own order identifier, echoed back for correlation.
name string Optional Customer/order name — display-only, never scored. Shown on the Order Details tab.
amount number Optional Feeds a daily per-email sales-amount threshold check (daily_amount_exceeded) — only accumulated within one currency at a time, no FX conversion.
currency string Optional 3-letter code, e.g. USD. Required alongside amount for the daily sales-amount threshold check to run.
email string Optional
phone string Optional
username string Optional
device_hash string Optional From a prior POST /api/v1/device/check call.
bin_no string Optional First 6-8 digits of the card number. A non-empty value also sets card_submitted, and feeds a daily per-BIN attempt-count threshold check (card_attempts_exceeded).
bill_name string Optional Billing "Bill To" name — display-only, never scored.
bill_addr string Optional Billing street address — display-only, never scored.
bill_country string Optional
bill_state string Optional
bill_city string Optional
bill_zip_code string Optional
ship_name string Optional Shipping recipient name — display-only, never scored.
ship_country string Optional
ship_state string Optional
ship_city string Optional
ship_zip_code string Optional
ship_addr string Optional

Every parameter here is optional.

Example Request

curl -X POST http://localhost/api/v1/screen \
  -H "Authorization: Bearer wsk_xxx_xxx" \
  -d "ip=103.148.154.174&amount=10.00&currency=USD&email=user%40example.com&bin_no=411111"
<?php
$ch = curl_init('http://localhost/api/v1/screen');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer wsk_xxx_xxx']);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['ip' => '103.148.154.174', 'amount' => '10.00', 'currency' => 'USD', 'email' => '[email protected]', 'bin_no' => '411111']));
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
import requests

response = requests.post("http://localhost/api/v1/screen",
    headers={"Authorization": "Bearer wsk_xxx_xxx"},
    data={"ip": "103.148.154.174", "amount": "10.00", "currency": "USD", "email": "[email protected]", "bin_no": "411111"},
)

data = response.json()
package main

import (
	"fmt"
	"io"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	body := strings.NewReader("ip=103.148.154.174&amount=10.00&currency=USD&email=user%40example.com&bin_no=411111")
	req, _ := http.NewRequest("POST", "http://localhost/api/v1/screen", body)
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	req.Header.Set("Authorization", "Bearer wsk_xxx_xxx")

	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	respBody, _ := io.ReadAll(resp.Body)
	fmt.Println(string(respBody))
}

Example Response

{
  "data": {
    "ip_geolocation": {
      "ip": "103.148.154.174", "continent": null, "country_code": null, "country_name": null,
      "region": null, "city": null, "latitude": null, "longitude": null,
      "zip_code": null, "timezone": null, "isp_name": null, "domain": null,
      "netspeed": null, "mobile_mnc": null, "mobile_mcc": null, "mobile_brand": null, "elevation": null,
      "usage_type": [], "is_proxy": false, "proxy_type": null, "is_in_blacklist": false,
      "fraud_score": 0, "risk_reasons": ["No risk signals detected"]
    },
    "billing_address": {"ip_distance_in_km": null, "ip_distance_in_mile": null, "is_ip_country_match": null},
    "shipping_address": {
      "is_address_ship_forward": null, "is_bill_country_match": null, "is_bill_state_match": null,
      "is_bill_city_match": null, "is_bill_postcode_match": null,
      "is_export_controlled_country": null, "is_in_blacklist": false
    },
    "email_address": {"is_free": false, "is_disposable": false, "is_domain_exist": true, "is_new_domain_name": null, "is_in_blacklist": false},
    "phone_number": {"is_disposable": null, "is_in_blacklist": null},
    "username": {"is_high_risk": null, "is_in_blacklist": null},
    "credit_card": {
      "card_brand": "Visa", "card_type": "Debit", "card_subtype": "Classic",
      "card_issuing_bank": null, "card_issuing_country": null,
      "is_prepaid": false, "is_bin_exist": true, "is_bin_country_match": null, "is_in_blacklist": false,
      "card_submitted": true
    },
    "device": {"is_malware_exploit": null, "is_in_blacklist": null},
    "smart_detection": {
      "ip_location_anomaly": null, "ship_location_anomaly": null,
      "ip_anomaly_speed_kmh": null, "ip_anomaly_distance_km": null
    },
    "user_order_id": "", "shield_id": "20260805-36B0F1",
    "shield_score": 0, "shield_status": "APPROVE",
    "shield_reasons": ["No risk signals detected"], "shield_rules": [], "shield_rules_detail": [],
    "api_version": "1.0.0",
    "requests_remaining_today": 200, "requests_remaining_this_month": 1000
  }
}