Benefits Intake
va · Data
The Benefits Intake API allows authorized third-party systems used by Veteran Service Organizations (VSOs), agencies, and Veterans to digitally submit VA benefits claim documents directly to the Veterans Benefits Administration's (VBA) claims intake process. This API handles documents related to the following benefit claim types: * Compensation * Pension/Survivors Benefits * Education * Fiduciary * Insurance * Veteran Readiness & Employment (VRE) * Board of Veteran Appeals (BVA) This API also
Authentication
Sample Requests
Get status for a previous benefits document upload
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}"import requests
response = requests.get(
"https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}",
)
print(response.json())const url = 'https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}';
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}"
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}";
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));An endpoint that will allow you to see exactly what the server sees. We split apart all submitted docs and metadata and zip the file to make it available to you to help with debugging purposes. Files are deleted after 10 days. Only available in testing environments, not production.
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}/download"import requests
response = requests.get(
"https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}/download",
)
print(response.json())const url = 'https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}/download';
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}/download"
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}/download")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads/{id}/download";
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Get a location for subsequent document upload PUT request
Hover any highlighted part to learn what it does
curl -X POST "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads"
import requests
response = requests.post(
"https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads",
)
print(response.json())const url = 'https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads';
const response = await fetch(url, {
method: 'POST',
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads"
req, _ := http.NewRequest("POST", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Post.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/va.gov/benefits/1.0.0/uploads";
$opts = ["http" => [
"method" => "POST",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with Benefits Intake?
Benefits Intake is a Data API. Developers commonly use data APIs for:
- enriching your app with third-party datasets
- building data pipelines and ETL workflows
- querying and searching large datasets
- powering research, analysis, and reporting tools
- syncing reference data into your own systems
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Benefits Intake is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide · Learn about API keys · What is REST?