Allowances API
Allowances API 通过一个远程 MCP 服务器,为 AI 代理提供对美国政府每日津贴、差旅和海外津贴费率的结构化访问,涵盖 GSA、DTMO 和国务院 (DSSR) 数据。大多数每日津贴服务器仅提供美国本土的 GSA 费率。该服务器还涵盖国防部 OCONUS 费率和国务院海外津贴,因此代理可以在一个地方回答有关国内和国际差旅的问题。覆盖范围:- GSA:按州、城市、ZIP 或目的地查询 CONUS 每日津贴,以及 M&IE 明细、里程费率、城市对城市机票价格和车队车辆费率 - DTMO:查询 OCONUS 地点(外国、阿拉斯加、夏威夷和美国领地)及 CONUS 的国防部每日津贴 - DSSR:国务院每日津贴、COLA、艰苦条件津贴、危险津贴、LQA、TQSA 和教育津贴 - FEMA:查询符合消防安全要求的住宿场所《酒店和汽车旅馆国家主名单》 - OPM:联邦通用薪酬表和地区薪酬数据 该服务器还包含差旅每日津贴、里程报销和 COLA 计算器。
托管 MCP 服务器
npx add-mcp 'https://mcp.allowancesapi.com'可安装到 Claude Code、Codex、Cursor 等客户端
文档
API Reference
Government travel rates and overseas allowances.
One API, consistent responses.
Allowances API provides normalized, versioned access to U.S. Government travel per diem and overseas allowance rates from:
- GSA (General Service Administration) CONUS per diem rates
- DTMO (Defense Travel Management Office / Department of War) CONUS/OCONUS per diem rates for military personnel and contractors
- DSSR (Department of State) OCONUS per diem rates and foreign allowances (e.g., COLA, hardship, LQA, danger pay, education) for foreign service personnel and contractors
Authentication
You need to include the X-API-Key:<your api key> header in requests to protected endpoints.
If you don´t, the API endpoint will return a 401 Unauthorized error. The public /v1/health liveness check requires no API key and does not count toward your quota.
MCP server
AI agents and MCP clients can call every /v1/ endpoint as a tool through the Streamable HTTP MCP server at https://mcp.allowancesapi.com/mcp. Initialization and tool discovery need no credentials; tool calls need the same X-API-Key header. The tool catalogue is listed under MCP below.
Dates and effective rates
Many endpoints accept a date query parameter to return the rate effective for a specific day. Accepted formats: YYYY-MM-DD or YYYYMMDD.
Verification URL
You can pass the include=verification_url query parameter to return an URL pointing to the official source for a given perdiem or allowance rate. The verification URL will dynamically include the country and location filter.
Example:
http://api.localhost/v1/dssr/perdiem/AU/location/10244?include=verification_url
Will include the following in the response:
"verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=10244&MenuHide=1&PerdiemBox=1&EffectiveDate=20260419",
Response shape
Responses are returned as JSON with consistent field names across sources whenever possible.
Errors and request IDs
Errors use a standardized JSON format and include a request_id. Every response includes an X-Request-ID header generated by the server.
Usage metering and quotas
Each plan has a monthly request quota enforced per account (not per API key).
The Make integration requires a paid plan; requests sent by the Make app from a Sandbox account are rejected with 403.
- What counts: every
/v1/request that reaches a rate endpoint: GET lookups that are not served from cache, GET requests sent withX-Bypass-Cache: trueorCache-Control: no-cache, and all POST requests (calculators). One request is one unit regardless of the size of the result (a 366-day trip calculation is still one unit). - What does not count: responses served from the API cache (
X-API-Cache: HIT),/v1/me,/v1/health, and requests rejected with 401/403 before the quota check. - Billing window: usage resets to zero at the end of your billing period. Paid plans follow their Stripe billing cycle, including while cancellation is scheduled. Sandbox accounts use consecutive calendar-month windows anchored on sign-up; after paid subscription termination, a fresh Sandbox window starts at the effective end. Anonymous Google Sheets add-on sessions use consecutive 30-day windows from the first session.
- Checking usage:
GET /v1/mereturnsmonthly_queries_limit,used_queries,renewal_date(YYYY/MM/DD),period_startandperiod_end(ISO-8601, UTC). The window reported there is the one requests are counted against. - Over quota: requests return
429 Too Many RequestswithX-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Used,X-RateLimit-Reset(seconds until the period ends) andX-RateLimit-Period-End(Unix timestamp).
Not affiliated with any government agency. Data is sourced from official public tables.
For a runnable GSA example, see estimating contractor proposal travel costs with the GSA per diem API, using the trip calculator and CSV exports.
Building a proposal pricing workflow? Learn how to automate overseas allowances for contractor proposals with dated lookups and saved rate inputs.
DSSR - OCONUS locations
GET /v1/dssr/allowances/{country_iso_code}
DSSR allowances by country
Returns State Department (DSSR) allowance rates for every post in a country: cost-of-living (COLA), hardship differential, living quarters (LQA), danger pay and education allowances, plus each post's per diem, in force today or on date. type limits the result to some allowances. For one post use get_allowances_by_location or get_allowances_by_postcode; for Department of Defense rates use the DTMO tools.
Parameters 4
country_iso_code stringrequired
path parameter
Example "BE"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
type string[]
query parameter
Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.
Example "cola"
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
Biweekly publication date of the DSSR rates.
verification_url string | null
Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].country stringrequired
The full, official name of the country recognized by the US Government.
results[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
results[].location stringrequired
The specific city, region, or installation name recognized by the DSSR.
results[].postcode string | null
The official DSSR Post Code identifier for this specific location.
results[].postcode (anyOf 1) string
results[].postcode (anyOf 2) null
results[].cola object | null
results[].cola (anyOf 1) object
results[].cola (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].cola (anyOf 1).post_allowance integerrequired
The Cost of Living Allowance rate, in percentage of base compensation.
results[].cola (anyOf 2) null
results[].hardship object | null
results[].hardship (anyOf 1) object
results[].hardship (anyOf 1).rate integerrequired
Post hardship differential rate, in percentage of base compensation.
results[].hardship (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].hardship (anyOf 2) null
results[].lqa object | null
results[].lqa (anyOf 1) object
results[].lqa (anyOf 1).with_family_group_2 integerrequired
results[].lqa (anyOf 1).with_family_group_3 integerrequired
results[].lqa (anyOf 1).with_family_group_4 integerrequired
results[].lqa (anyOf 1).without_family_group_2 integerrequired
results[].lqa (anyOf 1).without_family_group_3 integerrequired
results[].lqa (anyOf 1).without_family_group_4 integerrequired
results[].lqa (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].lqa (anyOf 2) null
results[].danger_pay object | null
results[].danger_pay (anyOf 1) object
results[].danger_pay (anyOf 2) null
results[].education object[] | null
results[].education (anyOf 1) object[]
results[].education (anyOf 1)[] object
results[].education (anyOf 2) null
results[].perdiem object[] | null
results[].perdiem (anyOf 1) object[]
results[].perdiem (anyOf 1)[] object
results[].perdiem (anyOf 1)[].lodging integerrequired
The maximum lodging allowance in USD per day.
results[].perdiem (anyOf 1)[].meals_incidental integerrequired
The maximum meals and incidental expenses (M&IE) allowance in USD per day.
results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired
The maximum total per diem rate, calculated as the sum of lodging + meals and incidental
results[].perdiem (anyOf 1)[].season string
The season number in format 'S1'/'S2'
results[].perdiem (anyOf 1)[].season_begin stringrequired
The starting month and day for this seasonal rate.
results[].perdiem (anyOf 1)[].season_end stringrequired
results[].perdiem (anyOf 1)[].publish_date stringrequired
The latest publication date for this rate
results[].perdiem (anyOf 1)[].effective_date stringrequired
The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).
results[].perdiem (anyOf 1)[].footnote_reference string | null
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null
results[].perdiem (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/allowances/LU?date=2026-07-11&type=cola&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/allowances/LU?date=2026-07-11&type=cola&verification_url=true. Post allowance is a percentage.
{
"effective_date": "2026-06-28",
"verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&COLABox=1&EffectiveDate=20260628",
"results": [
{
"country": "Luxembourg",
"iso_code": "LU",
"location": "Luxembourg",
"postcode": "11063",
"cola": {
"effective_date": "2026-06-28",
"post_allowance": 50
},
"hardship": null,
"lqa": null,
"danger_pay": null,
"education": null,
"perdiem": null
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/allowances/{country_iso_code}/location/{location}
DSSR allowances by location name
Returns DSSR allowances (COLA, hardship, LQA, danger pay, education, per diem) for one post in a country matched by name, case-insensitive and partial ('toky' finds Tokyo), today or on date. Find exact post names with get_dssr_locations_by_country or search_perdiem. Use get_allowances_by_postcode when the DSSR post code is known, get_allowances for every post in the country.
Parameters 5
location stringrequired
path parameter
Example "LOCATION"
country_iso_code stringrequired
path parameter
Example "BE"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
type string[]
query parameter
Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.
Example "cola"
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
Biweekly publication date of the DSSR rates.
verification_url string | null
Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].country stringrequired
The full, official name of the country recognized by the US Government.
results[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
results[].location stringrequired
The specific city, region, or installation name recognized by the DSSR.
results[].postcode string | null
The official DSSR Post Code identifier for this specific location.
results[].postcode (anyOf 1) string
results[].postcode (anyOf 2) null
results[].cola object | null
results[].cola (anyOf 1) object
results[].cola (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].cola (anyOf 1).post_allowance integerrequired
The Cost of Living Allowance rate, in percentage of base compensation.
results[].cola (anyOf 2) null
results[].hardship object | null
results[].hardship (anyOf 1) object
results[].hardship (anyOf 1).rate integerrequired
Post hardship differential rate, in percentage of base compensation.
results[].hardship (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].hardship (anyOf 2) null
results[].lqa object | null
results[].lqa (anyOf 1) object
results[].lqa (anyOf 1).with_family_group_2 integerrequired
results[].lqa (anyOf 1).with_family_group_3 integerrequired
results[].lqa (anyOf 1).with_family_group_4 integerrequired
results[].lqa (anyOf 1).without_family_group_2 integerrequired
results[].lqa (anyOf 1).without_family_group_3 integerrequired
results[].lqa (anyOf 1).without_family_group_4 integerrequired
results[].lqa (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].lqa (anyOf 2) null
results[].danger_pay object | null
results[].danger_pay (anyOf 1) object
results[].danger_pay (anyOf 2) null
results[].education object[] | null
results[].education (anyOf 1) object[]
results[].education (anyOf 1)[] object
results[].education (anyOf 2) null
results[].perdiem object[] | null
results[].perdiem (anyOf 1) object[]
results[].perdiem (anyOf 1)[] object
results[].perdiem (anyOf 1)[].lodging integerrequired
The maximum lodging allowance in USD per day.
results[].perdiem (anyOf 1)[].meals_incidental integerrequired
The maximum meals and incidental expenses (M&IE) allowance in USD per day.
results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired
The maximum total per diem rate, calculated as the sum of lodging + meals and incidental
results[].perdiem (anyOf 1)[].season string
The season number in format 'S1'/'S2'
results[].perdiem (anyOf 1)[].season_begin stringrequired
The starting month and day for this seasonal rate.
results[].perdiem (anyOf 1)[].season_end stringrequired
results[].perdiem (anyOf 1)[].publish_date stringrequired
The latest publication date for this rate
results[].perdiem (anyOf 1)[].effective_date stringrequired
The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).
results[].perdiem (anyOf 1)[].footnote_reference string | null
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null
results[].perdiem (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/allowances/LU/location/Luxembourg?date=2026-07-11&type=cola&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/allowances/LU/location/Luxembourg?date=2026-07-11&type=cola&verification_url=true. Post allowance is a percentage.
{
"effective_date": "2026-06-28",
"verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&COLABox=1&EffectiveDate=20260628",
"results": [
{
"country": "Luxembourg",
"iso_code": "LU",
"location": "Luxembourg",
"postcode": "11063",
"cola": {
"effective_date": "2026-06-28",
"post_allowance": 50
},
"hardship": null,
"lqa": null,
"danger_pay": null,
"education": null,
"perdiem": null
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/allowances/{country_iso_code}/postcode/{postcode}
DSSR allowances by location post code
Returns DSSR allowances (COLA, hardship, LQA, danger pay, education, per diem) for the post identified by its five-digit DSSR post code, today or on date. Post codes are the State Department's own identifiers and come back in every DSSR result, so this is the most precise lookup. Use get_allowances_by_location for a name, get_allowances for the whole country.
Parameters 5
postcode integerrequired
path parameter
5-digit DSSR post code (no zero-padding)
Example 12345
country_iso_code stringrequired
path parameter
Example "BE"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
type string[]
query parameter
Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.
Example "cola"
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
Biweekly publication date of the DSSR rates.
verification_url string | null
Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].country stringrequired
The full, official name of the country recognized by the US Government.
results[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
results[].location stringrequired
The specific city, region, or installation name recognized by the DSSR.
results[].postcode string | null
The official DSSR Post Code identifier for this specific location.
results[].postcode (anyOf 1) string
results[].postcode (anyOf 2) null
results[].cola object | null
results[].cola (anyOf 1) object
results[].cola (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].cola (anyOf 1).post_allowance integerrequired
The Cost of Living Allowance rate, in percentage of base compensation.
results[].cola (anyOf 2) null
results[].hardship object | null
results[].hardship (anyOf 1) object
results[].hardship (anyOf 1).rate integerrequired
Post hardship differential rate, in percentage of base compensation.
results[].hardship (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].hardship (anyOf 2) null
results[].lqa object | null
results[].lqa (anyOf 1) object
results[].lqa (anyOf 1).with_family_group_2 integerrequired
results[].lqa (anyOf 1).with_family_group_3 integerrequired
results[].lqa (anyOf 1).with_family_group_4 integerrequired
results[].lqa (anyOf 1).without_family_group_2 integerrequired
results[].lqa (anyOf 1).without_family_group_3 integerrequired
results[].lqa (anyOf 1).without_family_group_4 integerrequired
results[].lqa (anyOf 1).effective_date stringrequired
Biweekly publication date of the DSSR rates.
results[].lqa (anyOf 2) null
results[].danger_pay object | null
results[].danger_pay (anyOf 1) object
results[].danger_pay (anyOf 2) null
results[].education object[] | null
results[].education (anyOf 1) object[]
results[].education (anyOf 1)[] object
results[].education (anyOf 2) null
results[].perdiem object[] | null
results[].perdiem (anyOf 1) object[]
results[].perdiem (anyOf 1)[] object
results[].perdiem (anyOf 1)[].lodging integerrequired
The maximum lodging allowance in USD per day.
results[].perdiem (anyOf 1)[].meals_incidental integerrequired
The maximum meals and incidental expenses (M&IE) allowance in USD per day.
results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired
The maximum total per diem rate, calculated as the sum of lodging + meals and incidental
results[].perdiem (anyOf 1)[].season string
The season number in format 'S1'/'S2'
results[].perdiem (anyOf 1)[].season_begin stringrequired
The starting month and day for this seasonal rate.
results[].perdiem (anyOf 1)[].season_end stringrequired
results[].perdiem (anyOf 1)[].publish_date stringrequired
The latest publication date for this rate
results[].perdiem (anyOf 1)[].effective_date stringrequired
The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).
results[].perdiem (anyOf 1)[].footnote_reference string | null
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null
results[].perdiem (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/allowances/LU/postcode/11063?date=2026-07-11&type=cola&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/allowances/LU/postcode/11063?date=2026-07-11&type=cola&verification_url=true. Post allowance is a percentage.
{
"effective_date": "2026-06-28",
"verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&COLABox=1&EffectiveDate=20260628",
"results": [
{
"country": "Luxembourg",
"iso_code": "LU",
"location": "Luxembourg",
"postcode": "11063",
"cola": {
"effective_date": "2026-06-28",
"post_allowance": 50
},
"hardship": null,
"lqa": null,
"danger_pay": null,
"education": null,
"perdiem": null
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/perdiem/search
Search DSSR Per Diem by country/location name
Finds DSSR per diem by a partial, case-insensitive country or post name of at least three characters, with no country code needed. Returns lodging, M&IE and maximum per diem per matching post, today or on date, with the post code for precise follow-up lookups. A name that matches nothing is a 404 error, not an empty list. Once the ISO code is known, the country tools are more precise.
Parameters 2
q stringrequired
query parameter
Required case-insensitive substring of a location or country name; at least three characters after trimming.
Example "Q"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
Response schema 200
effective_date stringrequired
Biweekly publication date of the DSSR rates.
verification_url string | null
Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].country stringrequired
The full, official name of the country recognized by the US Government.
results[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
results[].location stringrequired
The specific city, region, or installation name recognized by the DSSR.
results[].postcode string | null
The official DSSR Post Code identifier for this specific location.
results[].postcode (anyOf 1) string
results[].postcode (anyOf 2) null
results[].perdiem object[] | null
results[].perdiem (anyOf 1) object[]
results[].perdiem (anyOf 1)[] object
results[].perdiem (anyOf 1)[].lodging integerrequired
The maximum lodging allowance in USD per day.
results[].perdiem (anyOf 1)[].meals_incidental integerrequired
The maximum meals and incidental expenses (M&IE) allowance in USD per day.
results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired
The maximum total per diem rate, calculated as the sum of lodging + meals and incidental
results[].perdiem (anyOf 1)[].season string
The season number in format 'S1'/'S2'
results[].perdiem (anyOf 1)[].season_begin stringrequired
The starting month and day for this seasonal rate.
results[].perdiem (anyOf 1)[].season_end stringrequired
results[].perdiem (anyOf 1)[].publish_date stringrequired
The latest publication date for this rate
results[].perdiem (anyOf 1)[].effective_date stringrequired
The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).
results[].perdiem (anyOf 1)[].footnote_reference string | null
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null
results[].perdiem (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/perdiem/search?q=Luxembourg&date=2026-07-11' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/perdiem/search?q=Luxembourg&date=2026-07-11. Amounts are in USD per day.
{
"effective_date": "2026-07-01",
"verification_url": null,
"results": [
{
"country": "Luxembourg",
"iso_code": "LU",
"location": "Luxembourg",
"postcode": "11063",
"perdiem": [
{
"lodging": 366,
"meals_incidental": 138,
"maximum_perdiem": 504,
"season": "S1",
"season_begin": "01/01",
"season_end": "12/31",
"publish_date": "2026-07-01",
"effective_date": "2025-08-01",
"footnote_reference": null
}
]
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/perdiem/{country_iso_code}
DSSR per diem by country
Returns State Department (DSSR) per diem for every post in a country: lodging, M&IE and maximum per diem in USD per day, today or on date. For one post use get_perdiem_allowance_by_location or get_perdiem_allowance_by_postcode; for a place name without a country code use search_perdiem. For Department of Defense travel use get_dtmo_perdiem_oconus.
Parameters 3
country_iso_code stringrequired
path parameter
Example "BE"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
Biweekly publication date of the DSSR rates.
verification_url string | null
Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].country stringrequired
The full, official name of the country recognized by the US Government.
results[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
results[].location stringrequired
The specific city, region, or installation name recognized by the DSSR.
results[].postcode string | null
The official DSSR Post Code identifier for this specific location.
results[].postcode (anyOf 1) string
results[].postcode (anyOf 2) null
results[].perdiem object[] | null
results[].perdiem (anyOf 1) object[]
results[].perdiem (anyOf 1)[] object
results[].perdiem (anyOf 1)[].lodging integerrequired
The maximum lodging allowance in USD per day.
results[].perdiem (anyOf 1)[].meals_incidental integerrequired
The maximum meals and incidental expenses (M&IE) allowance in USD per day.
results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired
The maximum total per diem rate, calculated as the sum of lodging + meals and incidental
results[].perdiem (anyOf 1)[].season string
The season number in format 'S1'/'S2'
results[].perdiem (anyOf 1)[].season_begin stringrequired
The starting month and day for this seasonal rate.
results[].perdiem (anyOf 1)[].season_end stringrequired
results[].perdiem (anyOf 1)[].publish_date stringrequired
The latest publication date for this rate
results[].perdiem (anyOf 1)[].effective_date stringrequired
The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).
results[].perdiem (anyOf 1)[].footnote_reference string | null
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null
results[].perdiem (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/perdiem/LU?date=2026-07-11&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/perdiem/LU?date=2026-07-11&verification_url=true. Amounts are in USD per day.
{
"effective_date": "2026-07-01",
"verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&PerdiemBox=1&EffectiveDate=20260701",
"results": [
{
"country": "Luxembourg",
"iso_code": "LU",
"location": "Luxembourg",
"postcode": "11063",
"perdiem": [
{
"lodging": 366,
"meals_incidental": 138,
"maximum_perdiem": 504,
"season": "S1",
"season_begin": "01/01",
"season_end": "12/31",
"publish_date": "2026-07-01",
"effective_date": "2025-08-01",
"footnote_reference": null
}
]
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/perdiem/{country_iso_code}/location/{location}
DSSR per diem by location name
Returns DSSR per diem (lodging, M&IE and maximum per diem in USD per day) for one post in a country matched by name, case-insensitive and partial, today or on date. Find exact post names with get_dssr_locations_by_country or search_perdiem. Use get_perdiem_allowance for the whole country, get_perdiem_allowance_by_postcode for a known post code.
Parameters 4
location stringrequired
path parameter
Example "LOCATION"
country_iso_code stringrequired
path parameter
Example "BE"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
Biweekly publication date of the DSSR rates.
verification_url string | null
Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].country stringrequired
The full, official name of the country recognized by the US Government.
results[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
results[].location stringrequired
The specific city, region, or installation name recognized by the DSSR.
results[].postcode string | null
The official DSSR Post Code identifier for this specific location.
results[].postcode (anyOf 1) string
results[].postcode (anyOf 2) null
results[].perdiem object[] | null
results[].perdiem (anyOf 1) object[]
results[].perdiem (anyOf 1)[] object
results[].perdiem (anyOf 1)[].lodging integerrequired
The maximum lodging allowance in USD per day.
results[].perdiem (anyOf 1)[].meals_incidental integerrequired
The maximum meals and incidental expenses (M&IE) allowance in USD per day.
results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired
The maximum total per diem rate, calculated as the sum of lodging + meals and incidental
results[].perdiem (anyOf 1)[].season string
The season number in format 'S1'/'S2'
results[].perdiem (anyOf 1)[].season_begin stringrequired
The starting month and day for this seasonal rate.
results[].perdiem (anyOf 1)[].season_end stringrequired
results[].perdiem (anyOf 1)[].publish_date stringrequired
The latest publication date for this rate
results[].perdiem (anyOf 1)[].effective_date stringrequired
The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).
results[].perdiem (anyOf 1)[].footnote_reference string | null
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null
results[].perdiem (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/perdiem/LU/location/Luxembourg?date=2026-07-11&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/perdiem/LU/location/Luxembourg?date=2026-07-11&verification_url=true. Amounts are in USD per day.
{
"effective_date": "2026-07-01",
"verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&PerdiemBox=1&EffectiveDate=20260701",
"results": [
{
"country": "Luxembourg",
"iso_code": "LU",
"location": "Luxembourg",
"postcode": "11063",
"perdiem": [
{
"lodging": 366,
"meals_incidental": 138,
"maximum_perdiem": 504,
"season": "S1",
"season_begin": "01/01",
"season_end": "12/31",
"publish_date": "2026-07-01",
"effective_date": "2025-08-01",
"footnote_reference": null
}
]
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/perdiem/{country_iso_code}/postcode/{postcode}
DSSR per diem by location post code
Returns DSSR per diem (lodging, M&IE and maximum per diem in USD per day) for the post identified by its five-digit DSSR post code, today or on date. Every DSSR result carries the post code, so use it for follow-up lookups. Use get_perdiem_allowance_by_location for a name, get_perdiem_allowance for the whole country.
Parameters 4
postcode integerrequired
path parameter
5-digit DSSR post code (no zero-padding)
Example 12345
country_iso_code stringrequired
path parameter
Example "BE"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
Biweekly publication date of the DSSR rates.
verification_url string | null
Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].country stringrequired
The full, official name of the country recognized by the US Government.
results[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
results[].location stringrequired
The specific city, region, or installation name recognized by the DSSR.
results[].postcode string | null
The official DSSR Post Code identifier for this specific location.
results[].postcode (anyOf 1) string
results[].postcode (anyOf 2) null
results[].perdiem object[] | null
results[].perdiem (anyOf 1) object[]
results[].perdiem (anyOf 1)[] object
results[].perdiem (anyOf 1)[].lodging integerrequired
The maximum lodging allowance in USD per day.
results[].perdiem (anyOf 1)[].meals_incidental integerrequired
The maximum meals and incidental expenses (M&IE) allowance in USD per day.
results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired
The maximum total per diem rate, calculated as the sum of lodging + meals and incidental
results[].perdiem (anyOf 1)[].season string
The season number in format 'S1'/'S2'
results[].perdiem (anyOf 1)[].season_begin stringrequired
The starting month and day for this seasonal rate.
results[].perdiem (anyOf 1)[].season_end stringrequired
results[].perdiem (anyOf 1)[].publish_date stringrequired
The latest publication date for this rate
results[].perdiem (anyOf 1)[].effective_date stringrequired
The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).
results[].perdiem (anyOf 1)[].footnote_reference string | null
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string
results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null
results[].perdiem (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/perdiem/LU/postcode/11063?date=2026-07-11&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/perdiem/LU/postcode/11063?date=2026-07-11&verification_url=true. Amounts are in USD per day.
{
"effective_date": "2026-07-01",
"verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&PerdiemBox=1&EffectiveDate=20260701",
"results": [
{
"country": "Luxembourg",
"iso_code": "LU",
"location": "Luxembourg",
"postcode": "11063",
"perdiem": [
{
"lodging": 366,
"meals_incidental": 138,
"maximum_perdiem": 504,
"season": "S1",
"season_begin": "01/01",
"season_end": "12/31",
"publish_date": "2026-07-01",
"effective_date": "2025-08-01",
"footnote_reference": null
}
]
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/locations
List DSSR locations
Returns a paginated list of every DSSR post with its country, ISO code and post name; q filters by case-insensitive substring. total counts every match regardless of offset and limit. Use it to find the exact post name for the by-location tools when the country is unknown; get_dssr_locations_by_country is shorter when it is known. Returns no rates.
Parameters 3
q string | null
query parameter
Search by name
Example "Q"
offset integer
query parameter
Example 0
limit integer
query parameter
Example 10
Response schema 200
total integerrequired
Total number of locations matching the query, ignoring pagination.
offset integerrequired
The offset that was applied to this result set.
limit integerrequired
The maximum number of items returned in this result set.
items object[]required
items[] object
items[].country stringrequired
The full, official name of the country recognized by the US Government.
items[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
items[].name stringrequired
The specific city, region, or installation name recognized by the DSSR.
items[].source stringrequired
The authoritative government source of this location and rate data.
Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/locations?q=Brussels&offset=0&limit=1' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/locations?q=Brussels&offset=0&limit=1.
{
"total": 1,
"offset": 0,
"limit": 1,
"items": [
{
"country": "Belgium",
"iso_code": "BE",
"name": "Brussels",
"source": "dssr"
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/countries
Resolve a country name to its ISO code and list its posts
Resolves a country name to its ISO alpha-2 code and lists the names of its DSSR posts; q matches the country name case-insensitively ('papua' finds PG). Use it before any tool that needs a country code. ZZ stands for Other Foreign Localities, not a country. Returns no rates.
Parameters 3
q string | null
query parameter
Search by country name
Example "Q"
offset integer
query parameter
Example 0
limit integer
query parameter
Example 20
Response schema 200
(body) object[]
[] object
[].name stringrequired
The full, official name of the country recognized by the US Government.
[].iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
[].locations string[]required
[].locations[] string
The specific city, region, or installation name recognized by the DSSR.
[].notes string[]required
Any special considerations regarding the country are listed in the notes.
[].notes[] string
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/countries?q=Luxembourg&limit=1&offset=0' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/countries?q=Luxembourg&limit=1&offset=0.
[
{
"name": "Luxembourg",
"iso_code": "LU",
"locations": [
"Luxembourg"
],
"notes": []
}
]
Example response. Rates and dates are illustrative.
GET /v1/dssr/country/{country_iso_code}
Get country by ISO code
Returns one country by ISO alpha-2 code: its name, the names of its DSSR posts and State Department notes. Use get_countries to find the code from a name, and get_dssr_locations_by_country when the post codes are needed too. Returns no rates.
Parameters 1
country_iso_code stringrequired
path parameter
Example "BE"
Response schema 200
name stringrequired
The full, official name of the country recognized by the US Government.
iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
locations string[]required
locations[] string
The specific city, region, or installation name recognized by the DSSR.
notes string[]required
Any special considerations regarding the country are listed in the notes.
notes[] string
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/dssr/country/LU \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/country/LU.
{
"name": "Luxembourg",
"iso_code": "LU",
"locations": [
"Luxembourg"
],
"notes": []
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/country/{country_iso_code}/locations
List DSSR locations by country
Returns the DSSR posts of a country by ISO alpha-2 code, each with its name and five-digit post code (external_id), as needed by the by-location and by-postcode tools. Use get_countries to resolve a name to the code. Returns no rates.
Parameters 1
country_iso_code stringrequired
path parameter
Example "BE"
Response schema 200
name stringrequired
The full, official name of the country recognized by the US Government.
iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
locations object[]
locations[] object
locations[].name stringrequired
The specific city, region, or installation name recognized by the DSSR.
locations[].external_id stringrequired
The unique postcode id assigned by DSSR for the locations. Format is a 5 digits number passed as string. Some specials cases may have a different external_id.
locations[].source stringrequired
The authoritative government source of this location and rate data.
Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]
notes string[]required
Any special considerations regarding the country are listed in the notes.
notes[] string
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/dssr/country/LU/locations \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/country/LU/locations.
{
"name": "Luxembourg",
"iso_code": "LU",
"locations": [
{
"name": "Luxembourg",
"external_id": "11063",
"source": "dssr"
}
],
"notes": []
}
Example response. Rates and dates are illustrative.
GET /v1/dssr/cola-calculator/postcode/{postcode}
DSSR COLA calculator by postcode
Calculates the DSSR cost-of-living allowance (COLA) for a post: the COLA rate in percent and the annual and biweekly USD amounts for the given base salary and family size, today or on date. The post is identified by its five-digit DSSR post code (see get_dssr_locations_by_country). Use get_allowances for the COLA rate alone.
Parameters 4
postcode integerrequired
path parameter
5-digit DSSR post code (no zero-padding)
Example 12345
family_size integerrequired
query parameter
The number of family members, including the FS/DoS employee/contractor
Example 1
base_salary integerrequired
query parameter
Basic annual salary, excluding U.S. locality pay; including Overseas Comparability Pay.
Example 1
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
Response schema 200
effective_date stringrequired
Biweekly publication date of the DSSR rates.
base_salary integerrequired
family_size integerrequired
cola_rate integerrequired
annual_cola integerrequired
biweekly_cola integerrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dssr/cola-calculator/postcode/11063?date=2026-07-11&family_size=2&base_salary=100000' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dssr/cola-calculator/postcode/11063?date=2026-07-11&family_size=2&base_salary=100000. Salary and allowance amounts are in USD; cola_rate is a percentage.
{
"effective_date": "2026-06-28",
"base_salary": 100000,
"family_size": 2,
"cola_rate": 50,
"annual_cola": 20900,
"biweekly_cola": 802
}
Example response. Rates and dates are illustrative.
DTMO - Mil. CONUS/OCONUS
GET /v1/dtmo/perdiem/conus/{state_iso}
Get perdiem CONUS
Department of Defense per diem for the continental U.S. by state code (e.g. 'TX'); Alaska, Hawaii and the territories are served by the OCONUS endpoint. Returns lodging, local and proportional meal rates, incidentals and the maximum per diem (lodging + meals + incidentals) per season. q filters by location name. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.
Parameters 7
state_iso stringrequired
path parameter
Example "US-AL"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
year integer
query parameter
Example 1
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
q string | null
query parameter
Search by location name or state/country name
Example "Q"
offset integer
query parameter
Example 0
limit integer
query parameter
Example 50
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].iso_code stringrequired
results[].state_country stringrequired
results[].location stringrequired
results[].county string | null
US county of the location, to tell apart same-named cities in one state (e.g. the two Burbanks in California). CONUS locations only, null for OCONUS.
results[].county (anyOf 1) string
results[].county (anyOf 2) null
results[].season_begin stringrequired
results[].season_end stringrequired
results[].lodging integerrequired
results[].local_meal_rate integerrequired
results[].proportional_meal_rate integerrequired
results[].local_incidental integerrequired
results[].footnote_number string | nullrequired
results[].footnote_number (anyOf 1) stringrequired
results[].footnote_number (anyOf 2) nullrequired
results[].footnote_rate integer | nullrequired
results[].footnote_rate (anyOf 1) integerrequired
results[].footnote_rate (anyOf 2) nullrequired
results[].maximum_perdiem integerrequired
results[].effective_date stringrequired
results[].fiscal_year integerrequired
A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
results[].source string
The authoritative government source of this location and rate data.
Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]
results[].publish_date stringrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dtmo/perdiem/conus/US-DC?date=2026-07-11&q=Washington&offset=0&limit=1&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dtmo/perdiem/conus/US-DC?date=2026-07-11&q=Washington&offset=0&limit=1&verification_url=true. Amounts are in USD per day.
{
"effective_date": "2025-10-01",
"verification_url": "https://www.defensetravel.dod.mil/neorates/report/index.php?report=conus&state=DISTRICT OF COLUMBIA&year=None&elocs=YES&military=YES",
"results": [
{
"iso_code": "US-DC",
"state_country": "District of Columbia",
"location": "Washington",
"county": "District of Columbia",
"season_begin": "07/01",
"season_end": "08/31",
"lodging": 183,
"local_meal_rate": 87,
"proportional_meal_rate": 53,
"local_incidental": 5,
"footnote_number": "None",
"footnote_rate": 0,
"maximum_perdiem": 275,
"effective_date": "2025-10-01",
"fiscal_year": 2026,
"source": "dtmo",
"publish_date": "2025-11-01"
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dtmo/perdiem/oconus/{oconus_iso_code}
Get perdiem OCONUS
Department of Defense per diem outside the continental U.S.: foreign countries by ISO alpha-2 code (e.g. 'PG'), and Alaska, Hawaii and U.S. territories by 'US-XX' code. Returns lodging, local and proportional meal rates, incidentals and the maximum per diem (lodging + meals + incidentals) per season. q filters by location name. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.
Parameters 7
oconus_iso_code stringrequired
path parameter
Example "US-AK"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
year integer
query parameter
Example 1
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
q string | null
query parameter
Search by location name or state/country name
Example "Q"
offset integer
query parameter
Example 0
limit integer
query parameter
Example 50
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].iso_code stringrequired
results[].state_country stringrequired
results[].location stringrequired
results[].county string | null
US county of the location, to tell apart same-named cities in one state (e.g. the two Burbanks in California). CONUS locations only, null for OCONUS.
results[].county (anyOf 1) string
results[].county (anyOf 2) null
results[].season_begin stringrequired
results[].season_end stringrequired
results[].lodging integerrequired
results[].local_meal_rate integerrequired
results[].proportional_meal_rate integerrequired
results[].local_incidental integerrequired
results[].footnote_number string | nullrequired
results[].footnote_number (anyOf 1) stringrequired
results[].footnote_number (anyOf 2) nullrequired
results[].footnote_rate integer | nullrequired
results[].footnote_rate (anyOf 1) integerrequired
results[].footnote_rate (anyOf 2) nullrequired
results[].maximum_perdiem integerrequired
results[].effective_date stringrequired
results[].fiscal_year integerrequired
A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
results[].source string
The authoritative government source of this location and rate data.
Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]
results[].publish_date stringrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dtmo/perdiem/oconus/LU?date=2026-07-11&q=Luxembourg&offset=0&limit=1&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dtmo/perdiem/oconus/LU?date=2026-07-11&q=Luxembourg&offset=0&limit=1&verification_url=true. Amounts are in USD per day.
{
"effective_date": "2025-08-01",
"verification_url": "https://www.defensetravel.dod.mil/neorates/report/index.php?report=oconus&country=LUXEMBOURG&date=2026-07-11&military=YES",
"results": [
{
"iso_code": "LU-LU",
"state_country": "Luxembourg",
"location": "Luxembourg",
"county": "",
"season_begin": "01/01",
"season_end": "12/31",
"lodging": 366,
"local_meal_rate": 111,
"proportional_meal_rate": 65,
"local_incidental": 27,
"footnote_number": "None",
"footnote_rate": 0,
"maximum_perdiem": 504,
"effective_date": "2025-08-01",
"fiscal_year": 2026,
"source": "dtmo",
"publish_date": "2026-07-01"
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dtmo/perdiem/search
Search by location name
Finds Department of Defense per diem by location name ('Kabul') or country or state name ('Afghanistan'), across CONUS and OCONUS, with no code needed. Returns lodging, local and proportional meal rates, incidentals and maximum per diem per matching location and season. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.
Parameters 4
q string | null
query parameter
Search by location name or state/country name
Example "Q"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
year integer
query parameter
Example 1
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].iso_code stringrequired
results[].state_country stringrequired
results[].location stringrequired
results[].county string | null
US county of the location, to tell apart same-named cities in one state (e.g. the two Burbanks in California). CONUS locations only, null for OCONUS.
results[].county (anyOf 1) string
results[].county (anyOf 2) null
results[].season_begin stringrequired
results[].season_end stringrequired
results[].lodging integerrequired
results[].local_meal_rate integerrequired
results[].proportional_meal_rate integerrequired
results[].local_incidental integerrequired
results[].footnote_number string | nullrequired
results[].footnote_number (anyOf 1) stringrequired
results[].footnote_number (anyOf 2) nullrequired
results[].footnote_rate integer | nullrequired
results[].footnote_rate (anyOf 1) integerrequired
results[].footnote_rate (anyOf 2) nullrequired
results[].maximum_perdiem integerrequired
results[].effective_date stringrequired
results[].fiscal_year integerrequired
A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
results[].source string
The authoritative government source of this location and rate data.
Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]
results[].publish_date stringrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dtmo/perdiem/search?q=Luxembourg&date=2026-07-11&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dtmo/perdiem/search?q=Luxembourg&date=2026-07-11&verification_url=true. Amounts are in USD per day.
{
"effective_date": "2025-08-01",
"verification_url": "https://www.defensetravel.dod.mil/neorates/report/index.php?report=oconus&country=LUXEMBOURG&date=2026-07-11&military=YES",
"results": [
{
"iso_code": "LU-LU",
"state_country": "Luxembourg",
"location": "Luxembourg",
"county": "",
"season_begin": "01/01",
"season_end": "12/31",
"lodging": 366,
"local_meal_rate": 111,
"proportional_meal_rate": 65,
"local_incidental": 27,
"footnote_number": "None",
"footnote_rate": 0,
"maximum_perdiem": 504,
"effective_date": "2025-08-01",
"fiscal_year": 2026,
"source": "dtmo",
"publish_date": "2026-07-01"
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/dtmo/locations/conus/{state_iso}
Get DTMO CONUS locations
Returns the DTMO per diem locations of a US state (US-XX code) with location name and county, as named in the Department of Defense CONUS table. Use it to find the name for the q filter of get_dtmo_perdiem_conus. Returns no rates. For other countries, Alaska, Hawaii and territories use get_dtmo_oconus_locations.
Parameters 1
state_iso stringrequired
path parameter
Example "US-AL"
Response schema 200
(body) object[]
[] object
[].state stringrequired
US State Name.
[].state_iso stringrequired
The 4-letter ISO 3166-2:US state code. The first part is US, the ISO 3166-1 alpha-2 code of the United States. The second part is two letters, which is the postal abbreviation of the state, district, or outlying area.
[].county stringrequired
[].name stringrequired
The specific city, region, or installation name recognized by the DSSR.
[].source stringrequired
The authoritative government source of this location and rate data.
Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/dtmo/locations/conus/US-DC \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dtmo/locations/conus/US-DC.
[
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Anacostia Ns",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Bolling AFB",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "District of Columbia",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Ft. Mcnair",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "JB Anacostia-Bolling",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Marine Barracks",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Naval Medical Command",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Naval Research Laboratory",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Naval Security Station",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "U.S. Naval Observatory",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "U.S. Soldier's & Airmen's Home",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Walter Reed Army Medical CTR",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Washington",
"source": "DTMO"
},
{
"state": "District of Columbia",
"state_iso": "US-DC",
"county": "District of Columbia",
"name": "Washington Naval District",
"source": "DTMO"
}
]
Example response. Rates and dates are illustrative.
GET /v1/dtmo/locations/oconus/{country_iso_code}
Get DTMO OCONUS locations
Returns the DTMO per diem locations of a country by ISO alpha-2 code ('AU', 'BE'), as named in the Department of Defense OCONUS table. location filters by case-insensitive substring, taken literally (no wildcards); no match returns an empty list. Use the names for the q filter of get_dtmo_perdiem_oconus. Returns no rates.
Parameters 2
country_iso_code stringrequired
path parameter
Example "BE"
location string | null
query parameter
Filter by location name
Example "Austin"
Response schema 200
(body) object[]
[] object
[].country stringrequired
The full, official name of the country recognized by the US Government.
[].country_iso_code stringrequired
The 2-letter ISO 3166-1 alpha-2 country code.
[].name stringrequired
The specific city, region, or installation name recognized by the DSSR.
[].source stringrequired
The authoritative government source of this location and rate data.
Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/dtmo/locations/oconus/LU?location=Luxembourg' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/dtmo/locations/oconus/LU?location=Luxembourg.
[
{
"country": "Luxembourg",
"country_iso_code": "LU",
"name": "Luxembourg",
"source": "DTMO"
}
]
Example response. Rates and dates are illustrative.
FEMA - Fire-safe lodging
GET /v1/fema/hotels/search
Search FEMA-listed properties by name and town
Return the properties whose name or city contains every word of q, case-insensitively, as a plain substring: courtyard dallas matches Courtyard properties in Dallas, mint house alexandria the Mint House in Alexandria. There is no fuzzy matching, so hampton inn does not find "Hampton by Hilton". Words of one character are ignored. state narrows the search to one state or territory (404 for a code FEMA does not list). Results are ordered by name then city and paginated with offset and limit (50 by default, 200 at most); total counts every match. No match returns an empty results list.
The Hotel and Motel Fire Safety Act of 1990 requires federal travelers to stay at a property on FEMA's Hotel and Motel National Master List to be reimbursed for lodging. Each property on the list has a FEMA ID. FEMA publishes the current list only; as_of is the date of the snapshot the results come from. This endpoint returns no rates: combine it with the GSA per diem lookups for the lodging ceiling.
Parameters 4
q stringrequired
query parameter
Words to find in the property name or city, all required, case-insensitive.
Example "mint house alexandria"
state string | null
query parameter
Restrict the search to one state or territory.
Example "AL"
offset integer
query parameter
Number of properties to skip.
Example 0
limit integer
query parameter
Properties per page, 200 at most.
Example 50
Response schema 200
as_of stringrequired
Date of the FEMA list snapshot the results come from. FEMA publishes the current list only; there is no history.
results object[]required
results[] object
results[].fema_id stringrequired
FEMA ID printed on the National Master List; the identifier travelers quote on vouchers.
results[].name stringrequired
results[].street string | nullrequired
Street address; null when FEMA lists only a P.O. box.
results[].street (anyOf 1) stringrequired
results[].street (anyOf 2) nullrequired
results[].city stringrequired
results[].state stringrequired
Two-letter state or territory code.
results[].zipcode string | nullrequired
Five-digit ZIP code.
results[].zipcode (anyOf 1) stringrequired
results[].zipcode (anyOf 2) nullrequired
results[].phone string | nullrequired
results[].phone (anyOf 1) stringrequired
results[].phone (anyOf 2) nullrequired
results[].property_type string | nullrequired
FEMA category: Hotel/Motel, Apartment/Condo, Bed & Breakfast, Short Term Rental, College/University or Military.
results[].property_type (anyOf 1) stringrequired
results[].property_type (anyOf 2) nullrequired
results[].stories integerrequired
Number of floors as registered with FEMA.
results[].sprinklers booleanrequired
True when FEMA records an automatic sprinkler system.
total integerrequired
Number of properties matching the query, ignoring pagination.
offset integerrequired
Offset applied to this page.
limit integerrequired
Maximum number of properties in this page.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The state code is not one FEMA lists.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/fema/hotels/search?q=mint+house+alexandria' \
-H "X-API-Key: YOUR_KEY"
{
"as_of": "2026-10-24",
"total": 1,
"offset": 0,
"limit": 50,
"results": [
{
"fema_id": "VA6026",
"name": "Mint House Alexandria - Old Town",
"street": "750 Thornton Way",
"city": "Alexandria",
"state": "VA",
"zipcode": "22314",
"phone": "855-972-9090",
"property_type": "Apartment/Condo",
"stories": 5,
"sprinklers": true
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/fema/hotels/{fema_id}
FEMA-listed property by FEMA ID
Return the property registered under a FEMA ID, or 404 when the ID is not on the list.
The Hotel and Motel Fire Safety Act of 1990 requires federal travelers to stay at a property on FEMA's Hotel and Motel National Master List to be reimbursed for lodging. Each property on the list has a FEMA ID. FEMA publishes the current list only; as_of is the date of the snapshot the results come from. This endpoint returns no rates: combine it with the GSA per diem lookups for the lodging ceiling.
Parameters 1
fema_id stringrequired
path parameter
Example "VA6026"
Response schema 200
as_of stringrequired
Date of the FEMA list snapshot the results come from. FEMA publishes the current list only; there is no history.
results object[]required
results[] object
results[].fema_id stringrequired
FEMA ID printed on the National Master List; the identifier travelers quote on vouchers.
results[].name stringrequired
results[].street string | nullrequired
Street address; null when FEMA lists only a P.O. box.
results[].street (anyOf 1) stringrequired
results[].street (anyOf 2) nullrequired
results[].city stringrequired
results[].state stringrequired
Two-letter state or territory code.
results[].zipcode string | nullrequired
Five-digit ZIP code.
results[].zipcode (anyOf 1) stringrequired
results[].zipcode (anyOf 2) nullrequired
results[].phone string | nullrequired
results[].phone (anyOf 1) stringrequired
results[].phone (anyOf 2) nullrequired
results[].property_type string | nullrequired
FEMA category: Hotel/Motel, Apartment/Condo, Bed & Breakfast, Short Term Rental, College/University or Military.
results[].property_type (anyOf 1) stringrequired
results[].property_type (anyOf 2) nullrequired
results[].stories integerrequired
Number of floors as registered with FEMA.
results[].sprinklers booleanrequired
True when FEMA records an automatic sprinkler system.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The FEMA ID is not on the list.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/fema/hotels/VA6026 \
-H "X-API-Key: YOUR_KEY"
{
"as_of": "2026-10-24",
"results": [
{
"fema_id": "VA6026",
"name": "Mint House Alexandria - Old Town",
"street": "750 Thornton Way",
"city": "Alexandria",
"state": "VA",
"zipcode": "22314",
"phone": "855-972-9090",
"property_type": "Apartment/Condo",
"stories": 5,
"sprinklers": true
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/fema/hotels/zipcode/{zipcode}
FEMA-listed properties by ZIP code
Return every property on the list in a US ZIP code, ordered by name. The path accepts a five-digit ZIP or ZIP+4, normalized to the first five digits. A known ZIP with no listed property returns an empty results list; an unknown ZIP returns 404.
The Hotel and Motel Fire Safety Act of 1990 requires federal travelers to stay at a property on FEMA's Hotel and Motel National Master List to be reimbursed for lodging. Each property on the list has a FEMA ID. FEMA publishes the current list only; as_of is the date of the snapshot the results come from. This endpoint returns no rates: combine it with the GSA per diem lookups for the lodging ceiling.
Parameters 1
zipcode stringrequired
path parameter
Example "ZIPCODE"
Response schema 200
as_of stringrequired
Date of the FEMA list snapshot the results come from. FEMA publishes the current list only; there is no history.
results object[]required
results[] object
results[].fema_id stringrequired
FEMA ID printed on the National Master List; the identifier travelers quote on vouchers.
results[].name stringrequired
results[].street string | nullrequired
Street address; null when FEMA lists only a P.O. box.
results[].street (anyOf 1) stringrequired
results[].street (anyOf 2) nullrequired
results[].city stringrequired
results[].state stringrequired
Two-letter state or territory code.
results[].zipcode string | nullrequired
Five-digit ZIP code.
results[].zipcode (anyOf 1) stringrequired
results[].zipcode (anyOf 2) nullrequired
results[].phone string | nullrequired
results[].phone (anyOf 1) stringrequired
results[].phone (anyOf 2) nullrequired
results[].property_type string | nullrequired
FEMA category: Hotel/Motel, Apartment/Condo, Bed & Breakfast, Short Term Rental, College/University or Military.
results[].property_type (anyOf 1) stringrequired
results[].property_type (anyOf 2) nullrequired
results[].stories integerrequired
Number of floors as registered with FEMA.
results[].sprinklers booleanrequired
True when FEMA records an automatic sprinkler system.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The ZIP code is unknown.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/fema/hotels/zipcode/ZIPCODE \
-H "X-API-Key: YOUR_KEY"
{
"as_of": "2026-10-24",
"results": [
{
"fema_id": "VA6026",
"name": "Mint House Alexandria - Old Town",
"street": "750 Thornton Way",
"city": "Alexandria",
"state": "VA",
"zipcode": "22314",
"phone": "855-972-9090",
"property_type": "Apartment/Condo",
"stories": 5,
"sprinklers": true
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/fema/hotels/state/{state_iso}
FEMA-listed properties by state, optionally filtered by city
Return the properties on the list in a state, ordered by city then name and paginated with offset and limit (50 by default, 200 at most); total is the number of matches across all pages. The optional city is matched case-insensitively as a partial name, so york matches New York and Yorktown. The state path accepts the 50 states, DC and the territories FEMA lists (AS, GU, MP, PR, PW, VI); other codes return 404. A city that matches nothing returns an empty results list.
The Hotel and Motel Fire Safety Act of 1990 requires federal travelers to stay at a property on FEMA's Hotel and Motel National Master List to be reimbursed for lodging. Each property on the list has a FEMA ID. FEMA publishes the current list only; as_of is the date of the snapshot the results come from. This endpoint returns no rates: combine it with the GSA per diem lookups for the lodging ceiling.
Parameters 4
state_iso stringrequired
path parameter
Example "AL"
city string | null
query parameter
Case-insensitive partial match on the city name.
Example "Alexandria"
offset integer
query parameter
Number of properties to skip.
Example 0
limit integer
query parameter
Properties per page, 200 at most.
Example 50
Response schema 200
as_of stringrequired
Date of the FEMA list snapshot the results come from. FEMA publishes the current list only; there is no history.
results object[]required
results[] object
results[].fema_id stringrequired
FEMA ID printed on the National Master List; the identifier travelers quote on vouchers.
results[].name stringrequired
results[].street string | nullrequired
Street address; null when FEMA lists only a P.O. box.
results[].street (anyOf 1) stringrequired
results[].street (anyOf 2) nullrequired
results[].city stringrequired
results[].state stringrequired
Two-letter state or territory code.
results[].zipcode string | nullrequired
Five-digit ZIP code.
results[].zipcode (anyOf 1) stringrequired
results[].zipcode (anyOf 2) nullrequired
results[].phone string | nullrequired
results[].phone (anyOf 1) stringrequired
results[].phone (anyOf 2) nullrequired
results[].property_type string | nullrequired
FEMA category: Hotel/Motel, Apartment/Condo, Bed & Breakfast, Short Term Rental, College/University or Military.
results[].property_type (anyOf 1) stringrequired
results[].property_type (anyOf 2) nullrequired
results[].stories integerrequired
Number of floors as registered with FEMA.
results[].sprinklers booleanrequired
True when FEMA records an automatic sprinkler system.
total integerrequired
Number of properties matching the query, ignoring pagination.
offset integerrequired
Offset applied to this page.
limit integerrequired
Maximum number of properties in this page.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The state code is not one FEMA lists.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/fema/hotels/state/AL \
-H "X-API-Key: YOUR_KEY"
{
"as_of": "2026-10-24",
"total": 1,
"offset": 0,
"limit": 50,
"results": [
{
"fema_id": "VA6026",
"name": "Mint House Alexandria - Old Town",
"street": "750 Thornton Way",
"city": "Alexandria",
"state": "VA",
"zipcode": "22314",
"phone": "855-972-9090",
"property_type": "Apartment/Condo",
"stories": 5,
"sprinklers": true
}
]
}
Example response. Rates and dates are illustrative.
GSA - per diem, mileage, fleet and airfare
GET /v1/gsa/perdiem/destination/{destination_id}
GSA per diem rate by destination
Return the GSA per diem rate in effect for a specific GSA destination on a given date. A destination is a rate area defined by GSA and may represent a city, metropolitan area, county, or the Standard CONUS area. It is not necessarily a single municipality.
destination_id is the numeric identifier assigned to that GSA rate area in the source data. Use GET /v1/gsa/destinations to browse the available destinations and find the ID for the location you need. Destination ID 0 represents the Standard CONUS rate.
The response contains the seasonal lodging rate applicable on the requested date and the daily meals and incidental expenses (M&IE) rate. When date is omitted, today's rate is returned. Set verification_url=true to include the corresponding official GSA lookup URL.
Parameters 3
destination_id integerrequired
path parameter
GSA's numeric identifier for a rate area. Retrieve valid IDs from GET /v1/gsa/destinations; ID 0 is the Standard CONUS rate.
Example 75
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
verification_url boolean
query parameter
Include the official GSA per diem lookup URL in the response when true.
Example false
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].state stringrequired
results[].iso_code stringrequired
results[].destination_id integerrequired
results[].destination stringrequired
results[].county stringrequired
results[].season_begin stringrequired
results[].season_end stringrequired
results[].lodging integerrequired
results[].meals_incidental integerrequired
results[].effective_date stringrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The destination does not exist, or it has no rate for the requested date.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/destination/75 \
-H "X-API-Key: YOUR_KEY"
{
"effective_date": "2025-10-01",
"verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&state=DC&city=&zip=",
"results": [
{
"state": "District of Columbia",
"iso_code": "US-DC",
"destination_id": 75,
"destination": "Washington",
"county": "District of Columbia",
"season_begin": "03/01",
"season_end": "06/30",
"lodging": 276,
"meals_incidental": 92,
"effective_date": "2025-10-01"
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/perdiem/state/{state_iso}
GSA per diem rates by state and date
Return every GSA destination rate in a state that applies on a specific date. Each result contains the seasonal lodging rate in effect on that date and the daily meals and incidental expenses (M&IE) rate. When date is omitted, today's rates are returned.
Use the optional location parameter to filter by a GSA destination or location-defined name. Matching is case-insensitive and accepts partial names. If the state has no non-standard destination rate, the Standard CONUS rate is returned. This endpoint covers GSA CONUS rates; unsupported or unknown state codes return 404.
Set verification_url=true to include the corresponding official GSA state lookup URL.
Parameters 4
state_iso stringrequired
path parameter
Two-letter US postal abbreviation for the state or District of Columbia.
Example "DC"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
location string | null
query parameter
Optional case-insensitive partial match against the GSA destination name or location-defined name.
Example "Washington"
verification_url boolean
query parameter
Include the official GSA state lookup URL in the response when true.
Example false
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].state stringrequired
results[].iso_code stringrequired
results[].destination_id integerrequired
results[].destination stringrequired
results[].county stringrequired
results[].season_begin stringrequired
results[].season_end stringrequired
results[].lodging integerrequired
results[].meals_incidental integerrequired
results[].effective_date stringrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The state is unsupported or unknown, or no rate matches the location and date.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/state/DC \
-H "X-API-Key: YOUR_KEY"
{
"effective_date": "2025-10-01",
"verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&state=DC&city=&zip=",
"results": [
{
"state": "District of Columbia",
"iso_code": "US-DC",
"destination_id": 75,
"destination": "Washington",
"county": "District of Columbia",
"season_begin": "03/01",
"season_end": "06/30",
"lodging": 276,
"meals_incidental": 92,
"effective_date": "2025-10-01"
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/perdiem/state/{state_iso}/year/{year}
GSA per diem rates by state and fiscal year
Return every GSA destination rate in a US state (US-XX) for a US fiscal year (October 1 to September 30): the lodging rate for every month and the daily M&IE rate per destination. The optional location filters destinations by GSA destination or defined-area name, case-insensitive and partial. Set verification_url=true to include the official GSA state lookup URL. Use get_gsa_perdiem_by_state for the rate on one date.
Parameters 4
state_iso stringrequired
path parameter
Two-letter US postal abbreviation for the state or District of Columbia.
Example "DC"
year integerrequired
path parameter
Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example 2026
location string | null
query parameter
Optional case-insensitive partial match against the GSA destination name or location-defined name.
Example "Washington"
verification_url boolean
query parameter
Include the official GSA state lookup URL in the response when true.
Example false
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].state stringrequired
results[].iso_code stringrequired
results[].destination_id integerrequired
results[].destination stringrequired
results[].county stringrequired
results[].lodging objectrequired
results[].lodging.oct integerrequired
results[].lodging.nov integerrequired
results[].lodging.dec integerrequired
results[].lodging.jan integerrequired
results[].lodging.feb integerrequired
results[].lodging.mar integerrequired
results[].lodging.apr integerrequired
results[].lodging.may integerrequired
results[].lodging.jun integerrequired
results[].lodging.jul integerrequired
results[].lodging.aug integerrequired
results[].lodging.sep integerrequired
results[].meals_incidental integerrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
No per diem rates match the requested state, fiscal year, and optional location.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/state/DC/year/2026 \
-H "X-API-Key: YOUR_KEY"
{
"effective_date": "2025-10-01",
"verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&city=&state=DC",
"results": [
{
"state": "District of Columbia",
"iso_code": "US-DC",
"destination_id": 75,
"destination": "Washington",
"county": "District of Columbia",
"lodging": {
"oct": 275,
"nov": 196,
"dec": 196,
"jan": 196,
"feb": 196,
"mar": 276,
"apr": 276,
"may": 276,
"jun": 276,
"jul": 183,
"aug": 183,
"sep": 275
},
"meals_incidental": 92
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/perdiem/zipcode/{zipcode}
GSA per diem rates by ZIP code and date
Return every GSA destination rate associated with a US ZIP code that applies on a specific date. Each result contains the seasonal lodging rate in effect on that date and the daily meals and incidental expenses (M&IE) rate. When date is omitted, today's rates are returned.
A ZIP code can map to more than one GSA destination. When that happens, results contains every applicable rate, and the API does not choose one automatically. Use the returned county or a geocoder to determine which destination applies to the travel location. If a known ZIP code has no non-standard destination, the Standard CONUS rate is returned.
The path accepts either a five-digit ZIP code or ZIP+4. ZIP+4 values are normalized to their first five digits. Set verification_url=true to include the corresponding official GSA lookup URL.
Parameters 3
zipcode stringrequired
path parameter
Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.
Example "01366"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
verification_url boolean
query parameter
Include the official GSA per diem lookup URL in the response when true.
Example false
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].state stringrequired
results[].iso_code stringrequired
results[].destination_id integerrequired
results[].destination stringrequired
results[].county stringrequired
results[].season_begin stringrequired
results[].season_end stringrequired
results[].lodging integerrequired
results[].meals_incidental integerrequired
results[].effective_date stringrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The ZIP code is unknown, or no per diem rate is available for the requested date.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/zipcode/01366 \
-H "X-API-Key: YOUR_KEY"
{
"effective_date": "2025-10-01",
"verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&state=US&city=&zip=",
"results": [
{
"state": "US Standard",
"iso_code": "US-US",
"destination_id": 0,
"destination": "Standard Rate",
"county": "CONUS",
"season_begin": "10/01",
"season_end": "09/30",
"lodging": 110,
"meals_incidental": 68,
"effective_date": "2025-10-01"
},
{
"state": "Massachusetts",
"iso_code": "US-MA",
"destination_id": 160,
"destination": "Worcester",
"county": "Worcester",
"season_begin": "10/01",
"season_end": "09/30",
"lodging": 135,
"meals_incidental": 80,
"effective_date": "2025-10-01"
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/perdiem/zipcode/{zipcode}/year/{year}
GSA per diem rates by ZIP code and fiscal year
Return the GSA lodging rates for every month of a US fiscal year and the daily meals and incidental expenses (M&IE) rate associated with a ZIP code. A US fiscal year begins October 1 of the preceding calendar year and ends September 30.
A ZIP code can map to more than one GSA destination. When that happens, results contains every applicable rate. The API does not choose a destination automatically; use the returned county or a geocoder to determine which rate applies. ZIP codes without a non-standard destination return the Standard CONUS rate.
ZIP+4 input is accepted and normalized to its first five digits. Set verification_url=true to include the corresponding official GSA lookup URL.
Parameters 3
zipcode stringrequired
path parameter
Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.
Example "01366"
year integerrequired
path parameter
Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example 2026
verification_url boolean
query parameter
Include the official GSA ZIP-code lookup URL in the response when true.
Example false
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].state stringrequired
results[].iso_code stringrequired
results[].destination_id integerrequired
results[].destination stringrequired
results[].county stringrequired
results[].lodging objectrequired
results[].lodging.oct integerrequired
results[].lodging.nov integerrequired
results[].lodging.dec integerrequired
results[].lodging.jan integerrequired
results[].lodging.feb integerrequired
results[].lodging.mar integerrequired
results[].lodging.apr integerrequired
results[].lodging.may integerrequired
results[].lodging.jun integerrequired
results[].lodging.jul integerrequired
results[].lodging.aug integerrequired
results[].lodging.sep integerrequired
results[].meals_incidental integerrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The ZIP code does not exist in the database.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/zipcode/01366/year/2026 \
-H "X-API-Key: YOUR_KEY"
{
"effective_date": "2025-10-01",
"verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&city=&zip=01366",
"results": [
{
"state": "US Standard",
"iso_code": "US-US",
"destination_id": 0,
"destination": "Standard Rate",
"county": "CONUS",
"lodging": {
"oct": 110,
"nov": 110,
"dec": 110,
"jan": 110,
"feb": 110,
"mar": 110,
"apr": 110,
"may": 110,
"jun": 110,
"jul": 110,
"aug": 110,
"sep": 110
},
"meals_incidental": 68
},
{
"state": "Massachusetts",
"iso_code": "US-MA",
"destination_id": 160,
"destination": "Worcester",
"county": "Worcester",
"lodging": {
"oct": 135,
"nov": 135,
"dec": 135,
"jan": 135,
"feb": 135,
"mar": 135,
"apr": 135,
"may": 135,
"jun": 135,
"jul": 135,
"aug": 135,
"sep": 135
},
"meals_incidental": 80
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/zipcode/{zipcode}
Get ZIP code metadata
Look up every state associated with a US ZIP code. Most ZIP codes belong to one state, but some cross state boundaries. In that case, states contains every matching state; the API does not choose one on the caller's behalf. This is a geographic metadata endpoint; it does not return GSA per diem rates. Use /v1/gsa/perdiem/zipcode/{zipcode} for rates.
The path accepts either a five-digit ZIP code or ZIP+4. ZIP+4 values are normalized to their first five digits before lookup, and the normalized five-digit ZIP is returned in the response. Leading zeroes are significant, so ZIP codes must be sent as strings.
Parameters 1
zipcode stringrequired
path parameter
Example "ZIPCODE"
Response schema 200
zipcode stringrequired
The normalized five-digit US ZIP code.
states string[]required
All states associated with the ZIP code, ordered alphabetically.
states[] string
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
The normalized ZIP code does not exist in the database.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/zipcode/ZIPCODE \
-H "X-API-Key: YOUR_KEY"
Leading zeroes are preserved in the response.
{
"zipcode": "00501",
"states": [
"New York"
]
}
Example response. Rates and dates are illustrative.
A request for 12084-1234 is looked up and returned as 12084.
{
"zipcode": "12084",
"states": [
"New York"
]
}
Example response. Rates and dates are illustrative.
Every state relationship is returned; no state is selected automatically.
{
"zipcode": "10506",
"states": [
"Connecticut",
"New York"
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/destination/{destination_id}
Get GSA destination metadata by ID
Return the geographic metadata for one GSA destination rate area. A destination may represent a city, metropolitan area, county, group of jurisdictions, or the Standard CONUS area rather than a single municipality. name is GSA's short display name, while defined_name describes the geographic scope of the rate area.
destination_id is GSA's numeric identifier for that rate area. Use GET /v1/gsa/destinations to browse available destinations and find an ID. ID 0 identifies the Standard CONUS rate area.
This endpoint returns destination metadata only. Use GET /v1/gsa/perdiem/destination/{destination_id} to retrieve the per diem rate in effect for a particular date.
Parameters 1
destination_id integerrequired
path parameter
GSA's numeric identifier for a destination rate area. Retrieve valid IDs from GET /v1/gsa/destinations; ID 0 is Standard CONUS.
Example 75
Response schema 200
destination_id integerrequired
GSA's numeric identifier for the rate area. ID 0 is the Standard CONUS rate.
name stringrequired
Display name GSA uses for the destination rate area.
defined_name stringrequired
Geographic area GSA uses to define the destination, commonly a county or locality.
county stringrequired
County associated with the destination rate area.
state stringrequired
US State Name.
state_iso stringrequired
The 4-letter ISO 3166-2:US state code. The first part is US, the ISO 3166-1 alpha-2 code of the United States. The second part is two letters, which is the postal abbreviation of the state, district, or outlying area.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
No GSA destination exists with the requested destination ID.
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/destination/75 \
-H "X-API-Key: YOUR_KEY"
{
"destination_id": 75,
"name": "Washington",
"defined_name": "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)",
"county": "District of Columbia",
"state": "District of Columbia",
"state_iso": "US-DC"
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/destinations
List GSA destinations
Return the paginated list of GSA destination rate areas and their numeric IDs. A destination is an area for which GSA publishes a per diem rate; it may represent a city, metropolitan area, county, locality, or the Standard CONUS area rather than a single municipality.
Use destination_id with GET /v1/gsa/perdiem/destination/{destination_id} to retrieve the rate in effect for that destination. ID 0 identifies the Standard CONUS rate. name is GSA's display name, while defined_name, county, and state fields provide the geographic context needed to select the correct rate area.
Results are ordered by destination_id. Use offset and limit to page through the list. An offset beyond the available records returns an empty list, not a 404 response.
Parameters 2
offset integer
query parameter
Number of destination records to skip before returning results.
Example 0
limit integer
query parameter
Maximum number of destinations to return. The maximum is 200.
Example 100
Response schema 200
(body) object[]
[] object
[].destination_id integerrequired
GSA's numeric identifier for the rate area. ID 0 is the Standard CONUS rate.
[].name stringrequired
Display name GSA uses for the destination rate area.
[].defined_name stringrequired
Geographic area GSA uses to define the destination, commonly a county or locality.
[].county stringrequired
County associated with the destination rate area.
[].state stringrequired
US State Name.
[].state_iso stringrequired
The 4-letter ISO 3166-2:US state code. The first part is US, the ISO 3166-1 alpha-2 code of the United States. The second part is two letters, which is the postal abbreviation of the state, district, or outlying area.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/destinations \
-H "X-API-Key: YOUR_KEY"
[
{
"destination_id": 0,
"name": "Standard Rate",
"defined_name": "Standard CONUS Rate",
"county": "CONUS",
"state": "US Standard",
"state_iso": "US-US"
},
{
"destination_id": 1,
"name": "Birmingham",
"defined_name": "Jefferson",
"county": "Jefferson",
"state": "Alabama",
"state_iso": "US-AL"
},
{
"destination_id": 2,
"name": "Gulf Shores",
"defined_name": "Baldwin",
"county": "Baldwin",
"state": "Alabama",
"state_iso": "US-AL"
}
]
Example response. Rates and dates are illustrative.
GET /v1/gsa/city-pairs/locations
City Pair airport and city codes
List or search the three-letter codes used by GSA City Pair awards for the fiscal year of date (today by default), with GSA's own city, state and country labels. Awards use IATA airport codes (DCA, IAD, BWI) for most domestic pairs and metropolitan city codes (WAS, NYC, LON) for others; only GSA decides which, so resolve the code here before calling the fare lookup. Several codes can share one city label. Without q, every code of the fiscal year is returned, ordered by code. With q (3+ characters), a code matches exactly and city/country names match by substring, case-insensitively. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example:
curl --get 'https://api.allowancesapi.com/v1/gsa/city-pairs/locations' -H 'X-API-Key: YOUR_KEY' --data-urlencode 'q=washington'
Labels mirror the latest imported awards table and change with it.
Parameters 2
q string | null
query parameter
Match a code exactly or a city/country name by substring; case-insensitive. Omit to list every code of the fiscal year.
Example "washington"
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
Response schema 200
(body) object[]
[] object
[].code stringrequired
GSA airport or metropolitan city code as used in City Pair awards.
[].city_name stringrequired
[].state string | null
US state abbreviation; null outside the United States.
[].state (anyOf 1) string
[].state (anyOf 2) null
[].country stringrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
The plan does not permit the requested date.
404
No code matches, or the requested fiscal year is not loaded.
422
Search term shorter than 3 characters or invalid date.
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/city-pairs/locations \
-H "X-API-Key: YOUR_KEY"
[
{
"code": "DCA",
"city_name": "WASHINGTON",
"state": "DC",
"country": "UNITED STATES"
},
{
"code": "WAS",
"city_name": "WASHINGTON",
"state": "DC",
"country": "UNITED STATES"
}
]
Example response. Rates and dates are illustrative.
GET /v1/gsa/city-pairs/{origin}/{destination}
City Pair contract airfares
Return every GSA contract award matching the airport/city code pair and date (today by default). Codes are returned in alphabetical order; fares are one-way USD and valid in either direction. Source start/end dates are inclusive; overlapping amendments are both returned. No fallback to other fiscal years or dates. Null fare categories are unavailable. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date. Data reflects the latest imported table, not past publication snapshots. These are eligible government travelers' contract prices, not live seat availability or booking offers. Domestic fares exclude passenger facility, segment and security fees; international fares exclude taxes/fees but include fuel surcharges. Book through the agency's authorized system. Official CPP rules and price caveats; fare definitions.
Example (fixed date):
curl --get 'https://api.allowancesapi.com/v1/gsa/city-pairs/ABE/ATL' -H 'X-API-Key: YOUR_KEY' -H 'X-Bypass-Cache: 1' --data-urlencode 'date=2026-10-28' --data-urlencode 'verification_url=true'
See the 200 response example for all result fields. Importing does not invalidate existing cached responses; use X-Bypass-Cache: 1 to verify newly imported data.
Parameters 4
origin stringrequired
path parameter
Three-letter airport or international city code; case-insensitive. No city-name expansion.
Example "ABE"
destination stringrequired
path parameter
Three-letter airport or international city code; case-insensitive. No city-name expansion.
Example "ABE"
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].fiscal_year integerrequired
results[].origin_code stringrequired
results[].destination_code stringrequired
results[].airline_code stringrequired
results[].service stringrequired
N = non-stop; C = connecting.
Allowed values: ["N", "C"]
results[].effective_date stringrequired
results[].expiration_date stringrequired
results[].yca_fare number | null
One-way USD last-seat coach fare; null when unavailable.
results[].yca_fare (anyOf 1) number
results[].yca_fare (anyOf 2) null
results[].ca_fare number | null
One-way USD capacity-controlled coach fare; null when unavailable.
results[].ca_fare (anyOf 1) number
results[].ca_fare (anyOf 2) null
results[].business_fare number | null
One-way USD business (_CB) fare; null when unavailable.
results[].business_fare (anyOf 1) number
results[].business_fare (anyOf 2) null
results[].cp_fare number | null
One-way USD premium economy (_CP) fare; null when unavailable.
results[].cp_fare (anyOf 1) number
results[].cp_fare (anyOf 2) null
results[].cn_fare number | null
One-way USD non-refundable capacity-controlled fare; null when unavailable.
results[].cn_fare (anyOf 1) number
results[].cn_fare (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
The plan does not permit the requested date.
404
No award for this route/date, or the requested fiscal year is not loaded.
422
Invalid airport/city code or date.
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/gsa/city-pairs/ABE/ABE \
-H "X-API-Key: YOUR_KEY"
{
"effective_date": "2026-10-01",
"verification_url": "https://www.gsa.gov/travel/plan-a-trip/transportation-airfare-rates-pov-rates/airfare-rates-city-pair-program",
"results": [
{
"fiscal_year": 2027,
"origin_code": "ABE",
"destination_code": "ATL",
"airline_code": "DL",
"service": "N",
"effective_date": "2026-10-01",
"expiration_date": "2027-09-30",
"yca_fare": 710,
"ca_fare": 355,
"business_fare": null,
"cp_fare": null,
"cn_fare": null
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/mileage
POV mileage reimbursement rates
Returns the GSA privately owned vehicle (POV) mileage reimbursement rates in USD per mile for airplane, automobile, government-furnished automobile, motorcycle and moving, in effect today or on date; type selects one. Use calculate_mileage_reimbursement to turn a distance into an amount.
Parameters 3
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
type string | null
query parameter
Filter by mileage type
Example "airplane"
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].mileage_type stringrequired
Allowed values: ["airplane", "automobile", "government_furnished_automobile", "motorcycle", "moving"]
results[].effective_date stringrequired
results[].rate_per_mile numberrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/gsa/mileage?date=2026-07-11&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/gsa/mileage?date=2026-07-11&verification_url=true. Rates are in USD per mile. Omit type to return all mileage types.
{
"effective_date": "2026-01-01",
"verification_url": "https://www.gsa.gov/travel/plan-a-trip/transportation-airfare-rates-pov-rates/privately-owned-vehicle-pov-mileage-reimbursement",
"results": [
{
"mileage_type": "airplane",
"effective_date": "2026-01-01",
"rate_per_mile": 1.78
},
{
"mileage_type": "automobile",
"effective_date": "2026-01-01",
"rate_per_mile": 0.725
},
{
"mileage_type": "government_furnished_automobile",
"effective_date": "2026-01-01",
"rate_per_mile": 0.205
},
{
"mileage_type": "motorcycle",
"effective_date": "2026-01-01",
"rate_per_mile": 0.705
},
{
"mileage_type": "moving",
"effective_date": "2026-01-01",
"rate_per_mile": 0.205
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/mie-breakdowns
M&IE meal breakdowns
Return how daily M&IE totals break down into breakfast, lunch, dinner and incidental expenses, as in effect on the given date. The CONUS table breaks down the five standard CONUS M&IE tiers and is returned by default. Set region=oconus for the generic DTMO/DSSR M&IE total table. If date is not specified, today's breakdowns will be returned.
Parameters 4
date string | null
query parameter
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
Example "2026-01-01"
region string
query parameter
Breakdown table to return; defaults to CONUS
Example "conus"
total integer | null
query parameter
Filter by daily M&IE total in USD
Example 1
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
effective_date stringrequired
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
results object[]required
results[] object
results[].region stringrequired
Breakdown table the row belongs to: 'conus' covers the standard CONUS M&IE tiers, 'oconus' covers the M&IE totals set by DTMO/DSSR for OCONUS locations.
Allowed values: ["conus", "oconus"]
results[].effective_date stringrequired
Date this breakdown took effect (the 'Last updated' date published by GSA).
results[].mie_total integerrequired
Daily M&IE total in USD the breakdown applies to
results[].breakfast integerrequired
Breakfast portion of the M&IE total, in USD per day.
results[].lunch integerrequired
Lunch portion of the M&IE total, in USD per day.
results[].dinner integerrequired
Dinner portion of the M&IE total, in USD per day.
results[].incidentals integerrequired
Incidental expenses portion of the M&IE total, in USD per day.
results[].first_last_day number | null
First and last day of travel rate (75% of the M&IE total) in USD. CONUS only.
results[].first_last_day (anyOf 1) number
results[].first_last_day (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/gsa/mie-breakdowns?date=2026-07-11®ion=conus&total=68&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/gsa/mie-breakdowns?date=2026-07-11®ion=conus&total=68&verification_url=true. Amounts are in USD per day.
{
"effective_date": "2026-06-23",
"verification_url": "https://www.gsa.gov/travel/plan-a-trip/per-diem-rates/mie-breakdowns",
"results": [
{
"region": "conus",
"effective_date": "2026-06-23",
"mie_total": 68,
"breakfast": 16,
"lunch": 19,
"dinner": 28,
"incidentals": 5,
"first_last_day": 51.0
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/vehicle-rates/{rate_type}/{sin}
GSA Fleet vehicle leasing rates by SIN
Returns the GSA Fleet vehicle leasing rates (monthly lease rate and rate per mile) for the vehicle type identified by its Standard Item Number (SIN), from the standard (US) or europe rate schedule, for the current fiscal year unless year is given; rates are available from fiscal year 2022. SINs are the vehicle-type codes of the GSA Fleet rate schedule; the response names the vehicle type.
Parameters 4
rate_type stringrequired
path parameter
The GSA Fleet rate schedule: 'standard' covers vehicles leased in the United States, 'europe' covers vehicles leased in Europe.
Example "standard"
sin stringrequired
path parameter
Standard Item Number (SIN) identifying a GSA Fleet leased vehicle type, case insensitive.
Example "10B"
year integer
query parameter
Example 1
verification_url boolean
query parameter
If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.
Example false
Response schema 200
sin stringrequired
Standard Item Number of the vehicle type
vehicle_description stringrequired
rate_type stringrequired
Allowed values: ["standard", "europe"]
results object[]required
results[] object
results[].fiscal_year integerrequired
US fiscal year the rates apply to (starts Oct 1st, ends Sep 30th)
results[].monthly_rate integer | null
Monthly lease rate in USD. Null when the vehicle has no fixed monthly rate, see monthly_rate_type.
results[].monthly_rate (anyOf 1) integer
results[].monthly_rate (anyOf 2) null
results[].monthly_rate_type stringrequired
'fixed' when monthly_rate holds the amount. 'see_fsr', 'unique_rate' and 'unique_rate_use_rate_module' mean the monthly rate is set per vehicle by GSA Fleet and monthly_rate is null.
Allowed values: ["fixed", "see_fsr", "unique_rate_use_rate_module", "unique_rate"]
results[].mileage_rate number | null
Rate per mile in USD
results[].mileage_rate (anyOf 1) number
results[].mileage_rate (anyOf 2) null
verification_url string | null
verification_url (anyOf 1) string
verification_url (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/gsa/vehicle-rates/standard/10B?year=2026&verification_url=true' \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/gsa/vehicle-rates/standard/10B?year=2026&verification_url=true. Monthly rates are in USD per month; mileage rates are in USD per mile.
{
"sin": "10B",
"vehicle_description": "Sedan, Midsize",
"rate_type": "standard",
"results": [
{
"fiscal_year": 2026,
"monthly_rate": 421,
"monthly_rate_type": "fixed",
"mileage_rate": 0.21
}
],
"verification_url": "https://www.gsa.gov/buy-through-us/products-and-services/transportation-and-logistics-services/fleet-management/vehicle-leasing/vehicle-rates"
}
Example response. Rates and dates are illustrative.
GET /v1/gsa/fedrooms
List worldwide FedRooms properties
List current worldwide FedRooms properties with all six GSA spreadsheet columns: hotel name, address, postal city, state, postal code and country. Page through all properties using offset and limit (default 50, maximum 200); total counts matching properties. Optional q searches all six fields: every whitespace-separated word must occur as a case-insensitive literal substring in at least one field. Words may match different fields; there is no fuzzy matching. Optional country filters by ISO alpha-2 code (for example US or GB); every result includes country_iso_code while preserving the source country name. as_of is the UTC download date of the loaded snapshot, not a publication or effective date. verification_url always points to the official GSA page. No room prices or availability are supplied. Book through approved government channels to guarantee the FedRooms rate. This is a current list with no historical date lookup.
Parameters 4
country string | null
query parameter
Filter by ISO 3166-1 alpha-2 country code, e.g. US or GB.
Example "BE"
q string | null
query parameter
Search all six property fields; every word must match a case-insensitive literal substring.
Example "courtyard dallas"
offset integer
query parameter
Number of properties to skip.
Example 0
limit integer
query parameter
Properties per page, at most 200.
Example 50
Response schema 200
as_of stringrequired
UTC download date of the loaded snapshot, not its publication or effective date.
verification_url stringrequired
Official GSA FedRooms page; always included.
total integerrequired
Total matching properties across all pages.
offset integerrequired
Number of properties skipped.
limit integerrequired
Maximum properties on this page.
results object[]required
Worldwide FedRooms properties with every source column.
results[] object
results[].name stringrequired
Hotel name as listed by GSA.
results[].address stringrequired
Complete source street address.
results[].city stringrequired
Source postal city.
results[].state string | nullrequired
Source state or region name, null when not provided.
results[].state (anyOf 1) stringrequired
results[].state (anyOf 2) nullrequired
results[].zipcode string | nullrequired
Complete source postal code, including international formats; null when absent.
results[].zipcode (anyOf 1) stringrequired
results[].zipcode (anyOf 2) nullrequired
results[].country stringrequired
Source country name.
results[].country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. US or GB.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
503
No property-list snapshot is loaded.
curl -X GET https://api.allowancesapi.com/v1/gsa/fedrooms \
-H "X-API-Key: YOUR_KEY"
{
"as_of": "2026-11-05",
"verification_url": "https://www.gsa.gov/travel/hotels-fedrooms",
"total": 12234,
"offset": 0,
"limit": 50,
"results": [
{
"name": "Holiday Inn Huntingdon - Racecourse",
"address": "Thrapston Road",
"city": "Huntingdon",
"state": null,
"zipcode": "PE28 4NL",
"country": "United Kingdom",
"country_iso_code": "GB"
}
]
}
Example response. Rates and dates are illustrative.
POST /v1/gsa/calc/mileage
Calculate POV mileage reimbursement
Calculate mileage reimbursement with the official GSA rate in effect on the travel date (today if omitted). Provide a distance in miles and the vehicle type: automobile, airplane, motorcycle or moving. For automobile travel, say whether a government-furnished automobile was available, which selects the reduced rate. Returns the rate category, rate and effective date, and the amount rounded to the cent. Use get_mileage for the rates alone.
Request body application/json
distance numberrequired
One-way or total travel distance in miles, from 0.001 through 100,000.
vehicle_type stringrequired
Vehicle or travel category used to select the applicable GSA mileage rate.
Allowed values: ["automobile", "airplane", "motorcycle", "moving"]
government_vehicle_available boolean
Optional for automobile calculations and defaults to false. Use true when a government-furnished automobile is authorized and available; false selects the standard privately owned automobile rate.
date string | null
Travel date used to select the effective rate. Accepts YYYY-MM-DD or YYYYMMDD; defaults to today. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
Response schema 200
distance stringrequired
Travel distance in miles used in the calculation.
distance_unit string
The distance unit in miles.
vehicle_type stringrequired
Vehicle category supplied by the caller.
Allowed values: ["automobile", "airplane", "motorcycle", "moving"]
government_vehicle_available boolean | null
Automobile availability choice used to select the rate; omitted for other vehicles.
government_vehicle_available (anyOf 1) boolean
government_vehicle_available (anyOf 2) null
mileage_type stringrequired
Stored GSA mileage-rate category selected by the calculator.
Allowed values: ["airplane", "automobile", "government_furnished_automobile", "motorcycle", "moving"]
travel_date stringrequired
Travel date used for the effective-rate lookup.
rate_effective_date stringrequired
Effective date of the GSA rate used in the calculation.
rate_per_mile stringrequired
Exact official GSA rate per mile; serialized as a decimal string.
amount stringrequired
Calculated reimbursement rounded to cents; serialized with two decimals.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X POST https://api.allowancesapi.com/v1/gsa/calc/mileage \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
--data '{"date": "2026-07-11", "distance": 125.5, "government_vehicle_available": false, "vehicle_type": "automobile"}'
POST /v1/gsa/calc/perdiem/trip
Calculate a GSA CONUS trip per diem entitlement
Calculate estimated lodging and meals and incidental expenses (M&IE) reimbursement for a trip within the continental United States. The response provides a daily breakdown and trip totals.
Describe the trip
- Add each temporary-duty stop in travel order, with inclusive arrival and departure dates.
- Identify each stop with a GSA destination ID or ZIP code. A stop represents the temporary-duty locality, which may differ from the hotel location.
- Optionally provide the actual nightly lodging cost and any meals that must be deducted.
- When one stop ends on the same date another begins, the arriving stop applies to that date.
Calculation rules
- The calculator selects the GSA rate in effect for each day, including seasonal and fiscal-year changes.
- First and last travel days receive 75% of the M&IE rate; intermediate days receive 100%.
- Submitted meal deductions use the official GSA meal values while preserving the required incidental expense amount.
- Lodging reimbursement is limited to the nightly GSA cap. Any amount above the cap is reported as
overageand is not included in the payable total.
Important notes
- Submit only meals that you have determined must be deducted under FTR 301-11.21.
- Single-day reimbursement applies only when the traveler is in eligible travel status for more than 12 hours.
- If a lodging cost is omitted, the response still shows the nightly cap, but lodging and overall payable totals are
null. - The response includes the calculation version and a source fingerprint to support auditing.
Request body application/json
stops object[]required
Ordered, contiguous TDY-locality stops for the trip.
stops[] object
stops[].location objectrequired
TDY locality for the stop; not merely the hotel location.
stops[].location.zipcode string | null
Five-digit US ZIP or ZIP+4. ZIP+4 is normalized to five digits.
stops[].location.zipcode (anyOf 1) string
stops[].location.zipcode (anyOf 2) null
stops[].location.destination_id integer | null
GSA destination identifier. Destination 0 is Standard CONUS.
stops[].location.destination_id (anyOf 1) integer
stops[].location.destination_id (anyOf 2) null
stops[].arrival_date stringrequired
First calendar date owned by this stop.
stops[].departure_date stringrequired
Shared boundary/return date; the arriving next stop owns a transition date.
stops[].lodging_cost_per_night number | string | null
Optional actual room cost applied to every lodging night in this stop. Must be a JSON number with no more than two decimal places.
stops[].lodging_cost_per_night (anyOf 1) number
stops[].lodging_cost_per_night (anyOf 2) string
stops[].lodging_cost_per_night (anyOf 3) null
deductible_meals object[]
Sparse caller-determined meal deductions, keyed by trip date.
deductible_meals[] object
deductible_meals[].date stringrequired
Inclusive trip date on which meals are deducted.
deductible_meals[].meals string[]required
Non-empty unique breakfast/lunch/dinner deductions for the date.
deductible_meals[].meals[] string
Allowed values: ["breakfast", "lunch", "dinner"]
verification_url boolean
Include deduplicated official GSA verification URLs when true.
Response schema 200
trip objectrequired
Inclusive trip date and day/night counts.
trip.start_date stringrequired
First inclusive trip date.
trip.end_date stringrequired
Final inclusive return date.
trip.days integerrequired
Number of M&IE calendar days.
trip.nights integerrequired
Number of lodging nights.
totals objectrequired
Reconciled totals built from rounded daily components.
totals.lodging_payable string | nullrequired
Sum of payable lodging, or null if any actual is missing.
totals.lodging_payable (anyOf 1) stringrequired
USD amount serialized as a fixed two-decimal string.
totals.lodging_payable (anyOf 2) nullrequired
totals.mie_payable stringrequired
Sum of all rounded daily payable M&IE amounts.
totals.total_payable string | nullrequired
Lodging plus M&IE, or null if any lodging actual is missing.
totals.total_payable (anyOf 1) stringrequired
USD amount serialized as a fixed two-decimal string.
totals.total_payable (anyOf 2) nullrequired
totals.lodging_overage string | nullrequired
Non-payable actual lodging above caps, or null if incomplete.
totals.lodging_overage (anyOf 1) stringrequired
USD amount serialized as a fixed two-decimal string.
totals.lodging_overage (anyOf 2) nullrequired
totals.lodging_actuals_complete booleanrequired
True when every lodging night has an actual cost.
days object[]required
Self-contained daily entitlement audit records.
days[] object
days[].date stringrequired
Calendar date represented by this audit record.
days[].locality objectrequired
TDY locality supplying the date's GSA rate.
days[].locality.destination_id integerrequired
GSA destination ID supplying this date's rate.
days[].locality.name stringrequired
GSA destination display name.
days[].locality.county stringrequired
County or CONUS area associated with the destination.
days[].rate_source string
Government rate source used by this calculator.
days[].fiscal_year integerrequired
GSA fiscal year of the selected per diem row.
days[].per_diem_effective_date stringrequired
Effective date of the selected GSA per diem source row.
days[].mie_breakdown_effective_date stringrequired
Effective date of the selected M&IE breakdown source row.
days[].day_type stringrequired
Day classification controlling M&IE proration.
Allowed values: ["first", "full", "last", "single_day"]
days[].mie objectrequired
M&IE calculation for this date.
days[].mie.full_rate stringrequired
Full daily GSA M&IE rate.
days[].mie.proration_factor numberrequired
0.75 on first/last/single days and 1.0 on full days.
days[].mie.prorated_rate stringrequired
Full rate multiplied by the applicable proration factor.
days[].mie.deducted_meals string[]required
Normalized caller-supplied meals deducted on this date.
days[].mie.deducted_meals[] string
Allowed values: ["breakfast", "lunch", "dinner"]
days[].mie.meal_deductions stringrequired
Sum of the full meal-specific deduction amounts.
days[].mie.payable stringrequired
M&IE payable after deductions and the incidental floor.
days[].mie.breakdown objectrequired
Official meal-specific breakdown used for deductions.
days[].mie.breakdown.breakfast stringrequired
Full breakfast deduction amount.
days[].mie.breakdown.lunch stringrequired
Full lunch deduction amount.
days[].mie.breakdown.dinner stringrequired
Full dinner deduction amount.
days[].mie.breakdown.incidentals stringrequired
Retained incidental-expense amount and payable floor.
days[].lodging objectrequired
Lodging calculation for the night beginning on this date.
days[].lodging.night booleanrequired
Whether an overnight stay begins on this date.
days[].lodging.cap string | null
Applicable GSA room-rate cap for this night.
days[].lodging.cap (anyOf 1) string
USD amount serialized as a fixed two-decimal string.
days[].lodging.cap (anyOf 2) null
days[].lodging.actual string | null
Caller-supplied actual room cost, if available.
days[].lodging.actual (anyOf 1) string
USD amount serialized as a fixed two-decimal string.
days[].lodging.actual (anyOf 2) null
days[].lodging.payable string | null
Actual room cost payable up to the cap.
days[].lodging.payable (anyOf 1) string
USD amount serialized as a fixed two-decimal string.
days[].lodging.payable (anyOf 2) null
days[].lodging.overage string | null
Actual nightly room cost above the GSA lodging cap. This amount is not included in lodging_payable or total_payable.
days[].lodging.overage (anyOf 1) string
USD amount serialized as a fixed two-decimal string.
days[].lodging.overage (anyOf 2) null
notes string[]required
Calculation-specific qualifications; empty for ordinary trips.
notes[] string
verification_urls object[] | null
Deduplicated official URLs, omitted unless requested.
verification_urls (anyOf 1) object[]
verification_urls (anyOf 1)[] object
verification_urls (anyOf 1)[].type stringrequired
Source page represented by the URL.
Allowed values: ["per_diem", "mie_breakdown"]
verification_urls (anyOf 1)[].url stringrequired
Official GSA source URL.
verification_urls (anyOf 1)[].destination_id integer | null
Destination represented by a per-diem URL.
verification_urls (anyOf 1)[].destination_id (anyOf 1) integer
verification_urls (anyOf 1)[].destination_id (anyOf 2) null
verification_urls (anyOf 1)[].fiscal_year integer | null
Fiscal year represented by a per-diem URL.
verification_urls (anyOf 1)[].fiscal_year (anyOf 1) integer
verification_urls (anyOf 1)[].fiscal_year (anyOf 2) null
verification_urls (anyOf 2) null
calculation_version stringrequired
Version identifier for result-affecting calculator rules.
source_fingerprint stringrequired
SHA-256 fingerprint of distinct source values used; not a snapshot ID.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X POST https://api.allowancesapi.com/v1/gsa/calc/perdiem/trip \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
--data '{"ambiguous_zip": {"summary": "Ambiguous ZIP returns candidates", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-12", "location": {"zipcode": "01366"}}]}}, "basic_complete_trip": {"summary": "Basic trip with complete lodging actuals", "value": {"stops": [{"arrival_date": "2026-10-01", "departure_date": "2026-10-03", "location": {"zipcode": "20001"}, "lodging_cost_per_night": 250}], "verification_url": true}}, "destination_retry": {"summary": "Retry an ambiguous ZIP with the selected destination", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-12", "location": {"destination_id": 160, "zipcode": "01366"}}]}}, "incidental_floor": {"summary": "All meal deductions trigger the incidental floor", "value": {"deductible_meals": [{"date": "2026-07-10", "meals": ["breakfast", "lunch", "dinner"]}], "stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-10", "location": {"destination_id": 75}}]}}, "lodging_caps_only": {"summary": "Omitted lodging actuals return caps and null lodging totals", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-12", "location": {"destination_id": 75}}]}}, "multi_stop_transition": {"summary": "The arriving stop owns the shared transition date", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-11", "location": {"destination_id": 75}, "lodging_cost_per_night": 200}, {"arrival_date": "2026-07-11", "departure_date": "2026-07-12", "location": {"destination_id": 160}, "lodging_cost_per_night": 150}]}}, "single_day": {"summary": "Conditional single-day subsistence calculation", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-10", "location": {"destination_id": 75}}]}}}'
OPM - General Schedule pay
GET /v1/opm/localities
GS locality pay areas, optionally by county or city
List the locality pay areas of the latest pay year, with the code to use on the pay endpoints. The optional location keeps the areas whose name contains every word, and the areas of the counties and cities with that name. state narrows location to one state and has no effect without it.
County and city names must match exactly, ignoring case; a trailing county is optional. A place outside every listed area returns Rest of U.S. (RUS). Area names keep matching on any word they contain. matched_places lists the counties and cities behind each result. A place name can return several areas: the same name can exist in several states, which state narrows, and a city can span several areas, in which case all of them are returned and the official duty station decides. City data is not published by OPM, so for payroll use /v1/opm/localities/county/{fips}. An empty result does not mean Rest of U.S.: the name may be misspelled, and U.S. territories are not covered.
Parameters 2
location string | null
query parameter
County, city or locality area name.
Example "evanston"
state string | null
query parameter
Restrict location to one state.
Example "AL"
Response schema 200
year integerrequired
Pay year of the results, the latest one loaded.
results object[]required
results[] object
results[].locality_code stringrequired
OPM locality pay area code. It can look like a state code: AL is Albany.
results[].locality_name string | nullrequired
Locality pay area name as published for this pay year; null for the base table GS.
results[].locality_name (anyOf 1) stringrequired
results[].locality_name (anyOf 2) nullrequired
results[].locality_pct number | nullrequired
Locality payment in percent; null for the base table GS.
results[].locality_pct (anyOf 1) numberrequired
results[].locality_pct (anyOf 2) nullrequired
results[].matched_places string[]required
Counties and cities named by location that fall under this area; empty when none did.
results[].matched_places[] string
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/opm/localities \
-H "X-API-Key: YOUR_KEY"
{
"year": 2026,
"results": [
{
"locality_code": "CHI",
"locality_name": "Chicago-Naperville, IL-IN-WI",
"locality_pct": 30.86,
"matched_places": [
"Evanston, IL (city)"
]
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/opm/localities/county/{fips}
GS locality pay area of a county
Return the locality pay area of a county for the latest pay year, using OPM's own definitions. A county that OPM doesn't list under an area falls under Rest of U.S. (RUS), and every county in Alaska or Hawaii returns that state's area. Returns 404 for an unknown code and for a Connecticut planning region, as OPM defines Connecticut by its eight legacy counties. U.S. territories fall under Rest of U.S. in OPM's definitions, but their county codes are not available here and return 404. Burlington County, NJ (34005) returns the Philadelphia area, while three military sites inside it (Fort Dix, Joint Base McGuire-Dix-Lakehurst and McGuire Air Force Base) belong to the New York area.
Parameters 1
fips stringrequired
path parameter
Example "17031"
Response schema 200
year integerrequired
Pay year of the results, the latest one loaded.
results object[]required
results[] object
results[].locality_code stringrequired
OPM locality pay area code. It can look like a state code: AL is Albany.
results[].locality_name string | nullrequired
Locality pay area name as published for this pay year; null for the base table GS.
results[].locality_name (anyOf 1) stringrequired
results[].locality_name (anyOf 2) nullrequired
results[].locality_pct number | nullrequired
Locality payment in percent; null for the base table GS.
results[].locality_pct (anyOf 1) numberrequired
results[].locality_pct (anyOf 2) nullrequired
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/opm/localities/county/17031 \
-H "X-API-Key: YOUR_KEY"
{
"year": 2026,
"results": [
{
"locality_code": "CHI",
"locality_name": "Chicago-Naperville, IL-IN-WI",
"locality_pct": 30.86
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/opm/pay/search
Search GS pay by locality area
Return the latest General Schedule pay tables whose locality area matches every word of q: each word must be contained in the area name, case-insensitively, or equal its code. grade and step narrow the rates; no match returns an empty results list. Matching only looks at OPM's area names, not the counties and towns they cover, so a town missing from the names returns nothing, which does not mean Rest of U.S. Use get_opm_localities to resolve a place to its area.
Parameters 3
q stringrequired
query parameter
Words to find in the locality area name or code, all required, case-insensitive.
Example "chicago"
grade integer | null
query parameter
Return only this GS grade, 1 to 15.
Example 1
step integer | null
query parameter
Return only this step, 1 to 10.
Example 1
Response schema 200
year integerrequired
Pay year of the results, the latest one loaded.
results object[]required
results[] object
results[].locality_code stringrequired
OPM locality pay area code. It can look like a state code: AL is Albany.
results[].locality_name string | nullrequired
Locality pay area name as published for this pay year; null for the base table GS.
results[].locality_name (anyOf 1) stringrequired
results[].locality_name (anyOf 2) nullrequired
results[].locality_pct number | nullrequired
Locality payment in percent; null for the base table GS.
results[].locality_pct (anyOf 1) numberrequired
results[].locality_pct (anyOf 2) nullrequired
results[].rates object[]required
results[].rates[] object
results[].rates[].grade integerrequired
GS grade, 1 to 15.
results[].rates[].step integerrequired
Step within the grade, 1 to 10.
results[].rates[].annual integerrequired
Annual rate in USD.
results[].rates[].hourly numberrequired
Hourly rate in USD.
results[].rates[].overtime numberrequired
Overtime hourly rate in USD.
results[].rates[].capped booleanrequired
True when the rate is limited by the statutory pay cap.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET 'https://api.allowancesapi.com/v1/opm/pay/search?q=chicago' \
-H "X-API-Key: YOUR_KEY"
{
"year": 2026,
"results": [
{
"locality_code": "CHI",
"locality_name": "Chicago-Naperville, IL-IN-WI",
"locality_pct": 30.86,
"rates": [
{
"grade": 9,
"step": 1,
"annual": 68999,
"hourly": 33.06,
"overtime": 49.59,
"capped": false
}
]
}
]
}
Example response. Rates and dates are illustrative.
GET /v1/opm/pay/{locality_code}
GS pay by locality code
Return the latest pay table of a locality pay area, ordered by grade and step, or 404 for an unknown code. grade and step narrow the rates. Use GS for the base table without locality pay, and RUS for Rest of U.S.
Parameters 3
locality_code stringrequired
path parameter
Example "CHI"
grade integer | null
query parameter
Return only this GS grade, 1 to 15.
Example 1
step integer | null
query parameter
Return only this step, 1 to 10.
Example 1
Response schema 200
year integerrequired
Pay year of the results, the latest one loaded.
results object[]required
results[] object
results[].locality_code stringrequired
OPM locality pay area code. It can look like a state code: AL is Albany.
results[].locality_name string | nullrequired
Locality pay area name as published for this pay year; null for the base table GS.
results[].locality_name (anyOf 1) stringrequired
results[].locality_name (anyOf 2) nullrequired
results[].locality_pct number | nullrequired
Locality payment in percent; null for the base table GS.
results[].locality_pct (anyOf 1) numberrequired
results[].locality_pct (anyOf 2) nullrequired
results[].rates object[]required
results[].rates[] object
results[].rates[].grade integerrequired
GS grade, 1 to 15.
results[].rates[].step integerrequired
Step within the grade, 1 to 10.
results[].rates[].annual integerrequired
Annual rate in USD.
results[].rates[].hourly numberrequired
Hourly rate in USD.
results[].rates[].overtime numberrequired
Overtime hourly rate in USD.
results[].rates[].capped booleanrequired
True when the rate is limited by the statutory pay cap.
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/opm/pay/CHI \
-H "X-API-Key: YOUR_KEY"
{
"year": 2026,
"results": [
{
"locality_code": "CHI",
"locality_name": "Chicago-Naperville, IL-IN-WI",
"locality_pct": 30.86,
"rates": [
{
"grade": 9,
"step": 1,
"annual": 68999,
"hourly": 33.06,
"overtime": 49.59,
"capped": false
}
]
}
]
}
Example response. Rates and dates are illustrative.
Metadata
GET /v1/meta/latest
Latest data publications
Returns the most recent data loaded for each source, with its publication date and fiscal year: DSSR allowances and per diem, DTMO CONUS and OCONUS per diem, GSA per diem, mileage, vehicle rates and M&IE breakdowns, FEMA hotels and OPM pay tables. Use it to say how current an answer is. Returns no rates.
Response schema 200
dssr objectrequired
dssr.allowances objectrequired
dssr.allowances.published_date string | null
dssr.allowances.published_date (anyOf 1) string
dssr.allowances.published_date (anyOf 2) null
dssr.allowances.fiscal_year integer | null
dssr.allowances.fiscal_year (anyOf 1) integer
dssr.allowances.fiscal_year (anyOf 2) null
dssr.perdiem objectrequired
dssr.perdiem.published_date string | null
dssr.perdiem.published_date (anyOf 1) string
dssr.perdiem.published_date (anyOf 2) null
dssr.perdiem.fiscal_year integer | null
dssr.perdiem.fiscal_year (anyOf 1) integer
dssr.perdiem.fiscal_year (anyOf 2) null
dtmo objectrequired
dtmo.oconus_perdiem objectrequired
dtmo.oconus_perdiem.published_date string | null
dtmo.oconus_perdiem.published_date (anyOf 1) string
dtmo.oconus_perdiem.published_date (anyOf 2) null
dtmo.oconus_perdiem.fiscal_year integer | null
dtmo.oconus_perdiem.fiscal_year (anyOf 1) integer
dtmo.oconus_perdiem.fiscal_year (anyOf 2) null
dtmo.conus_perdiem objectrequired
dtmo.conus_perdiem.published_date string | null
dtmo.conus_perdiem.published_date (anyOf 1) string
dtmo.conus_perdiem.published_date (anyOf 2) null
dtmo.conus_perdiem.fiscal_year integer | null
dtmo.conus_perdiem.fiscal_year (anyOf 1) integer
dtmo.conus_perdiem.fiscal_year (anyOf 2) null
gsa objectrequired
gsa.conus_perdiem objectrequired
gsa.conus_perdiem.published_date string | null
gsa.conus_perdiem.published_date (anyOf 1) string
gsa.conus_perdiem.published_date (anyOf 2) null
gsa.conus_perdiem.fiscal_year integer | null
gsa.conus_perdiem.fiscal_year (anyOf 1) integer
gsa.conus_perdiem.fiscal_year (anyOf 2) null
gsa.mileage objectrequired
gsa.mileage.published_date string | null
gsa.mileage.published_date (anyOf 1) string
gsa.mileage.published_date (anyOf 2) null
gsa.mileage.fiscal_year integer | null
gsa.mileage.fiscal_year (anyOf 1) integer
gsa.mileage.fiscal_year (anyOf 2) null
gsa.vehicle_rates objectrequired
gsa.vehicle_rates.published_date string | null
gsa.vehicle_rates.published_date (anyOf 1) string
gsa.vehicle_rates.published_date (anyOf 2) null
gsa.vehicle_rates.fiscal_year integer | null
gsa.vehicle_rates.fiscal_year (anyOf 1) integer
gsa.vehicle_rates.fiscal_year (anyOf 2) null
gsa.mie_breakdown objectrequired
gsa.mie_breakdown.published_date string | null
gsa.mie_breakdown.published_date (anyOf 1) string
gsa.mie_breakdown.published_date (anyOf 2) null
gsa.mie_breakdown.fiscal_year integer | null
gsa.mie_breakdown.fiscal_year (anyOf 1) integer
gsa.mie_breakdown.fiscal_year (anyOf 2) null
fema objectrequired
fema.hotels objectrequired
fema.hotels.published_date string | null
fema.hotels.published_date (anyOf 1) string
fema.hotels.published_date (anyOf 2) null
fema.hotels.fiscal_year integer | null
fema.hotels.fiscal_year (anyOf 1) integer
fema.hotels.fiscal_year (anyOf 2) null
opm objectrequired
opm.pay_tables objectrequired
opm.pay_tables.published_date string | null
opm.pay_tables.published_date (anyOf 1) string
opm.pay_tables.published_date (anyOf 2) null
opm.pay_tables.fiscal_year integer | null
opm.pay_tables.fiscal_year (anyOf 1) integer
opm.pay_tables.fiscal_year (anyOf 2) null
Other responses
400
Bad Request
401
Unauthorized — Missing or invalid API key.
403
Forbidden — Insufficient permissions.
404
Not Found
422
Validation Error
429
Too Many Requests — Rate limit exceeded.
500
Internal Server Error
curl -X GET https://api.allowancesapi.com/v1/meta/latest \
-H "X-API-Key: YOUR_KEY"
User
GET /v1/me
Get User
Returns the account behind the API key: plan, monthly request limit, requests used in the current billing period, and the period start, end and renewal date. Use it to explain a quota or plan error or to check remaining requests. This call does not count against the quota.
Response schema 200
(body) object
curl -X GET https://api.allowancesapi.com/v1/me \
-H "X-API-Key: YOUR_KEY"
Response to GET /v1/me with a Pro account's X-API-Key. The request does not consume the account's query quota. monthly_queries_limit is returned as a string when configured through the environment.
{
"user_id": 123,
"user_email": "developer@example.com",
"active_plan": "pro",
"renewal_date": "2026/11/01",
"period_start": "2026-10-01T00:00:00+00:00",
"period_end": "2026-11-01T00:00:00+00:00",
"monthly_queries_limit": "5000",
"used_queries": 127,
"status": "ok"
}
Example response. Rates and dates are illustrative.
MCP server & tools
AI agents and MCP clients can call every /v1/ endpoint of this API as a tool through the Streamable HTTP MCP server at https://mcp.allowancesapi.com/mcp. Initialization and tool discovery need no credentials. Tool calls need either an OAuth 2.1 sign-in with an Allowances API account (Claude, Claude Code and ChatGPT: a credential-less tool call is answered with HTTP 401 and the protected-resource metadata, see /mcp-server) or the X-API-Key header on the MCP connection; keys are never passed as tool arguments. Each tool call follows the authentication, date, plan and quota rules of the endpoint it wraps. Rate tools return verification_url, a link to the official government table for the returned location and date, unless called with verification_url=false. The tool catalogue is published in the x-mcp extension of this OpenAPI document and listed below, grouped like the endpoints.
U.S. government travel per diem and overseas allowances from the official GSA, DTMO and State Department (DSSR) tables, in USD per day.
Choosing a source. GSA tools: per diem inside the continental U.S. for civilian federal travel, by state and city or ZIP. DTMO tools: Department of Defense rates; OCONUS covers foreign countries plus Alaska, Hawaii and U.S. territories, CONUS covers the states. Use DTMO for military, DoD and defense-contractor travel. DSSR tools: State Department rates for civilian U.S. government employees abroad: per diem, COLA, hardship, danger pay, LQA, TQSA, education. If the traveller's agency is unknown, use GSA for CONUS and DSSR abroad, and say which source you used. FedRooms lists worldwide participating hotels, without prices. FEMA tools answer a different question: whether a lodging property is on FEMA's Hotel and Motel National Master List (Fire Safety Act compliance), by FEMA ID, ZIP, state and city, or a free-text search; they return no rates.
Finding a location. search_perdiem (DSSR) and search_dtmo_perdiem (DTMO) take a city or country name of at least three characters. Other tools need an ISO alpha-2 country code or a US-XX state code; get_countries and the locations tools resolve names.
Dates. Omit date for today's rates. A date returns the rates in force on that day; DTMO also accepts a fiscal year (Oct 1 to Sep 30). Each result row carries its own effective_date and season; the top-level effective_date is the publication period. Historical dates depend on the plan; a 403 states the restriction. Plan and quota errors are final: relay them, do not retry.
maximum_perdiem is lodging plus meals and incidentals. Rate results include verification_url, a link to the official government table for that location and date; give it to the user to confirm the figures (verification_url=false omits it).
Tool calls need an account sign-in or an X-API-Key header; free Sandbox keys: https://www.allowancesapi.com/register
For setup steps, example prompts, and result verification, read how to connect an AI assistant to government travel rates.
https://mcp.allowancesapi.com/mcp ↗
MCP - DSSR - OCONUS locations
TOOLREAD-ONLY get_allowances
DSSR allowances by country
Returns State Department (DSSR) allowance rates for every post in a country: cost-of-living (COLA), hardship differential, living quarters (LQA), danger pay and education allowances, plus each post's per diem, in force today or on date. type limits the result to some allowances. For one post use get_allowances_by_location or get_allowances_by_postcode; for Department of Defense rates use the DTMO tools.
Input schema
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
type string[]
Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.
Allowed values: ["cola", "hardship", "lqa", "danger_pay", "education"]
type[] string
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"type": {
"type": "array",
"items": {
"type": "string"
},
"title": "Allowance type",
"description": "Filter returned allowances. Unknown values are ignored.<br/>If not specified, all allowances are returned.<br/>Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.<br/>Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.",
"enum": [
"cola",
"hardship",
"lqa",
"danger_pay",
"education"
]
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
},
"required": [
"country_iso_code"
]
}
TOOLREAD-ONLY get_allowances_by_location
DSSR allowances by location name
Returns DSSR allowances (COLA, hardship, LQA, danger pay, education, per diem) for one post in a country matched by name, case-insensitive and partial ('toky' finds Tokyo), today or on date. Find exact post names with get_dssr_locations_by_country or search_perdiem. Use get_allowances_by_postcode when the DSSR post code is known, get_allowances for every post in the country.
Input schema
location stringrequired
Location name, case insensitive
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
type string[]
Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.
Allowed values: ["cola", "hardship", "lqa", "danger_pay", "education"]
type[] string
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Location name, case insensitive",
"openapi_examples": {
"adelaide": {
"summary": "Adelaide, Australia",
"value": "Adelaide"
},
"tokyo": {
"summary": "Tokyo, Japan (lowercase)",
"value": "tokyo"
},
"partial": {
"summary": "Tokyo, Japan (partial)",
"value": "toky"
}
},
"title": "Location"
},
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"type": {
"type": "array",
"items": {
"type": "string"
},
"title": "Allowance type",
"description": "Filter returned allowances. Unknown values are ignored.<br/>If not specified, all allowances are returned.<br/>Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.<br/>Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.",
"enum": [
"cola",
"hardship",
"lqa",
"danger_pay",
"education"
]
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
},
"required": [
"location",
"country_iso_code"
]
}
TOOLREAD-ONLY get_allowances_by_postcode
DSSR allowances by location post code
Returns DSSR allowances (COLA, hardship, LQA, danger pay, education, per diem) for the post identified by its five-digit DSSR post code, today or on date. Post codes are the State Department's own identifiers and come back in every DSSR result, so this is the most precise lookup. Use get_allowances_by_location for a name, get_allowances for the whole country.
Input schema
postcode integerrequired
5-digit DSSR post code (no zero-padding)
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
type string[]
Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.
Allowed values: ["cola", "hardship", "lqa", "danger_pay", "education"]
type[] string
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"postcode": {
"type": "integer",
"maximum": 99999,
"minimum": 10000,
"title": "DSSR post code",
"description": "5-digit DSSR post code (no zero-padding)"
},
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"type": {
"type": "array",
"items": {
"type": "string"
},
"title": "Allowance type",
"description": "Filter returned allowances. Unknown values are ignored.<br/>If not specified, all allowances are returned.<br/>Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.<br/>Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.",
"enum": [
"cola",
"hardship",
"lqa",
"danger_pay",
"education"
]
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
},
"required": [
"postcode",
"country_iso_code"
]
}
TOOLREAD-ONLY search_perdiem
Search DSSR per diem by name
Finds DSSR per diem by a partial, case-insensitive country or post name of at least three characters, with no country code needed. Returns lodging, M&IE and maximum per diem per matching post, today or on date, with the post code for precise follow-up lookups. A name that matches nothing is a 404 error, not an empty list. Once the ISO code is known, the country tools are more precise.
Input schema
q stringrequired
Required case-insensitive substring of a location or country name; at least three characters after trimming.
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 3,
"description": "Required case-insensitive substring of a location or country name; at least three characters after trimming.",
"title": "Q"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
}
},
"required": [
"q"
]
}
TOOLREAD-ONLY get_perdiem_allowance
DSSR per diem by country
Returns State Department (DSSR) per diem for every post in a country: lodging, M&IE and maximum per diem in USD per day, today or on date. For one post use get_perdiem_allowance_by_location or get_perdiem_allowance_by_postcode; for a place name without a country code use search_perdiem. For Department of Defense travel use get_dtmo_perdiem_oconus.
Input schema
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
},
"required": [
"country_iso_code"
]
}
TOOLREAD-ONLY get_perdiem_allowance_by_location
DSSR per diem by location name
Returns DSSR per diem (lodging, M&IE and maximum per diem in USD per day) for one post in a country matched by name, case-insensitive and partial, today or on date. Find exact post names with get_dssr_locations_by_country or search_perdiem. Use get_perdiem_allowance for the whole country, get_perdiem_allowance_by_postcode for a known post code.
Input schema
location stringrequired
Location name, case insensitive
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Location name, case insensitive",
"openapi_examples": {
"adelaide": {
"summary": "Adelaide, Australia",
"value": "Adelaide"
},
"tokyo": {
"summary": "Tokyo, Japan (lowercase)",
"value": "tokyo"
},
"partial": {
"summary": "Tokyo, Japan (partial)",
"value": "toky"
}
},
"title": "Location"
},
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
},
"required": [
"location",
"country_iso_code"
]
}
TOOLREAD-ONLY get_perdiem_allowance_by_postcode
DSSR per diem by location post code
Returns DSSR per diem (lodging, M&IE and maximum per diem in USD per day) for the post identified by its five-digit DSSR post code, today or on date. Every DSSR result carries the post code, so use it for follow-up lookups. Use get_perdiem_allowance_by_location for a name, get_perdiem_allowance for the whole country.
Input schema
postcode integerrequired
5-digit DSSR post code (no zero-padding)
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"postcode": {
"type": "integer",
"maximum": 99999,
"minimum": 10000,
"title": "DSSR post code",
"description": "5-digit DSSR post code (no zero-padding)"
},
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
},
"required": [
"postcode",
"country_iso_code"
]
}
TOOLREAD-ONLY get_dssr_locations
List DSSR posts
Returns a paginated list of every DSSR post with its country, ISO code and post name; q filters by case-insensitive substring. total counts every match regardless of offset and limit. Use it to find the exact post name for the by-location tools when the country is unknown; get_dssr_locations_by_country is shorter when it is known. Returns no rates.
Input schema
q string | null
Search by name
q (anyOf 1) string
q (anyOf 2) null
offset integer
limit integer
{
"type": "object",
"properties": {
"q": {
"anyOf": [
{
"type": "string",
"minLength": 2
},
{
"type": "null"
}
],
"description": "Search by name",
"title": "Q"
},
"offset": {
"type": "integer",
"default": 0,
"title": "Offset"
},
"limit": {
"type": "integer",
"maximum": 20,
"default": 10,
"title": "Limit"
}
}
}
TOOLREAD-ONLY get_countries
Find country code and posts
Resolves a country name to its ISO alpha-2 code and lists the names of its DSSR posts; q matches the country name case-insensitively ('papua' finds PG). Use it before any tool that needs a country code. ZZ stands for Other Foreign Localities, not a country. Returns no rates.
Input schema
q string | null
Search by country name
q (anyOf 1) string
q (anyOf 2) null
offset integer
limit integer
{
"type": "object",
"properties": {
"q": {
"anyOf": [
{
"type": "string",
"minLength": 2
},
{
"type": "null"
}
],
"description": "Search by country name",
"title": "Q"
},
"offset": {
"type": "integer",
"default": 0,
"title": "Offset"
},
"limit": {
"type": "integer",
"maximum": 300,
"default": 20,
"title": "Limit"
}
}
}
TOOLREAD-ONLY get_country
Country by ISO code
Returns one country by ISO alpha-2 code: its name, the names of its DSSR posts and State Department notes. Use get_countries to find the code from a name, and get_dssr_locations_by_country when the post codes are needed too. Returns no rates.
Input schema
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
{
"type": "object",
"properties": {
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
}
},
"required": [
"country_iso_code"
]
}
TOOLREAD-ONLY get_dssr_locations_by_country
DSSR posts in a country
Returns the DSSR posts of a country by ISO alpha-2 code, each with its name and five-digit post code (external_id), as needed by the by-location and by-postcode tools. Use get_countries to resolve a name to the code. Returns no rates.
Input schema
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
{
"type": "object",
"properties": {
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
}
},
"required": [
"country_iso_code"
]
}
TOOLREAD-ONLY cola_calculator_by_postcode
DSSR COLA calculator
Calculates the DSSR cost-of-living allowance (COLA) for a post: the COLA rate in percent and the annual and biweekly USD amounts for the given base salary and family size, today or on date. The post is identified by its five-digit DSSR post code (see get_dssr_locations_by_country). Use get_allowances for the COLA rate alone.
Input schema
postcode integerrequired
5-digit DSSR post code (no zero-padding)
family_size integerrequired
The number of family members, including the FS/DoS employee/contractor
base_salary integerrequired
Basic annual salary, excluding U.S. locality pay; including Overseas Comparability Pay.
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"postcode": {
"type": "integer",
"maximum": 99999,
"minimum": 10000,
"title": "DSSR post code",
"description": "5-digit DSSR post code (no zero-padding)"
},
"family_size": {
"type": "integer",
"minimum": 1,
"description": "The number of family members, including the FS/DoS employee/contractor",
"title": "Family Size"
},
"base_salary": {
"type": "integer",
"minimum": 1000,
"description": "Basic annual salary, excluding U.S. locality pay; including Overseas Comparability Pay.",
"title": "Base Salary"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
}
},
"required": [
"postcode",
"family_size",
"base_salary"
]
}
MCP - DTMO - Mil. CONUS/OCONUS
TOOLREAD-ONLY get_dtmo_perdiem_conus
DTMO CONUS per diem by state
Department of Defense per diem for the continental U.S. by state code (e.g. 'TX'); Alaska, Hawaii and the territories are served by the OCONUS endpoint. Returns lodging, local and proportional meal rates, incidentals and the maximum per diem (lodging + meals + incidentals) per season. q filters by location name. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.
Input schema
state_iso stringrequired
US state code: US- followed by the postal abbreviation, e.g. US-CA for California.
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
year integer
A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
q string | null
Search by location name or state/country name
q (anyOf 1) string
q (anyOf 2) null
offset integer
limit integer
{
"type": "object",
"properties": {
"state_iso": {
"type": "string",
"description": "US state code: US- followed by the postal abbreviation, e.g. US-CA for California.",
"examples": [
"US-AL",
"US-CA"
],
"title": "State Iso"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"year": {
"type": "integer",
"description": "A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"openapi_examples": {
"recent": {
"value": 2026
},
"historic": {
"value": 2005
}
},
"title": "Year"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
},
"q": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 3,
"description": "Search by location name or state/country name",
"title": "Q"
},
"offset": {
"type": "integer",
"default": 0,
"title": "Offset"
},
"limit": {
"type": "integer",
"default": 50,
"title": "Limit"
}
},
"required": [
"state_iso"
]
}
TOOLREAD-ONLY get_dtmo_perdiem_oconus
DTMO OCONUS per diem by country
Department of Defense per diem outside the continental U.S.: foreign countries by ISO alpha-2 code (e.g. 'PG'), and Alaska, Hawaii and U.S. territories by 'US-XX' code. Returns lodging, local and proportional meal rates, incidentals and the maximum per diem (lodging + meals + incidentals) per season. q filters by location name. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.
Input schema
oconus_iso_code stringrequired
Foreign country ISO 3166-1 alpha-2 code (e.g. BE), or one of the OCONUS state codes US-AK, US-HI, US-PR, US-GU, US-VI, US-AS, US-MP, US-UM. Resolve a country name to its code with get_countries (q=name).
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
year integer
A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
q string | null
Search by location name or state/country name
q (anyOf 1) string
q (anyOf 2) null
offset integer
limit integer
{
"type": "object",
"properties": {
"oconus_iso_code": {
"type": "string",
"description": "Foreign country ISO 3166-1 alpha-2 code (e.g. BE), or one of the OCONUS state codes US-AK, US-HI, US-PR, US-GU, US-VI, US-AS, US-MP, US-UM. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"US-AK",
"BE"
],
"title": "Oconus Iso Code"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"year": {
"type": "integer",
"description": "A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"openapi_examples": {
"recent": {
"value": 2026
},
"historic": {
"value": 2005
}
},
"title": "Year"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
},
"q": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 3,
"description": "Search by location name or state/country name",
"title": "Q"
},
"offset": {
"type": "integer",
"default": 0,
"title": "Offset"
},
"limit": {
"type": "integer",
"default": 50,
"title": "Limit"
}
},
"required": [
"oconus_iso_code"
]
}
TOOLREAD-ONLY search_dtmo_perdiem
Search DTMO per diem by name
Finds Department of Defense per diem by location name ('Kabul') or country or state name ('Afghanistan'), across CONUS and OCONUS, with no code needed. Returns lodging, local and proportional meal rates, incidentals and maximum per diem per matching location and season. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.
Input schema
q string | null
Search by location name or state/country name
q (anyOf 1) string
q (anyOf 2) null
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
year integer
A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"q": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 3,
"description": "Search by location name or state/country name",
"title": "Q"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"year": {
"type": "integer",
"description": "A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"openapi_examples": {
"recent": {
"value": 2026
},
"historic": {
"value": 2005
}
},
"title": "Year"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
}
}
TOOLREAD-ONLY get_dtmo_conus_locations
DTMO CONUS locations by state
Returns the DTMO per diem locations of a US state (US-XX code) with location name and county, as named in the Department of Defense CONUS table. Use it to find the name for the q filter of get_dtmo_perdiem_conus. Returns no rates. For other countries, Alaska, Hawaii and territories use get_dtmo_oconus_locations.
Input schema
state_iso stringrequired
US state code: US- followed by the postal abbreviation, e.g. US-CA for California.
{
"type": "object",
"properties": {
"state_iso": {
"type": "string",
"description": "US state code: US- followed by the postal abbreviation, e.g. US-CA for California.",
"examples": [
"US-AL",
"US-CA"
],
"title": "State Iso"
}
},
"required": [
"state_iso"
]
}
TOOLREAD-ONLY get_dtmo_oconus_locations
DTMO OCONUS locations by country
Returns the DTMO per diem locations of a country by ISO alpha-2 code ('AU', 'BE'), as named in the Department of Defense OCONUS table. location filters by case-insensitive substring, taken literally (no wildcards); no match returns an empty list. Use the names for the q filter of get_dtmo_perdiem_oconus. Returns no rates.
Input schema
country_iso_code stringrequired
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
location string | null
Filter by location name
location (anyOf 1) string
location (anyOf 2) null
{
"type": "object",
"properties": {
"country_iso_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
],
"title": "Country Iso Code"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Filter by location name",
"title": "Location"
}
},
"required": [
"country_iso_code"
]
}
MCP - FEMA - Fire-safe lodging
TOOLREAD-ONLY search_fema_hotels
Search FEMA-listed properties by name and town
Searches FEMA's Hotel and Motel National Master List (fire-safe lodging, required for reimbursed federal travel) by property name and city: every word of q must appear as a plain substring of the name or city, with no fuzzy matching. state narrows to one state; paginated with offset, limit (up to 200) and total. Returns FEMA ID, address, phone and property details, no rates: pair with GSA per diem for the lodging cap.
Input schema
q stringrequired
Words to find in the property name or city, all required, case-insensitive.
state string | null
Restrict the search to one state or territory.
state (anyOf 1) string
2-digits US State ISO Code, format XX
state (anyOf 2) null
offset integer
Number of properties to skip.
limit integer
Properties per page, 200 at most.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 3,
"description": "Words to find in the property name or city, all required, case-insensitive.",
"examples": [
"mint house alexandria"
],
"title": "Q"
},
"state": {
"anyOf": [
{
"type": "string",
"description": "2-digits US State ISO Code, format XX",
"examples": [
"AL",
"CA"
]
},
{
"type": "null"
}
],
"description": "Restrict the search to one state or territory.",
"title": "State"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of properties to skip.",
"default": 0,
"title": "Offset"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Properties per page, 200 at most.",
"default": 50,
"title": "Limit"
}
},
"required": [
"q"
]
}
TOOLREAD-ONLY get_fema_hotel_by_id
FEMA-listed property by FEMA ID
Returns one property on FEMA's Hotel and Motel National Master List by FEMA ID, or a 404 error when the ID is not listed: name, address, phone, property type, stories and sprinklers, with as_of the date of the list snapshot. Use it to confirm a hotel is fire-safe for reimbursed federal lodging. No rates.
Input schema
fema_id stringrequired
FEMA ID of the property as printed on the Hotel and Motel National Master List, two letters followed by digits. Case-insensitive.
{
"type": "object",
"properties": {
"fema_id": {
"type": "string",
"description": "FEMA ID of the property as printed on the Hotel and Motel National Master List, two letters followed by digits. Case-insensitive.",
"examples": [
"VA6026"
],
"title": "Fema Id"
}
},
"required": [
"fema_id"
]
}
TOOLREAD-ONLY get_fema_hotels_by_zipcode
FEMA-listed properties by ZIP code
Returns every property on FEMA's Hotel and Motel National Master List in a US ZIP code (five digits or ZIP+4), ordered by name, with FEMA ID, address and property details. A known ZIP with no listed property returns an empty list, an unknown ZIP a 404 error. Fire-safe lodging is required for reimbursed federal travel; no rates, pair with get_gsa_perdiem_by_zipcode.
Input schema
zipcode stringrequired
US ZIP (12345) or ZIP+4 (12345-6789)
{
"type": "object",
"properties": {
"zipcode": {
"type": "string",
"description": "US ZIP (12345) or ZIP+4 (12345-6789)",
"openapi_examples": {
"normal": {
"summary": "Five digits postcode",
"value": "12084"
},
"zip_plus_four": {
"summary": "Zip+4 format",
"value": "12084-1234"
}
},
"title": "Zipcode"
}
},
"required": [
"zipcode"
]
}
TOOLREAD-ONLY get_fema_hotels_by_state_city
FEMA-listed hotels by state and city
Returns the properties on FEMA's Hotel and Motel National Master List in a US state, optionally narrowed by a partial, case-insensitive city ('york' matches New York and Yorktown), ordered by city then name and paginated with offset, limit (up to 200) and total. Covers the 50 states, DC and the territories FEMA lists. Returns FEMA ID, address and property details, no rates.
Input schema
state_iso stringrequired
2-digits US State ISO Code, format XX
city string | null
Case-insensitive partial match on the city name.
city (anyOf 1) string
city (anyOf 2) null
offset integer
Number of properties to skip.
limit integer
Properties per page, 200 at most.
{
"type": "object",
"properties": {
"state_iso": {
"type": "string",
"description": "2-digits US State ISO Code, format XX",
"examples": [
"AL",
"CA"
],
"title": "State Iso"
},
"city": {
"anyOf": [
{
"type": "string",
"minLength": 2
},
{
"type": "null"
}
],
"description": "Case-insensitive partial match on the city name.",
"examples": [
"Alexandria"
],
"title": "City"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of properties to skip.",
"default": 0,
"title": "Offset"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Properties per page, 200 at most.",
"default": 50,
"title": "Limit"
}
},
"required": [
"state_iso"
]
}
MCP - GSA - per diem, mileage, fleet and airfare
TOOLREAD-ONLY get_gsa_perdiem_by_destination
GSA per diem rate by destination
Returns the GSA per diem of one GSA destination rate area (a city, county, metro area or the Standard CONUS area, ID 0) in effect today or on date: the seasonal lodging rate and daily M&IE in USD. Destination IDs come from get_destinations or any GSA per diem result. When the ID is unknown use get_gsa_perdiem_by_zipcode or get_gsa_perdiem_by_state.
Input schema
destination_id integerrequired
GSA's numeric identifier for a rate area. Retrieve valid IDs from GET /v1/gsa/destinations; ID 0 is the Standard CONUS rate.
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"destination_id": {
"type": "integer",
"description": "GSA's numeric identifier for a rate area. Retrieve valid IDs from \`GET /v1/gsa/destinations\`; ID 0 is the Standard CONUS rate.",
"title": "Destination Id"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"verification_url": {
"type": "boolean",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true,
"title": "Verification Url"
}
},
"required": [
"destination_id"
]
}
TOOLREAD-ONLY get_gsa_perdiem_by_state
GSA per diem rates by state and date
Returns every GSA destination rate in a US state (US-XX) in effect today or on date: seasonal lodging and daily M&IE in USD per destination, with its county. location filters by destination or defined-area name, case-insensitive and partial. A state with no non-standard destination returns the Standard CONUS rate. CONUS only: for Alaska, Hawaii, territories and abroad use the DTMO or DSSR tools.
Input schema
state_iso stringrequired
Two-letter US postal abbreviation for the state or District of Columbia.
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
location string | null
Optional case-insensitive partial match against the GSA destination name or location-defined name.
location (anyOf 1) string
location (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"state_iso": {
"type": "string",
"description": "Two-letter US postal abbreviation for the state or District of Columbia.",
"title": "State Iso"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional case-insensitive partial match against the GSA destination name or location-defined name.",
"title": "Location"
},
"verification_url": {
"type": "boolean",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true,
"title": "Verification Url"
}
},
"required": [
"state_iso"
]
}
TOOLREAD-ONLY get_gsa_perdiem_by_state_year
GSA per diem rates by state and fiscal year
Return every GSA destination rate in a US state (US-XX) for a US fiscal year (October 1 to September 30): the lodging rate for every month and the daily M&IE rate per destination. The optional location filters destinations by GSA destination or defined-area name, case-insensitive and partial. Set verification_url=true to include the official GSA state lookup URL. Use get_gsa_perdiem_by_state for the rate on one date.
Input schema
state_iso stringrequired
Two-letter US postal abbreviation for the state or District of Columbia.
year integerrequired
Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
location string | null
Optional case-insensitive partial match against the GSA destination name or location-defined name.
location (anyOf 1) string
location (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"state_iso": {
"type": "string",
"description": "Two-letter US postal abbreviation for the state or District of Columbia.",
"title": "State Iso"
},
"year": {
"type": "integer",
"description": "Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Year"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional case-insensitive partial match against the GSA destination name or location-defined name.",
"title": "Location"
},
"verification_url": {
"type": "boolean",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true,
"title": "Verification Url"
}
},
"required": [
"state_iso",
"year"
]
}
TOOLREAD-ONLY get_gsa_perdiem_by_zipcode
GSA per diem rates by ZIP code and date
Returns the GSA per diem for a US ZIP code (five digits or ZIP+4) in effect today or on date: seasonal lodging and daily M&IE in USD. A ZIP can map to several destinations; then every rate is returned with its county and none is chosen for you. A ZIP with no non-standard destination returns the Standard CONUS rate. Use get_gsa_perdiem_by_zipcode_year for a whole fiscal year.
Input schema
zipcode stringrequired
Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"zipcode": {
"type": "string",
"description": "Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.",
"title": "Zipcode"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"verification_url": {
"type": "boolean",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true,
"title": "Verification Url"
}
},
"required": [
"zipcode"
]
}
TOOLREAD-ONLY get_gsa_perdiem_by_zipcode_year
GSA per diem rates by ZIP code and fiscal year
Returns the GSA lodging rate for every month of a US fiscal year (October 1 to September 30) and the daily M&IE, in USD, for a US ZIP code (five digits or ZIP+4). A ZIP can map to several destinations; then every rate is returned with its county and none is chosen for you. A ZIP with no non-standard destination returns the Standard CONUS rate. Use get_gsa_perdiem_by_zipcode for the rate on one date.
Input schema
zipcode stringrequired
Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.
year integerrequired
Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"zipcode": {
"type": "string",
"description": "Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.",
"title": "Zipcode"
},
"year": {
"type": "integer",
"description": "Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Year"
},
"verification_url": {
"type": "boolean",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true,
"title": "Verification Url"
}
},
"required": [
"zipcode",
"year"
]
}
TOOLREAD-ONLY get_zipcode
ZIP code metadata
Returns the state or states a US ZIP code (five digits or ZIP+4) belongs to; a ZIP that crosses a state line returns every state. Metadata only, no rates: use get_gsa_perdiem_by_zipcode for per diem. Send ZIPs as strings so leading zeros survive.
Input schema
zipcode stringrequired
US ZIP (12345) or ZIP+4 (12345-6789)
{
"type": "object",
"properties": {
"zipcode": {
"type": "string",
"description": "US ZIP (12345) or ZIP+4 (12345-6789)",
"openapi_examples": {
"normal": {
"summary": "Five digits postcode",
"value": "12084"
},
"zip_plus_four": {
"summary": "Zip+4 format",
"value": "12084-1234"
}
},
"title": "Zipcode"
}
},
"required": [
"zipcode"
]
}
TOOLREAD-ONLY get_destination_by_id
Get GSA destination metadata by ID
Returns the metadata of one GSA destination rate area by numeric ID: GSA's display name, the defined geographic scope, county and state. ID 0 is the Standard CONUS area. No rates: use get_gsa_perdiem_by_destination for the rate on a date and get_destinations to browse IDs.
Input schema
destination_id integerrequired
GSA's numeric identifier for a destination rate area. Retrieve valid IDs from GET /v1/gsa/destinations; ID 0 is Standard CONUS.
{
"type": "object",
"properties": {
"destination_id": {
"type": "integer",
"description": "GSA's numeric identifier for a destination rate area. Retrieve valid IDs from \`GET /v1/gsa/destinations\`; ID 0 is Standard CONUS.",
"title": "Destination Id"
}
},
"required": [
"destination_id"
]
}
TOOLREAD-ONLY get_destinations
List GSA destinations
Returns the paginated list of every GSA destination rate area with its numeric ID, display name, defined scope, county and state, ordered by ID (offset, limit; past the end is an empty list). Use the ID with get_gsa_perdiem_by_destination or calculate_trip_per_diem. No rates; a ZIP or state lookup is usually faster than browsing.
Input schema
offset integer
Number of destination records to skip before returning results.
limit integer
Maximum number of destinations to return. The maximum is 200.
{
"type": "object",
"properties": {
"offset": {
"type": "integer",
"description": "Number of destination records to skip before returning results.",
"default": 0,
"title": "Offset"
},
"limit": {
"type": "integer",
"maximum": 200,
"description": "Maximum number of destinations to return. The maximum is 200.",
"default": 100,
"title": "Limit"
}
}
}
TOOLREAD-ONLY get_city_pair_locations
City Pair airport and city codes
Returns the airport or metropolitan codes GSA uses in City Pair airfare awards for the fiscal year of date (today by default), with city, state and country. GSA decides whether a city uses airport codes (DCA, IAD) or a metro code (WAS), so resolve codes here before get_city_pairs. q (3+ characters) matches a code exactly or a city or country name by substring. Fiscal years other than the current one depend on the plan.
Input schema
q string | null
Match a code exactly or a city/country name by substring; case-insensitive. Omit to list every code of the fiscal year.
q (anyOf 1) string
q (anyOf 2) null
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"q": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 3,
"description": "Match a code exactly or a city/country name by substring; case-insensitive. Omit to list every code of the fiscal year.",
"examples": [
"washington",
"LON"
],
"title": "Q"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
}
}
}
TOOLREAD-ONLY get_city_pairs
City Pair contract airfares
Returns GSA City Pair Program contract airfares between two codes (see get_city_pair_locations) on date, today by default: every matching award with airline, service and one-way USD fares by category (YCA, CA, business and others; null means not offered), valid in either direction. Government contract prices, not live availability; domestic fares exclude passenger and security fees. Other fiscal years depend on the plan; there is no fallback to another date.
Input schema
origin stringrequired
Three-letter airport or international city code; case-insensitive. No city-name expansion.
destination stringrequired
Three-letter airport or international city code; case-insensitive. No city-name expansion.
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"origin": {
"type": "string",
"description": "Three-letter airport or international city code; case-insensitive. No city-name expansion.",
"examples": [
"ABE",
"LON"
],
"title": "Origin"
},
"destination": {
"type": "string",
"description": "Three-letter airport or international city code; case-insensitive. No city-name expansion.",
"examples": [
"ABE",
"LON"
],
"title": "Destination"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
}
},
"required": [
"origin",
"destination"
]
}
TOOLREAD-ONLY get_mileage
POV mileage rates
Returns the GSA privately owned vehicle (POV) mileage reimbursement rates in USD per mile for airplane, automobile, government-furnished automobile, motorcycle and moving, in effect today or on date; type selects one. Use calculate_mileage_reimbursement to turn a distance into an amount.
Input schema
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
type string | null
Filter by mileage type
type (anyOf 1) string
Allowed values: ["airplane", "automobile", "government_furnished_automobile", "motorcycle", "moving"]
type (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"type": {
"anyOf": [
{
"type": "string",
"enum": [
"airplane",
"automobile",
"government_furnished_automobile",
"motorcycle",
"moving"
],
"title": "MileageType"
},
{
"type": "null"
}
],
"description": "Filter by mileage type",
"title": "Type"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
}
}
TOOLREAD-ONLY get_mie_breakdowns
M&IE meal breakdowns
Return how daily M&IE totals break down into breakfast, lunch, dinner and incidental expenses, as in effect on the given date. The CONUS table breaks down the five standard CONUS M&IE tiers and is returned by default. Set region=oconus for the generic DTMO/DSSR M&IE total table. If date is not specified, today's breakdowns will be returned.
Input schema
date string | null
The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
region string
Breakdown table to return; defaults to CONUS
Allowed values: ["conus", "oconus"]
total integer | null
Filter by daily M&IE total in USD
total (anyOf 1) integer
total (anyOf 2) null
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"title": "Date"
},
"region": {
"type": "string",
"enum": [
"conus",
"oconus"
],
"title": "MieBreakdownRegion",
"description": "Breakdown table to return; defaults to CONUS",
"default": "conus"
},
"total": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "null"
}
],
"description": "Filter by daily M&IE total in USD",
"title": "Total"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
}
}
TOOLREAD-ONLY get_fleet_rates_by_sin
GSA Fleet leasing rates
Returns the GSA Fleet vehicle leasing rates (monthly lease rate and rate per mile) for the vehicle type identified by its Standard Item Number (SIN), from the standard (US) or europe rate schedule, for the current fiscal year unless year is given; rates are available from fiscal year 2022. SINs are the vehicle-type codes of the GSA Fleet rate schedule; the response names the vehicle type.
Input schema
rate_type stringrequired
The GSA Fleet rate schedule: 'standard' covers vehicles leased in the United States, 'europe' covers vehicles leased in Europe.
Allowed values: ["standard", "europe"]
sin stringrequired
Standard Item Number (SIN) identifying a GSA Fleet leased vehicle type, case insensitive.
year integer
A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"rate_type": {
"type": "string",
"enum": [
"standard",
"europe"
],
"title": "Fleet rate schedule",
"description": "The GSA Fleet rate schedule: 'standard' covers vehicles leased in the United States, 'europe' covers vehicles leased in Europe."
},
"sin": {
"type": "string",
"title": "GSA Fleet SIN",
"description": "Standard Item Number (SIN) identifying a GSA Fleet leased vehicle type, case insensitive."
},
"year": {
"type": "integer",
"description": "A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"openapi_examples": {
"recent": {
"value": 2026
},
"historic": {
"value": 2005
}
},
"title": "Year"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
},
"required": [
"rate_type",
"sin"
]
}
TOOLREAD-ONLY get_gsa_fedrooms
List worldwide FedRooms properties
Lists current worldwide FedRooms hotels with name, address, postal city, state, postal code and country. Optional q matches every word as a case-insensitive literal substring across those fields. country filters by ISO alpha-2 code; results include country_iso_code. Paginate with offset and limit (maximum 200); total counts matches. as_of is the UTC download date. verification_url always links to GSA. No prices or availability; book through approved channels for the FedRooms rate.
Input schema
country string | null
Filter by ISO 3166-1 alpha-2 country code, e.g. US or GB.
country (anyOf 1) string
ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).
country (anyOf 2) null
q string | null
Search all six property fields; every word must match a case-insensitive literal substring.
q (anyOf 1) string
q (anyOf 2) null
offset integer
Number of properties to skip.
limit integer
Properties per page, at most 200.
{
"type": "object",
"properties": {
"country": {
"anyOf": [
{
"type": "string",
"description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
"examples": [
"BE",
"JP",
"KE"
]
},
{
"type": "null"
}
],
"description": "Filter by ISO 3166-1 alpha-2 country code, e.g. US or GB.",
"title": "Country"
},
"q": {
"anyOf": [
{
"type": "string",
"minLength": 2,
"maxLength": 200,
"pattern": "\\S"
},
{
"type": "null"
}
],
"description": "Search all six property fields; every word must match a case-insensitive literal substring.",
"examples": [
"courtyard dallas"
],
"title": "Q"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of properties to skip.",
"default": 0,
"title": "Offset"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Properties per page, at most 200.",
"default": 50,
"title": "Limit"
}
}
}
TOOLREAD-ONLY calculate_mileage_reimbursement
Mileage reimbursement calculator
Calculate mileage reimbursement with the official GSA rate in effect on the travel date (today if omitted). Provide a distance in miles and the vehicle type: automobile, airplane, motorcycle or moving. For automobile travel, say whether a government-furnished automobile was available, which selects the reduced rate. Returns the rate category, rate and effective date, and the amount rounded to the cent. Use get_mileage for the rates alone.
Input schema
distance numberrequired
One-way or total travel distance in miles, from 0.001 through 100,000.
vehicle_type stringrequired
Vehicle or travel category used to select the applicable GSA mileage rate.
Allowed values: ["automobile", "airplane", "motorcycle", "moving"]
government_vehicle_available boolean
Optional for automobile calculations and defaults to false. Use true when a government-furnished automobile is authorized and available; false selects the standard privately owned automobile rate.
date string | null
Travel date used to select the effective rate. Accepts YYYY-MM-DD or YYYYMMDD; defaults to today. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"distance": {
"type": "number",
"multipleOf": 0.001,
"maximum": 100000.0,
"exclusiveMinimum": 0.0,
"title": "Distance",
"description": "One-way or total travel distance in miles, from 0.001 through 100,000.",
"example": 125.5
},
"vehicle_type": {
"type": "string",
"enum": [
"automobile",
"airplane",
"motorcycle",
"moving"
],
"title": "MileageCalculatorVehicleType",
"description": "Vehicle or travel category used to select the applicable GSA mileage rate.",
"example": "automobile"
},
"government_vehicle_available": {
"type": "boolean",
"title": "Government Vehicle Available",
"description": "Optional for automobile calculations and defaults to false. Use true when a government-furnished automobile is authorized and available; false selects the standard privately owned automobile rate.",
"default": false,
"example": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Date",
"description": "Travel date used to select the effective rate. Accepts YYYY-MM-DD or YYYYMMDD; defaults to today. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
"example": "2026-07-11"
}
},
"required": [
"distance",
"vehicle_type"
]
}
TOOLREAD-ONLY calculate_trip_per_diem
GSA trip per diem calculator
Estimates GSA CONUS per diem for a multi-stop trip: a day-by-day breakdown and totals of payable lodging and M&IE. Each stop has inclusive arrival and departure dates and a GSA destination ID or ZIP code, optionally the actual nightly lodging cost and meals to deduct. Applies the rate in effect each day, 75% M&IE on first and last days, the official meal deductions and the lodging cap (excess reported as overage). Not for Department of Defense or foreign travel.
Input schema
stops object[]required
Ordered, contiguous TDY-locality stops for the trip.
stops[] object
stops[].location objectrequired
TDY locality for the stop; not merely the hotel location.
stops[].location.zipcode string | null
Five-digit US ZIP or ZIP+4. ZIP+4 is normalized to five digits.
stops[].location.zipcode (anyOf 1) string
stops[].location.zipcode (anyOf 2) null
stops[].location.destination_id integer | null
GSA destination identifier. Destination 0 is Standard CONUS.
stops[].location.destination_id (anyOf 1) integer
stops[].location.destination_id (anyOf 2) null
stops[].arrival_date stringrequired
First calendar date owned by this stop.
stops[].departure_date stringrequired
Shared boundary/return date; the arriving next stop owns a transition date.
stops[].lodging_cost_per_night number | string | null
Optional actual room cost applied to every lodging night in this stop. Must be a JSON number with no more than two decimal places.
stops[].lodging_cost_per_night (anyOf 1) number
stops[].lodging_cost_per_night (anyOf 2) string
stops[].lodging_cost_per_night (anyOf 3) null
deductible_meals object[]
Sparse caller-determined meal deductions, keyed by trip date.
deductible_meals[] object
deductible_meals[].date stringrequired
Inclusive trip date on which meals are deducted.
deductible_meals[].meals string[]required
Non-empty unique breakfast/lunch/dinner deductions for the date.
deductible_meals[].meals[] string
Allowed values: ["breakfast", "lunch", "dinner"]
verification_url boolean
Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.
{
"type": "object",
"properties": {
"stops": {
"items": {
"properties": {
"location": {
"properties": {
"zipcode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Zipcode",
"description": "Five-digit US ZIP or ZIP+4. ZIP+4 is normalized to five digits.",
"examples": [
"20001",
"20001-1234"
]
},
"destination_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Destination Id",
"description": "GSA destination identifier. Destination 0 is Standard CONUS.",
"examples": [
123
]
}
},
"additionalProperties": false,
"type": "object",
"title": "GSATripLocationRequest",
"description": "TDY locality for the stop; not merely the hotel location."
},
"arrival_date": {
"type": "string",
"format": "date",
"title": "Arrival Date",
"description": "First calendar date owned by this stop."
},
"departure_date": {
"type": "string",
"format": "date",
"title": "Departure Date",
"description": "Shared boundary/return date; the arriving next stop owns a transition date."
},
"lodging_cost_per_night": {
"anyOf": [
{
"type": "number",
"maximum": 100000.0,
"minimum": 0.0
},
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lodging Cost Per Night",
"description": "Optional actual room cost applied to every lodging night in this stop. Must be a JSON number with no more than two decimal places.",
"examples": [
250.0
]
}
},
"additionalProperties": false,
"type": "object",
"required": [
"location",
"arrival_date",
"departure_date"
],
"title": "GSATripStopRequest"
},
"type": "array",
"maxItems": 50,
"minItems": 1,
"title": "Stops",
"description": "Ordered, contiguous TDY-locality stops for the trip."
},
"deductible_meals": {
"items": {
"properties": {
"date": {
"type": "string",
"format": "date",
"title": "Date",
"description": "Inclusive trip date on which meals are deducted."
},
"meals": {
"items": {
"type": "string",
"enum": [
"breakfast",
"lunch",
"dinner"
],
"title": "GSATripMeal"
},
"type": "array",
"minItems": 1,
"title": "Meals",
"description": "Non-empty unique breakfast/lunch/dinner deductions for the date."
}
},
"additionalProperties": false,
"type": "object",
"required": [
"date",
"meals"
],
"title": "GSATripDeductibleMealsRequest"
},
"type": "array",
"title": "Deductible Meals",
"description": "Sparse caller-determined meal deductions, keyed by trip date."
},
"verification_url": {
"type": "boolean",
"title": "Verification Url",
"description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
"default": true
}
},
"required": [
"stops"
]
}
MCP - OPM - General Schedule pay
TOOLREAD-ONLY get_opm_localities
GS locality pay areas
Returns OPM General Schedule locality pay areas for the latest pay year with the code for get_opm_pay. location keeps areas whose name contains every word and areas of counties or cities with exactly that name (state narrows it); matched_places shows why. A place in no area returns Rest of U.S. (RUS); several areas come back when a name exists in several states or a city spans areas. Empty results mean an unknown name, not RUS. Territories are not covered.
Input schema
location string | null
County, city or locality area name.
location (anyOf 1) string
location (anyOf 2) null
state string | null
Restrict location to one state.
state (anyOf 1) string
2-digits US State ISO Code, format XX
state (anyOf 2) null
{
"type": "object",
"properties": {
"location": {
"anyOf": [
{
"type": "string",
"minLength": 2
},
{
"type": "null"
}
],
"description": "County, city or locality area name.",
"examples": [
"evanston"
],
"title": "Location"
},
"state": {
"anyOf": [
{
"type": "string",
"description": "2-digits US State ISO Code, format XX",
"examples": [
"AL",
"CA"
]
},
{
"type": "null"
}
],
"description": "Restrict \`location\` to one state.",
"title": "State"
}
}
}
TOOLREAD-ONLY get_opm_locality_by_county
GS locality pay area of a county
Returns the General Schedule locality pay area of a county by five-digit FIPS code for the latest pay year, with the code for get_opm_pay. Counties outside every area return Rest of U.S. (RUS); every county in Alaska or Hawaii returns that state's area. Unknown codes, Connecticut planning regions and territory counties are 404 errors. Use get_opm_localities to search by name.
Input schema
fips stringrequired
Five-digit county FIPS code: two for the state and three for the county.
{
"type": "object",
"properties": {
"fips": {
"type": "string",
"pattern": "^\\d{5}$",
"description": "Five-digit county FIPS code: two for the state and three for the county.",
"examples": [
"17031"
],
"title": "Fips"
}
},
"required": [
"fips"
]
}
TOOLREAD-ONLY search_opm_pay
Search GS pay by locality area
Return the latest General Schedule pay tables whose locality area matches every word of q: each word must be contained in the area name, case-insensitively, or equal its code. grade and step narrow the rates; no match returns an empty results list. Matching only looks at OPM's area names, not the counties and towns they cover, so a town missing from the names returns nothing, which does not mean Rest of U.S. Use get_opm_localities to resolve a place to its area.
Input schema
q stringrequired
Words to find in the locality area name or code, all required, case-insensitive.
grade integer | null
Return only this GS grade, 1 to 15.
grade (anyOf 1) integer
grade (anyOf 2) null
step integer | null
Return only this step, 1 to 10.
step (anyOf 1) integer
step (anyOf 2) null
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 2,
"description": "Words to find in the locality area name or code, all required, case-insensitive.",
"examples": [
"chicago"
],
"title": "Q"
},
"grade": {
"anyOf": [
{
"type": "integer",
"maximum": 15,
"minimum": 1
},
{
"type": "null"
}
],
"description": "Return only this GS grade, 1 to 15.",
"title": "Grade"
},
"step": {
"anyOf": [
{
"type": "integer",
"maximum": 10,
"minimum": 1
},
{
"type": "null"
}
],
"description": "Return only this step, 1 to 10.",
"title": "Step"
}
},
"required": [
"q"
]
}
TOOLREAD-ONLY get_opm_pay
GS pay by locality code
Return the latest pay table of a locality pay area, ordered by grade and step, or 404 for an unknown code. grade and step narrow the rates. Use GS for the base table without locality pay, and RUS for Rest of U.S.
Input schema
locality_code stringrequired
OPM locality pay area code, from /v1/opm/localities, or GS for the base table. Case-insensitive.
grade integer | null
Return only this GS grade, 1 to 15.
grade (anyOf 1) integer
grade (anyOf 2) null
step integer | null
Return only this step, 1 to 10.
step (anyOf 1) integer
step (anyOf 2) null
{
"type": "object",
"properties": {
"locality_code": {
"type": "string",
"description": "OPM locality pay area code, from /v1/opm/localities, or GS for the base table. Case-insensitive.",
"examples": [
"CHI"
],
"title": "Locality Code"
},
"grade": {
"anyOf": [
{
"type": "integer",
"maximum": 15,
"minimum": 1
},
{
"type": "null"
}
],
"description": "Return only this GS grade, 1 to 15.",
"title": "Grade"
},
"step": {
"anyOf": [
{
"type": "integer",
"maximum": 10,
"minimum": 1
},
{
"type": "null"
}
],
"description": "Return only this step, 1 to 10.",
"title": "Step"
}
},
"required": [
"locality_code"
]
}
MCP - Metadata
TOOLREAD-ONLY get_latest_publications
Latest data publications
Returns the most recent data loaded for each source, with its publication date and fiscal year: DSSR allowances and per diem, DTMO CONUS and OCONUS per diem, GSA per diem, mileage, vehicle rates and M&IE breakdowns, FEMA hotels and OPM pay tables. Use it to say how current an answer is. Returns no rates.
Input schema
(body) object
{
"type": "object",
"properties": {}
}
MCP - User
TOOLREAD-ONLY get_user
Account plan and quota
Returns the account behind the API key: plan, monthly request limit, requests used in the current billing period, and the period start, end and renewal date. Use it to explain a quota or plan error or to check remaining requests. This call does not count against the quota.
Input schema
(body) object
{
"type": "object",
"properties": {}
}