{"openapi":"3.0.0","info":{"version":"0.0.1","title":"Veteran Verification","description":"\nThe Veteran Verification API allows you to confirm the Veteran status for a given person, or retrieve a Veteran's service history or disability rating.\n\nWhen confirming Veteran Status, the Status endpoint will return \"Confirmed\" or \"Not Confirmed\".\n\n## Quickstart Guide\n\n### 1. Get Access Credentials\n\nGet started by filling out the form on the [Apply for VA Lighthouse Developer Access](/apply) page.\n\nAfter submitting a request, you will receive your credentials for using the API in the Sandbox environment, which allows you to try it out with mock data before moving to the Production environment.\n\n### 2. Test the API\n\nIn the endpoint documentation below, we've provided a curl command builder for trying out the API before implementation with your app.\n\n### 3. Build your app\n\nThe base URI for the Veteran Verification API in the Sandbox environment is:\n\nhttps://sandbox-api.va.gov/services/veteran_verification/v0\n\nCheck out some of our [sample apps](https://github.com/department-of-veterans-affairs/vets-api-clients/tree/master/samples/). Please visit our VA Lighthouse [Support portal](/support) should you need further assistance.\n\n### 4. Show us a demo and get set up in the Production environment\n\nAfter building your app, we ask that you give us a demo before we set you up with production credentials. Please see the [Path to Production](/go-live) page for more details.\n\n## Reference\n\n### Sandbox vs. Production Data\nAPIs accessed via the Sandbox environment are using the same underlying logic as VA’s production APIs; only the underlying data store is different.\n\n### Rate Limiting\nWe implemented basic rate limiting of 60 requests per minute. If you exceed this quota, your request will return a 429 status code. You may petition for increased rate limits by emailing, and requests will be decided on a case by case basis.\n\n### Raw Open API Spec\nhttps://api.va.gov/services/veteran_verification/docs/v0/veteran_verification\n","termsOfService":"","contact":{"name":"VA.gov"}},"servers":[{"url":"https://sandbox-api.va.gov/services/veteran_verification/{version}","description":"Sandbox","variables":{"version":{"default":"v0"}}},{"url":"https://api.va.gov/services/veteran_verification/{version}","description":"Production","variables":{"version":{"default":"v0"}}}],"paths":{"/status":{"get":{"tags":["Veteran Verification"],"summary":"Get confirmation about an individual's Veteran status according to the VA","operationId":"GET:/status","security":[{"bearer_token":[]}],"responses":{"200":{"description":"Confirmation status successfully retrieved","content":{"application/json":{"schema":{"required":["data"],"properties":{"data":{"$ref":"#/components/schemas/VeteranStatusConfirmation"}}}}}},"401":{"description":"Not authorized"},"413":{"description":"Payload too large","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"example":{"message":"Request size limit exceeded"}}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"example":{"message":"API rate limit exceeded"}}}}},"502":{"description":"eMIS failed to respond or responded in a way we cannot handle."}}}},"/disability_rating":{"get":{"tags":["Veteran Verification"],"summary":"Retrieve disability rating of authorized Veteran","operationId":"GET:/disability_rating","security":[{"bearer_token":[]}],"responses":{"200":{"description":"Disability Rating retrieved successfully","content":{"application/json":{"schema":{"required":["data"],"properties":{"data":{"$ref":"#/components/schemas/DisabilityRating"}}}},"application/jwt":{"schema":{"$ref":"#/components/schemas/DisabilityRatingToken"}}}},"401":{"description":"Not authorized"},"413":{"description":"Payload too large","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"example":{"message":"Request size limit exceeded"}}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"example":{"message":"API rate limit exceeded"}}}}},"502":{"description":"BGS service responded with something other than the expected disability rating response."}}}},"/service_history":{"get":{"tags":["Veteran Verification"],"summary":"Retrieve service history of authorized Veteran","operationId":"GET:/service_history","security":[{"bearer_token":[]}],"responses":{"200":{"description":"Service History retrieved successfully","content":{"application/json":{"schema":{"required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ServiceHistoryEpisode"}}}}},"application/jwt":{"schema":{"required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ServiceHistoryToken"}}}}}}},"401":{"description":"Not authorized"},"404":{"description":"No service history found"},"413":{"description":"Payload too large","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"example":{"message":"Request size limit exceeded"}}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"example":{"message":"API rate limit exceeded"}}}}}}}},"/keys":{"get":{"tags":["JWS Validation"],"summary":"Retrieve public keys to check Veteran Verification API token signatures","operationId":"GET:/keys","responses":{"200":{"description":"Keys retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JWKKeyset"}}}},"401":{"description":"Not authorized"},"413":{"description":"Payload too large","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"example":{"message":"Request size limit exceeded"}}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"example":{"message":"API rate limit exceeded"}}}}}}}}},"components":{"securitySchemes":{"bearer_token":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"DisabilityRating":{"description":"The disability rating percentage applied to the Veteran.\n","required":["id","type","atttributes"],"properties":{"id":{"description":"JSON API identifier","nullable":false,"type":"string","example":12303},"type":{"description":"JSON API type specification","nullable":false,"type":"string","example":"disability-rating"},"attributes":{"$ref":"#/components/schemas/DisabilityRatingAttributes"}}},"DisabilityRatingAttributes":{"description":"Body of the disability rating response\n","required":["combined_disability_rating","combined_effective_date","legal_effective_date","individual_ratings"],"properties":{"combined_disability_rating":{"description":"Overall severity rating determined by VA calculation of each service related conditions. Used to help determine disability compensation (pay) and related benefits.","nullable":true,"type":"integer","example":100},"combined_effective_date":{"description":"The effective date of the latest combined disability rating for the Veteran","nullable":true,"type":"datetime","example":"2018-03-27T21:00:41.000+0000"},"legal_effective_date":{"description":"When the Veteran could begin claiming benefits for combined disability rating","nullable":true,"type":"datetime","example":"2018-03-27T21:00:41.000+0000"},"individual_ratings":{"description":"list of individual service connected disabilty ratings","type":"array","items":{"$ref":"#/components/schemas/individual_ratings"}}}},"individual_ratings":{"description":"list of service connected disability ratings","required":["decision","effective_date","rating_percentage"],"properties":{"decision":{"description":"Whether the disability is service connected or not.","nullable":true,"type":"string","example":"Service Connected"},"effective_date":{"description":"When the Veteran could begin claiming benefits related to this disability","nullable":true,"type":"string","format":"datetime","example":"2018-03-27T21:00:41.000+0000"},"rating_percentage":{"description":"Severity rating determined by VA that indicates how disabling an illness or injury is for the Veteran. Used to help determine disability compensation (pay) and related benefits.","nullable":true,"type":"number","example":50}}},"DisabilityRatingToken":{"description":"A token containing signed claims about a Veteran's disability rating percentage\n","type":"string","example":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4OGQyNDIzMmZmNmZhYTRjZDRjZmVjMTI2YWQwNDMxZGZmMWVhMDI4YWZkYjFjODZiMzcxOGQ3MDE3MWFlZDYifQ.eyJkYXRhIjp7ImlkIjoxMjMwMywidHlwZSI6ImRvY3VtZW50X3VwbG9hZCIsImF0dHJpYnV0ZXMiOnsiZGVjaXNpb24iOiJTZXJ2aWNlIENvbm5lY3RlZCIsImVmZmVjdGl2ZV9kYXRlIjoiMjAxOC0wMy0yN1QyMTowMDo0MS4wMDArMDAwMCIsInJhdGluZ19wZXJjZW50YWdlIjo1MH19fQ.z3EeYFixwdmG_4_LFdzy6fdF2Y7nj3y9uOPRTwLqsXVcLNUDIN72atn0SSI-hkF-rRkbFdyzLDaY2AWtQ-LmBPdeWqyv4U2ZnjynAwlCnG0VNG3x4Wz2qSW7BW1cQVBx0yvWag_NmQ74AfOBNz7K2qz8aEOvYIJaicRr2hSAu7A"},"VeteranStatusConfirmation":{"description":"Veteran status confirmation for an individual\n","type":"object","properties":{"id":{"type":"string","description":"Confirmation UUID","example":"833c6ffc-efef-4775-9355-f836b4f57501"},"type":{"type":"string","example":"veteran_status_confirmations"},"attributes":{"type":"object","properties":{"veteran_status":{"type":"string","description":"Whether the system could confirm the Veteran status of the authorized individual\n","enum":["confirmed","not confirmed"]}}}}},"ServiceHistoryEpisode":{"description":"Service History for authorized Veteran\n","required":["id","attributes"],"type":"object","properties":{"id":{"type":"string","nullable":false,"description":"Service History Episode ID","example":"12312AASDf"},"type":{"type":"string","example":"service-history-episodes"},"attributes":{"type":"object","required":["first_name","last_name","start_date","end_date","branch_of_service","pay_grade","discharge_status","separation_reason","deployments"],"properties":{"first_name":{"type":"string","nullable":false,"description":"Veteran first name","example":"Abraham"},"last_name":{"type":"string","nullable":false,"description":"Veteran last name","example":"Lincoln"},"start_date":{"type":"string","nullable":true,"format":"date","description":"start date of a service history episode (YYYY-mm-dd)","example":"1948-04-08"},"end_date":{"type":"string","nullable":true,"format":"date","description":"end date of a service history episode (YYYY-mm-dd)","example":"1950-05-10"},"branch_of_service":{"type":"string","nullable":false,"description":"Branch of military including National Guard or Reserve status","example":"Air Force"},"pay_grade":{"type":"string","nullable":false,"description":"Defines the level of compensation for a position, normalized across military branches\n\nPossible values include the concatenation of Pay Plan Code and Pay Grade Code.\nPay Plan Code is represented as a two-character code, and can be one of five values:\n - CC (Commissioned Corps)\n - MC (Cadet)\n - ME (Enlisted)\n - MO (Officer)\n - MW (Warrant Officer)\n\nPay Grade Code is a value between 01 and 10.\nPay Plan Code is concatenated with Pay Grade Code to determine the full Pay Grade value, with the leading character (M or C) stripped from Pay Plan Code.\n","example":"W01"},"discharge_status":{"type":"string","nullable":true,"description":"Character of discharge from service episode. Possible values are:\n\nBoth \"honorable-for-va-purposes\" and \"dishonorable-for-va-purposes\" represent a change in character of discharge based on an administrative decision, for purposes of VA benefits administration. The original character of discharge for other purposes was either \"bad-conduct\" or \"other-than-honorable\". \"honorable-absence-of-negative-report\" represents an unreported character of service that DoD classifies as honorable.\n","enum":["honorable","general","bad-conduct","other-than-honorable","dishonorable","honorable-absence-of-negative-report","honorable-for-va-purposes","dishonorable-for-va-purposes","uncharacterized","unknown"],"example":"honorable"},"separation_reason":{"type":"string","nullable":false,"description":"Additional text description for separation reason beyond discharge_status value","example":"SUFFICIENT SERVICE FOR RETIREMENT"},"deployments":{"type":"array","items":{"$ref":"#/components/schemas/Deployment"}}}}}},"Deployment":{"description":"Deployment during a service history episode\n","type":"object","required":["start_date","end_date","location"],"properties":{"start_date":{"type":"string","nullable":true,"format":"date","description":"beginning of deployment (YYYY-mm-dd)","example":"1948-10-10"},"end_date":{"type":"string","nullable":true,"format":"date","description":"end of deployment (YYYY-mm-dd)","example":"1949-10-09"},"location":{"type":"string","nullable":true,"description":"Three letter ISO country code of deployment location","example":"KOR"}}},"ServiceHistoryToken":{"description":"A token containing signed claims about a Veteran's service history\n","type":"string","example":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4OGQyNDIzMmZmNmZhYTRjZDRjZmVjMTI2YWQwNDMxZGZmMWVhMDI4YWZkYjFjODZiMzcxOGQ3MDE3MWFlZDYifQ.eyJkYXRhIjp7ImlkIjoiMTIzMTJBQVNEZiIsInR5cGUiOiJzZXJ2aWNlLWhpc3RvcnktZXBpc29kZXMiLCJhdHRyaWJ1dGVzIjp7InN0YXJ0X2RhdGUiOiIxOTQ4LTA0LTA4IiwiZW5kX2RhdGUiOiIxOTUwLTA1LTEwIiwiYnJhbmNoIjoiQWlyIEZvcmNlIiwiZGlzY2hhcmdlX3N0YXR1cyI6Imhvbm9yYWJsZSIsImRlcGxveW1lbnRzIjpbeyJzdGFydF9kYXRlIjoiMTk0OC0xMC0xMCIsImVuZF9kYXRlIjoiMTk0OS0xMC0wOSIsImxvY2F0aW9uIjoiS09SIn1dfX19.S39hmL-5nxvdJnJ_PSHdfiP744dTcGzrUKsqcVQa1FomUU15Dr2A2gQMF7XWO2DCLrdM0bCtIS8mCSwI00nqQFqXGjZVGQTIyzQJDPHxV6jnYwwaXD1vzbxlsycWF2ZQ_5Wx6TIhnXiEkbn_rzW_VleVnHjLCRQwzmpwGGDsL_I"},"JWKKeyset":{"description":"A JWK Keyset compliant with RFC 7517","type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/JWK"}}}},"JWK":{"description":"JSON Web Key compliant with RFC 7517","type":"object","properties":{"kty":{"type":"string","description":"The \"kty\" (key type) parameter identifies the cryptographic algorithm family used with the key, such as \"RSA\" or \"EC\".","example":"RSA"},"alg":{"type":"string","description":"The \"alg\" (algorithm) parameter identifies the algorithm intended for use with the key.","example":"RSA256"},"kid":{"type":"string","description":"The \"kid\" (key ID) parameter is used to match a specific key.","example":"088d24232ff6faa4cd4cfec126ad0431dff1ea028afdb1c86b3718d70171aed6"},"pem":{"type":"string","description":"A pem version of the public key","example":"-----BEGIN PUBLIC KEY-----\\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfC0vJvKBPhS+KA+ad1HkpXrI8\\nJoawtqzVwYgCGrlIgYgnRzKDvRFMbskYFTfPB7a8kT0gAkyFGvjlxp4EQ6mpVGhA\\nDNVWBVArQlcnMMbNsKRmb2jSLSzjX49C26na6mUi9X+xe6iS97L0yyJWBA91Yq3c\\nC0kJ8J8lwPoK9TvXqwIDAQAB\\n-----END PUBLIC KEY-----\\n"},"e":{"type":"string","description":"The \"e\" (exponent) parameter contains the exponent value for the RSA public key. It is represented as a Base64urlUInt-encoded value.","example":"AQAB"},"n":{"type":"string","description":" The \"n\" (modulus) parameter contains the modulus value for the RSA public key. It is represented as a Base64urlUInt-encoded value.","example":"3wtLybygT4UvigPmndR5KV6yPCaGsLas1cGIAhq5SIGIJ0cyg70RTG7JGBU3zwe2vJE9IAJMhRr45caeBEOpqVRoQAzVVgVQK0JXJzDGzbCkZm9o0i0s41-PQtup2uplIvV_sXuokvey9MsiVgQPdWKt3AtJCfCfJcD6CvU716s="}}}}}}