GEODE-8713 -- User Guide API links: introduce variable to allow version-specific API links
diff --git a/docs/geode-native-book-cpp/config.yml b/docs/geode-native-book-cpp/config.yml
index e955e85..29c1287 100644
--- a/docs/geode-native-book-cpp/config.yml
+++ b/docs/geode-native-book-cpp/config.yml
@@ -30,6 +30,10 @@
   product_name_lc: geode
   product_version: "1.13"
   product_version_nodot: 113
+  # Un-versioned API names (cppapiref, dotnetapiref) always point to the latest release. Be sure redirects.rb provides entries for the (right-hand) values.
+  cppapiref_version: cppapiref
+  dotnetapiref_version: dotnetapiref
+  #
   product_language: cpp
   client_name: Geode Native Client for C++
   min_java_update: 121
diff --git a/docs/geode-native-book-dotnet/config.yml b/docs/geode-native-book-dotnet/config.yml
index d18632e..ea8cbbf 100644
--- a/docs/geode-native-book-dotnet/config.yml
+++ b/docs/geode-native-book-dotnet/config.yml
@@ -30,6 +30,10 @@
   product_name_lc: geode
   product_version: "1.13"
   product_version_nodot: 113
+  # Un-versioned API names (cppapiref, dotnetapiref) always point to the latest release. Be sure redirects.rb provides entries for the (right-hand) values.
+  cppapiref_version: cppapiref
+  dotnetapiref_version: dotnetapiref
+  #
   product_language: dotnet
   client_name: Geode Native Client for .NET
   min_java_update: 121
diff --git a/docs/geode-native-docs-cpp/about-client-users-guide.html.md.erb b/docs/geode-native-docs-cpp/about-client-users-guide.html.md.erb
index bbc1cc3..3e33c1c 100644
--- a/docs/geode-native-docs-cpp/about-client-users-guide.html.md.erb
+++ b/docs/geode-native-docs-cpp/about-client-users-guide.html.md.erb
@@ -25,8 +25,8 @@
 
 See the API docs for API details:
 
-  - [C++ API docs](/cppapiref/index.html)
-  - [.NET API docs](/dotnetapiref/index.html)
+  - [C++ API docs](/<%=vars.cppapiref_version%>/hierarchy.html)
+  - [.NET API docs](/<%=vars.dotnetapiref_version%>/hierarchy.html)
 
 See the [_<%=vars.product_name_long%> User Guide_](serverman/about_<%=vars.product_name.downcase%>.html) for information regarding the server.
 
diff --git a/docs/geode-native-docs-cpp/client-cache-ref.html.md.erb b/docs/geode-native-docs-cpp/client-cache-ref.html.md.erb
index 35fc86c..a3b25ae 100644
--- a/docs/geode-native-docs-cpp/client-cache-ref.html.md.erb
+++ b/docs/geode-native-docs-cpp/client-cache-ref.html.md.erb
@@ -357,7 +357,7 @@
 
 A partition resolver is used for single-hop access to partitioned region entries on the server side. This resolver
 implementation must match that of the `PartitionResolver` on the server side.
-See the [API Class Reference](/cppapiref/hierarchy.html) for the **PartitionResolver** class.
+See the [API Class Reference](/<%=vars.cppapiref_version%>/hierarchy.html) for the **PartitionResolver** class.
 
 For example:
 
@@ -370,26 +370,26 @@
 ## \<cache-loader\>
 
 \<cache-loader\> identifies a cache loader function by specifying `library-name` and `library-function-name`.
-See the [API Class Reference](/cppapiref/hierarchy.html) for the **CacheLoader** class.
+See the [API Class Reference](/<%=vars.cppapiref_version%>/hierarchy.html) for the **CacheLoader** class.
 
 <a id="cache-listener-ref"></a>
 ## \<cache-listener\>
 
 \<cache-listener\> identifies a cache listener function by specifying `library-name` and `library-function-name`.
-See the [API Class Reference](/cppapiref/hierarchy.html) for the **CacheListener** class.
+See the [API Class Reference](/<%=vars.cppapiref_version%>/hierarchy.html) for the **CacheListener** class.
 
 <a id="cache-writer-ref"></a>
 ## \<cache-writer\>
 
 \<cache-writer\> identifies a cache writer function by specifying `library-name` and `library-function-name`.
-See the [API Class Reference](/cppapiref/hierarchy.html) for the **CacheWriter** class.
+See the [API Class Reference](/<%=vars.cppapiref_version%>/hierarchy.html) for the **CacheWriter** class.
 
 <a id="persistence-manager-ref"></a>
 ## \<persistence-manager\>
 
 For each region, if the disk-policy attribute is set to `overflows`, a persistence-manager plug-in
 must perform cache-to-disk and disk-to-cache operations.
-See the [API Class Reference](/cppapiref/hierarchy.html) for the **PersistenceManager** class.
+See the [API Class Reference](/<%=vars.cppapiref_version%>/hierarchy.html) for the **PersistenceManager** class.
 
 \<persistence-manager\> identifies a persistence manager function by specifying `library-name` and `library-function-name`.
 You can also specify a set of properties to be passed to the function as parameters.
diff --git a/docs/geode-native-docs-dotnet/about-client-users-guide.html.md.erb b/docs/geode-native-docs-dotnet/about-client-users-guide.html.md.erb
index bbc1cc3..3e33c1c 100644
--- a/docs/geode-native-docs-dotnet/about-client-users-guide.html.md.erb
+++ b/docs/geode-native-docs-dotnet/about-client-users-guide.html.md.erb
@@ -25,8 +25,8 @@
 
 See the API docs for API details:
 
-  - [C++ API docs](/cppapiref/index.html)
-  - [.NET API docs](/dotnetapiref/index.html)
+  - [C++ API docs](/<%=vars.cppapiref_version%>/hierarchy.html)
+  - [.NET API docs](/<%=vars.dotnetapiref_version%>/hierarchy.html)
 
 See the [_<%=vars.product_name_long%> User Guide_](serverman/about_<%=vars.product_name.downcase%>.html) for information regarding the server.
 
diff --git a/docs/geode-native-docs-dotnet/client-cache-ref.html.md.erb b/docs/geode-native-docs-dotnet/client-cache-ref.html.md.erb
index 6a3fac1..60fa610 100644
--- a/docs/geode-native-docs-dotnet/client-cache-ref.html.md.erb
+++ b/docs/geode-native-docs-dotnet/client-cache-ref.html.md.erb
@@ -357,7 +357,7 @@
 
 A partition resolver is used for single-hop access to partitioned region entries on the server side. This resolver
 implementation must match that of the `PartitionResolver` on the server side.
-See the [API Class Reference](/dotnetapiref/hierarchy.html) for the **PartitionResolver** class.
+See the [API Class Reference](/<%=vars.dotnetapiref_version%>/hierarchy.html) for the **PartitionResolver** class.
 
 For example:
 
@@ -370,26 +370,26 @@
 ## \<cache-loader\>
 
 \<cache-loader\> identifies a cache loader function by specifying `library-name` and `library-function-name`.
-See the [API Class Reference](/dotnetapiref/hierarchy.html) for the **CacheLoader** class.
+See the [API Class Reference](/<%=vars.dotnetapiref_version%>/hierarchy.html) for the **CacheLoader** class.
 
 <a id="cache-listener-ref"></a>
 ## \<cache-listener\>
 
 \<cache-listener\> identifies a cache listener function by specifying `library-name` and `library-function-name`.
-See the [API Class Reference](/dotnetapiref/hierarchy.html) for the **CacheListener** class.
+See the [API Class Reference](/<%=vars.dotnetapiref_version%>/hierarchy.html) for the **CacheListener** class.
 
 <a id="cache-writer-ref"></a>
 ## \<cache-writer\>
 
 \<cache-writer\> identifies a cache writer function by specifying `library-name` and `library-function-name`.
-See the [API Class Reference](/dotnetapiref/hierarchy.html) for the **CacheWriter** class.
+See the [API Class Reference](/<%=vars.dotnetapiref_version%>/hierarchy.html) for the **CacheWriter** class.
 
 <a id="persistence-manager-ref"></a>
 ## \<persistence-manager\>
 
 For each region, if the disk-policy attribute is set to `overflows`, a persistence-manager plug-in
 must perform cache-to-disk and disk-to-cache operations.
-See the [API Class Reference](/dotnetapiref/hierarchy.html) for the **PersistenceManager** class.
+See the [API Class Reference](/<%=vars.dotnetapiref_version%>/hierarchy.html) for the **PersistenceManager** class.
 
 \<persistence-manager\> identifies a persistence manager function by specifying `library-name` and `library-function-name`.
 You can also specify a set of properties to be passed to the function as parameters.