Allowances API
Allowances API gives AI agents structured access to U.S. government per diem, travel and overseas allowance rates, through one remote MCP server covering GSA, DTMO and State Department (DSSR) data. Most per diem servers stop at GSA rates for the continental U.S. This one also covers Department of Defense OCONUS rates and State Department overseas allowances, so an agent can answer questions about domestic and foreign travel in one place. Coverage: - GSA: CONUS per diem by state, city, ZIP or destination, plus M&IE breakdowns, mileage rates, city-pair airfares and fleet vehicle rates - DTMO: DoD per diem for OCONUS locations (foreign countries, Alaska, Hawaii and U.S. territories) and CONUS - DSSR: State Department per diem, COLA, hardship, danger pay, LQA, TQSA and education allowances - FEMA: Hotel and Motel National Master List lookups for fire-safety-compliant lodging - OPM: General Schedule pay and locality data The server also includes trip per diem, mileage reimbursement and COLA calculators.
Hosted MCP Server
npx add-mcp 'https://mcp.allowancesapi.com'Installs into Claude Code, Codex, Cursor and more
Documentation
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.
DSSR - OCONUS locations
GET /v1/dssr/allowances/{country_iso_code}
DSSR allowances by country
Parameters 4
country_iso_code stringrequired
path parameter
Example "BE"
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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
Parameters 5
location stringrequired
path parameter
Example "LOCATION"
country_iso_code stringrequired
path parameter
Example "BE"
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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
Parameters 5
postcode integerrequired
path parameter
5-digit DSSR post code (no zero-padding)
Example 12345
country_iso_code stringrequired
path parameter
Example "BE"
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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
Search globally by case-insensitive substring of a location or country name.
The date selects effective and seasonal rates and defaults to today. The response effective_date is the first day of the selected month. Missing, blank, or fewer than three characters after trimming returns HTTP 422. A valid search with no matching rates returns HTTP 404.
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
Specific date in YYYY-MM-DD format
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
Parameters 3
country_iso_code stringrequired
path parameter
Example "BE"
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
Specific date in YYYY-MM-DD format
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
Parameters 4
location stringrequired
path parameter
Example "LOCATION"
country_iso_code stringrequired
path parameter
Example "BE"
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
Specific date in YYYY-MM-DD format
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
Parameters 4
postcode integerrequired
path parameter
5-digit DSSR post code (no zero-padding)
Example 12345
country_iso_code stringrequired
path parameter
Example "BE"
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
Specific date in YYYY-MM-DD format
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
Return DSSR locations, optionally filtered by q=.
The response is paginated and includes the total number of matching locations (ignoring pagination) along with the offset and limit that were applied.
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
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
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
Return all DSSR locations for a specific country using its ISO alpha-2 code (e.g., 'AF', 'DE')
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
Returns the rate in percentage, the annual and the biweekly amounts of cost of living allowance (COLA) for a given DSSR postcode. Use this endpoint to automate your COLA calculations and replace the official excel file.
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
Specific date in YYYY-MM-DD format
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"
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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
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"
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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
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
Department of Defense per diem by location name (e.g. 'Kabul') or country/state name (e.g. 'Afghanistan'), across CONUS and OCONUS. 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"
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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
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
todo add filter by location
Return all DTMO locations for a specific state using its US State Code (e.g., 'US-CA')
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
Return DTMO locations for a specific country using its ISO Code (e.g., 'AU', 'BE').
The optional location filter performs case-insensitive substring matching. Omitted or empty filters return all locations in the country. Nonempty input is literal, including spaces and wildcard characters. No matches returns [].
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
verification_url boolean
query parameter
Include the official GSA per diem lookup URL in the response when true.
Example false
date string | null
query parameter
Specific date in YYYY-MM-DD format
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"
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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 state for a US fiscal year. Each result contains the lodging rate for every month and the daily meals and incidental expenses (M&IE) rate. A US fiscal year begins October 1 of the preceding calendar year and ends September 30.
Use the optional location parameter to filter destinations by their GSA destination or location-defined name. Matching is case-insensitive and accepts partial names. 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"
year integerrequired
path parameter
Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30.
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"
verification_url boolean
query parameter
Include the official GSA per diem lookup URL in the response when true.
Example false
date string | null
query parameter
Specific date in YYYY-MM-DD format
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.
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/date rules are those of the fare lookup: Sandbox and Google add-on today only; Pro the current US fiscal year; Business (including Enterprise accounts) any loaded fiscal year.
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
Specific date in YYYY-MM-DD format
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. Sandbox and Google add-on: today only. Pro: current US fiscal year. Business (including Enterprise accounts): any loaded fiscal year, including published future awards. 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; use Business access for dates outside the current fiscal year):
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
Specific date in YYYY-MM-DD format
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
Return the privately owned vehicle (POV) mileage reimbursement rates in effect on the given date. If date is not specified, today's rates will be returned.
Parameters 3
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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
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
date string | null
query parameter
Specific date in YYYY-MM-DD format
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
Return 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. If year is not specified, the current fiscal year's rates will be returned. Rates are available from fiscal year 2022.
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"
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
year integer | null
query parameter
Example 1
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.
POST /v1/gsa/calc/mileage
Calculate POV mileage reimbursement
Calculate mileage reimbursement using the official GSA rate in effect on the travel date. Provide a distance in miles and select automobile, airplane, motorcycle, or moving mileage. For automobile travel, indicate whether a government-furnished automobile was authorized and available; this determines whether the standard or reduced rate applies. If no travel date is supplied, today's date is used. The response identifies the selected rate category, rate and effective date, and the reimbursement amount rounded to the nearest cent.
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.
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 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 locality area names, not at the counties and towns each area covers: naperville finds Chicago because the name contains it, while a town missing from the names returns nothing. No match does not mean the place falls under Rest of U.S.
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
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
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 the X-API-Key header on the MCP connection; keys are never passed as tool arguments and OAuth login is not provided. Each tool call follows the authentication, date, plan and quota rules of the endpoint it wraps. 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. DTMO and DSSR usually agree on lodging and M&IE for a foreign post. FEMA tools answer a different question: whether a lodging property is on FEMA's Hotel and Motel National Master List (Fire Safety Act compliance, a requirement for reimbursed federal travel), by FEMA ID, ZIP, state and city, or a free-text search on the property name and town. 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. Pass verification_url=true for a link to the official government table.
Tool calls need an API key in the X-API-Key header; free Sandbox keys: https://www.allowancesapi.com/register
https://mcp.allowancesapi.com/mcp ↗
MCP - DSSR - OCONUS locations
TOOL get_allowances
get_allowances
DSSR allowances by country
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 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
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.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (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"
},
"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": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"country_iso_code"
]
}
TOOL get_allowances_by_location
get_allowances_by_location
DSSR allowances by location name
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).
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
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.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"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"
},
"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": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"location",
"country_iso_code"
]
}
TOOL get_allowances_by_postcode
get_allowances_by_postcode
DSSR allowances by location post code
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).
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
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.
date string | null
Specific date in YYYY-MM-DD format
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)"
},
"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"
},
"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": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"postcode",
"country_iso_code"
]
}
TOOL search_perdiem
search_perdiem
Search DSSR Per Diem by country/location name
Search globally by case-insensitive substring of a location or country name.
The date selects effective and seasonal rates and defaults to today. The response effective_date is the first day of the selected month. Missing, blank, or fewer than three characters after trimming returns HTTP 422. A valid search with no matching rates returns HTTP 404.
Input schema
q stringrequired
Required case-insensitive substring of a location or country name; at least three characters after trimming.
date string | null
Specific date in YYYY-MM-DD format
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": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"q"
]
}
TOOL get_perdiem_allowance
get_perdiem_allowance
DSSR per diem by country
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).
verification_url boolean
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.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (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"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"country_iso_code"
]
}
TOOL get_perdiem_allowance_by_location
get_perdiem_allowance_by_location
DSSR per diem by location name
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).
verification_url boolean
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.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"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"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"location",
"country_iso_code"
]
}
TOOL get_perdiem_allowance_by_postcode
get_perdiem_allowance_by_postcode
DSSR per diem by location post code
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).
verification_url boolean
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.
date string | null
Specific date in YYYY-MM-DD format
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)"
},
"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"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"postcode",
"country_iso_code"
]
}
TOOL get_dssr_locations
get_dssr_locations
List DSSR locations
Return DSSR locations, optionally filtered by q=.
The response is paginated and includes the total number of matching locations (ignoring pagination) along with the offset and limit that were applied.
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"
}
}
}
TOOL get_countries
get_countries
Resolve a country name to its ISO code and list its posts
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"
}
}
}
TOOL get_country
get_country
Get country by ISO code
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"
]
}
TOOL get_dssr_locations_by_country
get_dssr_locations_by_country
List DSSR locations by country
Return all DSSR locations for a specific country using its ISO alpha-2 code (e.g., 'AF', 'DE')
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"
]
}
TOOL cola_calculator_by_postcode
cola_calculator_by_postcode
DSSR COLA calculator by postcode
Returns the rate in percentage, the annual and the biweekly amounts of cost of living allowance (COLA) for a given DSSR postcode. Use this endpoint to automate your COLA calculations and replace the official excel file.
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
Specific date in YYYY-MM-DD format
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": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"postcode",
"family_size",
"base_salary"
]
}
MCP - DTMO - Mil. CONUS/OCONUS
TOOL get_dtmo_perdiem_conus
get_dtmo_perdiem_conus
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.
Input schema
state_iso stringrequired
US state code: US- followed by the postal abbreviation, e.g. US-CA for California.
year integer
A fiscal year starts Oct 1st, ends Sep 30th
verification_url boolean
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.
q string | null
Search by location name or state/country name
q (anyOf 1) string
q (anyOf 2) null
offset integer
limit integer
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"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"
},
"year": {
"type": "integer",
"description": "A fiscal year starts Oct 1st, ends Sep 30th",
"openapi_examples": {
"recent": {
"value": 2026
},
"historic": {
"value": 2005
}
},
"title": "Year"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "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.",
"default": false
},
"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"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"state_iso"
]
}
TOOL get_dtmo_perdiem_oconus
get_dtmo_perdiem_oconus
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.
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).
year integer
A fiscal year starts Oct 1st, ends Sep 30th
verification_url boolean
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.
q string | null
Search by location name or state/country name
q (anyOf 1) string
q (anyOf 2) null
offset integer
limit integer
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"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"
},
"year": {
"type": "integer",
"description": "A fiscal year starts Oct 1st, ends Sep 30th",
"openapi_examples": {
"recent": {
"value": 2026
},
"historic": {
"value": 2005
}
},
"title": "Year"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "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.",
"default": false
},
"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"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"oconus_iso_code"
]
}
TOOL search_dtmo_perdiem
search_dtmo_perdiem
Search by location name
Department of Defense per diem by location name (e.g. 'Kabul') or country/state name (e.g. 'Afghanistan'), across CONUS and OCONUS. 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
year integer
A fiscal year starts Oct 1st, ends Sep 30th
verification_url boolean
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.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"q": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"minLength": 3,
"description": "Search by location name or state/country name",
"title": "Q"
},
"year": {
"type": "integer",
"description": "A fiscal year starts Oct 1st, ends Sep 30th",
"openapi_examples": {
"recent": {
"value": 2026
},
"historic": {
"value": 2005
}
},
"title": "Year"
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
}
}
TOOL get_dtmo_conus_locations
get_dtmo_conus_locations
Get DTMO CONUS locations
todo add filter by location
Return all DTMO locations for a specific state using its US State Code (e.g., 'US-CA')
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"
]
}
TOOL get_dtmo_oconus_locations
get_dtmo_oconus_locations
Get DTMO OCONUS locations
Return DTMO locations for a specific country using its ISO Code (e.g., 'AU', 'BE').
The optional location filter performs case-insensitive substring matching. Omitted or empty filters return all locations in the country. Nonempty input is literal, including spaces and wildcard characters. No matches returns [].
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
TOOL search_fema_hotels
search_fema_hotels
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.
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"
]
}
TOOL get_fema_hotel_by_id
get_fema_hotel_by_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.
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"
]
}
TOOL get_fema_hotels_by_zipcode
get_fema_hotels_by_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.
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"
]
}
TOOL get_fema_hotels_by_state_city
get_fema_hotels_by_state_city
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.
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
TOOL get_gsa_perdiem_by_destination
get_gsa_perdiem_by_destination
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.
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.
verification_url boolean
Include the official GSA per diem lookup URL in the response when true.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"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"
},
"verification_url": {
"type": "boolean",
"description": "Include the official GSA per diem lookup URL in the response when true.",
"default": false,
"title": "Verification Url"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"destination_id"
]
}
TOOL get_gsa_perdiem_by_state
get_gsa_perdiem_by_state
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.
Input schema
state_iso stringrequired
Two-letter US postal abbreviation for the state or District of Columbia.
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
Include the official GSA state lookup URL in the response when true.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"state_iso": {
"type": "string",
"description": "Two-letter US postal abbreviation for the state or District of Columbia.",
"title": "State Iso"
},
"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": "Include the official GSA state lookup URL in the response when true.",
"default": false,
"title": "Verification Url"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"state_iso"
]
}
TOOL get_gsa_perdiem_by_state_year
get_gsa_perdiem_by_state_year
GSA per diem rates by state and fiscal year
Return every GSA destination rate in a state for a US fiscal year. Each result contains the lodging rate for every month and the daily meals and incidental expenses (M&IE) rate. A US fiscal year begins October 1 of the preceding calendar year and ends September 30.
Use the optional location parameter to filter destinations by their GSA destination or location-defined name. Matching is case-insensitive and accepts partial names. Set verification_url=true to include the corresponding official GSA state lookup URL.
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.
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
Include the official GSA state lookup URL in the response when true.
{
"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.",
"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": "Include the official GSA state lookup URL in the response when true.",
"default": false,
"title": "Verification Url"
}
},
"required": [
"state_iso",
"year"
]
}
TOOL get_gsa_perdiem_by_zipcode
get_gsa_perdiem_by_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.
Input schema
zipcode stringrequired
Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.
verification_url boolean
Include the official GSA per diem lookup URL in the response when true.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"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"
},
"verification_url": {
"type": "boolean",
"description": "Include the official GSA per diem lookup URL in the response when true.",
"default": false,
"title": "Verification Url"
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"zipcode"
]
}
TOOL get_gsa_perdiem_by_zipcode_year
get_gsa_perdiem_by_zipcode_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.
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.
verification_url boolean
Include the official GSA ZIP-code lookup URL in the response when true.
{
"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.",
"title": "Year"
},
"verification_url": {
"type": "boolean",
"description": "Include the official GSA ZIP-code lookup URL in the response when true.",
"default": false,
"title": "Verification Url"
}
},
"required": [
"zipcode",
"year"
]
}
TOOL get_zipcode
get_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.
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"
]
}
TOOL get_destination_by_id
get_destination_by_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.
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"
]
}
TOOL get_destinations
get_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.
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"
}
}
}
TOOL get_city_pair_locations
get_city_pair_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/date rules are those of the fare lookup: Sandbox and Google add-on today only; Pro the current US fiscal year; Business (including Enterprise accounts) any loaded fiscal year.
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.
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
Specific date in YYYY-MM-DD format
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": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
}
}
TOOL get_city_pairs
get_city_pairs
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. Sandbox and Google add-on: today only. Pro: current US fiscal year. Business (including Enterprise accounts): any loaded fiscal year, including published future awards. 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; use Business access for dates outside the current fiscal year):
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.
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
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.
date string | null
Specific date in YYYY-MM-DD format
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": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
},
"required": [
"origin",
"destination"
]
}
TOOL get_mileage
get_mileage
POV mileage reimbursement rates
Return the privately owned vehicle (POV) mileage reimbursement rates in effect on the given date. If date is not specified, today's rates will be returned.
Input schema
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
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.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"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": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
}
}
TOOL get_mie_breakdowns
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
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
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.
date string | null
Specific date in YYYY-MM-DD format
date (anyOf 1) string
date (anyOf 2) null
{
"type": "object",
"properties": {
"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": "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.",
"default": false
},
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Specific date in YYYY-MM-DD format",
"title": "Date"
}
}
}
TOOL get_fleet_rates_by_sin
get_fleet_rates_by_sin
GSA Fleet vehicle leasing rates by SIN
Return 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. If year is not specified, the current fiscal year's rates will be returned. Rates are available from fiscal year 2022.
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.
verification_url boolean
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.
year integer | null
year (anyOf 1) integer
A fiscal year starts Oct 1st, ends Sep 30th
year (anyOf 2) null
{
"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."
},
"verification_url": {
"type": "boolean",
"title": "Verification URL",
"description": "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.",
"default": false
},
"year": {
"anyOf": [
{
"type": "integer",
"description": "A fiscal year starts Oct 1st, ends Sep 30th",
"openapi_examples": {
"recent": {
"value": 2026
},
"historic": {
"value": 2005
}
}
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"rate_type",
"sin"
]
}
TOOL calculate_mileage_reimbursement
calculate_mileage_reimbursement
Calculate POV mileage reimbursement
Calculate mileage reimbursement using the official GSA rate in effect on the travel date. Provide a distance in miles and select automobile, airplane, motorcycle, or moving mileage. For automobile travel, indicate whether a government-furnished automobile was authorized and available; this determines whether the standard or reduced rate applies. If no travel date is supplied, today's date is used. The response identifies the selected rate category, rate and effective date, and the reimbursement amount rounded to the nearest cent.
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.
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.",
"example": "2026-07-11"
}
},
"required": [
"distance",
"vehicle_type"
]
}
TOOL calculate_trip_per_diem
calculate_trip_per_diem
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.
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
Include deduplicated official GSA verification URLs when true.
{
"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": "Include deduplicated official GSA verification URLs when true.",
"default": false
}
},
"required": [
"stops"
]
}
MCP - OPM - General Schedule pay
TOOL get_opm_localities
get_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.
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"
}
}
}
TOOL get_opm_locality_by_county
get_opm_locality_by_county
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.
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"
]
}
TOOL search_opm_pay
search_opm_pay
Search GS pay by locality area
Return the latest 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 locality area names, not at the counties and towns each area covers: naperville finds Chicago because the name contains it, while a town missing from the names returns nothing. No match does not mean the place falls under Rest of U.S.
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"
]
}
TOOL get_opm_pay
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
TOOL get_latest_publications
get_latest_publications
Latest data publications
Input schema
(body) object
{
"type": "object",
"properties": {}
}
MCP - User
TOOL get_user
get_user
Get User
Input schema
(body) object
{
"type": "object",
"properties": {}
}