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..af50c0c 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,18 @@ 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/',
+			),
+		);
+	}
 }
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..e84acbe 100644
--- a/src/wp-includes/rest-api/class-wp-rest-server.php
+++ b/src/wp-includes/rest-api/class-wp-rest-server.php
@@ -460,9 +460,29 @@ 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 ) {
 			$data[ $rel ] = array();
 
+			$matched_curi = null;
+
+			// Convert $rel URIs to their compact versions if they exist.
+			foreach ( $curies as $curi ) {
+				if ( strpos( $rel, $curi['href'] ) === 0 ) {
+					$matched_curi = $curi;
+					$used_curies[ $curi['name'] ] = array(
+						'name'      => $curi['name'],
+						'href'      => $curi['href'] . '{rel}',
+						'templated' => true,
+					);
+
+					// Relation now changes from '$uri' to '$curie:$relation'
+					$rel = $curi['name'] . ':' . substr( $rel, strlen( $curi['href'] ) );
+					break;
+				}
+			}
 			foreach ( $items as $item ) {
 				$attributes = $item['attributes'];
 				$attributes['href'] = $item['href'];
@@ -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;
 	}
 
