#%RAML 0.8 --- title: LinkedIn REST API version: v1 baseUri: https://api.linkedin.com/{version} resourceTypes: - fieldSelectors: usage: | Use this resource type when field selectors exist in resource path type: baseResource description: | Describes field selectors uri path parameter uriParameters: fieldSelectors: displayName: Field Selectors description: | Many of our resources allow you to specify what fields you want returned. We call this syntax field selectors. By indicating exactly the information you need, we can optimize the amount of time needed to return your results. It also reduces the amount of data passing across the wire. The two combine to make our APIs speedy and efficient, a critical factor in any web application, and more so for anyone relying on external APIs. Field selectors are specified after the resource identifiers and path components of a resource, prefixed by a colon, contained within parenthesis, and separated by commas. Fields will be returned in the order specified. When URL-encoding your resource URLs, ensure that the parenthesis used in selectors remain unescaped. Examples -------- To get a member's ID, first name, last name, and industry: `http://api.linkedin.com/v1/people/~:(id,first-name,last-name,industry)` Or the same set of information for their connections: `http://api.linkedin.com/v1/people/~/connections:(id,first-name,last-name,industry)` Fields selectors can also be nested to access individual fields from a larger collection. For example, to get just the job titles and not the rest of the information about positions: `http://api.linkedin.com/v1/people/~/connections:(id,first-name,last-name,positions:(title))` Field selectors with resource identifiers allow you to request information about multiple entities at once. Specify them similarly, but append a double colon - here's an example getting profile information about thee members: the first is the current member, indicated by a tilde; the next has an id of 12345; and the last has a public profile URL `http://api.linkedin.com/v1/people::(~, id=12345,url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fadamnash)` type: string example: :(id,first-name,last-name,industry) #TODO: add validation for URI path parameter, probably pattern - baseResource: usage: | All LinkedIn resources should use it description: | This is base resource type described common request and response headers and error response codes get?: &common headers: x-li-format: description: | Type of data type: string enum: [ xml, json, jsonp ] responses: 400: description: | Bad Request body: &errorSchemas text/xml: schema: | example: | 401 1378122242574 8PQJRYO7JK 0 Invalid access token. application/json: schema: | { "type":"object", "$schema": "http://json-schema.org/draft-03/schema", "id": "http://jsonschema.net", "required":false, "properties":{ "errorCode": { "type":"number", "id": "http://jsonschema.net/errorCode", "required":false }, "message": { "type":"string", "id": "http://jsonschema.net/message", "required":false }, "requestId": { "type":"string", "id": "http://jsonschema.net/requestId", "required":false }, "status": { "type":"number", "id": "http://jsonschema.net/status", "required":false }, "timestamp": { "type":"number", "id": "http://jsonschema.net/timestamp", "required":false } } } example: | { "errorCode": 0, "message": "Invalid access token.", "requestId": "Y703T8HXBF", "status": 401, "timestamp": 1378122137646 } application/javascript: # schema: TODO ??? example: | callback({ "errorCode": 0, "message": "Invalid access token.", "requestId": "3W65MK0G8R", "status": 401, "timestamp": 1378120873591 }) 401: description: | Unauthorized body: *errorSchemas 403: description: | Forbidden body: *errorSchemas 503: description: | Service Unavailable body: *errorSchemas put?: *common post?: *common delete?: *common traits: - secureUrlParam: description: | This trait should be used for indicate that you want the URLs in your response to be HTTPS queryParameters: secure-urls: description: | secure-urls query parameter indicates that you want the URLs in your response to be HTTPS type: boolean securitySchemes: - oauth_2_0: description: | LinkedIn supports OAuth 2.0 for authenticating all API requests. type: OAuth 2.0 describedBy: queryParameters: oauth2_access_token: description: | Used to send a valid OAuth 2 access token type: string settings: authorizationUri: https://www.linkedin.com/uas/oauth2/authorization accessTokenUri: https://www.linkedin.com/uas/oauth2/accessToken authorizationGrants: code - oauth_1_0: description: | OAuth 1.0 continues to be supported for all API requests, but OAuth 2.0 is now preferred. type: OAuth 1.0 settings: requestTokenUri: https://api.linkedin.com/uas/oauth/requestToken authorizationUri: https//www.linkedin.com/uas/oauth/authenticate tokenCredentialsUri: https://api.linkedin.com/uas/oauth/accessToken securedBy: [oauth_2_0, oauth_1_0] /people: displayName: People /~{fieldSelectors}: displayName: Profile API type: fieldSelectors get: is: [secureUrlParam] description: | Returns profile of the current user responses: 200: body: text/xml: schema: | example: | 123456 first name last name headline name 804 industry 50 100 10 online 12367123678 summary id1 title1 summary1 2013 Jan false Company1 id2 title2 summary2 2013 Jun true Company2 id1 school1 degree1 2000 2008 id2 university1 degree2 2008 2013 http://url1 name of url1 http://url2 name of url2 http://url.com Date 237423472sdf Acept-type */* http://url.com http://picture.url application/json: schema: | { "type":"object", "$schema": "http://json-schema.org/draft-03/schema", "id": "http://jsonschema.net", "required":false, "properties":{ "firstName": { "type":"string", "id": "http://jsonschema.net/firstName", "required":false }, "headline": { "type":"string", "id": "http://jsonschema.net/headline", "required":false }, "lastName": { "type":"string", "id": "http://jsonschema.net/lastName", "required":false }, "siteStandardProfileRequest": { "type":"object", "id": "http://jsonschema.net/siteStandardProfileRequest", "required":false, "properties":{ "url": { "type":"string", "id": "http://jsonschema.net/siteStandardProfileRequest/url", "required":false } } } } } example: | { "firstName": "First Name", "headline": "developer", "lastName": "Last Name", "siteStandardProfileRequest": {"url": "http://www.linkedin.com/profile/view?id=283834265"} } /connections{fieldSelectors} : displayName: Connections API type: fieldSelectors get: description: | Returns a list of 1st degree connections for a user who has granted access to his/her account queryParameters: start: description: | Starting location within the result set for paginated returns. Ranges are specified with a starting index and a number of results (count) to return. type: integer minimum: 0 default: 0 count: description: | Ranges are specified with a starting index and a number of results to return. You may specify any number. Default and max page size is 500. Implement pagination to retrieve more than 500 connections. type: integer minimum: 1 maximum: 500 default: 500 modified: description: | Values are updated or new. type: string enum: [ updated, new ] modified-since: description: | Value as a Unix time stamp of milliseconds since epoch. type: integer minimum: 0 example: 1267401600000 responses: 200: body: text/xml: schema: | example: | id first name last name head line location name 804 industry http://profile.linkedin.com Content-Type plain/text http://profile.linkedin.com http://photo.profile.linkedin.com application/json: schema: | example: | /group-memberships{fieldSelectors}: displayName: Groups API type: fieldSelectors get: description: | Returns Group Memberships for a User queryParameters: count: description: | Number of records to return. type: integer default: 5 start: description: | Record index at which to start pagination. type: integer default: 0 membership-state: description: | The state of the caller’s membership to the specified group. Use the value member to retrieve the groups to which a user belongs. type: string enum: [ non-member, awaiting-confirmation, awaiting-parent-group-confirmation, member, moderator, manager, owner ] responses: 200: body: text/xml: schema: | example: | 32423423 true daily true true false member application/json: schema: | example: | post: description: | POSTs additional group settings information body: text/xml: schema: | example: | 32423423 true daily true true false member application/json: schema: | example: | responses: 200: description: OK /{groupId}{fieldSelectors}: displayName: Groups API type: fieldSelectors uriParameters: groupId: displayName: Numeric group ID description: | The unique identifier for a LinkedIn group type: integer required: true get: description: | Returns Group settings queryParameters: membership-state: description: | The state of the caller’s membership to the specified group. Use the value member to retrieve the groups to which a user belongs. type: string enum: [ non-member, awaiting-confirmation, awaiting-parent-group-confirmation, member, moderator, manager, owner ] responses: 200: body: text/xml: schema: | example: | true daily true true true application/json: schema: | example: | put: description: | Change Group settings body: text/xml: schema: | example: | true daily true true true application/json: schema: | example: | responses: 200: description: OK delete: description: Leave a Group responses: 200: description: OK /posts{fieldSelectors}: type: fieldSelectors get: description: | Returns a Group's Discussion Posts queryParameters: count: description: | Number of records to return. Supported for posts and post/comments. type: integer minimum: 0 start: description: | Record index to start pagination. Supported for posts and post/comments. type: integer minimum: 0 default: 0 order: description: | Sort order for posts. type: string enum: [ recency, popularity ] role: description: | Filter for posts related to the caller. Valid only for group-memberships/{id}/posts resource. type: string enum: [ creator, commenter, follower ] required: true category: description: | Category of posts. type: string enum: [ discussion ] modified-since: description: | Timestamp filter for posts created after the specified value. type: integer example: 1302727083000 responses: 200: body: text/xml: schema: | example: | g-5161023-S-270459579 standard AGBKeo0Eup first name second name developer first message application/json: schema: | example: | /suggestions: displayName: Groups API /groups{fieldSelectors}: type: fieldSelectors get: description: | Get Suggested Groups for a User responses: 200: body: text/xml: schema: | example: | application/json: schema: | example: | /{groupId}: type: baseResource uriParameters: groupId: displayName: Numeric group ID description: | The unique identifier for a LinkedIn group type: integer required: true delete: description: | Remove a Group Suggestion for a Use responses: 200: description: OK /job-suggestions{fieldSelectors}: type: fieldSelectors get: description: | Retrieving a List of a Member’s Suggested Jobs responses: 200: body: text/xml: schema: | example: | 1577323 1281 Unisys OHYinXGMKT Joanne Rawls Recruiting Lead at Unisys Corporation Unisys is expanding our Federal Proposal Development Center and looking for talented professionals to join our team. As a Senior Technical Writer, you will be responsible for: • Analyzing Request for Proposals (RFP) and work with Solution Architects to package company services into a technical proposal response; write technical proposals that spell out what the company can offer to the agency seek Reston, VA 1579926 15759 Velti Negotiable UlfGF2nmYN Maria Maragoudakis-Gregoriou Experienced Business Manager with extensive international and start-up experience Senior Technical Writer (Job Code: SF-SRTCR) Velti is a leading global provider of mobile marketing and advertising software solutions that enable brands, advertising agencies, mobile operators, and media companies to implement highly targeted, interactive, and measurable campaigns by communicating with and engaging consumers via their mobile devices. Job DescriptionThe Senior Technical Writer pos San Francisco 1609091 Annual Salary, Bonus VLhDZNHMmG Ties van de Voort International Corporate Recruiter at SDL Tridion The Senior Technical Support Engineer works in a team of support engineers and reports to the Manager Customer Support. The Senior Technical Support Engineer is guarding and meeting service levels as agreed with customers, partners and the internal organization. The Senior Technical Support Engineer independently provides complex technical support to customers and partners, provides onsite support New York application/json: schema: | example: | /job-bookmarks: displayName: Job Bookmarks and Suggestions API type: baseResource get: description: | Returns Job Bookmarks responses: 200: body: text/xml: schema: | example: | false true 1306261147000 1641165 true 35876 ClairMail Senior Technical Writer The Technical Writer will be responsible for creating, maintaining and updating documentation, including internal and external facing technical documentation of ClairMail software, such as user guides, installation guides, configuration guides, and developer’s guides. The products are enterprise software products and the audience is technical, so the candidate must be able to understand highly tec 1306256696000 false true 1306261165000 1578133 true 26909 Greenplum Senior Manager Technical Publications Greenplum is seeking an experienced Senior Manager, Technical Publications to support its worldwide technical content demand and generation efforts. The Senior Manager will report to the Vice-President of Engineering, and will be responsible for developing work plans, establishing technical and other functional objectives, assigning tasks, and managing groups/teams. Maintains schedules and coordi 1303854887000 application/json: schema: | example: | post: description: | Bookmarking a Job body: text/xml: schema: | example: | application/json: schema: | example: | responses: 200: description: OK /{jobId}: type: baseResource uriParameters: jobId: displayName: Job ID description: | The unique identifier for a job. type: string required: true delete: description: | Deleting a Job Bookmark responses: 200: description: OK /id={peopleId}{fieldSelectors}: displayName: Profile API type: fieldSelectors uriParameters: peopleId: displayName: Profile ID type: string required: true get: is: [secureUrlParam] description: | Returns profile of user by ID responses: 200: body: text/xml: schema: | example: | 123456 first name last name headline name 804 industry 50 10 online 12367123678 summary id1 title1 summary1 2013 Jan false Company1 id2 title2 summary2 2013 Jun true Company2 http://url1 name of url1 http://url2 name of url2 http://url.com Date 237423472sdf Acept-type */* http://url.com http://picture.url application/json: schema: | { "type":"object", "$schema": "http://json-schema.org/draft-03/schema", "id": "http://jsonschema.net", "required":false, "properties":{ "firstName": { "type":"string", "id": "http://jsonschema.net/firstName", "required":false }, "headline": { "type":"string", "id": "http://jsonschema.net/headline", "required":false }, "lastName": { "type":"string", "id": "http://jsonschema.net/lastName", "required":false }, "siteStandardProfileRequest": { "type":"object", "id": "http://jsonschema.net/siteStandardProfileRequest", "required":false, "properties":{ "url": { "type":"string", "id": "http://jsonschema.net/siteStandardProfileRequest/url", "required":false } } } } } example: | { "firstName": "First Name", "headline": "developer", "lastName": "Last Name", "siteStandardProfileRequest": {"url": "http://www.linkedin.com/profile/view?id=283834265"} } /connections{fieldSelectors} : displayName: Connections API type: fieldSelectors get: description: | Returns a list of 1st degree connections for a user who has granted access to his/her account queryParameters: start: description: | Starting location within the result set for paginated returns. Ranges are specified with a starting index and a number of results (count) to return. type: integer minimum: 0 default: 0 count: description: | Ranges are specified with a starting index and a number of results to return. You may specify any number. Default and max page size is 500. Implement pagination to retrieve more than 500 connections. type: integer minimum: 1 maximum: 500 default: 500 modified: description: | Values are updated or new. type: string enum: [ updated, new ] modified-since: description: | Value as a Unix time stamp of milliseconds since epoch. type: integer minimum: 0 example: 1267401600000 responses: 200: body: text/xml: schema: | example: | id first name last name head line location name 804 industry http://profile.linkedin.com Content-Type plain/text http://profile.linkedin.com http://photo.profile.linkedin.com application/json: schema: | example: | /url={publicProfileUrl}{fieldSelectors}: displayName: Profile API type: fieldSelectors uriParameters: publicProfileUrl: displayName: Profile URL type: string required: true get: is: [secureUrlParam] description: | Returns profile of user by URL responses: 200: body: text/xml: schema: | example: | application/json: schema: | { "type":"object", "$schema": "http://json-schema.org/draft-03/schema", "id": "http://jsonschema.net", "required":false, "properties":{ "firstName": { "type":"string", "id": "http://jsonschema.net/firstName", "required":false }, "headline": { "type":"string", "id": "http://jsonschema.net/headline", "required":false }, "lastName": { "type":"string", "id": "http://jsonschema.net/lastName", "required":false }, "siteStandardProfileRequest": { "type":"object", "id": "http://jsonschema.net/siteStandardProfileRequest", "required":false, "properties":{ "url": { "type":"string", "id": "http://jsonschema.net/siteStandardProfileRequest/url", "required":false } } } } } example: | { "firstName": "First Name", "headline": "developer", "lastName": "Last Name", "siteStandardProfileRequest": {"url": "http://www.linkedin.com/profile/view?id=283834265"} } /connections{fieldSelectors} : displayName: Connections API type: fieldSelectors get: description: | Returns a list of 1st degree connections for a user who has granted access to his/her account queryParameters: start: description: | Starting location within the result set for paginated returns. Ranges are specified with a starting index and a number of results (count) to return. type: integer minimum: 0 default: 0 count: description: | Ranges are specified with a starting index and a number of results to return. You may specify any number. Default and max page size is 500. Implement pagination to retrieve more than 500 connections. type: integer minimum: 1 maximum: 500 default: 500 modified: description: | Values are updated or new. type: string enum: [ updated, new ] modified-since: description: | Value as a Unix time stamp of milliseconds since epoch. type: integer minimum: 0 example: 1267401600000 responses: 200: body: text/xml: schema: | example: | id first name last name head line location name 804 industry http://profile.linkedin.com Content-Type plain/text http://profile.linkedin.com http://photo.profile.linkedin.com application/json: schema: | example: | /people-search{fieldSelectors}: displayName: People Search API type: fieldSelectors get: description: | Returns information about people queryParameters: keywords: description: | Members who have all the keywords anywhere in their profile. Use this field when you don't know how to more accurately map the input to a more specific parameter. (Don't forget to URL encode this data.) type: string first-name: description: | Members with a matching first name. Matches must be exact. Multiple words should be separated by a space. type: string last-name: description: | Members with a matching last name. Matches must be exactly. Multiple words should be separated by a space. type: string company-name: description: | Members who have a matching company name on their profile. company-name can be combined with the current-company parameter to specifies whether the person is or is not still working at the company. It's often valuable to not be too specific with the company name. LinkedIn has made great efforts at standardizing company names, but including suffixes such as "Inc" and "Company" may overly limit your search, missing people who did not include those suffixes on their company names. It's usually better to search for the basic name of the company and all different versions will be returned. This does increase the possibility of a false positive match return, though, so consider the most specific terms you can use. For example, consider using "Acme" instead of "Acme, Inc" to find people from a company called Acme, Inc. But this runs the risk of finding people from different companies with Acme in the title, such as "Acme Vending" and "Acme Services". type: string current-company: description: | Valid values are true or false. A value of true matches members who currently work at the company specified in the company-name parameter. A value of false matches members who once worked at the company. Omitting the parameter matches members who currently or once worked the company. type: boolean title: description: | Matches members with that title on their profile. Works with the current-title parameter. type: string current-title: description: | Valid values are true or false. A value of true matches members whose title is currently the one specified in the title-name parameter. A value of false matches members who once had that title. Omitting the parameter matches members who currently or once had that title. type: boolean school-name: description: | Members who have a matching school name on their profile. school-name can be combined with the current-school parameter to specifies whether the person is or is not still at the school. It's often valuable to not be too specific with the school name. The same explation provided with company name applies: "Yale" vs. "Yale University". type: string current-school: description: | Valid values are true or false. A value of true matches members who currently attend the school specified in the school-name parameter. A value of false matches members who once attended the school. Omitting the parameter matches members who currently or once attended the school. type: boolean country-code: description: | Matches members with a location in a specific country. Values are defined in by ISO 3166 standard. Country codes must be in all lower case. type: string postal-code: description: | Matches members centered around a Postal Code. Must be combined with the country-code parameter. Not supported for all countries. type: string distance: description: | Matches members within a distance from a central point. This is measured in miles. This is best used in combination with both country-code and postal-code. type: string facet: description: | Facet values to search over. type: string facets: description: | Facet buckets to return. type: string start: description: | Start location within the result set for paginated returns. This is the zero-based ordinal number of the search return, not the number of the page. To see the second page of 10 results per page, specify 10, not 1. Ranges are specified with a starting index and a number of results (count) to return. The default value is 0. type: integer minimum: 0 default: 0 count: description: | The number of profiles to return. Values can range between 0 and 25. The default value is 10. The total results available to any user depends on their account level. type: integer minimum: 0 maximum: 25 default: 10 sort: description: | Controls the search result order. There are four options: * **connections**: Number of connections per person, from largest to smallest. * **recommenders**: Number of recommendations per person, from largest to smallest. * **distance**: Degree of separation within the member's network, from first degree, then second degree, and then all others mixed together, including third degree and out-of-network. * **relevance**: Relevance of results based on the query, from most to least relevant. By default, results are ordered by the number of connections. type: string enum: [connections, recommenders, distance, relevance] default: connections responses: 200: body: text/xml: schema: | example: | tePXJ3SX1o Clair Standish pcfBxmL_Vv John Bender 108 application/json: schema: | example: | /groups: displayName: Groups API /{groupId}{fieldSelectors}: type: fieldSelectors uriParameters: groupId: displayName: Numeric group ID description: | The unique identifier for a LinkedIn group type: integer required: true get: description: | Returns Group's Profile Details responses: 200: body: text/xml: schema: | example: | 5161023 group name short description description state state none 25 false category http://pragmasoft.com.ua en-US name 804 true http://site.group.com http://small.logo.com http://large.logo.com application/json: schema: | example: | /posts: type: fieldSelectors get: description: | Returns a Group's Discussion Posts queryParameters: count: description: | Number of records to return. Supported for posts and post/comments. type: integer minimum: 0 start: description: | Record index to start pagination. Supported for posts and post/comments. type: integer minimum: 0 default: 0 order: description: | Sort order for posts. type: string enum: [ recency, popularity ] role: description: | Filter for posts related to the caller. Valid only for group-memberships/{id}/posts resource. type: string enum: [ creator, commenter, follower ] category: description: | Category of posts. type: string enum: [ discussion ] modified-since: description: | Timestamp filter for posts created after the specified value. type: integer example: 1302727083000 responses: 200: body: text/xml: schema: | example: | g-5161023-S-270459579 standard AGBKeo0Eup first name second name developer first message application/json: schema: | example: | /posts: displayName: Groups API /{postId}{fieldSelectors}: type: fieldSelectors uriParameters: postId: displayName: Post ID description: | The unique identifier for a post type: string required: true get: description: | Returns Discussion Post responses: 200: body: text/xml: schema: | example: | g-5161023-S-270459579 5161023 pragmasoft group standard AGBKeo0Eup first name last name developer first message application/json: schema: | example: | delete: description: | Deletes a Post responses: 200: description: OK #TODO: implement /comments{fieldSelectors}: #TODO: implement /relation-to-viewer: #TODO: implement /category: /comments: /{commentId}{fieldSelectors}: type: fieldSelectors uriParameters: commentId: displayName: Comment ID description: | The unique identifier for a comment type: integer required: true get: description: | Returns Comments responses: 200: body: text/xml: schema: | example: | application/json: schema: | example: | delete: description: | Deletes a Comment responses: 200: description: OK /jobs: displayName: Job Lookup API /{jobId}{fieldSelectors}: type: fieldSelectors uriParameters: jobId: displayName: Job ID description: | The unique identifier for a job. type: string required: true get: description: | Returns Job info responses: 200: body: text/xml: schema: | example: | 1511685 1304030488000 229433 Cloudera Technical Writer San Francisco Bay Area us San Francisco or Palo Alto, CA hQ4ruu3J2q Paul Battaglia Technical Writer at Cloudera application/json: schema: | example: | /job-search{fieldSelectors}: displayName: Job Search API type: fieldSelectors get: description: | Returns Jobs found by some criteria responses: 200: body: text/xml: schema: | example: | 1550983 San Francisco Bay Area us David Sides -1 2011 4 14 1550465 San Francisco Bay Area us Jeanmarie Boben 3 2011 4 14 1549868 San Francisco Bay Area us Anne Woods, CPA 3 2011 4 14 application/json: schema: | example: | #TODO: add Companies, Job Posting, Share and Social Stream, Communications sections