Ruby gem that provides an AR-style interface for the Pivotal Tracker API
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib Story.find no longer silently ignores errors Sep 30, 2015
spec Story.find no longer silently ignores errors Sep 30, 2015
.rspec update to latest rspec Feb 17, 2012
.travis.yml Remove jewler, update gem to follow todays standards Mar 2, 2015
Gemfile add history file Mar 2, 2015
LICENSE add syntax highlighting to examples in readme Feb 12, 2016
Rakefile Remove jewler, update gem to follow todays standards Mar 2, 2015
pivotal-tracker.gemspec Update rest-client per rest-client/rest-client#369 Mar 26, 2015

pivotal-tracker.rb - the original ruby gem

Build Status Gem Version


I am currently re-writing this gem to address the biggest feature requests that are long overdue:

  • Gem is thread-safe
  • Support Pivotal Tracker APIv5 and dropping V3 support
  • Overhauled spec suite

This will become the v1.x release.

Original README (for v0.x releases)


  • Compatible with Pivotal Tracker API version 3
  • ActiveRecord-style Wrapper API
  • Support for SSL protected repositories


PivotalTracker::Client.token('', 'secretpassword')        # Automatically fetch API Token
PivotalTracker::Client.token = 'jkfduisj97823974j2kl24899234'                 # Manually set API Token

PivotalTracker::Client.timeout = 50                                           # Set timeout on the connection with pivotal. Default is 60 seconds

@projects = PivotalTracker::Project.all                                       # return all projects
@a_project = PivotalTracker::Project.find(84739)                              # find project with a given ID

@a_project.stories.all                                                        # return all stories for "a_project"
@a_project.stories.all(:label => 'overdue', :story_type => ['bug', 'chore'])  # return all stories that match the passed filters
@a_project.stories.find(847762630)                                            # find story with a given ID

@a_project.stories.create(:name => 'My Story', :story_type => 'feature')      # create a story for this project

# all tracker defined filters are allowed, as well as :limit & :offset for pagination

# The below pattern below is planned to be added to the final release:

@a_project.stories <<, :name => 'Ur Story')   # same as earlier story creation, useful for copying/cloning from proj

@story = @a_project.stories.find(847762630)
@story.notes.all                                                              # return all notes (comments) for a story
@story.notes.create(:text => 'A new comment', :noted_at => '06/29/2010 05:00 EST')  # add a new note

@story.tasks.all                                                              # return all tasks for a story
@story.tasks.create(:description => 'Task Description')  # add a new task

@story.attachments                                                            # return an array of all attachment items (data only, not the files)
@story.upload_attachment(file_path)                                           # add a file attachment to @story that can be found at file_path

# All 4 examples below return a PivotalTracker::Story from the new project, with the same story ID

@story.move_to_project(123456)                                                # move @story to the project with ID 123456
@story.move_to_project('123456')                                              # same as above
@story.move_to_project(@project)                                              # move @story to @project
@story.move_to_project(@another_story)                                        # move @story into the same project as @another_story

# Connect to custom API endpoint
PivotalTracker::Client.tracker_host = ''

The API is based on the following this gist:

Additional Information

Contributors along the way