# Green Screens AI (Triumph Intelligence) > Predictive freight rate, capacity and pricing intelligence APIs for truckload brokers and shippers > across the US and Canada. Acquired by Triumph Financial and now sold as Triumph Intelligence; the > API estate is still served from greenscreens.ai hosts while the product brand has moved to > triumph.io. Machine-readable contracts: 12 first-party OpenAPI 3.0.2 documents covering 36 paths > and 47 operations. ## Start here - [API documentation portal](https://connect.greenscreens.ai/): ReDoc rendering of the aggregate "Triumph Intelligence Connect" contract. The machine-readable spec is at https://connect.greenscreens.ai/openapi.yaml (HTTP 200, application/yaml). - [Managing API credentials](https://intelligencehelp.triumph.io/en/articles/10684487-managing-api-credentials): where a customer Admin generates the client_id and client_secret. Names the production API host. - [Acquiring the access token](https://intelligencehelp.triumph.io/en/articles/12461044-acquiring-the-access-token-for-triumph-intelligence-apis): the OAuth2 client_credentials flow and the recommended back-end token-proxy pattern. - [Product help center](https://intelligencehelp.triumph.io/en/): twelve collections covering the application; the "Partners and Integrations" collection holds the developer material. - [Product page](https://triumph.io/solutions/rates/): where https://greenscreens.ai/ now redirects. ## Authentication OAuth 2.0 client_credentials (RFC 6749), then RFC 6750 bearer. 1. `POST https://api.greenscreens.ai/v1/auth/token` with `Content-Type: application/x-www-form-urlencoded` and `grant_type=client_credentials&client_id=...&client_secret=...` 2. Present the returned JWT as `Authorization: Bearer ` on every other call. Identity provider is Keycloak. Credentials are NOT self-serve: an Admin user creates them inside the Triumph Intelligence application under Preferences > Credentials. The provider recommends one credential set per integration. Feature entitlements are granted as Keycloak roles per account, which is why a valid token can still return `403 access_forbidden`. The token endpoint also answers at `https://intelligence.triumph.io/v1/auth/token`. ## Base URLs Version lives in the path and each service versions independently. - Production: `https://api.greenscreens.ai/v1`, `/v2`, `/v3` - Production (Triumph-branded host): `https://intelligence.triumph.io/v1` - Pre-production: `https://betaapi.greenscreens.ai/v{1,2,3}` - Testing/dev: `https://testapi.greenscreens.ai/v{1,2,3}` and `https://intelligencetest.triumph.io` Note for agents: `connect.greenscreens.ai` is the DOCUMENTATION host, not an API host. Calls go to `api.greenscreens.ai`. ## Services and contracts - [Prediction v3](https://connect.greenscreens.ai/prediction/v3/openapi.yaml) (3.8.0, 6 paths) — lane rate prediction, batch rates, network rates, long-term batch rates, prediction history. - [Prediction v2](https://connect.greenscreens.ai/prediction/v2/openapi.yaml) (2.5.3, 1 path) — older major, still published and callable, no sunset date announced. - [Pricing v1](https://connect.greenscreens.ai/pricing/v1/openapi.yaml) (1.1.0, 8 paths) — priority rules, combination rules, threshold rules, 3PL pricing, marketplace broker partners. - [Bids v1](https://connect.greenscreens.ai/bids/v1/openapi.yaml) (1.3.2, 7 paths) — save/get/update/delete bids, carrier search, accept a bid, send a bid request to a carrier. - [Quotes v2](https://connect.greenscreens.ai/quotes/v2/openapi.yaml) (2.0.0, 3 paths) — list quotes, import, batch import. - [Quotes v1](https://connect.greenscreens.ai/quotes/v1/openapi.yaml) (1.5.0, 6 paths) — a LARGER surface than v2: save, accept, reject, update, delete, shipper search, lane top quotes. v2 is not a superset of v1. - [TmsConnector v2](https://connect.greenscreens.ai/tmsconnector/v2/openapi.yaml) (2.18.6, 6 paths) — import loads, carriers and shippers, singly or in batches. - [Analytics v1](https://connect.greenscreens.ai/analytics/v1/openapi.yaml) (1.7.1, 2 paths) — lane top carriers, lane Triumph carriers (the only paginated collection). - [History v1](https://connect.greenscreens.ai/history/v1/openapi.yaml) (1.0.0, 2 paths) — load history, recent rates. - [MarketIntelligence v1](https://connect.greenscreens.ai/marketintelligence/v1/openapi.yaml) (1.3.8, 1 path) — negotiation advice. - [DataLake v1](https://connect.greenscreens.ai/datalake/v1/openapi.yaml) (1.12.6, 0 paths) — published contract with no operations declared. - [Aggregate](https://connect.greenscreens.ai/openapi.yaml) (1.3.3, 36 paths, 47 operations, 326 schemas) — everything above in one document, plus `POST /auth/token`. ## Client libraries and embeddables - [Rate Intelligence Portable Bundle](https://bundle.greenscreens.ai/rates.bundle.js) — first-party browser bundle that calls the API and renders 13 rate-intelligence widgets. Loaded by script tag; attaches `window.TriumphIntelligence` (legacy `window.Greenscreens` still works). The URL is unpinned — there is no version in it and no registry metadata — so a consumer cannot pin a build. [Developer guide](https://intelligencehelp.triumph.io/en/articles/12460905-portable-bundle-developer-s-guide), [live demo](https://bundle.greenscreens.ai/index.html). - Triumph Intelligence Chrome extension — side-panel access to rates across any browser workflow. [Help article](https://intelligencehelp.triumph.io/en/articles/13006350-the-intelligence-chrome-extension). - There is NO published SDK in npm, PyPI, Maven, NuGet, RubyGems, crates.io or Go, and no public GitHub organisation. ## Runtime semantics an agent needs - Errors are a proprietary `{code, message}` JSON envelope, NOT RFC 9457 problem+json. 422 adds an `errors[]` array of `{field, message, value}` with dotted paths into nested objects. Documented codes: `invalid_request`, `missing_required_parameter`, `missing_property`, `access_forbidden`, `item_not_found`, `request_validation`, `distance_calculation_error` (424, upstream mileage lookup failed), `too_many_requests`, `internal_error`. - Rate limiting is enforced — 429 `too_many_requests` is declared on 46 of 47 operations — but NO limit value, window, or `Retry-After` / `RateLimit-*` header is published. Back off with jitter. - There is NO idempotency mechanism. No `Idempotency-Key`, no client request id, across a mutating surface of 30 of 47 operations. Retrying a failed write can double-fire. - There is NO dry-run or validate-only mode. - Reversibility is partial and windowless. `DELETE /bids/{bidId}`, `DELETE /quotes/{quoteId}`, `POST /quotes/reject` and the pricing-rule DELETEs exist, but no time window is stated for any of them. `POST /bids/send` sends a bid request to an external carrier and has NO published recall or cancel operation — treat it as irreversible. The TMS and quote import operations are one-way. - Pagination is inconsistent: `pageNumber`/`pageSize` on analytics, `page`/`perPage` on quotes, and absent from most collection operations. - No request-id or correlation header is returned, so an error cannot be quoted back to support by id. - Browser callers need their origin added to the provider's CORS allowlist by hand. ## Domain identifiers Carriers and brokers are keyed by industry identifiers, not opaque vendor ids: SCAC (NMFTA Standard Carrier Alpha Code), FMCSA Motor Carrier (MC) number, and USDOT number. ## What does not exist Probed 2026-09-12 and confirmed absent: no MCP server, no A2A agent card, no GraphQL, no gRPC/protobuf, no WSDL/SOAP, no AsyncAPI, no webhooks or callbacks, no `/.well-known/` document on any of eight hosts, no OpenID Connect discovery, no public pricing or plans, no trust center or published certifications, no vulnerability disclosure programme, and no security.txt. ## Operational - [Status page](https://triumph.statuspage.io/) — parent Triumph Atlassian Statuspage with a machine-readable API at https://triumph.statuspage.io/api/v2/components.json and Atom/RSS feeds. Components are still the Statuspage defaults ("API (example)", "Dashboard"), so it is not scoped to this API estate. - [Release notes](https://intelligencehelp.triumph.io/en/articles/8520083-what-s-new) — dated, month-grouped, PRODUCT-level. No API version bumps, breaking changes or deprecations are recorded. - [Support](https://triumph.io/support/) and support@greenscreens.ai (the contact in every spec). - [Terms of service](https://triumph.io/terms-of-service/) · [Privacy policy](https://triumph.io/privacy-policy/)