Document signing for developers.
Subscribe to our blog (RSS)

Yesterday’s Data Loss

Yesterday evening, I was testing an upcoming new feature on my development machine. This feature required a configuration update. When making that change, I swapped in the wrong credentials.

I used the production database credentials instead of the staging database credentials I wanted to test against. Because of how the tests work, the database was cleared of all data.

I deleted all the data in’s production database. Yes, all of it.

We believed the data loss was temporary so we got to work trying to restore the data. We host our database with Heroku Postgres so we contacted them immediately for help.

Because it was the evening, the response did not come till hours later.

In the meantime, we were starting to re-create some of the data from a combination of logs and a very very old backup.

When we finally heard back from Heroku this morning, it was that they could not do anything. was running on the $9/month starter plan - part of the Starter tier. It turns out they don’t have extensive recovery capabilities on the starter tier and could not recover our data.

We even had Heroku pgbackups enabled. We were mistakenly under the impression that it created daily backups for all paid plans. It turns out it only create daily backups for $50/month plans and up.

So while we have restored some data, the majority is lost, and likely you will find yourself having to signup again and swap out your API tokens.

Obviously, this should have never happened. It should be very difficult to cause data loss like this and very easy to recover from it.

Our plan moving forward:

  1. Upgrade our Heroku Postgres database to the $50/month crane plan - part of the Production tier. This is already done.
  2. Confirm that daily pgbackups are functioning.
  3. Move our testing to a continuous integration server. This will make it very difficult to change a config setting to a production value.

We’re EXTREMELY sorry for this.

Please email if you need to discuss the outage further.


We use Sinatra at We couldn’t find an asset packager we were happy with so we built our own.

It’s called SinatraAssetPackager. Like the title says, it’s an asset packager for Sinatra. There are 3 other popular ones - smart_asset, sinatra-assetpack, and sinatra-asset-pipeline. All of these had drawbacks though. They were either tricky to get setup, would compile slowly while on production, or were trying to do too much.

SinatraAssetPackager is opinionated and quick to get setup. Plus it will precompile your assets automatically for production if using with heroku.

Check it out for yourself.

LegalBeast wins at Startup Weekend Riverside!

LegalBeast won the prize at Riverside’s 1st Startup Weekend! They created a startup that assists renters in getting their deposits back from landlords by submitting legal documents such as demand letters.

To collect the necessary signatures they turned to the API, and for that they won a grab bag of goodies and $100 in cash. We wish them the best as they continue to build their startup!

Watch their pitch to the judges here.


You can now track events with’s API at /api/v0/events.json. Events are our way of letting you know that something interesting just happened in your account.

For example, you can track all your documents signed by querying specifically for the document.signed event.

Here’s a list of some of the events you can currently track:

  • document.created
  • document.signed
  • signature.created
  • signature_element.created
  • text_element.created

Visit the docs to learn more.

Dashboard Refresh

We’ve refreshed the dashboard. It’s visual. It’s mobile friendly. We’ll build on this base. Visit your dashboard.