1import{_ as c,r as p,o as u,c as r,e,b as s,d as a,a as t,w as i}from"./app-4488e322.js";const d={},k={href:"https://documenter.getpostman.com/view/3869493/Szf6WoG1#b6fac30b-412b-459f-973e-b9360326be74",target:"_blank",rel:"noopener noreferrer"};function g(m,n){const o=p("RouterLink"),l=p("ExternalLinkIcon");return u(),r("div",null,[n[17]||(n[17]=e('<h1 id="cloud-based-e-seal" tabindex="-1"><a class="header-anchor" href="#cloud-based-e-seal" aria-hidden="true">#</a> Cloud based e-seal</h1><h2 id="_1-configuration" tabindex="-1"><a class="header-anchor" href="#_1-configuration" aria-hidden="true">#</a> 1. Configuration</h2><h3 id="test-environment" tabindex="-1"><a class="header-anchor" href="#test-environment" aria-hidden="true">#</a> Test environment</h3>',3)),s("ol",null,[s("li",null,[n[1]||(n[1]=a("Follow the ",-1)),t(o,{to:"/guide/test-environment.html"},{default:i(()=>[...n[0]||(n[0]=[a("Test environment API credentials guide",-1)])]),_:1}),n[2]||(n[2]=a(" to obtain the test API credentials.",-1))]),n[3]||(n[3]=s("li",null,"Contact [email protected] to enable the e-seal service for your account.",-1)),n[4]||(n[4]=s("li",null,[a("Use "),s("code",null,"https://test.eideasy.com"),a(" as the "),s("code",null,"base_url"),a(" in the API calls.")],-1)),n[5]||(n[5]=s("li",null,"Note that in test environment the e-seal will be created with an eID Easy test certificate and will not be legally binding.",-1))]),n[18]||(n[18]=s("h3",{id:"production-environment",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#production-environment","aria-hidden":"true"},"#"),a(" Production environment")],-1)),s("ol",null,[s("li",null,[n[7]||(n[7]=a("Follow the ",-1)),t(o,{to:"/guide/api-credentials.html"},{default:i(()=>[...n[6]||(n[6]=[a("API credentials guide",-1)])]),_:1}),n[8]||(n[8]=a(" to obtain the production API credentials.",-1))]),n[9]||(n[9]=s("li",null,"Contact [email protected] to enable the e-seal service for your account.",-1)),n[10]||(n[10]=s("li",null,[a("Use "),s("code",null,"https://id.eideasy.com"),a(" as the "),s("code",null,"base_url"),a(" in the API calls.")],-1))]),n[19]||(n[19]=e(`<h2 id="_2-usage" tabindex="-1"><a class="header-anchor" href="#_2-usage" aria-hidden="true">#</a> 2. Usage</h2><h3 id="_2-1-prepare-the-file-for-signing" tabindex="-1"><a class="header-anchor" href="#_2-1-prepare-the-file-for-signing" aria-hidden="true">#</a> 2.1 Prepare the file for signing</h3><p>Send a server-side <strong>POST</strong> request to <code>{{base_url}}/api/signatures/prepare-files-for-signing</code></p><p>The request body might look something like this:</p><div class="language-json line-numbers-mode" data-ext="json"><pre class="language-json"><code><span class="token punctuation">{</span> 2 <span class="token property">"files"</span><span class="token operator">:</span> <span class="token punctuation">[</span> 3 <span class="token punctuation">{</span> 4 <span class="token property">"fileContent"</span><span class="token operator">:</span> <span class="token string">"JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbn
4RpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg=="</span><span class="token punctuation">,</span> 5 <span class="token property">"fileName"</span><span class="token operator">:</span> <span class="token string">"somefiletest.pdf"</span><span class="token punctuation">,</span> 6 <span class="token property">"mimeType"</span><span class="token operator">:</span> <span class="token string">"application/pdf"</span> 7 <span class="token punctuation">}</span> 8 <span class="token punctuation">]</span><span class="token punctuation">,</span> 9 <span class="token property">"client_id"</span><span class="token operator">:</span> <span class="token string">"{{client_id}}"</span><span class="token punctuation">,</span> 10 <span class="token property">"secret"</span><span class="token operator">:</span> <span class="token string">"{{secret}}"</span><span class="token punctuation">,</span> 11 <span class="token property">"container_type"</span><span class="token operator">:</span> <span class="token string">"pdf"</span><span class="token punctuation">,</span> 12 <span class="token property">"show_visual"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> 13 <span class="token property">"noemails"</span><span class="token operator">:</span> <span class="token boolean">true</span> 14<span class="token punctuation">}</span> 15</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>fileContent</code> - a base64 encoded PDF document.</p><p><code>noemails</code> - Determines whether email notifications will be sent. Default value is <code>true</code>. For API clients created before 2024-08-28, the default value is <code>false</code>.</p><p><strong>Note:</strong> Staging environment does not send out real emails.</p><p><strong>Note:</strong> Donât forget to set header <code>Content-Type: application/json</code></p><p>If everything goes well the API responds with a <code>doc_id</code> like this:</p><div class="language-json line-numbers-mode" data-ext="json"><pre class="language-json"><code><span class="token punctuation">{</span> 16 <span class="token property">"status"</span><span class="token operator">:</span> <span class="token string">"OK"</span><span class="token punctuation">,</span> 17 <span class="token property">"doc_id"</span><span class="token operator">:</span> <span class="token string">"QLcJD03LUP0S7DUeTGNobQdsiJGfzqRnULrGE0iV"</span><span class="token punctuation">,</span> 18 <span class="token property">"expires_at"</span><span class="token operator">:</span> <span class="token string">"2025-05-17T05:06:00Z"</span> 19<span class="token punctuation">}</span> 20</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Make a note of the <code>doc_id</code> value you receive (do not use the one in this example, it is expired) as you'll need it in the next steps.</p><div class="custom-container warning"><p class="custom-container-title">NOTE expires_at in the response</p><p>Be aware that doc_id expires in 14 days. Make sure to prepare files for signing just before user goes to sign. Currently it is not possible extend the expiry time of the doc_id, but can call prepare endpoint again and get new doc_id.</p></div><h3 id="_2-2-create-an-e-seal" tabindex="-1"><a class="header-anchor" href="#_2-2-create-an-e-seal" aria-hidden="true">
20#</a> 2.2 Create an e-seal</h3><p>Send a server-side <strong>POST</strong> request to <code>{{base_url}}/api/signatures/e-seal/create</code></p><p>The request body might look something like this:</p><div class="language-json line-numbers-mode" data-ext="json"><pre class="language-json"><code><span class="token punctuation">{</span> 21 <span class="token property">"client_id"</span><span class="token operator">:</span><span class="token string">"{{client_id}}"</span><span class="token punctuation">,</span> 22 <span class="token property">"secret"</span><span class="token operator">:</span><span class="token string">"{{secret}}"</span><span class="token punctuation">,</span> 23 <span class="token property">"doc_id"</span><span class="token operator">:</span><span class="token string">"{{col_doc_id}}"</span> 24<span class="token punctuation">}</span> 25</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><table><thead><tr><th>Request Param</th><th>Description</th></tr></thead><tbody><tr><td>client_id</td><td>Your eID Easy API client_id</td></tr><tr><td>secret</td><td>Your eID Easy API secret</td></tr><tr><td>doc_id</td><td>The same doc_id you got in step "1. Prepare the file for signing"</td></tr></tbody></table><p>Hmac and timestamp are sent to the server in the request header.</p>`,19)),s("table",null,[n[16]||(n[16]=s("thead",null,[s("tr",null,[s("th",null,"Header"),s("th",null,"Description")])],-1)),s("tbody",null,[n[15]||(n[15]=s("tr",null,[s("td",null,"X-Timestamp"),s("td",null,"UNIX timestamp in seconds, must not differ by more than 1 minute from the eID Easy server time")],-1)),s("tr",null,[n[14]||(n[14]=s("td",null,"X-HMAC-Signature",-1)),s("td",null,[n[12]||(n[12]=a("SHA256 HMAC in base64 format created by appending the client_id, doc_id, timestamp and the request path (including leading slash /) and signing the result with your eID Easy eseal HMAC key. See the ",-1)),s("a",k,[n[11]||(n[11]=a("Postman docs",-1)),t(l)]),n[13]||(n[13]=a(" for a calculation example.",-1))])])])]),n[20]||(n[20]=e(`<p>Here is the JavaScript reference for HMAC calculation:</p><div class="language-javascript line-numbers-mode" data-ext="js"><pre class="language-javascript"><code><span class="token keyword">let</span> timestamp <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span>Date<span class="token punctuation">.</span><span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// current UNIX timestamp in seconds</span> 26console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>timestamp<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1768990206</span> 27<span class="token keyword">let</span> requestURI <span class="token operator">=</span> <span class="token string">'/api/signatures/e-seal/create'</span><span class="token punctuation">;</span> <span class="token comment">// always this path</span> 28<span class="token keyword">let</span> client_id <span class="token operator">=</span> <span class="token string">'9kKmNtYQ7LDOlHvasAE9oYQ0gKS4V4Bl'</span><span class="token punctuation">;</span> <span class="token comment">// Get from id.eideasy.com after signing up.</span> 29<span class="token keyword">let</span> secret <span class="token operator">=</span> <span class="token string">'XvsYIa0QBKySBOU2HXwPSPqtH6gaDcrv'</span><span class="token punctuation">;</span> <span class="token comment">// Get from id.eideasy.com after signing up.</span> 30<span class="token keyword">let</span> doc_id <span class="token operator">=</span> <span class="token string">'3iSYuofit9jUSrEMrYP736Yd0dQNvBjo0B9x8hBv'</span><span class="token punctuation">;</span> <span class="token comment">
30// Known after previous request: 2.1 Prepare the file for signing</span> 31<span class="token keyword">let</span> hmac_key <span class="token operator">=</span> <span class="token string">'A9ZxKpM7cB2QyFJ0WvRHSaD4nU6EwT5'</span><span class="token punctuation">;</span> <span class="token comment">// Get from id.eideasy.com once eseal method is configured for you</span> 32 33<span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">createHmac</span><span class="token punctuation">(</span><span class="token parameter">key<span class="token punctuation">,</span> message</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 34 <span class="token keyword">const</span> enc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TextEncoder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 35 <span class="token keyword">const</span> cryptoKey <span class="token operator">=</span> <span class="token keyword">await</span> crypto<span class="token punctuation">.</span>subtle<span class="token punctuation">.</span><span class="token function">importKey</span><span class="token punctuation">(</span> 36 <span class="token string">'raw'</span><span class="token punctuation">,</span> 37 enc<span class="token punctuation">.</span><span class="token function">encode</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">,</span> 38 <span class="token punctuation">{</span> <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'HMAC'</span><span class="token punctuation">,</span> <span class="token literal-property property">hash</span><span class="token operator">:</span> <span class="token string">'SHA-256'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> 39 <span class="token boolean">false</span><span class="token punctuation">,</span> 40 <span class="token punctuation">[</span><span class="token string">'sign'</span><span class="token punctuation">]</span> 41 <span class="token punctuation">)</span><span class="token punctuation">;</span> 42 43 <span class="token keyword">const</span> signature <span class="token operator">=</span> <span class="token keyword">await</span> crypto<span class="token punctuation">.</span>subtle<span class="token punctuation">.</span><span class="token function">sign</span><span class="token punctuation">(</span><span class="token string">'HMAC'</span><span class="token punctuation">,</span> cryptoKey<span class="token punctuation">,</span> enc<span class="token punctuation">.</span><span class="token function">encode</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 44 <span class="token keyword">return</span> <span class="token function">btoa</span><span class="token punctuation">(</span>String<span class="token punctuation">.</span><span class="token function">fromCharCode</span><span class="token punctuation">(</span><span class="token operator">...</span><span class="token keyword">new</span> <span class="token class-name">Uint8Array</span><span class="token punctuation">(</span>signature<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 45<span class="token punctuation">}</span> 46 47<span class="token keyword">let</span> message <span class="token operator">=</span> client_id <span class="token operator">+</span> doc_id <span class="token operator">+</span> timestamp <span class="token operator">+</span> requestURI<span class="token punctuation">;</span> 48console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// message string is "9kKmNtYQ7LDOlHvasAE9oYQ0gKS4V4Bl3iSYuofit9jUSrEMrYP736Yd0dQNvBjo0B9x8hBv1768990109/api/signatures/e
48-seal/create"</span> 49 50<span class="token keyword">let</span> hmac <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">createHmac</span><span class="token punctuation">(</span>hmac_key<span class="token punctuation">,</span> message<span class="token punctuation">)</span><span class="token punctuation">;</span> 51console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>hmac<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// iJcn537VbFwPiMDGPBx2dyuRcpx7OAONiTlyqFHFUjU=</span> 52</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="_2-3-fetch-the-e-sealed-file" tabindex="-1"><a class="header-anchor" href="#_2-3-fetch-the-e-sealed-file" aria-hidden="true">#</a> 2.3 Fetch the e-sealed file</h3><p>Make a POST request to <code>{{base_url}}/api/signatures/download-signed-file</code> with the following request body:</p><div class="language-json line-numbers-mode" data-ext="json"><pre class="language-json"><code><span class="token punctuation">{</span> 53 <span class="token property">"secret"</span><span class="token operator">:</span> <span class="token string">"{{secret}}"</span><span class="token punctuation">,</span> 54 <span class="token property">"client_id"</span><span class="token operator">:</span> <span class="token string">"{{client_id}}"</span><span class="token punctuation">,</span> 55 <span class="token property">"doc_id"</span><span class="token operator">:</span><span class="token string">"{{doc_id}}"</span> 56<span class="token punctuation">}</span> 57</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>doc_id</code> - the same doc_id you got in step "1. Prepare the file for signing"</p><div class="custom-container warning"><p class="custom-container-title">NOTE</p><p>Just a friendly reminder that this request should be made server-side. You do not want to expose your <strong>secret</strong> in the front-end.</p></div><p>Example response:</p><div class="language-json line-numbers-mode" data-ext="json"><pre class="language-json"><code><span class="token punctuation">{</span> 58 <span class="token property">"status"</span><span class="token operator">:</span><span class="token string">"OK"</span><span class="token punctuation">,</span> 59 <span class="token property">"signed_file_contents"</span><span class="token operator">:</span><span class="token string">"UEsDBBQAAAgAAHI6z06KIflFHwAA"</span><span class="token punctuation">,</span> 60 <span class="token property">"filename"</span><span class="token operator">:</span><span class="token string">"signed_doc.pdf"</span> 61<span class="token punctuation">}</span> 62</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>signed_file_contents</code> - signed file in base64 encoding.</p>`,10))])}const b=c(d,[["render",g],["__file","cloud-based-eseal.html.vue"]]);export{b as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.