# Release notes

div
input
section
## Mar 2026

### Mar 31, 2026

  We have updated the Trustap API to include the `deposit_price_extra` parameter. This allows you to add additional charges like tax or shipping surcharges to a transaction. For more information, see our [reference guide](/apis/openapi/f2f-transactions/p2p.createtransactionwithguestuser#f2f-transactions/p2p%2Ecreatetransactionwithguestuser/t=request&path=deposit_price_extra).

 The [get bank transfer endpoint](/apis/openapi/online-payment/basic.getbanktransferdetails) now returns a 400 error code `paid_with_balance`. This error occurs when a buyer already paid for a transaction using their Trustap balance. See [bank transfer guide](/docs/guides/transactions/face-to-face/face-to-face-int-path-banktransfer#bank-transfer-link) for more information.

section
## Feb 2026

### Feb 17, 2026

 We added new properties for online and face-to-face transactions to clarify charges. The charge object now includes `charge_buyer_client` and `charge_seller_client`. These properties show the client's portion of the fee. For more information, see the [charge configuration](/docs/guides/charge-config#charge-endpoint) guide.

## Oct 2025

### Oct 30, 2025

 Trustap transactions now support an optional `image_url` parameter. You can use this parameter to display an image of the item on the Trustap payment screen, making it clear which item the buyer is paying for. See our [guide](/docs/guides/image-url) for more information.

 We've released Trustap lite. A new, light-weight Trustap API integration. See our [guides](/docs/guides/transactions/trustap-lite/listing-intro) for more information.

### Oct 20,2025

 You can now use the Trustap API  to capture postage fees as part of the buyer payment in the Trustap payment screen. See our [guide](/docs/guides/transactions/online/online-postage-fee) for more details.

### Oct 8, 2025

 We've updated the Trustap API transactions to simplify process for enabling bank transfer payments. See our [online](/docs/guides/transactions/online/online-int-path-cc#step-5-buyer-transfers-funds) and [face-to-face](/docs/guides/transactions/face-to-face/face-to-face-int-path-cc#step-5-buyer-transfers-funds) guides for more information.

section
## Sept 2025

### Sept 18, 2025

 We've updated the Trustap API to support multiple charge configurations that you can apply dynamically in your transaction flow. [Read our guide](/docs/guides/charge-config) for more information.

section
## July 2025

### July 4, 2025

 The Trustap API now supports users in Hong Kong with payouts in Hong Kong dollar, `HKD`.

section
## May 2025

### May 19, 2025

 The Trustap API now supports Turkish users with payouts in Turkish lira, `TRY`.

section
## April 2025

### April 2, 2025

 The Trustap API now supports metadata. [Read our guide](/docs/guides/transactions/metadata) for more information.

section
## March 2025

### March 18, 2025

 Previously, the Trustap API only supported submitting order issues during the complaint period. The Trustap API now supports submitting order issues when there is a problem in the delivery of the item.

 The Trustap API has been updated to give more reliable Royal Mail tracking results.

section
## February 2025

### February 28, 2025

 Listing has been added to the list of deprecated endpoints. These endpoints are no longer supported. We do not recommend using these endpoints.

section
## January 2025

### January 28, 2025

 The Trustap API now includes a new endpoint that supports creating a Stripe account session and retrieving that account client secret. See our [guide](/apis/openapi/personal/personal.getaccountsession) for more information.

section
## December 2024

### December 9, 2024

 The Trustap API now supports the Swiss Franc, `CHF`.

### December 2, 2024

added
The Trustap API no longer returns an error for some users when accessing  [instant payouts](/apis/openapi/buyers-and-sellers/users.setinstantpayouts), resolving a previous issue.

section
## November 2024

### November 29, 2024

 The Trustap API now has an updated [Shippo shipping rates](/apis/openapi/online-shipping/basic.getshipposhippingrates) endpoint that now  returns rates in the same currency as the transaction.

 The Trustap API now has an updated [Shippo shipping rates](/apis/openapi/online-shipping/basic.getshipposhippingrates) endpoint response that includes the Shippo `shipment_id`.

### November 20, 2024

 The Trustap API now has an updated [Shippo shipping rates](/apis/openapi/online-shipping/basic.getshipposhippingrates) endpoint that includes `currency`.

 The Trustap API has been updated to fix an issue where some users received an error when setting their [payment type](/apis/openapi/online-payment/basic.setpaymentmethodfortransaction).

### November 15, 2024

 The Trustap API now includes [integrated shipping](/docs/guides/transactions/online/online-shipping).

section
## October 2024

### October 22, 2024

 The Trustap API now includes a new endpoint that supports for face-to-face transactions.

### October 14, 2024

 The Trustap API has been updated to improve the performance of transaction retrieval endpoints.

 The Trustap API now uses more [descriptive verification error messages](/apis/openapi/personal/getadditionalidentitydocumentverificationstatus).

### October 8, 2024

 The Trustap API now supports payouts in Indian Rupee `INR`.

### October 1, 2024

 The Trustap API now supports bank transfer as a payment method for online transactions.

section
## September 2024

### September 18, 2024

 The Trustap API now supports transaction payment with a user's balance.

section
## August 2024

### August 19, 2024

 The Trustap API now supports splitting the buyer protection fee between a buyer and a seller.

section
## July 2024

### July 19, 2024

 To support users' access to Stripe accounts, the Trustap API now includes a set of endpoints for interacting with Stripe. [See our reference guide](/apis/openapi/personal) for more information.

### July 4, 2024

 The Trustap API has been updated. Bank transfer payments now include `sort_code`.

section
## June 2024

### June 20, 2024

 The Trustap API no longer includes the option for `allow_last_4` in personal user verification.

 The Trustap API now includes a new endpoint to retrieve supported registration countries for a client. See our [reference guide](/apis/openapi/clients/client.getsupportedregistrationcountries) for more information.

### June 6, 2024

 The Trustap API now supports payouts in Pakistan Rupee `PKR`.

section
## May 2024

### May 13, 2024

 The Trustap API now supports payouts in United Arab Emirates Dirham  `AED`.

 The Trustap API now supports payouts in Hungarian Forint `HUF`.

section
## March 2024

### March 14, 2024

 The Trustap API webhooks have been updated to include events associated with [payment reviews](/docs/concepts/webhooks#event-codes). You can now receive webhook events when payment reviews are successful or have failed.

### March 4, 2024

 The Trustap API now supports [webhooks](/docs/concepts/webhooks) when payment review is successful or has failed.

section
## January 2024

### January 23, 2024

 The Trustap API now includes better error messaging for KYC when SSN upload fails.

 The Trustap API has been updated to include a new endpoint that returns a [user's balance](/apis/openapi/buyers-and-sellers/users.getbalances) in their currency.

### January 17, 2024

 The Trustap API has been updated to include a new field `code` as a zip when a [facility](/apis/openapi/online-shipping) is `postal_office`.

### January 12, 2024

 The Trustap API has been updated to include two new endpoints to support shipping. Read our guides on [pick_up_point](/apis/openapi/online-shipping) and [delivery_point](/apis/openapi/online-shipping) to learn more.

script

// Wait for the document to be ready
document.addEventListener('DOMContentLoaded', setupSearch);

// Ensure the script runs on every Revel page load/transition
if (document.readyState === 'complete' || document.readyState === 'interactive') {
  setupSearch();
}

function setupSearch() {
  // Create a style element for highlighting
  if (!document.getElementById('search-highlight-style')) {
    const highlightStyle = document.createElement('style');
    highlightStyle.id = 'search-highlight-style';
    highlightStyle.textContent = `
      .search-highlight {
        background-color: #ffff00;
        padding: 1px 2px;
        border-radius: 2px;
        font-weight: bold;
      }
    `;
    document.head.appendChild(highlightStyle);
  }
  
  // Find search input
  const searchInput = document.getElementById('release-notes-search');
  if (!searchInput) return;
  
  // Create a persistent search function
  function performSearch() {
    const query = searchInput.value.toLowerCase().trim();
    const entries = Array.from(document.querySelectorAll('.release-entry'));
    
    // First, remove any existing highlights
    removeAllHighlights();
    
    if (!query) {
      // Show all entries if no query
      entries.forEach(entry => {
        entry.style.display = '';
      });
      return;
    }
    
    // Process each entry
    entries.forEach((entry) => {
      const entryHtml = entry.innerHTML;
      const entryText = entry.textContent.toLowerCase();
      const matches = entryText.includes(query);
      
      if (matches) {
        entry.style.display = '';
        // Apply highlighting
        highlightMatches(entry, query);
      } else {
        entry.style.display = 'none';
      }
    });
  }
  
  // Function to highlight matching text
  function highlightMatches(element, query) {
    // We need to work with text nodes to preserve HTML structure
    const walk = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null, false);
    const nodesToReplace = [];
    
    // Collect text nodes that contain the search query
    while (walk.nextNode()) {
      const node = walk.currentNode;
      const content = node.nodeValue.toLowerCase();
      
      if (content.includes(query) && node.parentElement.nodeName !== 'SCRIPT' && node.parentElement.nodeName !== 'STYLE') {
        nodesToReplace.push(node);
      }
    }
    
    // Process collected nodes
    nodesToReplace.forEach(node => {
      const content = node.nodeValue;
      const parent = node.parentNode;
      
      // Create regex for case-insensitive matching with word boundaries
      const regex = new RegExp(`(${escapeRegExp(query)})`, 'gi');
      
      // Replace text with highlighted version
      const replacementFragment = document.createDocumentFragment();
      const parts = content.split(regex);
      
      parts.forEach(part => {
        if (part.toLowerCase() === query.toLowerCase()) {
          // This is a match - create highlighted span
          const span = document.createElement('span');
          span.className = 'search-highlight';
          span.textContent = part;
          replacementFragment.appendChild(span);
        } else if (part.length > 0) {
          // Regular text
          replacementFragment.appendChild(document.createTextNode(part));
        }
      });
      
      // Replace the original node with our fragment
      parent.replaceChild(replacementFragment, node);
    });
  }
  
  // Function to remove all highlights
  function removeAllHighlights() {
    const highlights = document.querySelectorAll('.search-highlight');
    highlights.forEach(highlight => {
      const parent = highlight.parentNode;
      if (parent) {
        // Replace the highlight span with its text content
        parent.replaceChild(document.createTextNode(highlight.textContent), highlight);
        // Normalize to merge adjacent text nodes
        parent.normalize();
      }
    });
  }
  
  // Helper function to escape special characters in regex
  function escapeRegExp(string) {
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  }
  
  // Add event listener
  searchInput.addEventListener('input', performSearch);
  
  // Initial search if there's a value
  if (searchInput.value) {
    performSearch();
  }
}

// This is crucial - register a script element that will survive navigation
const scriptElement = document.createElement('script');
scriptElement.textContent = `
  // Re-run search setup on every view transition
  document.addEventListener('astro:page-load', function() {
    if (typeof setupSearch === 'function') {
      setupSearch();
    }
  });
  
  // Also check periodically to ensure search is working
  setInterval(function() {
    const searchInput = document.getElementById('release-notes-search');
    const entries = document.querySelectorAll('.release-entry');
    
    if (searchInput && entries.length > 0 && !searchInput.hasAttribute('data-search-active')) {
      if (typeof setupSearch === 'function') {
        setupSearch();
      }
      searchInput.setAttribute('data-search-active', 'true');
    }
  }, 500);
`;
document.body.appendChild(scriptElement);