Skip navigation

Hello Jivers,

You all must have seen this document --> OAuth 2.0

It explain a way to use Oauth for REST api calls.


If you have registered an add-on using the Oauth flow (famous as Oauth Dance in Jive), you can utilise the jive-sdk on your add-on server to make rest api calls using oauth.


You already must have seen this in jive-sdk which can be used to make REST api calls using the tokens sent by jive


var jive = require('jive-sdk');
jive.context.persistence.findByID("community", env.jiveUrl).then(function (community) {
                url: someApiUrl,
                "method": "GET"



When we use oauth, by default the add-on has full access.




So basically if you call any REST apis using this add-on, you can do anything on your jive instance.

If this add-on is performing some actions based on some webhook events or some user actions which are sent from the app, its like saying this automated process can perform super admin tasks.

Obviously we don't want an automated process to have full access every time.


There is a simple way to reduce permissions of this add-on.


In the screenshot above I have an add-on called jivetest which has the super admin access.

Whenever you register an add-on, something like a service account is created in jive.

You won't be able to find this account in list of users, but you can find this new account under the User overrides under Permissions tabs.




You can see an option to edit permissions for this new account.

Here you can change the permissions to something limited which you need for the add-on.




People used to the new google apis might know the concept of scopes.

You have to set all individual scopes for a service account to call apis.

example :

In jive, this is one way to achieve some thing similar to achieve for add-on service accounts.

This is just a quick blog post that I've been meaning to share.  It is about a feature that was recently announced here:

What's New in the Jive Developer Platform (2015.1)

but I was afraid it was lost in the shuffle.


In short, the feedback couldn't have been clearer, "for simple apps, please remove the need for middleware" and that is just what we did.


Example: Admin Essentials Add-On

To show how this works, I'm going to use one of my open-source projects from a while back, The specified item was not found.

Screen Shot 2015-03-11 at 10.51.58 AM.png

When I originally posted this solution, the idea was that developers would simply clone the solution down ... re-bundle it onto their own middleware and stand it up in their own environment.  That's a lot of steps and a lot of ambiguity in-between. 


But now, it gets even simpler with the new simple app jive hosting feature.

Note:  To do these steps, you will need to install the Jive SDK (Node.js)

Here's How to Get Started

  1. git clone | or based on your git config | git clone
  2. cd jiveapps/addons/admin-essentials
  3. (optional)
    • Update any of the existing interfaces / add new interfaces
    • Updated the GUID / Name / Description to reflect that this is a Fork of the original.
    • Commit your changes (not jiveclientconfiguration.json) back to Github for others to see
  4. jive-sdk build --apphosting="jive"
  5. Upload your new to your Jive instance and see your application take flight.


That's it!


Tangentially, I found out the other day (see: Tip: Building an Addon without registration) that sneaky Mr. aron.racho added in a shortcut to the Jive SDK (Node.js) to simplify simple apps hosted externally.  To do this, just add the following line to your jiveclientconfiguration.json



     "suppressAddonRegistration" : true,




Thanks for sharing this discovery wb9tpg, I had missed its addition into the SDK. =)


Have an example of a simple Jive App idea you'd like to share?  Reach out in the Developer Community or share a blog post about it.  Excited to see what developers are going to do with these new capabilities.

Hello Jivers,

Recently I have been using webhooks heavily for some of our integrations.

Its one awesome feature in the Jive platform which can have great use cases.


Basically the Jive webhook services notifies about some events happening in Jive. Simple.

It might be about a user created, group created, some action on a content, recently in 8c5, users following a content, group or user in some stream (email enabled or a simple stream).


I am using system webhooks to perform some actions on an external system which is integrated with Jive.


In our case, this external system is google group.

Let me give some context on this.


What we wanted to achieve?


  • When a new user account is created, a new email enabled stream should be auto generated for the account
  • When user creates a jive group, there should be a google group created with some configs
  • When user deletes jive group, corresponding google group should be disabled / archived.
  • When user follows a jive group in an email enabled stream, the user account should be added to corresponding google group
  • When user unfollows a jive group from an email enabled stream, the user account should be removed from corresponding google group, provided that he is not following that group in any other email enabled stream.
  • When user follows / unfollows a group in a stream with emails off, no action is taken
  • When user turns on emails for a stream from preferences, then for every jive group he is following in that stream, he should be added to corresponding google group.
  • When user turns off emails for a stream from preferences, then for every jive group he is following in that stream, he should be removed to corresponding google group, provided he is not following that group in any other email stream.

The reason we need this is our custom streamonce solution.

Default streamonce syncs content generated in google groups to jive. Beyond that comments generated on both jive and google are synced.

Our custom streamonce even handles discussions created in jive.

We have disabled default jive email notifications for discussions and instead emails are handled through google.


Now for above tasks, we have some rules /restrictions on how things should be setup.

  • A new google group created should have email id same as the url name of jive group. This helps streamonce service to auto map the groups and also our add-ons to detect google group name from jive group's url name.
  • Also our add-on assumes the url name and google group name are same. So its easy for us to process incoming webhook events and get google group details from jive data.
  • If a user wants to receive emails for discussions, he has to follow that group in emails enabled stream so that he is added as member to corresponding google mailing list to receive emails.
  • We even have an app to assist group admins to do this from jive.


Lets see how we are using webhooks to automate this.


The first part of creating a google group for a jive group is taken care by a new app I posted about yesterday.

Its the new flow we have for create group. Check more about that here --> Developer: Alternative to default create group ... | Jive Community


We use webhooks for all other tasks..


Event : User account created

When a new user account is created, we would like to have an email enabled stream called Email Watches ready for him so that he can use it to receive google emails.

We can even do some other setup before the user logs in.


In the webhook event json, jive sends the user id and also the resource url for the user so that we can directly call the api and add streams to the new user.


            "id": ""



Event : Group created

We have an app to create google and jive group, ideally that same app could have handled the extra configs on these groups. But we wanted to make that app light weight, so we moved config part here.

When a new jive group is created, we configure the corresponding google group created by our app.


In the event below I get the api resource url for the jive group. Using this I can get the display name of the group which is also email id of the corresponding google group. Then I call google apis to configure the group.


    "jive": {
        "objectID": 3727,
        "objectType" : 700
        "object" : {
            "id" : ""



Event : Group deleted

When jive group is deleted, we disable the google group.

In this event, jive does not send a resource url as the group no more exists.

It send this internal jive id for the group.

We had an interesting solution here.

While creating google group, we add alias to it which is a unique key generated using the internal jive id.

So if my jive group displayName or google group name is jivetestgroup which has internal id as 1000, I add an alias called integration-group-1000 to the google group.

This is used only to get the google group name in the event when jive group is deleted and all i get is jive internal id.

We had an option to use jive DES as it reports the group name, but its not recommended to use for webhooks purpose.




Event : User starts following group in a stream

In 8c5 cloud release, Jive introduced stream event webhooks, which were of great help for us.

My next 3 examples are related to stream events.


Check the first example where I get a notification that user is following something.

The json sent here by jive is rich in content.


As seen below, here's what I get about the stream association event

  • user id of the user who triggered this event
  • objectId is the stream id of that user in which he is following something.
  • In properties
    • associatedObjectId is the id of object which the user is following in the stream. This can be place, content or person.
    • associatedObjectURI is the api resource uri of this object. This is particularly helpful in case of content or place where the object id might be different than the one used in api. There are still ways to get data from object id, but this url gives the object directly instead of using a search api on places on content.
    • receiveEmails tells if the stream in which this object was followed has emails on or off.
    • associatedObjectType is a number which tells type of object (example 700 is social group)


    verb: 'jive:stream_association_added',
    timestamp: '2015-01-14T23:15:15.312+0000',
    jive: {
            userID: 2014,
            objectID: 10,
                associatedObjectID: '1004',
                associatedObjectURI: "",
                receiveEmails: 'false',
                associatedObjectType: '700'
        objectType: -891990144


In our case when we get this event, if a user is following an object type of group in an email enabled stream, then using apis i will get the username of the user, display name of the group and then add this user to the google group (

If user is following something in non email enabled stream, we ignore the event



Event : User stops following a group from a stream

In this case if a user stops following a group from an email enabled stream, we remove the user form corresponding google group, provided he is not following this group in any other email enabled stream.

This second part to verify if any other association is present between user and place is a simple api call.

Check the REST api documentation here --> Jive REST Rest API v3.10 → Place service

As admin I have to use run-as feature to call followingIn for the group under consideration (


This will give me list of streams in which the user is following the group, with the stream email preferences too.

This helps me decide if I should be removing the user from google group or not.


    verb: 'jive:stream_association_removed',
    timestamp: '2015-01-14T23:14:56.859+0000',
    jive: {
            userID: 2014,
            objectID: 10,
                associatedObjectID: '1004',
                associatedObjectURI: "",
                receiveEmails: 'false',
                associatedObjectType: '700'
            objectType: -891990144




Event : User changes email preferences for a stream

Some day a user might decide to just turn off emails for all or one of his streams.

Even this preference change is sent by webhook stream event.

Whenever I change my email preferences for stream, Jive sends me user id who is owner of the stream and also detail about each stream with previous and current receive email status, though the change is only on one stream .

The stream which ha a change in preferences, I will pull all the group associations for that streams (as there might be people and content associations).

And then check where I need to add or remove user from a google group.



    verb: 'jive:stream_config_modified',
    timestamp: '2015-01-14T23:17:38.982+0000',
    jive: {
            objectID: 10,
            properties: {
                receiveEmails: 'false',
                previousReceiveEmails: 'false'
            objectType: -891990144
    verb: 'jive:stream_config_modified',
    timestamp: '2015-01-14T23:17:38.982+0000',
    jive: {
            userID: 1000,
            objectID: 11,
            properties: {
                receiveEmails: 'false',
                previousReceiveEmails: 'true'
            objectType: -891990144



Event : User's membership with a group removed

Our google group memberships have no connection with jive group memberships. Its more connected with email preferences and email streams.

So we never have to handle membership created event.

By default when user joins as member, he starts following that group in connection stream too, and jive does notify about it through webhooks.

Now when users group membership is revoked, all his stream associations with that group are also removed.

But in this case jive sends only one event "'jive:user_membership_removed". There is no association removed event.

But as we know all associations are removed as thats the way jive works, we simply get the group id from the event, call jive api to get the displayName and then call google group api to revoke user's membership for that group in google world.

    verb: 'jive:user_membership_removed',
    object : {
        id: ''
    timestamp: '2015-03-04T10:06:06.310+0000',
    jive : {
        containerType: 700,
        containerID: 1195,


This is how we are using webhooks to improve the experience with our integrations.

Obviously there is much more you can do with this kind of data that you get from jive webhooks service.

As you are hopefully aware of, we’re big fans of the Jive Add-on framework. We use it for a number of projects and products on a continuous basis.

However, it is always a good idea to spend time with other development frameworks to hone your skills and find new approaches to problems.

One, somewhat unexpected, source of inspiration for a suggested improvement to the Jive Add-on framework came during a development project for … SharePoint Online (aka. Office365, though this also applies to SharePoint 2013).


Apps for SharePoint allow you to build applications that behave very similar to apps in Jive:

  • They have full access to the SharePoint object model, similar to the v3 JS API
  • They offer transparent single-sign on without the need to re-authenticate
  • They can be built using any development environment that supports HTML/JS
  • They offer various integration points throughout the UI
  • They run out of context of the server itself


One of the differences is that SharePoint offers a concept called an immersive app. An immersive app offer all of the features mentioned above, but it runs in a separate window after being launched from the Office365/SharePoint UI.

Here is an example of an immersive app


The app runs on a separate server from the SharePoint site (even the URL is different), but is passed the security context of the user launching it, giving it full access to the SharePoint API.

A minimalistic context of the SharePoint site is retained by the available chrome control at the top. It automatically makes a themed navigation bar (that mimics your site’s theme) available, and also injects a number of CSS classes so that you can brand your app similar to the customer’s site. (Something I wish we had in Jive apps).


Now why is this a good idea? The main benefit from a user’s perspective is performance. Despite all its power and the elegance of embedding functionality directly into Jive, the most common criticism we hear from customers is the sometimes slow response times, as a lot of html and all webservice requests are proxied through the Jive server.

From a developer perspective the main benefit for me personally is the lack of restrictions, which are imposed by the Jive apps framework. I would love to use modern technologies like AngularJS (not really, not a big fan of v1 ;-) ), Durandal or even BreezeJS in our Jive apps, but the amount of effort of rewriting these to play nice with the restrictions of the Jive framework is cost prohibitive in most cases.


The pros:

  • Better performance, as this is a “regular” web application, instead of running in a proxied iFrame
  • All modern web application frameworks and technologies are available without customization
  • A lot more screen real estate, as the Jive navigation and headers can take up as much as a third of the available screen, depending on the theme
  • Still able to create integrated apps that make use of the social graph and collaborative capabilities of Jive in a relevant way. (Don’t fall into the traps of the portal world! Watch my talk from JiveWorld13 here: JIVETalks: Developer - Video


The cons:

  • The user is taken out of context of the Jive environment. However, the same applies for a canvas based Jive apps. A chrome control can remedy some of that.
  • Not suitable for scenarios where the launch context (a place in Jive, a profile or content) is relevant.



Jive is actually very close to achieving a first version of this capability. All is needed is a “login via Jive” capability. One could build an immersive Jive app even now, but the lack of login by Jive means, that I would need to create a separate login and user management to do so. Take a look at this discussion for for an example of someone trying to achieve this (and failing): OAuth2 authorization process always ask for grant permissions

A next step would be an option to launch an app from the apps menu and have it launch in a separate window, without the need for an iFrame, and with the security context passed. This would allow us to use the v3 REST API.

A stretch goal would be to have the v3 JS API available in the app.


Question to Jive: When can we have this?


Ryan Rutan Yoav Derazon aron.racho clara.liang matt.tucker.deactivated

Hello Jivers,

Recently we have been working on migrating from Jive 7.0.1 hosted instance to jive cloud.

Happy to say we are very very close to finally achieve this with all our customisations.


Before I talk about the particular solution here, I must say I had a fun ride working on Jive platform since more than 2 years now.

Working with this platform since jive 5.x, 6.x, 7.x and now cloud, things have changed a lot and improved.

Appreciate the effort jive folks have put in improving the platform which has personally helped me design and implement better solutions.


In 2013, we had a complex but successful integration between jive and google group with help of streamonce.

Well, not the default one, but a custom streamonce made for Thoughtworks.


In Jiveworld 2013, we had showcased this concept in customer showcase.




I will mention more about this in a separate post.

To work properly, streamonce service required some setup to be done for every group.

Some of them being, admin owning a google group and then manually map it to jive using streamonce app.

We wanted to avoid all the extra steps to achieve this integration and instead keep it simple for end user - just create a jive group.


So I designed a solution for this called google connector and we created a plugin for this.


This plugin use to create  / disable google groups and add/remove members from google group on some triggers from Jive.

And as this was a plugin, we could control the jive events triggering these actions on google and also block jive from performing some things if there was error from google.

We wanted to move to cloud to take advantage of the latest features and improvements announced.

The blocker was the plugins we had which are not supported in cloud.

We managed to convert most of the plugins into apps, all thanks to jive-sdk.

My move content app  was one of the first attempts where I could develop an app with simple jquery and jive-sdk. (Developer: Jive add-on to move content in bulk ... | Jive Community)


Here I would like to tell about one of these apps.


Why we wanted to control Jive's create group flow?


On our jive instance, we have connected every jive group with a google group.

We still have some old google groups with no connection to jive.

But new groups are all mapped.


Our plugin on hosted instance right now always creates a google group when a user is trying to create a jive group.

And streamonce auto mapper maps these groups so that it can handle the sync between the two worlds.

So for a end user, there's just a step of creating jive group. Beyond that everything is setup automatically.


Now this was very easy in hosted due to plugin.

It helped us handle some cases like - if google throws an error, user should not be able to create jive group.

Or if there is some conflict in google, user should know it.

And user should still be able to manage everything from one jive group instead of going to google groups console or streamonce app.

We have developed apps in jive which helps map jive membership with google. More on that soon


In cloud, there are no plugins and hence no way to customise the create group flow.

We had an option though to use Create Group event from jive webhooks service.

Basically when we receive an event that a jive group is created, our service creates a google group.

But what if there is a conflict in google group (due to some very old groups or some aliases our users have in their email accounts?)

What if the service goes down which is responsible for creating the google group?


For end user, he will see a success on jive side, and so he assumes everything is setup.

Only later they realise its not working as expected (sad user experience).


We wanted more control in create group flow.

The only option was to create a new app for this.


But then user will have two ways to create group.

So, I decided to hide the default option on cloud.


Disabling the default create group flow in jive cloud


Actually we cannot do this type of customization of hiding this feature.

But there is one easy way in this case. I changed the permissions for create group as shown in the image below.

Screen Shot 2015-02-19 at 7.00.40 PM.png


Wow, that was easy. So no create group option any more, anywhere on the site.

But I still want to ensure an end user has an ability to create a group

and he should be the owner

and google group created

and streamonce mapping should all be set....


Given the above permissions, what a user might go through now?


  1. Send a request to admin to create group with name, url name, description, group type, etc.
  2. The super admin receives the request,
  3. The super admin tries creating a google group first.
  4. If that goes well, he creates the jive group.
  5. All well? then he makes the requestor the owner of the new jive group, and removes himself (super admin) from the list of owners .
  6. Admin notifies user that groups are created and he can start using it.

And he can start adding people, start sharing stuff, etc..



Obviously this is not cool, user wants self service


Thats too much manual work and worst user experience in today's world.

But what if we automate the above process?

For end user it still the same experience, but all the above steps are taken care by a new app

First, thanks a lot to jive-sdk,  Jive #REST-api and Jive #connects-api

Now the solution.


The new Create group app

So going back to the above steps and how they look in our new app.


1. User sends a request, well thats in technical terms.

For end user, there is still a view like the default one where a group details can be entered and submitted.

The app auto-generates the group url the same way as it happens on default flow.


Here's now the difference in what a super admin and other users see in create menu.

Screen Shot 2015-03-07 at 4.31.37 PM.png



Here's the new app. its almost similar to default create group popup, but with minimal options.


 2 Actions   myThoughtWorks.png



2. Now we have configured our service endpoint in jive add-ons services console and used connects api to send request.

So through this the service received the request (the service is in the same node server where the app is deployed and has super admin privileges as it was registered with jive oauth)


3. This service now attempts to create a google group using google apis.

The group url of the jive group is used to create the email address.


var groupEmail = groupUrlName+emaildomain;
  auth: jwt,
  resource: { email: groupEmail }
  }, function(err, data){



4 On success, this service calls jive apis through jive-sdk and creates a group there too.


      var jive = require('jive-sdk')
      var data = {
            "type": "group",
            "displayName": displayName,
            "description": description
            "name": name,
            "groupType": groupType
        var placeServiceUrl = "https://jive_url/api/core/v3/places",
                url: placeServiceUrl,
                "method": "POST",
                "postBody": data
        ).then(function (response) {



Streamonce auto mapper in a while maps these new detected groups in google and jive.

If any thing goes wrong in google or jive, service reverts the state and responds back with an appropriate message.


5. Now the service adds the requesting user as an owner to the group and removes the super admin account which created the group., {url: groupMembersResourceUrl,
            "method": "POST",
            "postBody": {"person": userResourceUrl, "state": "owner"}
    ).then(function (resp) {




6. The user gets a success message, a tip on how to add users, etc and is then navigated to the new group.


 1  Actions   myThoughtWorks.png


Life moves on.


So what are the awesome jive features used for this app?

  • Jive-sdk, REST apis and jive connects api



What about other settings on group? External Storage? Default page?

Group admins can still do this after the group is created.

In the last image above, the link "Go to new group" can be changed to go to the settings page instead where user can do these settings first.


In our case most of our users end up doing this at a later stage.

The main objective for most of our users is fulfilled here which is - they need to create a group and start sharing / collaborating through jive and emails.


Due to the permission changes, there is one thing a group admin cannot do - changing the group type (private to open, open to .... etc)

We anyway have a plan to create an app for that too as these settings control some permissions on google group too.

Basically our apps have been ensuring the changes made by user has right impact on jive and google.


Why not use Create Group webhook event?

That obviously was my first option. But i wanted a control when the create group event is in progress, not after it has happened.

Consider a case where something goes wrong on google side, if a specific email id is not available, or if google group not created due to node server shutting down?

The jive group is already created and user obviously starts using it, only to realize later something is wrong.

Many other cases.

Like what we had in the plugin where I had control when event is in progress, I needed the same control in app.


What advantage does jive connects give here?

I think I have overused this in most of my apps.

We can develop any service with our own authentication strategy.

Jive gives facility for all these auth types in admin console app services.

My app does not really have to care about service auth or url.

So tomorrow if I decide to change the service end point, i can do it independent of the app.


Also, by moving most logic to service, I could have build pipelines, easily auto deploy stuff to prod, run tests, etc for the service. A well tested and automated setup.

What exactly is the custom streamonce? and why we need all this customization?


Thats a long answer, worth a separate blog (already in process).

I will soon post the entire customization we did with jive-sdk and REST apis for this jive-email integration.


But in short about #streamonce, the default streamonce makes jive a hub and gets outside information into jive.

Jive still generates it own emails for discussions, which are more like notifications.

Both jive and gmail are equally important for our users.

We wanted emails to be emails and not notifications. And also a complete 2 way sync betweeb jive and streamonce.

The default streamonce does a 2 way sync for comments, but conversation has to be initiated from google groups.

In our case, it does not matter where it was initiated. Its real 2-way sync. content created in both the systems gets synced.


How can this solution be improved?


It would have been great if Jive has given the option to hide default create group option without the permission changes I had to do.

In this case I could have used REST apis "run-as" feature to create group from my service.

I had to do this permission change just to hide the link, which resulted into using a service account to do all stuff and then add user as owner.


Other one is not directly impacting the app.

But it would be great if Streamonce itegrations can be managed through apis.

Apis can give us or anyone else better control on these integrations.


Not sure if Jive can allow the hiding link option without permission changes in cloud.

But for streamonce, we have already given a feature request with a list of apis.


Source Code for app and service ???


Will be uploading it to github in a few days time.

Based on a lot of demand and requests for training and education around Jive's Add-On framework, we are planning a series of 2 day developer training sessions around the world.


(sorry had posted this as a question initially. Apologies for double posting)


If you are interested in attending one of these please help us in planning by filling out our survey here: Jive Add-On Developer Training Survey


Preliminary Agenda:

Day 1

  • Introduction to the Jive Add-On Framework and common use cases
  • Overview of available development environments (node.js, Java, .Net)
  • Add-On development best practices
  • Building your first Add-on
  • Integration points for Jive Apps

Day 2

  • Deploying your Jive Add-on for production
  • Using the Jive REST API from client applications and Jive Apps
  • Building and updating tiles
  • Using WebHooks
  • Using the Data Export API
  • Discussion, Q&A and wrap up


About us:

Pokeshot/SMZ is a global Jive Technology, Consulting and Professional Services Partner. We have 10 years of experience working with Jive, and have been actively involved in using and enhancing the Jive Apps and Add-On frameworks since 2011.


We are looking forward to your feedback.

With the most awesomest of nerd celebration days upon us, Pi Day 2015 (3/14/15 9:26 53589), I felt it was a great opportunity to reach out to our Jive Developers community to talk about technology and the Jive platform.  As many of you may have noticed, by our previous blog post: What's New in the Jive Developer Platform (2015.1) which outlines a slew of developer features in the 2015 Winter Cloud Release, the Jive platform has been on the move and growing every quarter.  At this point, we have an amazing array of first-class integrations for Jive to help developers help everyone to connect, communicate and collaborate.


To help celebrate the unique moment in time that Pi Day 2015 represents, we wanted to provide an opportunity to hand out some nerd schwag =)


How to Win the Raspberry Pi 2 & T-Shirt

It's simple.  We'd love to hear from the developer community about your current thoughts on the Jive platform and how you using it to realize the collaborative hub vision Jive offers. 


To be eligible to win, we simply ask the following:

  • Share a blogpost in the Jive Developers community with the following considerations on or before the EOB March 14, 2015.
    • What problems were you trying to solve, and why were they worth solving?
    • Which developer features do you like, or have you implemented?
    • How would you leverage them in an integration, and with what systems?
    • Screenshots or mockups of your integration / concepts
  • Help us share your ideas via social media (Twitter/LinkedIn), or just retweet @jivedev publicity when it arrives.


New to the Jive Platform?  Check out the following resources to get started!


Selecting the Winner

After Pi Day, our internal team will review any / all blog posts that were shared in the Developer community.  Whichever post creates the most conversation in the community / social media, we will announce the winner an send the following prizes to them post haste. 

  • Note: Due to the popularity of the Raspberry Pi 2, we have already ordered the prize and have a committed delivery date of April 9th, as such, we will plan to provide prizes based on the availability of the prize.





If you have any questions about the contest, prizes or blog post requirements feel free to reach out on this blog post.   Looking forward to hearing the great stories, but above all else ... cant wait to celebrate Pi Day 2015!!!!


Note:  I am aware that many of you from JiveWorld14 are still waiting on your Jive branded's, but rest assured we are still working with the vendor to push past the issues that have affected their inventory and are working to make due on the prizes as quick as possible.

For more details, please see: The specified item was not found.

Filter Blog

By date: By tag: