--- title: "Level 2/3 data for Hosted Payment Pages" url: "https://docs.adyen.com/online-payments/classic-integrations/hosted-payment-pages/hpp-payments-with-l2l3-data" source_url: "https://docs.adyen.com/online-payments/classic-integrations/hosted-payment-pages/hpp-payments-with-l2l3-data.md" canonical: "https://docs.adyen.com/online-payments/classic-integrations/hosted-payment-pages/hpp-payments-with-l2l3-data" last_modified: "2026-05-26T13:48:54+02:00" language: "en" --- # Level 2/3 data for Hosted Payment Pages [View source](/online-payments/classic-integrations/hosted-payment-pages/hpp-payments-with-l2l3-data.md) **Hosted Payment Pages are no longer available** To accept payments through an Adyen-hosted page, use our [Hosted Checkout](/online-payments/build-your-integration/sessions-flow?platform=Web\&integration=Hosted%2BCheckout). This page is for the classic Hosted Payment Pages (HPP) integration, which has reached end-of-life. We are no longer processing transactions though HPP. Level 2 or Level 3 (L2/L3) data provides commercial shoppers with additional information about purchases on their card statements. It allows companies to track how much is spent on their corporate cards where a single card may have multiple users. Companies can also track the amount of sales tax to pay or reconcile transactions using a unique customer code. Transactions submitted with L2/L3 data that meet requirements have lower interchange rates. ## Code example Below is a code example for submitting L2/L3 data in an authorisation using the Adyen Hosted Payment Pages (HPP): ```php "SKINTEST-1435226439255", "merchantAccount" => $merchantAccount, "currencyCode" => "USD", "paymentAmount" => "1190", "sessionValidity" => "2020-07-11T07:07:13-08:00", "shopperLocale" => "en_GB", "skinCode" => $skinCode, "brandCode" => "", "shopperEmail" => "test@adyen.com", "shopperReference" => "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j", // L2/l3 Data lines "enhancedSchemeData.destinationPostalCode" => "94025-1452", "enhancedSchemeData.shipFromPostalCode" => "94025-1452", "enhancedSchemeData.destinationStateProvinceCode" => "CA", "enhancedSchemeData.destinationCountryCode" => "US", "enhancedSchemeData.freightAmount" => "0", "enhancedSchemeData.dutyAmount" => "0", "enhancedSchemeData.orderDate" => "290518", "enhancedSchemeData.customerReference" => "100001", "enhancedSchemeData.totalTaxAmount" => "190", "enhancedSchemeData.itemDetailLine1.commodityCode" => "82101603", "enhancedSchemeData.itemDetailLine1.description" => "Ads", "enhancedSchemeData.itemDetailLine1.productCode" => "Ads", "enhancedSchemeData.itemDetailLine1.quantity" => "1", "enhancedSchemeData.itemDetailLine1.unitOfMeasure" => "EAC", "enhancedSchemeData.itemDetailLine1.unitPrice" => "1000", "enhancedSchemeData.itemDetailLine1.totalAmount" => "1190", ); /* process fields */ // The character escape function $escapeval = function($val) { return str_replace(':','\\:',str_replace('\\','\\\\',$val)); }; // Sort the array by key using SORT_STRING order ksort($params, SORT_STRING); // Generate the signing data string $signData = implode(":",array_map($escapeval,array_merge(array_keys($params), array_values($params)))); // base64-encode the binary result of the HMAC computation $merchantSig = base64_encode(hash_hmac('sha256',$signData,pack("H*" , $hmacKey),true)); $params["merchantSig"] = $merchantSig; ?>