about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrancois Perrad <francois.perrad@gadz.org>2011-07-01 22:37:16 +0200
committerFrancois Perrad <francois.perrad@gadz.org>2011-07-01 22:37:16 +0200
commitd5c361bd161341fd1cfedba44c06581a13a7da71 (patch)
treef5d6d845eeb66569f621a29f3ec13632d92ae2f8
parentcompat OAuth 1.0 & 2.0 (diff)
downloadapi-description-d5c361bd161341fd1cfedba44c06581a13a7da71.tar.gz
add LinkedIn API
-rw-r--r--services/Makefile3
-rw-r--r--services/linkedin/Makefile34
-rw-r--r--services/linkedin/communications.json31
-rw-r--r--services/linkedin/companies.json127
-rw-r--r--services/linkedin/groups.json278
-rw-r--r--services/linkedin/jobs.json101
-rw-r--r--services/linkedin/linkedin.pngbin0 -> 190123 bytes
-rw-r--r--services/linkedin/network.json81
-rw-r--r--services/linkedin/oauth.json44
-rw-r--r--services/linkedin/people.json150
10 files changed, 849 insertions, 0 deletions
diff --git a/services/Makefile b/services/Makefile
index eb54875..10a704f 100644
--- a/services/Makefile
+++ b/services/Makefile
@@ -4,6 +4,7 @@ SPORE2DOT := perl ../utils/spore2dot.pl
 check: spore_validation.rx
 	@make -C github check
 	@make -C googlemaps check
+	@make -C linkedin check
 	@$(VALIDATOR) amazons3.json
 	@$(VALIDATOR) backtweet.json
 	@$(VALIDATOR) backtype.json
@@ -37,6 +38,7 @@ png: \
     twitter.png
 	@make -C github png
 	@make -C googlemaps png
+	@make -C linkedin png
 
 %.png : %.dot
 	dot -T png -o $@ $<
@@ -47,4 +49,5 @@ png: \
 clean:
 	@make -C github clean
 	@make -C googlemaps clean
+	@make -C linkedin clean
 	-rm *.png *.dot spore_validation.rx
diff --git a/services/linkedin/Makefile b/services/linkedin/Makefile
new file mode 100644
index 0000000..f48c51e
--- /dev/null
+++ b/services/linkedin/Makefile
@@ -0,0 +1,34 @@
+
+VALIDATOR := perl ../../utils/validator.pl --schema spore_validation.rx --description
+SPORE2DOT := perl ../../utils/spore2dot.pl
+
+check: spore_validation.rx
+	@$(VALIDATOR) oauth.json
+	@$(VALIDATOR) people.json
+	@$(VALIDATOR) groups.json
+	@$(VALIDATOR) companies.json
+	@$(VALIDATOR) jobs.json
+	@$(VALIDATOR) network.json
+	@$(VALIDATOR) communications.json
+
+test: check
+
+spore_validation.rx:
+	wget http://github.com/SPORE/specifications/raw/master/spore_validation.rx
+
+png: linkedin.png
+
+%.png: %.dot
+	dot -T png -o $@ $<
+
+linkedin.dot: \
+    people.json \
+    groups.json \
+    companies.json \
+    jobs.json \
+    network.json \
+    communications.json
+	$(SPORE2DOT) $^ > $@
+
+clean:
+	-rm *.png *.dot spore_validation.rx
diff --git a/services/linkedin/communications.json b/services/linkedin/communications.json
new file mode 100644
index 0000000..820017d
--- /dev/null
+++ b/services/linkedin/communications.json
@@ -0,0 +1,31 @@
+{
+   "version" : "0.1",
+   "base_url" : "http://api.linkedin.com",
+   "methods" : {
+      "send_message" : {
+         "path" : "/v1/people/~/mailbox",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "expected_status" : [ 201 ]
+      },
+      "send_invitation" : {
+         "path" : "/v1/people/~/mailbox",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "expected_status" : [ 201 ]
+      }
+   },
+   "authentication" : true,
+   "authority" : "http://github.com/SPORE",
+   "name" : "LinkedIn",
+   "meta" : {
+      "documentation" : "http://developer.linkedin.com/",
+      "module" : "Communications"
+   }
+}
diff --git a/services/linkedin/companies.json b/services/linkedin/companies.json
new file mode 100644
index 0000000..8507253
--- /dev/null
+++ b/services/linkedin/companies.json
@@ -0,0 +1,127 @@
+{
+   "version" : "0.1",
+   "base_url" : "http://api.linkedin.com",
+   "methods" : {
+      "company_by_id" : {
+         "path" : "/v1/compagnies/:id:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "company_by_name" : {
+         "path" : "/v1/companies/universal-name=:name:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "name",
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "search_company" : {
+         "path" : "/v1/company-search:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "keywords",
+            "hq-only",
+            "facet",
+            "facets",
+            "start",
+            "count",
+            "sort",
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "my_followed_companies" : {
+         "path" : "/v1/people/~/following/companies:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "follow_company" : {
+         "path" : "/v1/people/~/following/companies",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "expected_status" : [ 201 ]
+      },
+      "unfollow_company" : {
+         "path" : "/v1/people/~/following/companies/id=:id",
+         "method" : "DELETE",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 204 ]
+      },
+      "suggestion_companies" : {
+         "path" : "/v1/people/~/suggestions/to-follow/companies:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "company_products" : {
+         "path" : "/v1/companies/:id/products:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      }
+   },
+   "authentication" : true,
+   "authority" : "http://github.com/SPORE",
+   "name" : "LinkedIn",
+   "meta" : {
+      "documentation" : "http://developer.linkedin.com/",
+      "module" : "Companies"
+   }
+}
diff --git a/services/linkedin/groups.json b/services/linkedin/groups.json
new file mode 100644
index 0000000..7aed98f
--- /dev/null
+++ b/services/linkedin/groups.json
@@ -0,0 +1,278 @@
+{
+   "version" : "0.1",
+   "base_url" : "http://api.linkedin.com",
+   "methods" : {
+      "group_by_id" : {
+         "path" : "/v1/groups/:id:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "my_group_memberships" : {
+         "path" : "/v1/people/~/group-memberships:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "membership-state",
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "show_group_setting" : {
+         "path" : "/v1/people/~/group-memberships/:id:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "change_group_setting" : {
+         "path" : "/v1/people/~/group-memberships/:id",
+         "method" : "PUT",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 201 ]
+      },
+      "join_group_by_id" : {
+         "path" : "/v1/people/~/group-memberships/:id",
+         "method" : "PUT",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 201 ]
+      },
+      "join_group" : {
+         "path" : "/v1/people/~/group-memberships",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "expected_status" : [ 201 ]
+      },
+      "leave_group" : {
+         "path" : "/v1/people/~/group-memberships/:id",
+         "method" : "DELETE",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 204 ]
+      },
+      "show_posts" : {
+         "path" : "/v1/groups/:id/posts:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "start",
+            "count",
+            "order",
+            "role",
+            "category",
+            "modified-since",
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "post_by_id" : {
+         "path" : "/v1/posts/:id:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "show_comments" : {
+         "path" : "/v1/posts/:id/comments:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "start",
+            "count",
+            "order",
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "create_post" : {
+         "path" : "/v1/groups/:id/posts",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 201 ]
+      },
+      "like_post" : {
+         "path" : "/v1/posts/:id/relation-to-viewer/is-liked",
+         "method" : "PUT",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 201 ]
+      },
+      "follow_post" : {
+         "path" : "/v1/posts/:id/relation-to-viewer/is-following",
+         "method" : "PUT",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 201 ]
+      },
+      "flag_post" : {
+         "path" : "/v1/posts/:id/category/code",
+         "method" : "PUT",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 201 ]
+      },
+      "delete_post" : {
+         "path" : "/v1/posts/:id",
+         "method" : "DELETE",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 204 ]
+      },
+      "comment_by_id" : {
+         "path" : "/v1/comments/:id:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "add_comment" : {
+         "path" : "/v1/posts/:id/comments",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 201 ]
+      },
+      "delete_comment" : {
+         "path" : "/v1/comments/:id",
+         "method" : "DELETE",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 204 ]
+      },
+      "suggestion_groups" : {
+         "path" : "/v1/people/~/suggestions/groups:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "remove_group_suggestion" : {
+         "path" : "/v1/people/~/suggestions/groups/:id",
+         "method" : "DELETE",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 204 ]
+      }
+   },
+   "authentication" : true,
+   "authority" : "http://github.com/SPORE",
+   "name" : "LinkedIn",
+   "meta" : {
+      "documentation" : "http://developer.linkedin.com/",
+      "module" : "Groups"
+   }
+}
diff --git a/services/linkedin/jobs.json b/services/linkedin/jobs.json
new file mode 100644
index 0000000..d234079
--- /dev/null
+++ b/services/linkedin/jobs.json
@@ -0,0 +1,101 @@
+{
+   "version" : "0.1",
+   "base_url" : "http://api.linkedin.com",
+   "methods" : {
+      "job_by_id" : {
+         "path" : "/v1/jobs/:id:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "search_job" : {
+         "path" : "/v1/job-search:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "keywords",
+            "company-name",
+            "job-title",
+            "country-code",
+            "postal-code",
+            "distance",
+            "facet",
+            "facets",
+            "start",
+            "count",
+            "sort",
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "my_bookmarked_jobs" : {
+         "path" : "/v1/people/~/job-bookmarks:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "bookmark_job" : {
+         "path" : "/v1/people/~/job-bookmarks",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "expected_status" : [ 201 ]
+      },
+      "unbookmark_job" : {
+         "path" : "/v1/people/~/job-bookmarks/:id",
+         "method" : "DELETE",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id"
+         ],
+         "expected_status" : [ 204 ]
+      },
+      "suggestion_jobs" : {
+         "path" : "/v1/people/~/suggestions/job-suggestions:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      }
+   },
+   "authentication" : true,
+   "authority" : "http://github.com/SPORE",
+   "name" : "LinkedIn",
+   "meta" : {
+      "documentation" : "http://developer.linkedin.com/",
+      "module" : "Jobs"
+   }
+}
diff --git a/services/linkedin/linkedin.png b/services/linkedin/linkedin.png
new file mode 100644
index 0000000..76da206
--- /dev/null
+++ b/services/linkedin/linkedin.png
Binary files differdiff --git a/services/linkedin/network.json b/services/linkedin/network.json
new file mode 100644
index 0000000..280a2ca
--- /dev/null
+++ b/services/linkedin/network.json
@@ -0,0 +1,81 @@
+{
+   "version" : "0.1",
+   "base_url" : "http://api.linkedin.com",
+   "methods" : {
+      "my_network_updates" : {
+         "path" : "/v1/people/~/network/updates",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "optional_params" : [
+            "scope",
+            "type",
+            "count",
+            "start",
+            "after",
+            "before",
+            "show-hidden-members",
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "network_updates_by_id" : {
+         "path" : "/v1/people/id=:id/network/updates",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id"
+         ],
+         "optional_params" : [
+            "scope",
+            "type",
+            "count",
+            "start",
+            "after",
+            "before",
+            "show-hidden-members",
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "my_network_stats" : {
+         "path" : "/v1/people/~/network/network-stats",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "optional_params" : [
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "post_update" : {
+         "path" : "/v1/people/~/person-activities",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "expected_status" : [ 201 ]
+      },
+      "add_shares" : {
+         "path" : "/v1/people/~/shares",
+         "method" : "POST",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_payload" : true,
+         "expected_status" : [ 201 ]
+      }
+   },
+   "authentication" : true,
+   "authority" : "http://github.com/SPORE",
+   "name" : "LinkedIn",
+   "meta" : {
+      "documentation" : "http://developer.linkedin.com/",
+      "module" : "Network"
+   }
+}
diff --git a/services/linkedin/oauth.json b/services/linkedin/oauth.json
new file mode 100644
index 0000000..9cf94e1
--- /dev/null
+++ b/services/linkedin/oauth.json
@@ -0,0 +1,44 @@
+{
+   "version" : "0.1",
+   "base_url" : "https://api.linkedin.com",
+   "methods" : {
+      "get_request_token" : {
+         "path" : "/uas/oauth/requestToken",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_signature_method=\":oauth_signature_method\", oauth_signature=\":oauth_signature\", oauth_timestamp=\":oauth_timestamp\", oauth_nonce=\":oauth_nonce\", oauth_version=\":oauth_version\", oauth_callback=\":oauth_callback\""
+         },
+         "expected_status" : [ 200, 400 ],
+         "authentication" : true
+      },
+      "get_access_token" : {
+         "path" : "/uas/oauth/accessToken",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_token=\":oauth_token\", oauth_verifier=\":oauth_verifier\", oauth_signature_method=\":oauth_signature_method\", oauth_signature=\":oauth_signature\", oauth_timestamp=\":oauth_timestamp\", oauth_nonce=\":oauth_nonce\", oauth_version=\":oauth_version\""
+         },
+         "expected_status" : [ 200, 400 ],
+         "authentication" : true
+     },
+      "authorize_token" : {
+         "path" : "/uas/oauth/authorize",
+         "method" : "GET",
+         "required_params" : [
+            "oauth_token"
+         ],
+         "expected_status" : [ 302 ]
+      },
+      "invalidate_token" : {
+         "path" : "/uas/oauth/invalidateToken",
+         "method" : "GET",
+         "expected_status" : [ 200, 400 ],
+         "authentication" : true
+      }
+   },
+   "authority" : "http://github.com/SPORE",
+   "name" : "LinkedIn",
+   "meta" : {
+      "documentation" : "http://developer.linkedin.com/",
+      "module" : "OAuth"
+   }
+}
diff --git a/services/linkedin/people.json b/services/linkedin/people.json
new file mode 100644
index 0000000..d315e93
--- /dev/null
+++ b/services/linkedin/people.json
@@ -0,0 +1,150 @@
+{
+   "version" : "0.1",
+   "base_url" : "http://api.linkedin.com",
+   "methods" : {
+      "my_profile" : {
+         "path" : "/v1/people/~:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\"",
+            "Accept-Language" : ":lang"
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "format",
+            "lang"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "profile_by_id" : {
+         "path" : "/v1/people/id=:id:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\"",
+            "Accept-Language" : ":lang"
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "format",
+            "lang"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "profile_by_url" : {
+         "path" : "/v1/people/url=:url:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\"",
+            "Accept-Language" : ":lang"
+         },
+         "required_params" : [
+            "url",
+            "selector"
+         ],
+         "optional_params" : [
+            "format",
+            "lang"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "search_people" : {
+         "path" : "/v1/people-search:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "keywords",
+            "first-name",
+            "last-name",
+            "company-name",
+            "current-company",
+            "title",
+            "current-title",
+            "school-name",
+            "current-school",
+            "country-code",
+            "postal-code",
+            "distance",
+            "facet",
+            "facets",
+            "start",
+            "count",
+            "sort",
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "my_connections" : {
+         "path" : "/v1/people/~/connections:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "selector"
+         ],
+         "optional_params" : [
+            "start",
+            "count",
+            "modified",
+            "modified-since",
+            "format"
+         ],
+         "expected_status" : [ 200 ]
+      },
+      "connections_by_id" : {
+         "path" : "/v1/people/id=:id/connections:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "id",
+            "selector"
+         ],
+         "optional_params" : [
+            "start",
+            "count",
+            "modified",
+            "modified-since",
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      },
+      "connections_by_url" : {
+         "path" : "/v1/people/url=:url/connnections:selector",
+         "method" : "GET",
+         "headers" : {
+            "Authorization" : "OAuth oauth_consumer_key=\":oauth_consumer_key\", oauth_nonce=\":oauth_nonce\", oauth_signature_method=\":oauth_signature_method\", oauth_timestamp=\":oauth_timestamp\", oauth_token=\":oauth_token\", oauth_version=\":oauth_version\", oauth_signature=\":oauth_signature\""
+         },
+         "required_params" : [
+            "url",
+            "selector"
+         ],
+         "optional_params" : [
+            "start",
+            "count",
+            "modified",
+            "modified-since",
+            "format"
+         ],
+         "expected_status" : [ 200, 404 ]
+      }
+   },
+   "authentication" : true,
+   "authority" : "http://github.com/SPORE",
+   "name" : "LinkedIn",
+   "meta" : {
+      "documentation" : "http://developer.linkedin.com/",
+      "module" : "People"
+   }
+}