# Release notes

div
input
section
## July 2026

### July 23, 2026

We've added a new feature to the Trustap API where you can use the query parameter `login_hint` to prepopulate a user's login email address. See our [full users guide](/docs/guides/transactions/full-users#step-5-redirect-the-seller-back-to-trustaps-profile-completion-page) for more information.

section
## June 2026

### June 2, 2026

In the Trustap app, buyers can now cancel a transaction complaint. This helps buyers and sellers resolve issues faster when they reach a direct agreement.

### June 16, 2026

Sellers can now accept a buyer's complaint directly in the Trustap app to immediately refund them. This speeds up dispute resolutions by letting both parties settle issues together.

section
## May 2026

### May 21, 2026

We've changed the URLs to access the Trustap Dashboard. You can now access our Sandbox Dashboard at [https://dashboard.stage.trustap.com](https://dashboard.stage.trustap.com) and our Production Dashboard at [https://dashboard.trustap.com](https://dashboard.trustap.com).
If you use the old URLs, you will be automatically redirected to our new URLs.

### May 20, 2026

The Trustap API no longer sends webhook events for `joined` transactions.

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.

The get bank transfer endpoint now returns a 400 error code `paid_with_balance`. This error occurs when a buyer already paid for a transaction using their Trustap balance.

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.

section
## 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.

### 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/postage-fee) for more details.

### Oct 8, 2025

We've updated the Trustap API transactions to simplify process for enabling bank transfer payments.

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.

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, resolving a previous issue.

section
## November 2024

### November 29, 2024

The Trustap API now has an updated Shippo shipping rates endpoint that now  returns rates in the same currency as the transaction.

The Trustap API now has an updated Shippo shipping rates endpoint response that includes the Shippo `shipment_id`.

### November 20, 2024

The Trustap API now has an updated Shippo shipping rates 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.

### November 15, 2024

The Trustap API now includes integrated 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.

### 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.

### 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.

### 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 in their currency.

### January 17, 2024

The Trustap API has been updated to include a new field `code` as a zip when a facility is `postal_office`.

### January 12, 2024

The Trustap API has been updated to include two new endpoints to support shipping.

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);

## Subscribe

div
form
div
label
Email Address 
span
*
input
div
input
input