Partner Payment Portal
This guide describes how integration partners can send payers from their own product into the Truss Payment Portal checkout, straight to a specific inbound payment intent (invoice), and optionally return them to the partner when checkout finishes.
For how companies configure and share the Payment Portal in general, see How does the Payment Portal work?. For creating and managing intents via API, see Payment intents.
What is the Payment Portal?
The Payment Portal is the Truss-hosted experience where a payer authenticates (email verification), sees the invoices they can pay for a given company, chooses a payment method, and completes payment. Each Truss company has a checkout link embedded in their portal URL path.
Integration partners usually need two pieces of information to build a payer-facing link:
- Checkout link ID — Identifier in the portal path (same ID that appears in the company’s standard Payment Portal URL as
/pay/<checkout_link_id>/...). You can read it from thecheckout_link_idfield returned by Get company (GET /v1/company/). - Payment intent UID — The
uidof the inbound payment intent from the Payment Intent API resource (and the value you use elsewhere in API calls).
Use the payer-facing Payment Portal hosts below—they match the OAuth authorize origins documented in OAuth Integration Guide.
Deep link to a specific invoice
Use one of these base URLs:
Production:
https://app.trusspayments.com
Sandbox:
https://app.staging.trusspayments.com
Send the payer to:
Production:
GET https://app.trusspayments.com/pay/{checkout_link_id}/paymentIntent/{payment_intent_uid}
Sandbox:
GET https://app.staging.trusspayments.com/pay/{checkout_link_id}/paymentIntent/{payment_intent_uid}
Example (production, illustrative identifiers):
https://app.trusspayments.com/pay/a1b2c3d4/paymentIntent/3dba9d05-bb20-423e-924e-4b19e50d6f3c
The app immediately routes them into the invoice detail step for that UID (query parameters on this URL, such as redirect_uri, are preserved).
Email address
The payer must complete the portal’s email verification using an email address registered as the primary or secondary contact email on the payment intent (see Payment intents — Contacts). If they use a different email, they may not see or open the correct invoice after signing in.
Optional return URL (redirect_uri)
What it is for
If you pass a validated redirect_uri, the portal can send the payer back to your application after a successful invoice payment (primary action on the receipt step), or when certain error paths offer “Close this page” action that retaurns early. Your server or SPA can read the query parameters Truss appends and reconcile state in your product.
Query parameter
Append a single absolute HTTPS URL (fully qualified), URL-encoded as one query parameter:
?redirect_uri=https%3A%2F%2Fwww.google.com
You may combine it with the deep link routes above, for example (production):
https://app.trusspayments.com/pay/{checkout_link_id}/paymentIntent/{payment_intent_uid}?redirect_uri=https%3A%2F%2Fwww.google.com
When it is accepted
- The value must be a valid URL.
- For cross-origin callbacks, the origin and path must match an entry on Truss’s allowlist for the deployed web app (see below). Matching is exact for the pathname (no extra path segments): for example, if allowlisted as
https://partner.example.com/oauth/truss/callback, thenhttps://partner.example.com/oauth/truss/callback/extrawill not match. - Trailing slashes are normalized when comparing to the allowlist.
If redirect_uri is present but not allowed, the payer sees an invalid link error and cannot continue into checkout until they use a URL without redirect_uri, or with an allowlisted redirect_uri.
If you omit redirect_uri, after payment, the payer remains in the portal (default Done navigates back to the payer’s invoice list for that company).
Query parameters on redirect
When a browser redirect to your redirect_uri is performed, Truss sets these query parameters on your URL:
| Parameter | Description |
|---|---|
payment_intent_uid |
The payment intent UID for the checkout session (URL-encoded as needed). |
result |
Outcome indicator: success, incomplete, or fail. |
Any query string you already placed on your redirect_uri is preserved; Truss appends these parameters in addition to them.
result values (integration-relevant):
success— Used when the payer completes an invoice (non–custom-amount) payment and confirms the primary completion action on the receipt step. This is the main “payment completed” signal for deep-linked invoice checkout.incomplete— Used when the payer is returned early from certain error/closure flows (for example, closing the page via the offered action when checkout cannot proceed as linked).
The fail value exists in the checkout implementation for symmetry; partner flows should not rely on seeing it until Truss documents a specific user-facing path that sets it. For robust reconciliation, combine result with webhooks and/or API polls on the payment intent and transactions.
Custom / non-invoice payments inside the portal do not drive the partner return flow on receipt; the payer gets the normal in-portal completion behavior instead.
Allowlisting redirect URIs
Cross-origin redirect_uri values must be allowlisted in Truss’s configuration for the Payment Portal web application. Contact Truss with the exact HTTPS URLs (scheme, host, and path) you need for sandbox and production.
Until a URI is allowlisted, do not ship it to end users—it will block checkout when supplied.
Practical checklist for partners
- Obtain checkout link ID via Get company and use the correct portal base URL for the environment (
https://app.trusspayments.comorhttps://app.staging.trusspayments.com). - Store the
uidof each inbound payment intent you expose in your UX. - Build:
https://app.trusspayments.com/pay/{checkout_link_id}/paymentIntent/{uid}or the sandbox hostname (+ optional encodedredirect_uri). - Ensure payers know which email to use for portal sign-in (same email the merchant notified).
- Register and test every
redirect_uripath with Truss before go-live. - On your return endpoint, parse
payment_intent_uidandresult; confirm payment state via API/webhooks rather than trustingsuccessalone for financial reconciliation where your risk model requires it.

