databook



Quickly integrate finance and transactional logic into your apps

How it works


Create your databook library

Use the web-interface or API to register for a subscription, then manage your library of databooks and accounts.

Post all your event transactions

Store all your application activity in databook. Perfect for finance, workflow or tracking apps.

We take care of the rest

Retrieve account balances and open items and provide fully featured accounting ledgers in your application

Resource Model


For more details visit api.databook.io or read the documentation.

  Subscription

  •   Library

    •   User
      •   Permission
    •   Book

      •   Account Group
      •   Account
      •   Activity

        •   Line
          •   Clearance

A subscription consists of a set of databases, each containing multiple libraries, each of which contains several books. Each book has multiple accounts which are configured as single or double entry and either credit or debit as default. Accounts can be aggregated together for reporting using Groups which are scoped at book level. A Library also has associated users each with a set of permissions to access various books, accounts or groups. Activity is recorded within a book, with each activity having one to many lines each associated with a particualr account. While libraries, users, permissions, books and accounts are system defined resources with well-known schemas, activity and lines contain arbitrary, user defined content.

What our customers said

Don't take our word. See our testimonials


Databook saves us hundreds of man hours a year and is an invaluable part of application eco-system. We use databook in our arena and venue ticket app to track customer workflow and handle the sales and purchase ledgers.
.

Damien Foggon
CTO of Decoded by Design

I first met the databook team divining for gold when I was searching for "plants" in the California redwoods, with my help and guidance they have created an awesome product that while I dont quite understand it, I know is the next Bebo.
.

Erlich Bachman
CEO of Aviato

Honest pricing. No surprises.

No contract. No risk. No credit card required.

Free
£0
Usage Limits
Application Plans
FROM£49/MO
Billed Monthly
Enterprise Plans
FROM£99/MO
Billed Annually
Frequently Asked Questions
How does the free subscription work?

Our free subscription is 100% free and does not require credit card information to start. If you would like to upgrade, great. If not, you can cancel your account altogether, or let us mark it as inactive for you to come back to later.

Can I switch plans later?

Absolutely. You can switch between our paid plans, or cancel your account altogether, whenever you like. We will adjust any payments accordingly.

Do I need to choose a plan now?

No. You get the full featured version of our service completely free with some fair use restrictions. Once you're ready to upgrade, you may choose a plan which suits your needs.

What payment types do you accept?

We provide a Direct Debit facility or accept payments from MasterCard, Visa, Visa Debit and American Express. Remember, you do not need to supply card details to get started.

Develop Your Way

Flexible business logic to suit your needs

Standard

Create Library and Books but define accounts and analysis on demand. Use this approach if you dont know all the system states and accounts ahead of time or if you are aggregating data from a source you dont control.

Strict

If your system requires a little bit more control change the book default to strict mode. This requires all accounts to be defined prior to posting an Activity line that references it. You still have schema-free analysis at activity and line detail.

Real-time

Account balances are usually calculated in an asynchronous background task, this trade-off means posting the original activity is lightning fast but a balance query is slightly slower. If your system requires faster balance queries then switch the book default to real-time. This means balances are calculated synchronously as part of the activity posting action.

Examples


Connect to a databook subscription

There are various SDKs and APIs available to programmatically work with databook. The samples below are shown in C# code and use the databook .NET SDK. The equivalent JSON is also shown if you are using the API direct or via Javascript.

Create the client using code like the following example.

C#
    private static string endpointUrl = "[endpoint url]";
    private static string authorizationUserId = "[your user id]";
    private static string authorizationKey = "[your key]";
    //Create a new instance of the DatabookClient
    var client = new DatabookClient(new Uri(endpointUrl), authorizationUserId, authorizationKey); 

Recording an Invoice

A simple double entry example. This example assumes the Library, Book and Accounts have been predefined already.
A Library represents a logical section in your application i.e. tenant or a sub-system

C#
    private const string LibraryId = "F895D43A-AC1C-44CA-95FF-74E55FB309F4";
    private const string BookId = "SalesLedger";
    private const string ReceivablesAccountId = "4000";
    private const string SalesAccountId = "5000"; 
   
    public PostInvoice(string invoiceId, decimal amount)
    {
        var posting = new Activity()
        {
            name = "Invoice",
            date = DateTime.Now,
            ref = invoiceId
        };
        posting.AddLine(SalesAccountId, credit: amount );
        posting.AddLine(ReceivablesAccountId, debit: amount);

client.Submit(LibraryId, BookId, posting); }
JSON
{
    "name": "Invoice",
    "date": "2014/8/31 12:34:52",
    "ref": "IN0001212"
    "lines": [
        {
            "accountId": "4000",
            "mode": "1",
            "base": "67.40"
        },
        {
            "accountId": "5000",
            "mode": "-1",
            "base": "67.40"
        }
    ]
}

Tracking Workflow with Clearance

The first function starts a particular task. The second function looks for the activity line in the InProgress account so the Finish step can clear this line to indicate the task has transitioned between states.
If clearance was not used the Task would exist in both accounts.

C#
    private const string LibraryId = "A3F9FD95-8FC1-4525-A5C4-8C4DE3ADF729";
    private const string BookId = "Workflow";
    private const string InProgressAccountId = "InProgress";
    private const string FinishedAccountId = "Finish";
                
// public StartTask(string taskId, DateTime startTime) { var stateChange = new Activity() { name = "Start Task", date = startTime, ref = taskId }; stateChange.AddLine(InProgressAccountId, 1)
client.Submit(LibraryId, BookId, stateChange); }
// public FinishTask(string taskId, DateTime finishTime) { // Find the open line matching this task in the InProgress account var openLineId = client.FindOpenItem(taskId, InProgressAccountId)
var stateChange = new Activity() { name = "Finish Task", date = finishTime }; var line = stateChange.AddLine(LibraryId, BookId, FinishedAccountId) line.AddClearance(openLineId);
client.Submit(LibraryId, BookId, stateChange); }
JSON
/* Start */
{
    "name": "Start Task",
    "date": "2014/8/31 12:34:52",
    "ref": "TASK0001"
    "lines": [
        {
            "accountId": "InProgress",
            "mode": "1",
            "base": "1"
        }
    ]
}

/* Open Line Query */ { "lineId": "TASK0001-1", "activityId": "TASK0001", "base": 1 }
/* Finish */ { "name": "Finish Task", "date": "2014/9/14 11:01:36", "ref": "TASK0001" "lines": [ { "accountId": "Finish", "mode": "1", "base": "1" "clearance":[ { "clearanceId": "TASK0001-1" } ] } ] }

Info

Greenwood St, Altrincham, WA14 1RZ
+44 161 928 8644
answers@cirrux.com
www.cirrux.com
Company Profile

Get in touch

If you would like us to get in touch please send you details.

Support

Email support@cirrux.com if your having a problem with one of our services or visit the status dashboard to view the current metrics.

© 2014 Cirrux. All Rights Reserved.