diff --git a/src/wp-includes/rest-api/class-wp-rest-response.php b/src/wp-includes/rest-api/class-wp-rest-response.php
index db80029..02c58a6 100644
--- a/src/wp-includes/rest-api/class-wp-rest-response.php
+++ b/src/wp-includes/rest-api/class-wp-rest-response.php
@@ -256,4 +256,19 @@ class WP_REST_Response extends WP_HTTP_Response {
 
 		return $error;
 	}
+
+	/**
+	 * Get the CURIEs (compact URIs) used for relations.
+	 *
+	 * @return array
+	 */
+	public function get_curies() {
+		return array(
+			array(
+				'name' => 'wp',
+				'href' => 'https://api.w.org/{rel}',
+				'templated' => true,
+			),
+		);
+	}
 }
diff --git a/src/wp-includes/rest-api/class-wp-rest-server.php b/src/wp-includes/rest-api/class-wp-rest-server.php
index dad4070..cd0473b 100644
--- a/src/wp-includes/rest-api/class-wp-rest-server.php
+++ b/src/wp-includes/rest-api/class-wp-rest-server.php
@@ -460,7 +460,27 @@ class WP_REST_Server {
 
 		// Convert links to part of the data.
 		$data = array();
+		$curies = $response->get_curies();
+		$used_curies = array();
+
 		foreach ( $links as $rel => $items ) {
+
+			// Convert $rel URIs to their compact versions if they exist.
+			foreach ( $curies as $curi ) {
+				$href_prefix = substr( $curi['href'], 0, strpos( $curi['href'], '{rel}' ) );
+				if ( strpos( $rel, $href_prefix ) === 0 ) {
+					$used_curies[ $curi['name'] ] = $curi;
+
+					// Relation now changes from '$uri' to '$curie:$relation'
+					$rel_regex = str_replace( '\{rel\}', '([\w]+)', preg_quote( $curi['href'], '!' ) );
+					preg_match( '!' . $rel_regex . '!', $rel, $matches );
+					if ( $matches ) {
+						$rel = $curi['name'] . ':' . $matches[1];
+					}
+					break;
+				}
+			}
+
 			$data[ $rel ] = array();
 
 			foreach ( $items as $item ) {
@@ -470,6 +490,11 @@ class WP_REST_Server {
 			}
 		}
 
+		// Push the curies onto the start of the links array.
+		if ( $used_curies ) {
+			$data = array_merge( array( 'curies' => array_values( $used_curies ) ), $data );
+		}
+
 		return $data;
 	}
 
