{"id":4697,"date":"2023-01-16T08:58:52","date_gmt":"2023-01-16T08:58:52","guid":{"rendered":"https:\/\/metaschool.so\/articles\/?p=4697"},"modified":"2025-01-07T12:44:55","modified_gmt":"2025-01-07T12:44:55","slug":"node-js-crypto-createsign-method","status":"publish","type":"post","link":"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/","title":{"rendered":"Node.js crypto.createSign method \u2014 A Comprehensive Guide"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_56_1 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title \" >Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/#What_is_a_Digital_Signature\" title=\"What is a Digital Signature?\">What is a Digital Signature?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/#How_to_use_the_createSign_method\" title=\"How to use the createSign() method? \">How to use the createSign() method? <\/a><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/#Explanation\" title=\"Explanation\">Explanation<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/#FAQs\" title=\"FAQs\">FAQs<\/a><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/#How_to_use_crypto_in_Nodejs\" title=\"How to use crypto in Node.js?\">How to use crypto in Node.js?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/#How_does_the_crypto_module_work_in_Nodejs\" title=\"How does the crypto module work in Node.js?\">How does the crypto module work in Node.js?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/#Can_the_cryptocreateSign_method_be_used_with_any_type_of_private_key\" title=\"Can the crypto.createSign method be used with any type of private key?\">Can the crypto.createSign method be used with any type of private key?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/metaschool.so\/articles\/node-js-crypto-createsign-method\/#How_does_the_cryptocreateSign_method_ensure_data_integrity\" title=\"How does the crypto.createSign method ensure data integrity?\">How does the crypto.createSign method ensure data integrity?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<p>In Node.js, the <code>crypto.createSign()<\/code> method is a built-in method in the <code>crypto module<\/code> <code>that<\/code> is used to create a signing object that allows you to generate digital signatures for your data. The role of digital signatures is to ensure the authenticity and integrity of the data which can be a message, software, or digital document.<\/p>\n\n\n\n<p>Before we go into the details of how to use the <code>createSign()<\/code> method, let&#8217;s quickly revise what digital signatures are so you know and understand when to use them and what&#8217;s actually happening in the background.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_is_a_Digital_Signature\"><\/span>What is a Digital Signature?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The purpose of a digital signature is to ensure that the data is not altered in any way during transmission AND also to provide proof of the sender&#8217;s identity. Both these aspects verify the authenticity and integrity of the digital data that is being transmitted. <\/p>\n\n\n\n<p>Let&#8217;s get a quick overview of the process where <strong><em>Bob<\/em><\/strong> is the sender and <strong><em>Alice<\/em><\/strong> is the receiver.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Bob hashes the digital data, which he wants to send into a fixed-length digest. <\/li>\n\n\n\n<li>He encrypts the hash using his private key (that only he has access to) to generate a digital signature and sends it to Alice. <\/li>\n\n\n\n<li>Bob&#8217;s public key is already publicly available; Alice uses this public key to decrypt the data Bob sent. Only Bob&#8217;s public key can be used to decrypt a message that has been encrypted using his private key\u2014so his identity is confirmed. <\/li>\n\n\n\n<li>Alice uses the same hash function to generate a hash of the data. She then compares the hash digest sent by Bob to the hash she generated\u2014if both are the same, it means that the data was not compromised or corrupted during transmission.<\/li>\n<\/ol>\n\n\n\n<p>Now back to our main focus, <em>the <code>createSign()<\/code> method<\/em>.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-use-the-createsign-method-in-node-js-crypto-module-to-create-a-digital-signature-for-a-message\"><span class=\"ez-toc-section\" id=\"How_to_use_the_createSign_method\"><\/span>How to use the createSign() method? <span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The createSign() method is commonly used in scenarios where data integrity is crucial and where you want to be protected against anyone who might falsely deny performing a particular action like signing transactions on a blockchain. <\/p>\n\n\n\n<p id=\"how-to-use-the-createsign-method-in-node-js-crypto-module-to-create-a-digital-signature-for-a-message\">Let&#8217;s create a digital signature for a message. Here&#8217;s an example \ud83d\udc47\ud83c\udffc<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"const crypto = require('crypto');\n\nconst message = 'This is a message to be signed';\n\n\/\/ Create a sign object using the 'RSA-SHA256' algorithm\nconst sign = crypto.createSign('RSA-SHA256');\n\n\/\/ Update the sign object with the message to be signed\nsign.update(message);\n\n\/\/ Generate the private key\nconst privateKey = '-----BEGIN RSA PRIVATE KEY-----\\n' +\n                   'MIIEpAIBAAKCAQEA6DgHBlcjg+zUvkVq3R5jFcq0f0mvj8YtfHr5r5f5x5j5v5r5\\n' +\n                   'f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5\\n' +\n                   'x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5\\n' +\n                   'j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5\\n' +\n                   'v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5\\n' +\n                   'r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5\\n' +\n                   '-----END RSA PRIVATE KEY-----\\n';\n\n\/\/ Sign the message using the private key\nconst signature = sign.sign(privateKey, 'hex');\nconsole.log(signature); \/\/ Outputs the digital signature\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">const crypto = <\/span><span style=\"color: #C586C0\">require<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;crypto&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">const message = <\/span><span style=\"color: #CE9178\">&#39;This is a message to be signed&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ Create a sign object using the &#39;RSA-SHA256&#39; algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">const sign = crypto.<\/span><span style=\"color: #DCDCAA\">createSign<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;RSA-SHA256&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ Update the sign object with the message to be signed<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">sign.<\/span><span style=\"color: #DCDCAA\">update<\/span><span style=\"color: #D4D4D4\">(message);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ Generate the private key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">const privateKey = <\/span><span style=\"color: #CE9178\">&#39;-----BEGIN RSA PRIVATE KEY-----\\n&#39;<\/span><span style=\"color: #D4D4D4\"> +<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;MIIEpAIBAAKCAQEA6DgHBlcjg+zUvkVq3R5jFcq0f0mvj8YtfHr5r5f5x5j5v5r5\\n&#39;<\/span><span style=\"color: #D4D4D4\"> +<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5\\n&#39;<\/span><span style=\"color: #D4D4D4\"> +<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5\\n&#39;<\/span><span style=\"color: #D4D4D4\"> +<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5\\n&#39;<\/span><span style=\"color: #D4D4D4\"> +<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5\\n&#39;<\/span><span style=\"color: #D4D4D4\"> +<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5f5x5j5v5r5\\n&#39;<\/span><span style=\"color: #D4D4D4\"> +<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                   <\/span><span style=\"color: #CE9178\">&#39;-----END RSA PRIVATE KEY-----\\n&#39;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ Sign the message using the private key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">const signature = sign.<\/span><span style=\"color: #DCDCAA\">sign<\/span><span style=\"color: #D4D4D4\">(privateKey, <\/span><span style=\"color: #CE9178\">&#39;hex&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">console.<\/span><span style=\"color: #DCDCAA\">log<\/span><span style=\"color: #D4D4D4\">(signature); <\/span><span style=\"color: #6A9955\">\/\/ Outputs the digital signature<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Explanation\"><\/span>Explanation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Import the <code>crypto<\/code> module.<\/li>\n\n\n\n<li>Define a message that we want to sign.<\/li>\n\n\n\n<li>Create a sign object using the <code>crypto.createSign()<\/code> method, passing in the algorithm we want to use for the signature. In this case, we are using the RSA-SHA256 algorithm.<\/li>\n\n\n\n<li>Update the sign object with the message we want to sign using the <code>sign.update()<\/code> method.<\/li>\n\n\n\n<li>Generate a private key, which is used to sign the message. The private key is a string in <a href=\"https:\/\/en.wikipedia.org\/wiki\/Privacy-Enhanced_Mail\" target=\"_blank\" rel=\"noreferrer noopener\">PEM format<\/a>, which is a standard format for storing cryptographic keys.<\/li>\n\n\n\n<li>Use the <code>sign.sign()<\/code> method to sign the message using the private key. The first argument passed to this method is the private key, and the second argument is the encoding of the output signature. In this example, we are using the &#8216;hex&#8217; encoding, which will output the signature as a hexadecimal string. The <code>sign()<\/code> method can output the signature in various formats:\n<ul class=\"wp-block-list\">\n<li><code>'hex'<\/code>: Hexadecimal string<\/li>\n\n\n\n<li><code>'base64'<\/code>: Base64 encoded string<\/li>\n\n\n\n<li><code>'buffer'<\/code>: Binary buffer<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Please note that it is highly recommended that you do not hardcode the private key in the code, which should be kept secret and protected.<\/p>\n<\/blockquote>\n\n\n\n<p>Once we have the signature, we can then use the public key to verify the authenticity of the message by using the <code>crypto.createVerify()<\/code> method along with the <code>verify.update()<\/code> and <code>verify.verify()<\/code> method. <\/p>\n\n\n\n<p>This way you can ensure that the message has not been tampered with and is coming from a trusted source.<\/p>\n\n\n\n<p><strong>Related Reading:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/metaschool.so\/articles\/guide-crypto-algorithm\">Detailed Introduction to Crypto Algorithms<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/metaschool.so\/articles\/nodejs-crypto-module\">What is Node.js Crypto Module and How to Use It (Complete Guide)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/metaschool.so\/articles\/what-is-the-crypto-createhash-method\">Node.js crypto.createHash() method \u2014 A Comprehensive Guide<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faqs\"><span class=\"ez-toc-section\" id=\"FAQs\"><\/span>FAQs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-66a0af3eba336\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"How_to_use_crypto_in_Nodejs\"><\/span>How to use crypto in Node.js?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>In order to use cryptocurrencies in Node.js, you must first select a suitable library like &#8216;bitcoinjs-lib&#8217; or &#8216;web3.js&#8217; for Ethereum. After selecting a library, you can now install the library using npm (Node Package Manager) then import it in your project. You can then use the functions of that specific library to interact and deal with the blockchain. Some of the things you can do is generating wallet addresses, creating and signing transactions, etc. <br \/>All in all, you can now connect to a cryptocurrency network or use APIs to send and receive cryptocurrency payments, interact with smart contracts, or perform other blockchain-related tasks within your Node.js application.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-66a0af3eba341\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"How_does_the_crypto_module_work_in_Nodejs\"><\/span>How does the crypto module work in Node.js?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It works in a way that provides you with cryptographic functionality, allowing you to encrypt and decrypt data, generate secure random numbers, create hashes, sign and verify digital signatures, and perform various cryptographic operations.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1736253829129\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Can_the_cryptocreateSign_method_be_used_with_any_type_of_private_key\"><\/span><strong>Can the <code>crypto.createSign<\/code> method be used with any type of private key?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes, the <code>crypto.createSign<\/code> method can be used with private keys in PEM or DER formats. The private key is required to generate the digital signature, and it must match the public key that will later verify the signature.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1736253852603\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"How_does_the_cryptocreateSign_method_ensure_data_integrity\"><\/span><strong>How does the <code>crypto.createSign<\/code> method ensure data integrity?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The <code>crypto.createSign<\/code> method ensures data integrity by generating a digital signature that uniquely represents the data being signed. If the data is altered after signing, the signature verification process will fail, indicating tampering or corruption.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":6,"featured_media":11699,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[292],"tags":[305],"class_list":["post-4697","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-answers","tag-node-js"],"_links":{"self":[{"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/posts\/4697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/comments?post=4697"}],"version-history":[{"count":15,"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/posts\/4697\/revisions"}],"predecessor-version":[{"id":11714,"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/posts\/4697\/revisions\/11714"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/media\/11699"}],"wp:attachment":[{"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/media?parent=4697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/categories?post=4697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/metaschool.so\/articles\/wp-json\/wp\/v2\/tags?post=4697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}