What does EditionGuard do?

EditionGuard is a new web based service, providing a cost-effective and easy to use eBook DRM solution. We created the service due to popular demand we received from eBook publishers and authors.

Basicly, you can think of EditionGuard as a secure vault where you keep your eBooks safely. Only those you grant access to through your website will have access to your works, and you will be aware of whomever accesses them and when they were accessed.

Once you upload an eBook to our service, it is immediately encrypted using the latest in cryptographic algorithms and stored securely on our DRM server. Therefore, once the eBook is uploaded, you, and only you hold the key to allowing users to decrypt and access the contents of the eBook. At that point, you can automate this decryption process by implementing our easy to use Fulfillment API in your e-commerce application, independent of its platform.

Typically, eBook DRM systems have very high capital and operational costs associated with them. Not only would you have to pay for costly server software licenses, you would also need to setup and manage your own IT infrastructure consisting of various expensive server hardware and software.

Also, the software components of a DRM system are usually quite complex and low-level. What this means is that you’re expected to develop and integrate your own management and business logic layers on top of the DRM system to utilize it comprehensively. While this structure allows for some flexibility, we found that most of our customers really want to perform some simple tasks easily, without having to dabble in all the technical details involved.

These are the main reasons we created EditionGuard. We want to provide you with a cost-effective and easy to manage DRM system, while still maintaining the robust and flexible infrastructure present in its core by basing the system on industry standard technologies.

Our service is being used by a wide range of eBook publishers, distributors and authors. Examples of some of our client profiles are as follows;

  • Bookstore chains who wish to offer eBooks securely to their clients through the web,
  • Self publishers who want to put up their eBooks on their blogs securely,
  • E-Commerce sites with a wide range of products wanting to include eBooks in their product range,
  • Publishing Houses of all sizes wanting to publish and distribute their titles online,
  • Government institutions with a desire to sell their publications digitally through their portals

Getting Started

The purpose of this guide is simple; to get you up and running as quickly as possible! Therefore, we’ve prepared a series of steps that you can follow easily in order to start distributing your eBooks securely. Are you ready? Here we go.

  1. Uploading your eBook for protection

    1. Log in to your account using the “Sign In” button on the top right corner of the website. If you don’t currently have a subscription, you can visit the “Pricing” page to choose a service plan that fits your needs. Once you’re logged in to the site with your subscriber account, move to step 2.

    2. Once you’re logged in, click on the “My eBooks” link at the top of the page. This link will take you to the eBook management interface, where you’ll be adding, updating and deleting your eBooks. There will be grid listing your eBooks uploaded to our service, though it may be empty for now if you’re just beginning.

    3. Click on the “Add Ebook” button.

    4. Fill out the required Title, Author and Publisher fields on the form that comes up. Then, click on the “Upload a file” button next to the eBook File field. A file chooser dialog will come up, where you can select a PDF or ePub file for uploading. Select a file you would like to upload, then wait for the spinning indicator to disappear. The name of the file you uploaded will appear in its stead.

    5. You’re now ready to upload your eBook. Click the “Save” button to securely store and DRM enable your eBook. Wait until the message “Your data has been successfully stored in the database” appears*. One it does, click the “Back to list” button to go back to your eBook list. * If an error appears instead, try using another file or if you believe there is an error in the system, please visit our Help Desk and report the issue so we can assist you further.

    6. You’re now back at the eBook management interface, and you should be looking at a grid listing the eBook you just uploaded, along with any others you might’ve uploaded before. Most of the columns are self explanatory, but perhaps the most unclear and important one is the “Resource ID” column. This column shows you the unique identifier that points to your eBook within our system. You will be using this identifier to specify which eBook you wish to be downloaded in the following steps under “Authorizing eBook Downloads”. You’re now done with the first part of our Quick Start Guide. Congratulations! Now move on to the next step.


  2. Authorizing eBook Downloads

    1. In the second part of our Quick Start Guide, we will see how to generate a special link that will authorize eBooks you secured in the first part to be downloaded. This part will require some basic programming knowledge, where we will be providing code samples in the C# and PHP languages.

    2. Start up your favorite IDE, create a new file and add the code snippet of your preferred language within it.

      PHP
      <!DOCTYPE html> 
      <html> 
          <head> 
              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
              <title></title> 
          </head> 
          <body>
              <?php
              $dateval=time(); 
              $sharedSecret = ""; // Place your unique distributor shared secret, keep this safe or the api can be used in your stead by others!
              $transactionId = ""; // Must be a unique value, generated by you for your records
              $resourceId = ""; // Place Content Server Resource ID starting with urn:uuid:
              $linkURL = "http://acs4.editionguard.com/fulfillment/URLLink.acsm"; // Content server service url, do not change.
              $orderSource = ""; // Your EditionGuard subscription e-mail address.
              
              // Create download URL
              $URL = "action=enterorder&ordersource=".urlencode($orderSource)."&orderid=".urlencode($transactionId)."&resid=".urlencode("$resourceId")."&dateval=".urlencode($dateval)."&gblver=4";
      
              // Digitally sign the request
              $URL = $linkURL."?".$URL."&auth=".hash_hmac("sha1", $URL, base64_decode($sharedSecret));
              ?>
              
              <a href="<?php print $URL; ?>"> Click here to download eBook</a> 
              
          </body> 
      </html>
      ASP.NET C#
      <%@ Page Language="C#" %> 
      <%@ Import Namespace="System.Security.Cryptography"  %> 
      <%@ Import Namespace="System.Globalization" %> 
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
      
      <script runat="server"> 
          public static string SignedEbookLink()
          {
              string sharedSecret = ""; // Place your unique distributor shared secret, keep this safe or the api can be used in your stead by others!
              string transactionId = ""; // Must be a unique value, generated by you for your records
              string resourceId = ""; // Place Content Server Resource ID starting with urn:uuid:
              string orderSource = ""; // Your EditionGuard subscription e-mail address.
              
              string querystring = string.Format("action=enterorder&ordersource={0}&orderid={1}&resid={2}&gbauthdate={3}&dateval={4}&gblver=4", HttpUtility.UrlEncode(orderSource), transactionId, HttpUtility.UrlEncode(resourceId), HttpUtility.UrlEncode(DateTime.Now.ToUniversalTime().ToString("MM/dd/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo)), ToUnixTime(DateTime.Now));
              return string.Format("http://acs4.editionguard.com/fulfillment/URLLink.acsm?{0}&auth={1}", querystring, HashingHmacSha1(querystring, sharedSecret));
          }
      
          private static string HashingHmacSha1(string value, string key)
          {
              byte[] sharedSecretBytes = Convert.FromBase64String(key);
              ASCIIEncoding encoding = new ASCIIEncoding();
              HMACSHA1 hmacsha1 = new HMACSHA1(sharedSecretBytes);
              byte[] messageBytes = encoding.GetBytes(value);
              byte[] hashmessage = hmacsha1.ComputeHash(messageBytes);
              return ByteToString(hashmessage);
          }
      
          private static string ByteToString(byte[] buff)
          {
              string sbinary = "";
              for (int i = 0; i < buff.Length; i++)
              {
                  sbinary += buff[i].ToString("X2");
              }
              return (sbinary.ToLower());
          }
      
          static int ToUnixTime(DateTime timeToConvert)
          {
              TimeSpan span = new TimeSpan(DateTime.Parse("1/1/1970").Ticks);
              DateTime time = timeToConvert.Subtract(span);
              int t = (int)(time.Ticks / 10000000);
              return (t);
          }
      </script> 
      
      <html xmlns="http://www.w3.org/1999/xhtml"> 
      <head runat="server"> 
          <title> </title> 
      </head> 
      <body> 
          <form id="form1" runat="server"> 
          <div> 
          <a href="<% =SignedEbookLink() %> "> Click here to download eBook</a> 
          </div> 
          </form> 
      </body> 
      </html>

    3. Open up your “My Account” page, and enter the values shown there in the appropriate places inside the code;

      1. Set the orderSource variable to be the e-mail address you used for subscribing to EditionGuard

      2. Set the sharedSecret variable to the value shown shown on the page

      3. Set the resourceId variable to the Resource Id of the eBook we uploaded in Part 1 of this guide.

      4. Set the transactionId variable to some random variable. It is important to make sure that this variable is unique, as it will be the unique identifier for this download.

    4. Run the code snippet you created and open up the page in your browser. Notice the “Click here to download eBook” link.

    5. Examine the link. Notice the values you entered in step 2.c. along with an “auth” variable. This variable is the digital signature created using your secret key, and there is no way to download your eBooks without providing this digital signature.

    6. Click the link. A file with an .acsm extension will be downloaded. This is a special file that can be opened in Adobe Digital Editions, or ADE. If you don’t have it installed, go ahead and do it now on Adobe’s site.

    7. Once you have ADE installed, open the .acsm file using it. Create and authorize an Adobe ID if you need to.

    8. Your eBook will be downloaded and displayed in ADE.

    9. Congratulations, you’ve completed the Quick Start Guide! Hopefully, you’ve gained deeper understanding of how the main components of the system works. Please feel free to comment and ask questions if anything is unclear. Cheers!

Fulfillment API

The Fulfillment API is used for authorizing eBook decryption and downloads for your users through the web.

By creating a digitally signed download link, using your secret key and other account credentials, you can call the Fulfillment API to authorize immediate and secure downloads. Please examine the code samples below to get an understanding on how the digitally signed download link is generated.

PHP
<!DOCTYPE html> 
<html> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
        <title></title> 
    </head> 
    <body>
        <?php
        $dateval=time(); 
        $sharedSecret = ""; // Place your unique distributor shared secret, keep this safe or the api can be used in your stead by others!
        $transactionId = ""; // Must be a unique value, generated by you for your records
        $resourceId = ""; // Place Content Server Resource ID starting with urn:uuid:
        $linkURL = "http://acs4.editionguard.com/fulfillment/URLLink.acsm"; // Content server service url, do not change.
        $orderSource = ""; // Your EditionGuard subscription e-mail address.
        
        // Create download URL
        $URL = "action=enterorder&ordersource=".urlencode($orderSource)."&orderid=".urlencode($transactionId)."&resid=".urlencode("$resourceId")."&dateval=".urlencode($dateval)."&gblver=4";
 
        /* If you want the eBook to expire after a certain period of time,
        append the "rights" parameter to the link as shown below. 
        If not, simply omit this parameter. 
        The time period for the below example is three days. 
        We convert it into seconds using the formula: 
        3 days x 24 hours x 60 minutes x 60 seconds */
        $URL .= "&rights=$".urlencode("urt#").(3 * 24 * 60 * 60)."$";
        
        // Digitaly sign the request
        $URL = $linkURL."?".$URL."&auth=".hash_hmac("sha1", $URL, base64_decode($sharedSecret));
        ?>
        
        <a href="<?php print $URL; ?>"> Click here to download eBook</a> 
        
    </body> 
</html>
ASP.NET C#
<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Security.Cryptography"  %> 
<%@ Import Namespace="System.Globalization" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 
    public static string SignedEbookLink()
    {
        string sharedSecret = ""; // Place your unique distributor shared secret, keep this safe or the api can be used in your stead by others!
        string transactionId = ""; // Must be a unique value, generated by you for your records
        string resourceId = ""; // Place Content Server Resource ID starting with urn:uuid:
        string orderSource = ""; // Your EditionGuard subscription e-mail address.
        
        string querystring = string.Format("action=enterorder&ordersource={0}&orderid={1}&resid={2}&gbauthdate={3}&dateval={4}&gblver=4", HttpUtility.UrlEncode(orderSource), transactionId, HttpUtility.UrlEncode(resourceId), HttpUtility.UrlEncode(DateTime.Now.ToUniversalTime().ToString("MM/dd/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo)), ToUnixTime(DateTime.Now));
        
        /* If you want the eBook to expire after a certain period of time,
        append the "rights" parameter to the link as shown below. 
        If not, simply omit this parameter. 
        The time period for the below example is three days. 
        We convert it into seconds using the formula: 
        3 days x 24 hours x 60 minutes x 60 seconds */
        querystring += "&rights=$" + HttpUtility.UrlEncode("urt#") + (3 * 24 * 60 * 60) + "$";
        
        return string.Format("http://acs4.editionguard.com/fulfillment/URLLink.acsm?{0}&auth={1}", querystring, HashingHmacSha1(querystring, sharedSecret));
    }

    private static string HashingHmacSha1(string value, string key)
    {
        byte[] sharedSecretBytes = Convert.FromBase64String(key);
        ASCIIEncoding encoding = new ASCIIEncoding();
        HMACSHA1 hmacsha1 = new HMACSHA1(sharedSecretBytes);
        byte[] messageBytes = encoding.GetBytes(value);
        byte[] hashmessage = hmacsha1.ComputeHash(messageBytes);
        return ByteToString(hashmessage);
    }

    private static string ByteToString(byte[] buff)
    {
        string sbinary = "";
        for (int i = 0; i < buff.Length; i++)
        {
            sbinary += buff[i].ToString("X2");
        }
        return (sbinary.ToLower());
    }

    static int ToUnixTime(DateTime timeToConvert)
    {
        TimeSpan span = new TimeSpan(DateTime.Parse("1/1/1970").Ticks);
        DateTime time = timeToConvert.Subtract(span);
        int t = (int)(time.Ticks / 10000000);
        return (t);
    }
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title> </title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <a href="<% =SignedEbookLink() %> "> Click here to download eBook</a> 
    </div> 
    </form> 
</body> 
</html>

Use the Packaging API to upload eBooks automatically to EditionGuard, as well as update existing eBooks and activate/deactivate them. It is particularly useful if you need to automate eBook packaging processes.

For instance when you need to add thousands of titles, it would be quite cumbersome to add them one by one through the web interfaces. Instead, you could call our API programmatically to upload eBooks in batches.

Another case maybe that you have business logic on your website that requires automatic operations performed on your eBooks only after some conditions are met. Again, you can call the API whenever it is needed within the flow of your application logic.

We recommend that you examine the sample form codes below to get a better understanding.

PHP
<!-- 
In this sample form, your EditionGuard account information is assumed to be: 
E-Mail Address: abc@yourdomain.com  
Shared Secret: Secret
Please replace these values with your own credentials to use the API on your account. 
-->
<?php
$secret = "Secret"; // Place your unique distributor shared secret, keep this safe or the api can be used in your stead by others!
$nonce = rand(1000000, 999999999); // Random nonce value
$email = "abc@yourdomain.com"; // Your e-mail address
$hash = hash_hmac("sha1", $nonce.$email, base64_decode($secret)); // Generates your dynamic digital signature
$resource_id = ""; // Include the resource id if you want to update an eBook that was uploaded before. 
?>
<form method="post" enctype="multipart/form-data" action="http://www.editionguard.com/api/package">
    <input type="hidden" name="email" value="<?php echo $email ?>" />
    <input type="hidden" name="nonce" value="<?php echo $nonce ?>" />
    <input type="hidden" name="hash" value="<?php echo $hash ?>" />
    Title: <input type="text" name="title" /><br>
    Author: <input type="text" name="author" /><br>
    Publisher: <input type="text" name="publisher" /><br>
    File: <input type="file" name="file" /><br>
    Resource Id (optional): <input type="text" name="resource_id" value="<?php echo $resource_id ?>" /><br>
    <input type="submit" />
</form>
            
ASP.NET C#
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Security.Cryptography"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    /*
    In this sample page, your EditionGuard account information is assumed to be the below values. Please change them with your own credentials.
    E-Mail address: abc@yourdomain.com  
    Shared Secret: Secret
    Please replace these values with your own credentials to use the API on your account. 
    */
    public string secret, nonce, email, hash, resource_id;
    
    protected void Page_Load(object sender, EventArgs e)
    {
        secret = "Secret"; // Place your unique distributor shared secret, keep this safe or the api can be used in your stead by others!
        nonce = RandomNumber(1000000, 999999999); // Random nonce value
        email = "abc@yourdomain.com"; // Your e-mail address
        hash = HashingHmacSha1(nonce + email, secret); // Generates your dynamic digital signature
		 resource_id = ""; // Include the resource id if you want to update an eBook that was uploaded before.
    }

    private string HashingHmacSha1(string value, string key)
    {
        byte[] sharedSecretBytes = Convert.FromBase64String(key);
        ASCIIEncoding encoding = new ASCIIEncoding();
        HMACSHA1 hmacsha1 = new HMACSHA1(sharedSecretBytes);
        byte[] messageBytes = encoding.GetBytes(value);
        byte[] hashmessage = hmacsha1.ComputeHash(messageBytes);
        return ByteToString(hashmessage);
    }

    private string ByteToString(byte[] buff)
    {
        string sbinary = "";
        for (int i = 0; i < buff.Length; i++)
        {
            sbinary += buff[i].ToString("X2");
        }
        return (sbinary.ToLower());
    }
    
    private string RandomNumber(int min, int max)
    {
        Random random = new Random();
        return Convert.ToString(random.Next(min, max)); 
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="http://www.editionguard.com/api/package">
    <input type="hidden" name="nonce" value="<% =nonce %>" />
    <input type="hidden" name="email" value="<% =email %>" />
    <input type="hidden" name="hash" value="<% =hash %>" />
    Title: <input type="text" name="title" /><br>
    Author: <input type="text" name="author" /><br>
    Publisher: <input type="text" name="publisher" /><br>
    File: <input type="file" name="file" /><br>
    Resource Id (optional): <input type="text" name="resource_id" /><br>
    <input type="submit" />
</form>
</body>
</html>


You use any other programming language or command line tool (such as curl) that can do a POST request similar to these forms in order to use this API.

After posting your form data, you will receive an XML response that denotes either a success or error. In the case of success, the returned XML will be similar to the one below.

<resourceItemInfo xmlns="http://ns.adobe.com/adept">
  <resource>urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</resource>
  <resourceItem>0</resourceItem>
  <metadata>
    <dc:title xmlns:dc="http://purl.org/dc/elements/1.1/">Book Title</dc:title>
    <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Book Creator</dc:creator>
    <dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">application/pdf</dc:format>
    <dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Book Publisher</dc:publisher>
  </metadata>
  <src>http://acs4.editionguard.com/media/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.pdf</src>
  <downloadType>simple</downloadType>
  <licenseToken>
    <resource>urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</resource>
    <permissions>
      <display/>
    </permissions>
  </licenseToken>
</resourceItemInfo>

Once you get this success XML, you'll need to store the inner value of the resourceItemInfo/resource node. This is the unique identifier of your eBook in encrypted form on EditionGuard, and you will be using it for fulfillment purposes.

In the case of an error with packaging, you'll get an XML response similar to the one below.

<error xmlns="http://ns.adobe.com/adept" data="E_PACK_UNKNOWN_FILE_TYPE http://acs4.editionguard.com/packaging/Package"/>

If you get this error XML, you can look at the data attribute to see what the problem might be. If you're unable to make sense of the error and can't troubleshoot the issue on your own, please visit our Help Desk for further help.

Another feature of the packaging API is status management for your eBooks. You can activate or deactivate existing eBooks in your account anytime with this API. You use the same authentication logic as the previous forms, you only have to include an extra parameter called "status" in your form.

<form method="post" enctype="multipart/form-data" action="http://www.editionguard.com/api/set_status">
    <input type="hidden" name="email" value="your EditionGuard account email" />
    <input type="hidden" name="nonce" value="nonce" />
    <input type="hidden" name="hash" value="hash" />
    Resource Id: <input type="text" name="resource_id" /><br>
    Status: <select name="status"><option value="active">Active</option><option value="inactive">Inactive</option></select><br />
    <input type="submit" />
</form>

Finally, you can also delete eBooks you uploaded by doing a call to the delete service of the API.

<form method="post" enctype="multipart/form-data" action="http://www.editionguard.com/api/delete">
    <input type="hidden" name="email" value="your EditionGuard account email" />
    <input type="hidden" name="nonce" value="nonce" />
    <input type="hidden" name="hash" value="hash" />
    Resource Id: <input type="text" name="resource_id" /><br>
    <input type="submit" />
</form>

Using the Reporting API, you can get to your eBook download statistics in JSON or XML formats, to create all kinds of reporting tools on your own website. Simply perform a post request with a starting and ending date, along with your account credentials to get the report in the format you desire. Below are two examples in PHP

Sample form to get eBook download report in XML
<!-- 
In this sample form, your EditionGuard account information is assumed to be: 
E-Mail Address: abc@yourdomain.com  
Shared Secret: Secret
Please replace these values with your own credentials to use the API on your account. 
-->
<?php 
$secret = "Secret";
$nonce = rand(1000000, 999999999); // Random nonce value
$email = "abc@yourdomain";
$hash = hash_hmac("sha1", $nonce.$email, base64_decode($secret));
$format = "xml" // valid values are "xml" or "json"
?>
<form method="post" enctype="multipart/form-data" action="http://www.editionguard.com/api/report/<?php echo $format ?> ?>">
    <input type="hidden" name="email" value="<?php echo $email ?>" />
    <input type="hidden" name="nonce" value="<?php echo $nonce ?>" />
    <input type="hidden" name="hash" value="<?php echo $hash ?>" />
    Start Date: <input type="text" name="start_date" value="<?php echo date("Y", time())."-01-01" ?>"/><br>
    End Date:<input type="text" name="end_date" value="<?php echo date("Y-m-d", time()) ?>" /><br>
    <input type="submit" />
</form>
Sample XML data returned from the API
<?xml version="1.0" encoding="UTF-8"?>
<results>
        <result>
            <resourceid>urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</resourceid>
            <transtime>2012-06-06 11:33:51.0</transtime>
            <name>abc@yourdomain.com</name>
            <title>ABC eBook</title>
            <distributorid>urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</distributorid>
            <transactionid>12345</transactionid>
        </result>
        <result>
            <resourceid>urn:uuid:67d4e222-7d4f-4d90-9c63-81b91c180804</resourceid>
            <transtime>2012-06-08 15:25:45.0</transtime>
            <name>abc@yourdomain.com</name>
            <title>My Test</title>
            <distributorid>urn:uuid:xxxxxxxx-4a11-44f3-bfab-656b52502969</distributorid>
            <transactionid>12346</transactionid>
        </result>
        <result>
            <resourceid>urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</resourceid>
            <transtime>2012-06-10 11:33:51.0</transtime>
            <name>abc@yourdomain.com</name>
            <title>Your eBook</title>
            <distributorid>urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</distributorid>
            <transactionid>12347</transactionid>
        </result>
    </results>
Sample JSON Data returned from the reporting API
[
{"name":"abc@yourdomain.com","transtime":"2012-06-06 11:33:51.0","transid":"12345","resourceid":"urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","distid":"urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","title":"ABC eBook"}
,
{"name":"abc@yourdomain.com","transtime":"2012-06-08 11:33:51.0","transid":"12346","resourceid":"urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","distid":"urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","title":"My Test"}
,
{"name":"abc@yourdomain.com","transtime":"2012-06-10 11:33:51.0","transid":"12347","resourceid":"urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","distid":"urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","title":"Your eBook"}
]

Frequently Asked Questions

When creating our service, we imagined the main reason to use our service would be to avoid the high capital and time investments of purchasing, deploying and integrating an ACS4 infrastructure on your own. Also, you will be able to utilize easy management and reporting tools that are not available in the original ACS4 package.

DRM makes it easy to track when and who downloaded your eBooks, how they were used. It gives you control over the rights you wish your readers to have on your eBooks, as well as protecting them from unauthorized viewing and duplication.

No. You only pay the download fee the first time a user downloads a particular eBook. Let's say Bob downloads an eBook called Incredible Cookie Recipes through our service on to his PC. A week later, he decides to download the same eBook on his iPad. The only time the download fee is accrued when Bob downloads the eBook for the first time. A couple days later, Sue also downloads the same eBook on her laptop. A download fee is accrued. But if she downloads the same eBook onto her Nook the following week, you don't pay a fee. All this is because our system tracks which user downloads which eBook and charges you for only the first download of an eBook by a certain user.

Certainly. In fact, EditionGuard is compatible with most tablet devices, eReaders and smartphones. For a complete list of devices and applications compatible with our system, please visit the full listing on Adobe's site.

You can examine sample reference implementations we provide for generating a digitally signed link for the Fulfillment API. The code for these implementations are currently provided in the PHP and ASP.NET C# platforms. Note that you’re not limited to these two languages; porting of these implementations should be fairly easy to achieve on most modern web languages. You can view our Fulfillment API or follow our Quick Start Guide to get a better understanding.

Yes. After logging on to our site with your credentials, you can click the Reports link in the "My Account" menu to get real time information about fulfillments performed through your account. Please note that fulfillment occurs only when an end-user has succesfully downloaded AND opened an eBook through our Fulfillment API service. You can also use our Reporting API to integrate reporting functionality with your own website.

Our service is powered by the industry standard Adobe Content Server 4, which is based on the newest and best protection and encryption technologies available today. The high success of the product in this area has allowed large brands such as Google Books, Barnes & Noble and Simon & Schuster to choose Adobe Content Server 4 as their DRM technology. You can use this same system at a fraction of the cost through our service.

You can pay through PayPal using your Debit or Credit cards or if you already have a PayPal account, it is fully supported for payments.

In order to process large quantities of eBooks automatically, you can use our Packaging API instead of the interactive web interfaces. You can view our Packaging API for more details.