Overview
GSA establishes the per diem reimbursement rates that federal agencies use to reimburse their employees for subsistence expenses incurred while on official travel within the continental United States. CONUS includes the 48 contiguous states and the District of Columbia. The per diem reimbursement rates consist of a maximum lodging allowance component and a meals and incidental expenses (M&IE) component.
Rates for the coming federal government fiscal year (October 1st to September 30th) are typically announced in mid-August. The API is generally updated with the new rates in mid-August.
Use of this API is subject to Terms of Service for GSA.gov’s Developer Resources.
Getting started
User requirements
Users can make GET requests using any browser or a REST client, e.g., Postman.
To begin using this API, you will need to register for an API Key. You can sign up for an API key below. After registration, you will need to provide this API key in the x-api-key
HTTP header or append it to the API URL with every request, e.g., ?api_key={api_key}.
API endpoints
This API has six primary endpoints:
- https://api.gsa.gov/travel/perdiem/v2/rates/city/{city}/state/{ST}/year/{year}
- https://api.gsa.gov/travel/perdiem/v2/rates/state/{ST}/year/{year}
- https://api.gsa.gov/travel/perdiem/v2/rates/zip/{zip}/year/{year}
- https://api.gsa.gov/travel/perdiem/v2/rates/conus/lodging/{year}
- https://api.gsa.gov/travel/perdiem/v2/rates/conus/mie/{year}
- https://api.gsa.gov/travel/perdiem/v2/rates/conus/zipcodes/{year}
Rate limits
The default rate limit is 1,000 hits per hour. If you need to request a rate limit change, please email us at digitalteam@gsa.gov.
OpenAPI specification file
You can view the full details of this API in the OpenAPI specification file.
API description
About per diem rates
Most of CONUS is covered by the standard per diem rate. In addition there are several hundred non-standard areas (NSAs) that have per diem rates higher than the standard rate. Most NSAs are comprised of a key city/primary destination and the surrounding county. The per diem rate database is organized by location and fiscal year. Maximum lodging allowances in some NSAs vary seasonally, which is why they are listed by month.
For more information on methods of reimbursement, first and last day of travel, and meal deductions, please consult the Federal Travel Regulation.
Sensitive API process
Warning: The per diem rates results do not contain every city name in the continental US. If you cannot find your city name, search by state and filter by county or by ZIP code. Another alternative method is described below.
If you often reach the maximum rate limit per hour, try the steps belowing using endpoint 6 in conjuction with endpoint 4 to retrieve rates for a given destination ID.
- Submit a query to endpoint 6. Example URL: https://api.gsa.gov/travel/perdiem/v2/rates/conus/zipcodes/2025
- Filter by the ZIP code(s) applicable to you.
- Example ZIP: 10005
- Expected result:
[{ "Zip": "10005", "DID": "266", "ST": "NY" }]
- Using the DID obtained from endpoint 6, submit a query to endpoint 4. Example URL: https://api.gsa.gov/travel/perdiem/v2/rates/conus/lodging/2025
- First filter by applicable state (ST) and then filter by DID:
- Example state/DID: NY/266
- Expected result:
[{ "Jan": "159", "Feb": "159", "Mar": "258", "Apr": "258", "May": "258", "Jun": "258", "Jul": "220", "Aug": "220", "Sep": "286", "Oct": "286", "Nov": "286", "Meals": "79", "City": "New York City", "State": "NY", "County": "Bronx / Kings / New York / Queens / Richmond", "DID": "266", "Dec": "286" }]
When using endpoint 1, you may encounter a city name containing a period (.), apostrophe (‘), or hyphen (-). If these characters are used in the search URL, you will receive unexpected or no results at all. To prevent this issue from occurring, remove the period and/or replace the apostrophe/hyphen with a space (UTF-8 encoding= %20). Below are examples of city names with special characters:
- O’Fallon, IL becomes city/o%20fallon. URL: https://api.gsa.gov/travel/perdiem/v2/rates/city/O%20FALLON/state/IL/year/2025
- East St. Louis, IL becomes city/east%20st%20louis. URL: https://api.gsa.gov/travel/perdiem/v2/rates/city/east%20st%20louis/state/IL/year/2025
- Wilkes-Barre, PA becomes city/wilkes%20barre (this example returns the standard rate, helping to demonstrate an API call for a city name not within the states dataset). URL: https://api.gsa.gov/travel/perdiem/v2/rates/city/wilkes%20barre/state/PA/year/2025
Optional query parameter
If you choose to provide the API key as a query parameter in the URL instead of the x-api-key
HTTP header, append the following example to the request URL:
?api_key={api_key}
Path parameters
Note: City and state names are case-insensitive in the request URL.
The per diem API offers four path parameters used in combination with the six endpoints introduced in the API endpoints portion of this documentation.
Parameter name | Description | Example |
---|---|---|
city | Destination city | Fairfax |
state | Destination state | VA |
zip | Destination ZIP code | 20171 |
year | Fiscal year of travel; up to three years available | 2025 |
Response schema
For endpoints 1-3, the per diem API returns the following applicable response members. The examples section contains the JSON outputs of expected results.
Name | Type | Description |
---|---|---|
value | number | Lodging rate per day, in dollars, for a given month |
number | number | Number of the month |
short | string | Abbreviated month names |
long | string | Month names |
meals | number | Meal rate per day, in dollars, for a given month |
zip | string | Destination ZIP code, only if ZIP is provided in the search parameter |
county | string | Destination county/ies |
city | string | Destination city/ies |
state | string | Destination state |
year | number | FY year of travel |
For endpoint 4, the per diem API returns the following response members. The examples section contains the JSON outputs of expected results.
Name | Type | Description |
---|---|---|
Jan - Dec | string | Lodging rate per day, in dollars, for the given key (month) |
Meals | string | Meal rate per day, in dollars, for a given month |
City | string | Destination city/ies or Standard Rate |
State | string | Destination state |
County | string | Destination county/ies |
DID | string | Destination ID: a unique ID for the city/state pair |
For endpoint 5, the per diem API returns the following response members for the M&IE breakdown. The examples section contains the JSON outputs of expected results.
Name | Type | Description |
---|---|---|
total | number | Total per diem |
breakfast | number | Daily breakfast meal rate |
lunch | number | Daily lunch meal rate |
dinner | number | Daily dinner meal rate |
incidental | number | Daily incidents rate |
FirstLastDay | number | Total for the first and last travel day |
For endpoint 6, the per diem API returns the following response members for all applicable ZIP codes in the FY. The examples section contains the JSON outputs of expected results.
Name | Type | Description |
---|---|---|
Zip | string | The ZIP code this DID resides within |
DID | string | Destination ID: a unique ID for the ZIP/state pair |
ST | string | The state this DID resides within |
HTTP Response Codes
The API will return one of the following responses:
HTTP response code | Description |
---|---|
200 | Successful. Data will be returned in JSON format. |
400 | Bad request. Verify the query string parameters that were provided. |
403 | API key is not correct or was not provided. |
4XX | Additional 400-level are caused by some type of error in the information submitted. |
Examples
Endpoint 1
Request URL
- URL: https://api.gsa.gov/travel/perdiem/v2/rates/city/{city}/state/{ST}/year/{year}
- Description: Rates by city, state, and year
- Example: https://api.gsa.gov/travel/perdiem/v2/rates/city/Fairfax/state/VA/year/2025
Response (JSON output)
{
"request": null,
"errors": null,
"rates": [
{
"oconusInfo": null,
"rate": [
{
"months": {
"month": [
{
"value": 188,
"number": 1,
"short": "Jan",
"long": "January"
},
{
"value": 188,
"number": 2,
"short": "Feb",
"long": "February"
},
{
"value": 258,
"number": 3,
"short": "Mar",
"long": "March"
},
{
"value": 258,
"number": 4,
"short": "Apr",
"long": "April"
},
{
"value": 258,
"number": 5,
"short": "May",
"long": "May"
},
{
"value": 258,
"number": 6,
"short": "Jun",
"long": "June"
},
{
"value": 172,
"number": 7,
"short": "Jul",
"long": "July"
},
{
"value": 172,
"number": 8,
"short": "Aug",
"long": "August"
},
{
"value": 257,
"number": 9,
"short": "Sep",
"long": "September"
},
{
"value": 257,
"number": 10,
"short": "Oct",
"long": "October"
},
{
"value": 188,
"number": 11,
"short": "Nov",
"long": "November"
},
{
"value": 188,
"number": 12,
"short": "Dec",
"long": "December"
}
]
},
"meals": 79,
"zip": null,
"county": "Washington DC (also the cities of Alexandria, Falls Church and Fairfax, and the counties of Arlington and Fairfax, in Virginia; and the counties of Montgomery and Prince George's in Maryland)",
"city": "District of Columbia",
"standardRate": "false"
}
],
"state": "VA",
"year": 2025,
"isOconus": "false"
}
],
"version": null
}
Endpoint 2
Request URL
- URL: https://api.gsa.gov/travel/perdiem/v2/rates/state/{ST}/year/{year}
- Description: Rates by state and year
- Example: https://api.gsa.gov/travel/perdiem/v2/rates/state/VA/year/2025
Response (JSON output)
{
"request": null,
"errors": null,
"rates": [
{
"oconusInfo": null,
"rate": [
{
"months": {
"month": [
{
"value": 105,
"number": 1,
"short": "Jan",
"long": "January"
},
{
"value": 105,
"number": 2,
"short": "Feb",
"long": "February"
},
{
"value": 105,
"number": 3,
"short": "Mar",
"long": "March"
},
{
"value": 105,
"number": 4,
"short": "Apr",
"long": "April"
},
{
"value": 105,
"number": 5,
"short": "May",
"long": "May"
},
{
"value": 105,
"number": 6,
"short": "Jun",
"long": "June"
},
{
"value": 123,
"number": 7,
"short": "Jul",
"long": "July"
},
{
"value": 123,
"number": 8,
"short": "Aug",
"long": "August"
},
{
"value": 123,
"number": 9,
"short": "Sep",
"long": "September"
},
{
"value": 123,
"number": 10,
"short": "Oct",
"long": "October"
},
{
"value": 105,
"number": 11,
"short": "Nov",
"long": "November"
},
{
"value": 105,
"number": 12,
"short": "Dec",
"long": "December"
}
]
},
"meals": 59,
"zip": null,
"county": "Montgomery",
"city": "Blacksburg",
"standardRate": "false"
},
{
"months": {
"month": [
{
"value": 126,
"number": 1,
"short": "Jan",
"long": "January"
},
{
"value": 126,
"number": 2,
"short": "Feb",
"long": "February"
},
{
"value": 126,
"number": 3,
"short": "Mar",
"long": "March"
},
{
"value": 126,
"number": 4,
"short": "Apr",
"long": "April"
},
{
"value": 126,
"number": 5,
"short": "May",
"long": "May"
},
{
"value": 126,
"number": 6,
"short": "Jun",
"long": "June"
},
{
"value": 126,
"number": 7,
"short": "Jul",
"long": "July"
},
{
"value": 126,
"number": 8,
"short": "Aug",
"long": "August"
},
{
"value": 126,
"number": 9,
"short": "Sep",
"long": "September"
},
{
"value": 126,
"number": 10,
"short": "Oct",
"long": "October"
},
{
"value": 126,
"number": 11,
"short": "Nov",
"long": "November"
},
{
"value": 126,
"number": 12,
"short": "Dec",
"long": "December"
}
]
},
"meals": 69,
"zip": null,
"county": "City of Charlottesville / Albemarle",
"city": "Charlottesville",
"standardRate": "false"
}
],
"state": "VA",
"year": 2025,
"isOconus": "false"
}
],
"version": null
}
Endpoint 3
Request URL
- URL: https://api.gsa.gov/travel/perdiem/v2/rates/zip/{zip}/year/{year}
- Description: Rates by ZIP code and year
- Example: https://api.gsa.gov/travel/perdiem/v2/rates/zip/20171/year/2025
Response (JSON output)
{
"request": null,
"errors": null,
"rates": [
{
"oconusInfo": null,
"rate": [
{
"months": {
"month": [
{
"value": 188,
"number": 1,
"short": "Jan",
"long": "January"
},
{
"value": 188,
"number": 2,
"short": "Feb",
"long": "February"
},
{
"value": 258,
"number": 3,
"short": "Mar",
"long": "March"
},
{
"value": 258,
"number": 4,
"short": "Apr",
"long": "April"
},
{
"value": 258,
"number": 5,
"short": "May",
"long": "May"
},
{
"value": 258,
"number": 6,
"short": "Jun",
"long": "June"
},
{
"value": 172,
"number": 7,
"short": "Jul",
"long": "July"
},
{
"value": 172,
"number": 8,
"short": "Aug",
"long": "August"
},
{
"value": 257,
"number": 9,
"short": "Sep",
"long": "September"
},
{
"value": 257,
"number": 10,
"short": "Oct",
"long": "October"
},
{
"value": 188,
"number": 11,
"short": "Nov",
"long": "November"
},
{
"value": 188,
"number": 12,
"short": "Dec",
"long": "December"
}
]
},
"meals": 79,
"zip": "20171",
"county": "Washington DC (also the cities of Alexandria, Falls Church and Fairfax, and the counties of Arlington and Fairfax, in Virginia; and the counties of Montgomery and Prince George's in Maryland)",
"city": "District of Columbia",
"standardRate": "false"
}
],
"state": "VA",
"year": 2025,
"isOconus": "false"
}
],
"version": null
}
Endpoint 4
Request URL
- URL: https://api.gsa.gov/travel/perdiem/v2/rates/conus/lodging/{year}
- Description: Lodging rates for the continental United States by year
- Example: https://api.gsa.gov/travel/perdiem/v2/rates/conus/lodging/2025
Response (JSON output)
[
{
"Jan": "98",
"Feb": "98",
"Mar": "98",
"Apr": "98",
"May": "98",
"Jun": "98",
"Jul": "98",
"Aug": "98",
"Sep": "98",
"Oct": "98",
"Nov": "98",
"Meals": "59",
"City": "Standard Rate",
"State": "",
"County": "",
"DID": "0",
"Dec": "98"
},
{
"Jan": "98",
"Feb": "98",
"Mar": "98",
"Apr": "98",
"May": "98",
"Jun": "98",
"Jul": "98",
"Aug": "98",
"Sep": "98",
"Oct": "98",
"Nov": "98",
"Meals": "59",
"City": "Standard Rate",
"State": "AL",
"County": "",
"DID": "0",
"Dec": "98"
},
{
"Jan": "245",
"Feb": "245",
"Mar": "245",
"Apr": "245",
"May": "245",
"Jun": "245",
"Jul": "245",
"Aug": "245",
"Sep": "245",
"Oct": "245",
"Nov": "245",
"Meals": "74",
"City": "Sunnyvale / Palo Alto / San Jose",
"State": "CA",
"County": "Santa Clara",
"DID": "44",
"Dec": "245"
},
{
"Jan": "101",
"Feb": "101",
"Mar": "101",
"Apr": "101",
"May": "101",
"Jun": "101",
"Jul": "101",
"Aug": "101",
"Sep": "101",
"Oct": "101",
"Nov": "101",
"Meals": "64",
"City": "Syracuse / Oswego",
"State": "NY",
"County": "Onondaga / Oswego",
"DID": "274",
"Dec": "101"
}
]
Endpoint 5
Request URL
- URL: https://api.gsa.gov/travel/perdiem/v2/rates/conus/mie/{year}
- Description: Meals and incidental expense (M&IE) breakdown rates by year
- Example: https://api.gsa.gov/travel/perdiem/v2/rates/conus/mie/2025
Response (JSON output)
[
{
"total": 59,
"breakfast": 13,
"lunch": 15,
"dinner": 26,
"incidental": 5,
"FirstLastDay": 44.25
},
{
"total": 64,
"breakfast": 14,
"lunch": 16,
"dinner": 29,
"incidental": 5,
"FirstLastDay": 48
},
{
"total": 69,
"breakfast": 16,
"lunch": 17,
"dinner": 31,
"incidental": 5,
"FirstLastDay": 51.75
},
{
"total": 74,
"breakfast": 17,
"lunch": 18,
"dinner": 34,
"incidental": 5,
"FirstLastDay": 55.5
},
{
"total": 79,
"breakfast": 18,
"lunch": 20,
"dinner": 36,
"incidental": 5,
"FirstLastDay": 59.25
}
]
Endpoint 6
Request URL
- URL: https://api.gsa.gov/travel/perdiem/v2/rates/conus/zipcodes/{year}
- Description: Mapping of ZIP codes to DID and state locations
- Example: https://api.gsa.gov/travel/perdiem/v2/rates/conus/zipcodes/2025
Response (JSON output)
[
{
"Zip": "57716",
"DID": "0",
"ST": ""
},
{
"Zip": "35004",
"DID": "0",
"ST": "AL"
},
{
"Zip": "8544", // leading zero(es) was removed
"DID": "249",
"ST": "NJ"
},
{
"Zip": "87048",
"DID": "0",
"ST": "NM"
}
]
Contact us
If you have questions or need help, please email us at digitalteam@gsa.gov, or file an issue in this GitHub issue tracker.
Before contacting us or filing an issue, please conduct initial troubleshooting:
- Review the open.gsa.gov/api specifications
- Confirm the correct API key is in the authentication header or appended to the URL, e.g., ?api_key={api_key}
- Confirm you sent a GET request
- Confirm you used one of the six provided endpoints
When submitting help desk tickets for API issues, please provide the following:
- The API request(s) that you tried to send
- The endpoint(s) and parameters used for the API call
- The error message(s) that you received