Adam Trachtenberg's blog

New profile fields are here!

At LinkedIn, we like to ring in the new year with a bang. That's why I'm happy to announce that we've extended the LinkedIn API to include more fields of rich profile data for integration with applications using the LinkedIn Platform.

LinkedIn's Profile API now includes additional profile fields for accessing users' publications, patents, skills, certifications, and language fluencies, as documented here.  You can access this data by applying advanced field selectors using our API (for example, http://api.linkedin.com/v1/people/~:(id, first-name, last-name, skills)).

Let's take a look at each of the new sections that will be available to access for users who have listed these details on their profiles!

Publications
Find the prolific authors and published researchers in your network.  The publications section contains data pertaining to the user's body of published work, including title, publication date, publisher, co-authors, and an abstract.

http://api.linkedin.com/v1/people/~/publications

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<publications total="1">
  <publication>
    <id>31</id>
    <title>PHP Cookbook</title>
    <date>
      <year>2006</year>
      <month>8</month>
      <day>1</day>
    </date>
  </publication>
</publications>

Languages
Ever wonder who in your network speaks Russian?  Do any of your connections know three or more languages fluently?  Now you can determine the languages spoken by LinkedIn members and their proficiency levels in your application with the languages selector.

http://api.linkedin.com/v1/people/~/languages

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<languages total="2">
  <language>
    <id>70</id>
    <language>
      <name>English</name>
    </language>
  </language>
  <language>
    <id>72</id>
    <language>
      <name>Klingon</name>
    </language>
  </language>
</languages>

Skills
A listing of skills with proficiency levels and years of experience will give you information about a user's areas of expertise and proficiencies.  Discover the strengths of your network!  For example, need to find the Java experts?  Want to visualize which of your connections can help with viral marketing?  Look no further than the skills section.

http://api.linkedin.com/v1/people/~/skills

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<skills total="1">
  <skill>
    <id>38</id>
    <skill>
      <name>Union negotiations</name>
    </skill>
  </skill>
</skills>

Certifications
Access the certifications, licensure, and clearances that users have attained by selecting the certifications field.

http://api.linkedin.com/v1/people/~/certifications
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<certifications total="1">
  <certification>
    <id>32</id>
    <name>Series 7 Exam</name>
  </certification>
</certifications>

Patents
Is there an inventor in your midst?  For users with patents and patent applications listed on their profiles, the patents field will give your application access to information on their inventions.  Access links to issued and pending patents along with listed co-inventors, and see how the seeds of innovation are sprouting in your own network!

http://api.linkedin.com/v1/people/~/patents

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<patents total="1">
  <patent>
    <id>51</id>
    <title>BID SYSTEM FOR PRESENTATION OF DATA ITEMS</title>
    <date>
      <year>2008</year>
      <month>7</month>
      <day>23</day>
    </date>
  </patent>
</patents>

These five sections are the first of many more that we will be rolling out on the LinkedIn site as well as our developer API.  We look forward to seeing LinkedIn Platform integrations that help bring the richness of LinkedIn profiles to the places you work.

As a reminder, fields returned in a user's profile are subject to LinkedIn's data visibility rules and the member's privacy settings. In certain scenarios, you may receive only the following fields for a user:

<person><id>private</id><last-name>private</last-name></person>

Read more about the specific API behavior here, and make sure your application is ready to handle these situations.

Best wishes in the new year!

Connect with us at LeWeb

To celebrate the one year anniversary of the LinkedIn Developer Network, we're returning to Le Web. This event is packed with leading business people and developers from companies small and large. They're all converging on Paris to discuss the future of the Internet in 2011 and beyond.

We're hosting a workshop on the LinkedIn Platform.

Learn how the LinkedIn Platform is spreading professional identity across the web and how you can take advantage. Increase customer relevance and engagement with your site or application by incorporating unique LinkedIn features and content, including over 85 million profiles, professional graphs, and updates. Are you [in]?

Find us at:

  • Thursday, December 9th from 2:30 pm to 3:30 CET
  • Room #3

Or catch us anytime at the show. If you want to meet up, drop me a note or write a comment.

-adam

API Test Console for LinkedIn

Hi Developers!

I'm new here on the LinkedIn Platform Product team, and wanted to say hello to all of you who are doing great things with LinkedIn's APIs.

As you explore our API's capabilities and feature set, take a look at the LinkedIn API Console that our friends over at Apigee just released. This console is definitely a huge help in trying out LinkedIn API features and debugging your app, without the overhead of OAuth.

Here is a video of how to use the console - check it out!

Keep talking to us - we love to hear from you, and happy coding!

Madhu

API Requests with JSON

Update: You can now make JSON requests by passing along a format=json parameter with your query.

Our APIs support JSON! Merely by setting the x-li-format HTTP header to json, you can receive JSON output and send JSON input for all APIs.

JSON is a popular data format, based on, but not requiring, JavaScript. With JSON, it's simple to directly serialize data to and from native hashes and arrays. Many languages make it easier to process JSON than XML. Most languages have libraries that make using JSON convenient.

We also support JSONP for embedding your requests inside of web pages.

Be sure to read about the details of using JSON with LinkedIn APIs, including the schema changes necessary to make our XML schema work seamlessly with JSON.

LinkedIn Operations Update

As LinkedIn continues to grow, we are making improvements to our network and data centers. This allows us to provide you better service, with faster and more reliable traffic.

One side-effect of this change is that the IP addresses of our servers, including api.linkedin.com, will change. This should not be a problem for over 99% of you.

This is a standard practice among web services. If your application behaves well with the Twitter APIs, for example, it is highly likely to continue to work after our changes.

However, based on past experience, a small percentage of our API developers have their code setup in a way that it depends on us maintaining specific IP addresses. Consider this fair warning that between now and the end of 2011, these address can, and probably will, switch.

We strongly suggest that you do not whitelist any IP addresses or IP ranges because they can and may change at any point in the future without advance notice.

If you find yourself in a position where you cannot do this:

  • Expect to experience downtime.
  • Design your application to behave gracefully when it cannot connect to api.linkedin.com.
  • Use ping or dig to identify the new values.
  • Enter the new values into your firewall with at least a /24 netmask.

Additionally, ensure your applications respect DNS TTL settings. The DNS TTL determines how often your operating system or application check for updates to linkedin.com DNS records. Some configurations have resolvers that cache values for long periods. If they don't respect the DNS TTLs we publish, they may not properly recognize our DNS changes in a timely manner. For example, some Java versions (primarily Java 5 and earlier) by default do not attempt to check for updates to DNS records once a hostname has been resolved once by the Java virtual machine. You should refer to your operating system or application environment documentation if you're not sure about the behavior regarding DNS TTLs.

Shares, Comments, and Likes for Members and Their Networks

At LinkedIn, we want to enable you to share professional insights with others and also see what information your network is sharing with you. This empowers you to keep your pulse on what's happening in your industry and across your connections.

Recently, we introduced a feature allowing you to share articles, including your personal take on the pieces. Another member can comment on and "like" what you shared. You can comment back. And then a third person can jump in.

After this launched, we've seen a great increase in network activity and vibrancy, as our members become more engaged with relevant information to do their jobs. We're making it easy to mash up LinkedIn information, such as member profiles, with everything going on on the Internet, such as hot blog posts, trending news, and simply cool stuff.

As of today, you now have full API access to shared items, along with reshares, comments, and likes. Now:

  • News sites and blogs can let people share articles directly from their site
  • Social aggregators can display the articles shared by a person's network, and they can comment and like them inline
  • Member profile widgets can retrieve a person's latest share
  • Applications can let members can reshare articles with their network, passing along the story to a new audience.

Another highly requested API feature is what we call the "Me Feed". For a long time, you could view the activities of a member's network, but not retrieve what they were doing themselves. Now you can access all of a member's activity in the same format as existing network updates.

Full documentation on these features are at:

We look forward to seeing all the fantastic applications you create with these APIs.

July 21: SSL Certificate Update on api.linkedin.com

On Wednesday, July 21st, we will update the SSL certificate on api.linkedin.com. The maintenance will occur between 12 noon and 2 pm Pacific time.

Based on our testing, we do not expect any issues. However, because this update has a change in the certificate authority (CA) chain, there is a slightly larger than normal chance of problems.

Therefore, to minimize any unexpected events, we want to alert you in advance.

We strongly advise you ensure your CA bundle is up-to-date, monitor your LinkedIn API application during that time, and alert us with a comment to this post if you encounter any issues.

For more on this issue, here's an article on updating CA bundles.

Next Wednesday, when we begin and complete the upgrade, we will update this post, so you can validate the change.

Thanks.

Update: We made this change as of 12:15 pm

Greater Access and More Profile Data

The LinkedIn Open API program has been live for 6 months now and after watching what you are building and what you need, we are announcing a wide variety of new features that target three of the most common requests and needs you have.

A vastly improved Search API that lets you search and also process a great amount of analytical data on LinkedIn came out two weeks ago. That will let you build much more powerful search experiences on your site. Major request fulfilled.

Today, we're announcing another set of major improvements in your experience of working with the LinkedIn platform: higher throttles where you need them most, and greater access to profile data.

Higher Throttles

We’ve heard you that our throttles have been too tight to develop and test your application successfully. So, we've made two changes to throttles that will make it easier to develop and test your app:

Higher Search Throttles

We've increased the Search API throttle by 400%. The search throttle is now 100 searches per user per day. This should accommodate most use cases very well.

Higher Throttles for Developers

While you are developing your application, it's hard to build and test without hitting some of the user throttles. We hear you on that. Effective immediately, when you are listed as a developer on an API key, your throttle will be 4 times higher than the published user throttles for most calls. We think this is the right number, but we will be watching and listening and will respond further if necessary.

It's important to remember that while the higher developer throttles apply to you as a developer of the application, they don’t apply to your users. Be careful not to build features that require the higher throttles to work. These higher developer throttles are there to help you in developing and testing.

Greater Access to Profile Data

In the past, we've returned two versions of profiles:

  • For your users who grant you access, you get the fully detailed profile
  • For everyone else, we return the current job information only

Effective now, you will get the full profile details for users who grant you access (no change there) and also for those user's connections as well. This matches the site more closely and lets you present deeper insights to your users.

To access this data, simply include the fields you want in the call.

For full details on the fields you get for each user, check the Profile Fields doc.

…Oh, And One More Thing: Full Recommendation Text on Profiles

And one more thing. You can now get the text of recommendations for a profile. This was a long standing request and we're happy to get it out. You will be able to get the full text of recommendations for users who grant you access and their first degree connections. We'll look to expand this to all profiles soon.

Richer, More Powerful Search APIs

It has only been a few weeks since I joined the LinkedIn Platform  team, but I’m excited to get the opportunity to announce some great new  capabilities that we’ve added for thousands of LinkedIn developers who  are working to integrate LinkedIn into their business applications.

Search is one of the highest volume features at LinkedIn, largely  because many business tasks first involve finding the right person.  Today, we’re announcing a major enhancement to our Search API, based on  the new faceted search engine that we made available to  users earlier this year.

Read  more: Search API Documentation

Faceted  Search generates dynamic filters based on the results of any query  submitted to the LinkedIn search engine. These filters let you quickly  and easily hone a query based on a wide variety of dimensions, including  current company, past company, location, relationship, industry,  school, and profile language.

As a developer, this means that any query submitted to LinkedIn now  has the option to return not only the results, but also important  analytical information about the results.  For example, a query for  “product manager” might return hundreds of thousands of results, sorted  by relevance for the user.  With the new facets, your application will  also be able to see the top companies for those results, as well as the  result counts for each company.
For users, this means that the same powerful refinements that you can  now make on the LinkedIn website can be made in any application that  integrates LinkedIn search.  We’ve also increased the throttle limits on  the new API to help users and developers take advantage of this rich  functionality.

In addition to this new API, we’ve also made a number of smaller  enhancements in the past few weeks.  We’ve enhanced our profile APIs to  return additional fields like Twitter ID.  We’ve also updated our Status  API to allow users to send their LinkedIn status to Twitter. We’ve also  added a number of new network updates types to our Network Updates API.

Expect more from us in the future. In the meantime, drop  on by our forums, introduce yourself, share what you’re building,  and let us know how things are going!

OAuth - now for Authentication

Would you like your users to "Login with LinkedIn" on your site? It's now possible!

Last week we deployed an important upgrade to our OAuth infrastructure at LinkedIn that makes life easier for our LinkedIn Developers and Members.  The authorization and login process has been streamlined especially for developers that want to use LinkedIn as a sign-in service. LinkedIn members will find a easier, simpler way to quickly authorize LinkedIn applications.
Authentication: Login with LinkedIn

For sites that primarily use LinkedIn for authentication (e.g. by showing users a "Login with LinkedIn" button), we now offer an alternative to the normal OAuth authorization flow:

https://www.linkedin.com/uas/oauth/authenticate 

This 'authenticate' endpoint functions identically to the authorization endpoint except for one scenario. If the following are all true:

  • The current user is logged into LinkedIn.
  • The current user has already granted an access token to the requesting application.
  • The access token has not expired.

Then we will automatically (and immediately) redirect to the callback URL you specify, without interruption. This provides a great user experience - just a one click login! If any of the above conditions are not true, the member will see the normal authorization flow.

Login Buttons

To provide a consistent user experience across sites which leverage LinkedIn for authentication, we created four standard buttons. Please use them so that your users (and our users) benefit from a familiar LinkedIn experience across the web.

User Interface Changes

If you already have your own account infrastructure, we're still looking out for you. We often see sites send already-authorized users through our OAuth authorize flow.  Perhaps the remote site lost the token or never persisted it. This situation results in users being asked for username/passwords again and again, with a new token created every time (a frustrating process, to be sure).

So, we've made some improvements here.  Instead of requiring the user to login every time and create a new access token, we now allow the user to reuse an existing access token and quickly return to the site.  In most cases the user simply needs to click 'Continue' and they are back at your site immediately.

As part of this streamlining process (and to leverage cookie persistence), we changed the OAuth authorization url to live on the www subdomain of linkedin.com:

https://www.linkedin.com/uas/oauth/authorize

We recommend that all developers switch to this as soon as possible.  To help you autoconfigure your application we also return the current authorization URL as part of the requestToken response as the xoauth_requesrt_auth_url parameter.

Cancel Callbacks
We have subtly changed the behavior when the user presses the Cancel button in the authorization flow.  In prior releases we always sent the user to the "Integration URL" you defined for your application.  Now, if that URL is blank we redirect to the OAuth callback URL.  However we do not send a token or secret.  Instead your callback will include the url parameter oauth_problem with the value user_refused.

Token Expiration Times
Some of our endpoints now return the expiration time of the token.  The requestToken response now includes the oauth_expires_in parameter.  The value of this is the number of seconds remaining for the token.  We'll be adding this to the accessToken response in a future release.

Token Invalidation

You can now invalidate an OAuth token for your application.  Just send an OAuth signed GET request to:

https://api.linkedin.com/uas/oauth/invalidateToken

A 200 response indicates that the token was successfully invalidated.

Thanks!

And of course, send us your feedback and show off your apps!

Pages