Not signed in (Sign In)

The Intervals Forum

Categories

The Intervals Forum is Closing!
This forum is being replaced with a new help section located at help.myintervals.com.
We recommend checking the help section first, as the forums no longer being updated. We will be keeping the forums open for a couple of weeks, after which they will no longer be available.

API [Closed]

Intervals API - sooner or later?

Bottom of Page

1 to 47 of 47

  1.  
    • Michael
    • Apr 24th 2007 edited @ 08/20/2009 11:04 am
     

    We are trying to gauge how much an API with Intervals would help our current customers. An API is on every Web 2.0 checklist, but we have focused our attention on listening to our customers and rolling out features that are most in demand.

    We have the core in place for an API in our framework are wondering if we should execute it sooner rather than later. Much to our surprise, many of our customers have been asking for more and more features and have not been clamoring for an API. They have been looking to use Intervals as their one stop place for all task, time, and project management needs.

    As web developers ourselves, we expected more API demand so here is your chance to sound off. Would you use an API? Should we move it to our list of features to execute sooner rather than later?

    As always, thanks for you thoughts - Michael

  1.  

    Our firm is definitely interested in an API as we would like the ability to exchange information captured in Intervals easily with other systems that are not web-based. Also, we are interested in any ability to link from other websites into Intervals.

    Robert

  2.  

    We would have interest in an API. We would like to import time into Dynamics GP as invoices and that would be great.
    Thanks,
    Matt

  3.  
    A full API would definitely be of interest to my company. We would love the ability to exchange Intervals data with other online and offline applications.
  4.  
    An API would be nice, but I think There are still some features that could be added before much attention is given to an API. For Instance, figuring out a way to get Pay (hourly, daily, weekly) listed on a resources info. This would help to determine margins. Let's figure this out before diving into an API
  5.  
    API Update
    We have begun development of the Intervals API and hope to launch soon. To give you a sneak peak inside of the API development, here is what you can expect:

    1. Authentication will use HTTP Basic Authentication

    2. The API will be accessible using POST requests

    3. Your Intervals data will be available via the API in both XML and JSON formats.

    4. Request lists of data or individual items



    Next Steps
    We still need to API-enable the individual actions (task lists, project lists, etc) and start testing. Meanwhile, we're finalizing the API documentation. We are considering launching a read-only API for now, to get it launched sooner, and then follow-up with a fully functional read-write API. So now is a good time to let us know your thoughts on the API. Do you have any ideas for us? Any needs for us to consider? Let us know.

    API Sneak Peak
    Here is an example, from our pending documentation, of how API calls will work:

    Request

    curl -H 'Accept: application/xml' -u jreevius:wh4t1tb3l1k3 http://url


    Response

    <?xml version="1.0" encoding="utf-8"?>
    <item>
    <key>value</key>
    <key>value</key>
    </item>
    • jreeve
    • Apr 23rd 2008 edited @ 04/23/2008 8:38 am
     

    The API is in its early stages of development. We are writing documentation and layering API aware code throughout the application. If you'd like to try it out, here is a way to use the API to start and stop timers:

    To start a timer:
    curl -k -H 'Accept: application/xml' -u [username]:[password] http://[yourdomain]/timer/start/0/[taskID]/

    To stop a timer:
    curl -k -H 'Accept: application/xml' -u [username]:[password] http://[yourdomain]/timer/stop/0/[taskID]/

    To clear a timer:
    curl -k -H 'Accept: application/xml' -u [username]:[password] http://[yourdomain]/timer/clear/0/[taskID]/

    For example, here is how I would start, stop, and clear a timer for task #14754:
    curl -k -H 'Accept: application/xml' -u jreeve:wh4t1tb3l1k3 http://pelago.projectaccount.com/timer/start/0/14754/
    curl -k -H 'Accept: application/xml' -u jreeve:wh4t1tb3l1k3 http://pelago.projectaccount.com/timer/stop/0/14754/
    curl -k -H 'Accept: application/xml' -u jreeve:wh4t1tb3l1k3 http://pelago.projectaccount.com/timer/clear/0/14754/

    Next up...
    Now that the basic foundation of the API has been built, we'll be API-enabling different areas of Intervals. The first areas to be retrofitted will be task views and lists.

    Give the timer API calls a try and let us know what you think!

  6.  

    Could you give a quick example of using your API using vbscript, vba or visual basic?
    Just to point me in the right direction...

    Thanks,
    Matt

  7.  

    I would love to beta-test your API. I really like what you've got going with Intervals. All of my time reporting is currently in Freshbooks and/or Basecamp (both of which have APIs).

    I'd like to get a jump-start on writing something to import from one or both of those services into Intervals. If you can provide me with an API, or if you would like to hire me to help you get the API done more quickly, I can do that.

    One question I have about the API is this: What's the 0 for just before the task id?

    Thanks.

  8.  

    This is an excellent approach; essentially the same strategy as most other W2.0 systems out there.

    We had been using BaseCamp before switching to Intervals and we have started a framework for importing MS Project XML files. It created an OO abstraction layer over BaseCamp so it treated all of the POST and returned XML elements as populated classes - much like an object relational mapper (since we already develop an ORM for SQL called BizBlox).

    Since you are attacking the tasks first, please see if you can also allow for task creation as well as just viewing/listing.
    I will start rewriting the wrapper for Intervals as I get some time and post it up. Its written in C# so any managed language can use it - and it could easily be ported to Java - I will post code back here as it gets done.

    Regards
    Joe

  9.  
    Any update on the API?
  10.  
    The API is in development, but is being lowered in priority so we can get Milestones and QuickBooks integration launched.
  11.  

    It works great - but I am missing the list of tasks! :-)
    Have you finished that part of the interface?

  12.  
    My biggest wish for the API is a task XML import function is that part of your vision for the future API?
  13.  
    What is the current timeline for the API? Is there a formal spec anywhere we could look at on comment on? I've found the tasks/list not to work the majority of the time, though the other requests seem to work ok with the same call.
  14.  
    I have developed an Adobe AIR based time tracking application called Klok (http://klok.mcgraphix.com) and have been gathering information about integration with existing online systems. I am very interested in finding out more about the forthcoming API. Please feel free to contact me directly through email (I assume you have the address since I needed it to register) or through my website.
  15.  
    I am also interested in the API. I would like to export project plans from OmniPlan and import XML into Intervals that automatically sets up tasks and assigns resources.
  16.  
    I am also interested in the API as we will be looking at moving a large bugzilla installation over. I am also interested though in the qb export and milestones. So I would say continue on all three :)
  17.  

    I'm also interested in the api to replace an existing app I use - my personal priorities would be:

    - List all client/projects/tasks
    - Ability to record Start/Stop times

    Then I could re-write the application I bought, using the same interface but with the intervals back-end.

    • bryan
    • Dec 11th 2008 edited @ 12/11/2008 9:18 am
     

    Any update on the API? We just started using intervals and we're very pleased with it. However, as a programmer I'd like more flexibility than what you have currently with your curl implementation. I understand it's still in development :D

    It would be cool to build a desktop timer, iPhone app, etc.

    Thanks.

  18.  
    Our priority in regards to the API is integration with Asterisk such that when the phone rings a list of contacts pop up on the screen. So basically for the API we would want a way to query (the soon to exist) contacts by the phone number, and then a way to launch/load that contact in a new browser window/tab.
  19.  

    I wanted to give everyone a quick update on the API.

    The API is currently in development. After meeting internally with our developers, we all agreed that the best approach is going to be the REST method. Our first release of the API will allow for basic interaction with tasks, time, projects, clients, invoices, documents, and so on. Subsequent releases will further enhance the API by adding specialized methods for common use scenarios like closing tasks, starting and stopping timers, etc.

    So stay tuned! The API is on its way and is going to be highly functional and versatile.

  20.  

    If you need help in beta testing it I'd be more than happy to help. I wouldn't mind helping write language specific implementation wrappers for PHP, Python either.

    I'm just excited for the API.

  21.  
    Terrific news about the upcoming API. My firm is rolling out an Intervals implementation this week, and is definitely interested in making use of the API for internal communications and such.
  22.  
    Yes, PLEASE launch the API. Intervals is the best project management tool we have found and we have tried them ALL...but still every company has its quirks & styles, therefore flexibility & customization options are crucial to make Intervals really work seamlessly with our business.
  23.  

    I am very interested in this. I would love to move at least the interface for clients onto my own site, so I can provide more options like submitting project requests etc. I'd like a way in the API to be able to create projects, if possible.

    I'm thinking about developing a simple control panel for clients hosted with me, and would love to tie Intervals into that, too.

  24.  

    I have an update on the API. We are putting the finishing touches on the read-only API (the writable API will be luanched soon after the read-only) and getting it ready for beta. If you would like to be a beta tester for the API, please email us and let us know and we'll add you to the list.

    We recently completed the API components and documentation. The only thing left is to layer in the authentication scheme that will control access to the API. We considered several methodologies and have finally settled on one. Thanks to all of you who participated in the survey. Your feedback was invaluable. We ultimately decided to use HTTP Basic Authentication in combination with User Tokens, as explained in item #2 below. Please read on to see our completed research on API Authentication options. Meanwhile, we should have the read-only portion of the API ready to go soon enough.


    1. HTTP Basic Authentication.
      Similar implementations: Basecamp (http://developer.37signals.com/basecamp/), blogger (deprecated) (http://code.blogger.com/archives/atom-docs.html#authentication)
      Requests are authenticated in the form of the user's username and password. Very easy to implement. Low security, but can be reinforced through the use of SSL/TLS (available on top three plan tiers). Users can disable API access from third-party apps at any time by changing their username or password.

    2. HTTP Token Authentication
      Similar implementations: Freshbooks (http://developers.freshbooks.com/), Highrise (http://developer.37signals.com/highrise/)
      Requests are authenticated through a token. Each user possesses a unique token, retrievable on that user's settings page. Rather than entering username/password information, users just key in their token. Also very easy to implement. Low security, but requires a more active role from the user. Security can also be reinforced through SSL/TLS (available on top three plan tiers). The token is a hash of the username and password, meaning users can enable or disable API access from third-party apps at any time by changing either. With this implementation and the ones following, users never have to hand over login credentials to third-party applications.

    3. Three-Legged Authentication
      Similar implementations: Facebook Connect (http://wiki.developers.facebook.com/index.php/Authenticating_Users_with_Facebook_Connect), Yahoo! BBAuth (http://developer.yahoo.com/auth/), Google AuthSub (http://code.google.com/apis/gdata/auth.html#AuthSub)
      In this approach, each developer registers for an API key. Requests are authenticated through the developer's API key and a user token. A token is retrieved when the API application redirects the user to a secure Intervals login page. After the user grants access to the API application, the API application retrieves the token. High security, but harder to implement. Also, a browser is required to grant authorization (though just once). May be overkill for developers building in-house applications. Users can disable API access per application by revoking access.

    4. Three-Legged Authentication with Request Signing
      Similar implementations: flickr (http://www.flickr.com/services/api/auth.spec.html), OAuth (http://oauth.net/core/1.0/#anchor9), Twitter (uses OAuth: http://apiwiki.twitter.com/OAuth-FAQ), Google OAuth (uses OAuth: http://code.google.com/apis/gdata/auth.html#OAuth), Yahoo! BBAuth
      Identical to #3, except API developers select a secret password when they register for an API key, and use this password to sign all requests. If any requests are intercepted, no modified requests can be made unless signed by the password known only to the developer and Intervals. Very high security (though not impenetrable), but more difficult to implement. May be overkill for developers building in-house apps. Options 3 and 4 can be implemented simultaneously with the decision to sign requests left up to each API application developer.

    • jreeve
    • Jun 19th 2009 edited @ 06/19/2009 11:11 am
     

    Here is a page of API examples from our upcoming beta documentation.

    Resource Operations

    As mentioned in the intro, resources follow RESTful principles. Each resource has two parts: a collection (e.g. a task list) and a member (e.g. an individual task). How you interact with these resources depends on which HTTP method you use and whether you are addressing a member or a collection.

    The API root URL is located at https://api.myintervals.com/

    Here are some examples of accessing resources:

    Accessing information about a task
    GET https://api.myintervals.com/task/13/

    Getting a full task list
    GET https://api.myintervals.com/task/

    Getting a filtered task list
    GET https://api.myintervals.com/task/?clientid=5443&personid=2344

    Creating a task
    POST https://api.myintervals.com/task/
    <task>...</task>

    Editing a task
    PUT https://api.myintervals.com/task/13/
    <task>...</task>

    Deleting a task
    DELETE https://api.myintervals.com/task/13/

    PUT/POST Interchangeability
    Though RESTful principles describe separate HTTP methods for creating and updating resources, we understand that there is limited support for PUT in certain development platforms. Consequently, you may use PUT and POST interchangeably; the system will determine whether a member is being created or updated based on whether or not a resource id is passed in the parameters.

    Sample Requests

    A simple example of how to request a task list using a formed HTTP request:


    <strong>GET</strong> https://api.myintervals.com/task/
    Accept: application/xml
    Authorization: Basic MTIzNDU6QUJDREU=

    For more complicated requests post your XML or JSON directly.

    The Content-type Header
    The Intervals API supports both XML and JSON as forms of input for PUT and POST requests, but you must specify which type you are using by including either application/xml or application/json in a Content-Type HTTP header sent with your request.

    An example of updating the description on a timer using XML.


    <strong>PUT</strong> https://api.myintervals.com/timer/9282/
    Accept: application/xml
    Content-type: application/xml
    Authorization: Basic MTIzNDU6QUJDREU=

    <?xml version="1.0" encoding="UTF-8"?>
    <timer>
    <name>Client X homepage redesign</name>
    </timer>

    An example of creating a new timer JSON.


    <strong>POST</strong> https://api.myintervals.com/timer/
    Accept: application/json
    Content-type: application/json
    Authorization: Basic MTIzNDU6QUJDREU=

    {
    "timer":{
    "personid":2051,
    "starttime":"2009-06-19 10:06:36",
    "name":"Meeting with Client Y"
    }
    }

    A more detailed description of each type of request, including required fields and the expected response, can be found in each individual resource page.

    Sample Response

    An example of a XML response. Please note that values containing reserved XML characters are embedded with CDATA tags to allow for proper XML parsing.


    <?xml version="1.0" encoding="UTF-8"?>
    <intervals status="OK" code="200">
    <client>
    <id>4561</id>
    <name>My Italian client</name>
    <datecreated>2007-09-04</datecreated>
    <description/>
    <firstname>Molto</firstname>
    <lastname>Bene</lastname>
    <email>whatever@blah.com</email>
    <website/>
    <phone>+44 01223 123456</phone>
    <cell>+44 01223 123456</cell>
    <fax>+44 01223 123456</fax>
    <address>810 Montecito St</address>
    <aptsuite>C</aptsuite>
    <city>Santa Barbara</city>
    <state>CA</state>
    <zip>93103</zip>
    <country>US</country>
    <active>t</active>
    </client>
    </intervals>

    An example of a JSON response:


    {
    "status":"OK",
    "code":200,
    "client":{
    "id":"4561",
    "name":"My Italian client",
    "datecreated":"2007-09-04",
    "description":null,
    "firstname":"Molto",
    "lastname":"Bene",
    "email":"info@myintervals.com",
    "website":null,
    "phone":"+44 01223 123456",
    "cell":"+44 01223 123456",
    "fax":"+44 01223 123456",
    "address":"810 Montecito St",
    "aptsuite":"C",
    "city":"Santa Barbara",
    "state":"CA",
    "zip":"93103",
    "country":"US",
    "active":"t"
    }
    }

    Note: These example responses have been formatted for easy viewing. The actual response returns with whitespace stripped.

    • dnewman
    • Jun 26th 2009 edited @ 06/26/2009 2:49 pm
     
    Using the API will I be able to create a new "client view" so that clients can log in and see progress and status on their projects without seeing hours applied or budget info?
  25.  
    You could potentially create a separate site with a client view that is completely customized. Keep in mind that the executive user is going to be phased out in the future with the ability to add multiple contacts to clients with more granular access control. Depending on your needs that separate update that is not related to the API may do the trick.
    • Michael
    • Jul 2nd 2009 edited @ 07/02/2009 2:40 pm
     

    We just launched the first draft of the documentation for the API. Feel free to take a look here. The read API is not quite beta yet but we are hoping to get it functional in the next few weeks.

  26.  
    Michael - we are very interested in leveraging this api for our change log - to create a change log automatically once intervals is populated with appropriate keywords to recognize a log-relevant task. We would be very interested in participating in the beta program.
    • Michael
    • Aug 20th 2009 edited @ 09/17/2009 1:17 pm
     

    We just sent an email to everyone that expressed interest in the API beta. If the email doesn't arrive or if you have any questions on where things are at or next steps please feel free to email api@myintervals.com.

    The API documentation can be found here http://www.myintervals.com/api/.

    Your API token can be created by logging into your Intervals account and navigating to Options -> My Account -> API Access.

    • bnix
    • Sep 21st 2009
     

    I am using curl to test drive the API and I am getting the following error: and then it just returns the html for the error page. This is the first time I have used curl, so please let me know if I am missing something

    Error Message>curl: (6) could not resolve host: application; host not found
    Command Used>curl -k -h 'Accept: application/json' -u <generated_token>:x https://api.myintervals.com/task

    I also tried with our actual domain and got the same thing.

    Thanks,

  27.  

    The only thing wrong I see with the code is the header should be proceed by a '-H' (capital H, not lowercase). I've just tested this from my laptop at home and it returned the json list of tasks.

    The message about not being able to find the host makes me think there may have been a temporary routing issue to the server. Please try submitting your curl request again.

    If you again get a message about the host not being found, please type 'traceroute api.myintervals.com' and send the output to api@myintervals.com.

    If you get the html error page, please email the date and time of the curl request to api@myintervals.com so we can check the server logs to see what may have gone wrong.

    Regards,
    John

    • bnix
    • Sep 22nd 2009
     

    Thanks for the prompt feedback John!

    I sent the information you requested to the api@myintervals.com.

    I was able to resolve the host error(I think), after rereading the error message I removed the space between the colon and application in 'Accept: application/json' and I did not get the host error anymore, but still returning the "Oh Snap" html.

    Thanks,

  28.  
    Thanks for the feedback. I'm glad we were able to resolve this API issue. Thanks to everyone who has been helping out with feedback on the API. And please let us know what types of applications everyone is creating. We would love to hear what your creative minds are up to.
  29.  

    I'm trying to write a hook for Subversion where if somebody mentions "task (number)" in their commit comment, that task gets updated with a comment about what changed. I've worked out the SVN side of things but I'm having an issue with the API: it seems to use some internal ID for tasks rather than the client-visibile ID (presumably some surrogate key used for all tasks stored by Intervals across all companies).

    For example, I have a task #6567 in my company's Intervals account, but I can't add a comment to it.

    curl --header "Accept: application/json" --insecure -u "********" https://api.myintervals.com/task/6567

    ...results in:
    {"personid":null,"status":"Forbidden","code":403,"error":{"code":10,"message":"User not authorized to access this information","verbose":["You don't appear to have the correct permissions to access the element you are trying to access."]}}

    However, if I use a six-digit ID I found while reverse-engineering some Ajax used when viewing a task, the comment does show up. I have the same kind of error when trying to view a task using GET /task/number where number is the four-digit number used for task numbers in the UI and not the surrogate key.

    Is this a known bug or am I doing something wrong?

    • atalabac
    • Oct 14th 2009 edited @ 10/14/2009 12:29 pm
     

    Also got this while trying to post just now, even though my message got posted (Opera 10):

    Unfortunately, our forum has been temporarily disabled due to network issues. This problem has been reported to our support team.

    Please check back after a few minutes or click here and shoot us an email and we will let you know as soon as the issue has been resolved.

    - Intervals Support

  30.  

    Strange. That error should only occur when there are database connectivity issues, which is rare. I'm going to assume that since your message went through, the request to view the result had a database mishap. Let's chalk it up as a fluke ;)

    Meanwhile, to answer your question...

    You are correct. The internal id for the tasks is different than the vanity id (due to primary key constraints at the database level). To update a task you need to use the internal id. One way to get that is to reverse-engineer the ajax requests, but that is the long way round (great movie, by the way). Anyways, if you use the task resource to get a list of tasks that will show you the internal id for each task. The vanity id is the localid field.

    I realize now we don't have localid as a filter option for the task list resource. I'm going to forward that to our development team. Once we have the localid as an option for the task list filter, it will make it much much easier to get the internal id and other task info.

  31.  
    Is there any action on this? We can't really do anything productive with the API until this is resolved.
  32.  
    My apologies for not updating the forum. Yes, the task lists can now be filtered on localid in the API. We added this several weeks ago. You can now use the localid on the task filter to obtain the actual id of the task in question.
  33.  

    Wow, I have been wondering about this for a long time. Is there any online documentation or wiki on the Intervals API?

    Thanks,
    David

  34.  
    Here is a direct link to the API documentation and there is a link to the API documentation in the footer below as well.
  35.  
    D'oh! Thanks Michael. =)
  36.  
    Since I am not finding any existing applications that sync with planners I use, I am actually considering just writing my own syncing application so I can sync with what I want. An API would be an important feature that I need to do that. Unless I figure out a way to get Intervals to sync with our existing project management system, I probably will have to stop using Intervals, or only use it in specific situations.
  37.  

    Are you wondering if we have a functional API? If so we do have an API. Here is a direct link to the API documentation and there is a link to the API documentation in the footer below as well.