specification: API Commons Components specificationVersion: '0.1' generated: '2026-09-12' method: searched source: https://intelligencehelp.triumph.io/en/articles/12460905-portable-bundle-developer-s-guide provider: Green Screens AI providerId: green-screens-ai description: >- Green Screens AI (Triumph Intelligence) ships an embeddable client-side widget library — the Rate Intelligence Portable Bundle — that renders freight rate-intelligence surfaces directly inside a broker's own TMS, portal, or internal app. It is distinct from an SDK: it makes the API calls AND draws the UI. There is no documented React/Vue/web-component package; the bundle attaches a global object to window. loaders: - name: rates.bundle.js url: https://bundle.greenscreens.ai/rates.bundle.js install: '' global: window.TriumphIntelligence legacy_global: window.Greenscreens note: >- The global was renamed from Greenscreens to TriumphIntelligence after the Triumph acquisition; the provider documents that the old name still works. A demo application is published at https://bundle.greenscreens.ai/index.html (probed 2026-09-12, HTTP 200), which loads render.bundle.js, auth.bundle.js and rates.bundle.js. entry_point: function: TriumphIntelligence.Rates.build(params) returns: BundleRenderer params: - name: container type: HTMLElement | null description: DOM element the widgets render into. - name: baseApiPath type: string description: >- API host the widgets call. Provider-documented values: https://intelligence.triumph.io (production) and https://intelligencetest.triumph.io (testing). - name: accessTokenProvider type: () => string description: >- Returns a full Authorization header value ("Bearer "), not a bare token. The provider documents a back-end wrapper pattern that proxies POST /v1/auth/token, and an optional Google id_token path that must be enabled per-app by the provider. - name: user type: '{ email?: string }' description: Currently logged-in user descriptor. - name: widgets type: WidgetsConfiguration description: Which widgets to display. Omitted widgets are not rendered. render_input: type: InputValues fields: - truck (VAN | REEFER | FLATBED) - origin (ZipAddress | CityStateAddress | FullAddress) - destination (same address union) - extraStops (optional array) - pickupDate (optional, defaults to 8 AM next day) - deliveryDate (optional) - weight (optional) - commodity (optional) - customer (optional) - currency (USD | CAD, defaults USD) families: - family: Rates description: The only bundle family the provider publishes ("it's the only bundle that exists for now"). components: - name: targetBuyRate - name: targetSellRate - name: rateFeedback - name: marketIndices - name: routeMap - name: shortTermHistory - name: longTermHistory - name: topCarriers - name: negotiationCoach - name: laneAnalytics - name: networkRates - name: bids - name: quotes constraints: - >- CORS: the consuming origin must be added to the provider's allowlist before the bundle can call the API from a browser. Both testing and production origins must be supplied to the provider by hand. - >- The bundle build() call should be made once per page lifetime; state is updated through BundleRenderer setters (setContainer / setBaseApiPath / setAccessTokenProvider / setUser / setWidgets). - WidgetConfiguration is documented as an empty interface — widgets are on/off only, with no options. summary: component_count: 13 family_count: 1 loader_count: 1 maintainers: - FN: Kin Lane email: kin@apievangelist.com