Class EquinixRateCard
- All Implemented Interfaces:
RateCard
RateCard backed by the live Equinix Fabric Pricing API
(fabric.prices()); the authoritative source of Equinix-side connection
and Cloud Router prices for the cost, savings, and TCO models.
Every lookup is one targeted POST /fabric/v4/prices/search. The live service
rejects a catalogue scan by /type alone (HTTP 400: /connection/type,
/connection/bandwidth and both access-point types are mandatory for connections, and
/router/package/code and /router/location/metroCode for Cloud Routers; observed
2026-11-11). A connection is queried as COLO (or CLOUD_ROUTER for
IP_VC) on the A-side to a service provider (SP) on the Z-side, both in the
requested metro, which is the Fabric-to-cloud connection the design models price. A lookup with
no metro, or for a connection type this card does not map, cannot be priced live and returns
empty so a layered card falls back. Rows are matched on their structured descriptor (type,
bandwidth, access-point metro, router package).
Both lookups honour the request's remaining axes strictly. When a metro is
requested, a row of another metro is never returned - the lookup yields empty
instead, so a layered card can consult a lower layer that may hold a genuine
figure for that metro. The live catalogue is also term-scoped, so rows whose
termLength matches the requested Term are preferred; when only
a different-term row exists, it is returned with a note naming the
substitution (never silently), and a row without a termLength is
term-neutral.
The card is fault-tolerant: if the catalogue cannot be
fetched (network error, unauthenticated client, endpoint unavailable), it
yields Optional.empty() for every lookup so callers fall back to
another rate card or a heuristic rather than failing, and it reports the
failure through isLiveSourceUnavailable(). Every quote it does
produce is tagged PriceSource.EQUINIX_LIVE.
Each query's result is cached for the card's lifetime once it succeeds. A failed
query is not cached and is retried on the next lookup, so a transient
429/5xx/auth error never permanently poisons the card. A lookup that finds no matching or no priced row
simply defers to the fallback - never a wrong or phantom-zero number.
-
Method Summary
Modifier and TypeMethodDescriptioncloudRouter(String packageCode, MetroCode metro, Term term) Resolves the price of a single Fabric Cloud Router instance.cloudRouterLookup(String packageCode, MetroCode metro, Term term) RateCard.cloudRouter(String, MetroCode, Term)with the reason when it cannot be priced.connection(ConnectionType type, int bandwidthMbps, MetroCode metro, Term term) Resolves the price of a single Fabric connection / virtual connection.connectionLookup(ConnectionType type, int bandwidthMbps, MetroCode metro, Term term) RateCard.connection(ConnectionType, int, MetroCode, Term)with the reason when it cannot be priced.booleanWhether the most recent attempt to fetch the live price catalogue failed (network error, unauthenticated client,429/5xx).static EquinixRateCardof(FabricGateway fabric) Creates a live rate card over the given authenticated Fabric client.source()The dominant provenance of prices this card produces.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface RateCard
cardName, colocation, colocationLookup, egress, egressLookup, multicloudLinkModifier and TypeMethodDescriptiondefault StringcardName()A short name for this card in provenance trails and unpriced reasons; the simple class name by default.default Optional<PriceQuote> colocation(ColocationItem item, MetroCode metro, Term term) Resolves the price of an Equinix colocation primitive - a cabinet, a kW of power, or a cross-connect (seeColocationItemfor the per-unit semantics).default PriceLookup<PriceQuote> colocationLookup(ColocationItem item, MetroCode metro, Term term) RateCard.colocation(ColocationItem, MetroCode, Term)with the reason when it cannot be priced.default Optional<EgressRate> egress(CloudProviderType provider, String region, EgressPath path, Term term) Resolves the per-GB data-egress rate for a cloud provider over a given path.default PriceLookup<EgressRate> egressLookup(CloudProviderType provider, String region, EgressPath path, Term term) RateCard.egress(CloudProviderType, String, EgressPath, Term)with the reason when it cannot be priced.default Optional<MulticloudLinkQuote> multicloudLink(MulticloudLinkRequest request) Resolves the two-sided price of a native provider-to-provider multicloud link (for example AWS Interconnect - multicloud paired with a Google Partner Cross-Cloud Interconnect transport).
-
Method Details
-
of
Creates a live rate card over the given authenticated Fabric client. The price catalogue is fetched lazily on the first lookup and cached for the lifetime of the card.- Parameters:
fabric- the authenticated Fabric client (or anyFabricGateway)- Returns:
- a live Equinix rate card
-
connection
public Optional<PriceQuote> connection(ConnectionType type, int bandwidthMbps, MetroCode metro, Term term) Description copied from interface:RateCardResolves the price of a single Fabric connection / virtual connection.Implementation contract. The matching strategy is implementation-specific, and a card whose data lacks an axis (metro, term, type) still returns its best figure - or empty - rather than failing; callers must not assume every card is sensitive to every parameter. Of the bundled cards:
CustomRateCardresolves the most specific declared entry (exact metro+term down to metro/term-agnostic, then a declared default);EquinixRateCardmatches bandwidth and type against the live catalogue, honours a requested metro strictly (a wrong-metro row is never returned), and prefers a term-matched row - a different-term row is only ever returned with a note naming the substitution;ReferenceRateCardmatches on bandwidth alone (smallest tabulated tier at or above the request, linearly extrapolated with anEXTRAPOLATEDnote above the top tier) and ignores type, metro, and term entirely.- Specified by:
connectionin interfaceRateCard- Parameters:
type- the connection type (e.g.EVPL_VC); may benullfor any typebandwidthMbps- the provisioned bandwidth in Mbpsmetro- the metro the connection originates in (may benullif metro-agnostic)term- the commitment term (may benullif term-agnostic)- Returns:
- the resolved quote, or
Optional.empty()if this card cannot price the connection
-
connectionLookup
public PriceLookup<PriceQuote> connectionLookup(ConnectionType type, int bandwidthMbps, MetroCode metro, Term term) RateCard.connection(ConnectionType, int, MetroCode, Term)with the reason when it cannot be priced. Cards override this to say exactly why (no metro, no live row, no declared rate); the default states that this card holds no figure.The reason names the cause: no metro, a bandwidth of 0, an unmapped connection type, the live source unreachable, or no priced row for the request.
- Specified by:
connectionLookupin interfaceRateCard- Parameters:
type- the connection type; may benullbandwidthMbps- the bandwidth in Mbpsmetro- the metro; may benullterm- the term; may benull- Returns:
- the figure, or the reason there is none
-
cloudRouter
Description copied from interface:RateCardResolves the price of a single Fabric Cloud Router instance.Implementation contract. As with
RateCard.connection(ConnectionType, int, MetroCode, Term), matching is implementation-specific and cards without a metro/term axis return their best figure regardless. Of the bundled cards:CustomRateCardresolves the most specific declared(packageCode, metro, term)entry;EquinixRateCardmatches the package code and metro structurally against the row's own descriptor (exact package equality, the row's own metro code) and prefers a term-matched row, labelling any term substitution;ReferenceRateCardignores metro and term, and substitutes its STANDARD figure for an unlisted package with a note naming the substitution.- Specified by:
cloudRouterin interfaceRateCard- Parameters:
packageCode- the router package / tier code (e.g."STANDARD"); may benullfor anymetro- the metro the router is deployed in (may benullif metro-agnostic)term- the commitment term (may benullif term-agnostic)- Returns:
- the resolved quote, or
Optional.empty()if this card cannot price the router
-
cloudRouterLookup
RateCard.cloudRouter(String, MetroCode, Term)with the reason when it cannot be priced. The reason names the cause as forconnectionLookup(ConnectionType, int, MetroCode, Term).- Specified by:
cloudRouterLookupin interfaceRateCard- Parameters:
packageCode- the router package; may benullmetro- the metro; may benullterm- the term; may benull- Returns:
- the figure, or the reason there is none
-
source
Description copied from interface:RateCardThe dominant provenance of prices this card produces. Aggregating cards reportPriceSource.COMPOSITE.
-