diff --git a/CandidateStatusAPI.md b/CandidateStatusAPI.md
new file mode 100644
index 0000000..b58f961
--- /dev/null
+++ b/CandidateStatusAPI.md
@@ -0,0 +1,316 @@
+
+# Overview
+The candidate status API provides a key value store for storing ATS status values for a candidate.
+
+# Schema
+
+
+
+
+
+
+
+| account |
+Y |
+String(20) |
+CB Account DID |
+
+
+| candidate_email |
+Y |
+String(255) |
+255 is not a typo. |
+
+
+| vendor_key |
+N |
+String(20) |
+Type of source system(Bullhorn, Luceo, TEE…) |
+
+
+| client |
+N |
+String(20) |
+System calling this service
+(MyCandidates, CandidateStream) |
+
+
+| requisition_id |
+N |
+String(1024) |
+Job this status applies to (can be null) |
+
+
+| requisition_title |
+N |
+String(256) |
+ |
+
+
+| level_id |
+N |
+String(64) |
+ID of Candidate/Application |
+
+
+| status |
+Y |
+String(100) |
+The raw status as recorded by source system |
+
+
+| status_date |
+Y |
+Date/time |
+UTC Date/time of status change
+Format: YYYY-MM-DDTHH:MM:SSZ
+1776-07-04T19:04:01Z |
+
+
+| status_level |
+Y |
+String(20) |
+Candidate/Application |
+
+
+| status_detail |
+N |
+String(4096) |
+free form string |
+
+
+
+
+# Usage
+
+#### Unique Key
+
+ - account
+ - candidate_email
+ - vendor_key
+ - requisition_id
+ - status_level
+
+This assumes that we are:
+
+ - Combining step and status for TEE
+ - Only storing 1 translation (TSR has translations for each status
+ value)
+
+#### Bullhorn
+
+Three possible status entries –
+candidate, jobsubmission, and placement. It looks like placement can
+replace jobsubmission status, so that we could just have one status for
+a job requisition.
+
+ - Candidate->Status
+ - Candidate->JobSubmission(s)->JobOrder and Status
+ - Candidate->Placement(s)-> JobOrder and Status
+ - Candidate->Placement(s)->JobSubmission->JobOrder and Status
+
+#### TEE
+
+Candidate status and application
+status entries.
+
+ - Candidate->Step and Status
+ - Candidate->Application(s)->Requisition, Step and Status
+
+Each step has a status. Step is like New, Reviewed, First Interview,
+Second Interview, Third Interview, Testing, Offer, Hired, Rejected,
+Declined, Pipeline, Inactive. Status is like not started, in progress,
+completed.
+
+#### Campaign Mgt.
+Status per campaign
+
+#### TSR
+Candidate status and application status entries (~4 translations per status)
+
+# Resource URI
+/Corporate/CandidateStatus
+
+# Actions
+## GET
+
+Retrieve all statuses for a single email.
+
+GET /Corporate/CandidateStatus/{account}/{candidate_email}
+
+Optional query string parameters:
+ - Results_per_page (Defaults to 10)
+ - Status_date (only statuses that have dates after the value provided are returned.)
+
+GET /Corporate/CandidateStatus/AAAA_1234/testEmail@123.com?results_per_page=15&status_date=2017-02-18T19:04:01Z
+
+Sample result:
+```json
+[{
+ "requisition_id":"1",
+ "vendor_key":"test_vendor_key",
+ "status_detail":"Test status detail",
+ "status_level":"application",
+ "status_date":"2017-03-19T23:04:01Z",
+ "level_id":"test_level_id",
+ "status":"test_status",
+ "client":"test_client",
+ "requisition_title":"test_req_title",
+ "account":"AAAA_1234",
+ "candidate_email":"testEmail@123.com"
+},
+{
+ "requisition_id":"2",
+ "vendor_key":"test_vendor_key",
+ "status_detail":"Test status detail",
+ "status_level":"application",
+ "status_date":"2017-03-19T23:04:01Z",
+ "level_id":"test_level_id",
+ "status":"test_status",
+ "client":"test_client",
+ "requisition_title":"test_req_title",
+ "account":"AAAA_1234",
+ "candidate_email":"testEmail@123.com"
+},
+{
+ "requisition_id":"3",
+ "vendor_key":"test_vendor_key",
+ "status_detail":"Test status detail",
+ "status_level":"application",
+ "status_date":"2017-03-19T23:04:01Z",
+ "level_id":"test_level_id",
+ "status":"test_status",
+ "client":"test_client",
+ "requisition_title":"test_req_title",
+ "account":"AAAA_1234",
+ "candidate_email":"testEmail@123.com"
+}]
+```
+
+## PUT
+Insert a status
+
+PUT /Corporate/CandidateStatus
+
+Requirements:
+ - account
+ - email
+ - status
+ - status_date
+ - status_level (must be either candidate or application)
+ - if candidate:requisition_id and requisition_title must be
+ left off
+
+ - if application: requisition_id is required. Requisition_title
+ is still optional.
+
+Sample request 1 (application):
+```json
+{
+"account":"AAAA_1234",
+"candidate_email":"testEmail@123.com",
+"vendor_key":"test_vendor_key",
+"client":"test_client",
+"requisition_id":"123",
+"level_id":"test_level_id",
+"status":"test_status",
+"status_date":"2017-03-19T19:04:01Z",
+"status_level":"application",
+"status_detail":"Test status detail"
+}
+```
+Sample request 2 (candidate):
+```json
+{
+"account":"AAAA_1234",
+"candidate_email":"testEmail@123.com",
+"vendor_key":"test_vendor_key",
+"client":"test_client",
+"level_id":"test_level_id",
+"status":"test_status",
+"status_date":"2017-03-19T19:04:01Z",
+"status_level":"candidate",
+"status_detail":"Test status detail"
+}
+```
+
+Sample response
+```
+"Created/updated status."
+```
+
+## POST
+Retrieve multiple emails or multiple requisition_ids
+
+POST /Corporate/CandidateStatus
+
+Requirements:
+- account
+- either a list of candidate emails or a list of requisition ids.
+
+Optional:
+- Status_date (only statuses that have dates after the value provided are returned.)
+
+Sample request 1:
+```json
+{
+ "account":"aaaa_1234",
+ "candidate_email":["testEmail@123.com", "testEmail@1234.com"],
+ "status_date":"2017-03-18T19:04:01Z"
+}
+```
+Sample request 2:
+```json
+{
+ "account":"aaaa_1234",
+ "requisition_id":["1", "2", "123"],
+ "status_date":"2017-03-18T19:04:01Z"
+}
+```
+
+Sample response:
+```json
+[{
+ "requisition_id":"1",
+ "vendor_key":"test_vendor_key",
+ "status_detail":"Test status detail",
+ "status_level":"application",
+ "status_date":"2017-03-19T23:04:01Z",
+ "level_id":"test_level_id",
+ "status":"test_status",
+ "client":"test_client",
+ "requisition_title":"test_req_title",
+ "account":"AAAA_1234",
+ "candidate_email":"testEmail@123.com"
+},
+{
+ "requisition_id":"2",
+ "vendor_key":"test_vendor_key",
+ "status_detail":"Test status detail",
+ "status_level":"application",
+ "status_date":"2017-03-19T23:04:01Z",
+ "level_id":"test_level_id",
+ "status":"test_status",
+ "client":"test_client",
+ "requisition_title":"test_req_title",
+ "account":"AAAA_1234",
+ "candidate_email":"testEmail@123.com"
+},
+{
+ "requisition_id":"123",
+ "vendor_key":"test_vendor_key",
+ "status_detail":"Test status detail",
+ "status_level":"application",
+ "status_date":"2017-03-19T23:04:01Z",
+ "level_id":"test_level_id",
+ "status":"test_status",
+ "client":"test_client",
+ "account":"AAAA_1234",
+ "candidate_email":"testEmail@123.com"
+}]
+```
diff --git a/README.md b/README.md
index 982b7a0..583ea08 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ CDS APIs are concentrated into two areas: Candidate Data & Candidate Search.
Used to create and manipulate Candidate Data.
* [Candidate Upload API](/UploadAPI.md)
* [Client API](/ClientAPI.md)
-* Candidate Status API
+* [Candidate Status API](/CandidateStatusAPI.md)
* [Recruiter Actions API](/ActionsAPI.md)
## Candidate Search