Allowances API

Allowances API 通过一个远程 MCP 服务器,为 AI 代理提供对美国政府每日津贴、差旅和海外津贴费率的结构化访问,涵盖 GSA、DTMO 和国务院 (DSSR) 数据。大多数每日津贴服务器仅提供美国本土的 GSA 费率。该服务器还涵盖国防部 OCONUS 费率和国务院海外津贴,因此代理可以在一个地方回答有关国内和国际差旅的问题。覆盖范围:- GSA:按州、城市、ZIP 或目的地查询 CONUS 每日津贴,以及 M&IE 明细、里程费率、城市对城市机票价格和车队车辆费率 - DTMO:查询 OCONUS 地点(外国、阿拉斯加、夏威夷和美国领地)及 CONUS 的国防部每日津贴 - DSSR:国务院每日津贴、COLA、艰苦条件津贴、危险津贴、LQA、TQSA 和教育津贴 - FEMA:查询符合消防安全要求的住宿场所《酒店和汽车旅馆国家主名单》 - OPM:联邦通用薪酬表和地区薪酬数据 该服务器还包含差旅每日津贴、里程报销和 COLA 计算器。

托管 MCP 服务器

npx add-mcp 'https://mcp.allowancesapi.com'

可安装到 Claude Code、Codex、Cursor 等客户端

文档

API Reference

Government travel rates and overseas allowances.
One API, consistent responses.

Allowances API provides normalized, versioned access to U.S. Government travel per diem and overseas allowance rates from:

  • GSA (General Service Administration) CONUS per diem rates
  • DTMO (Defense Travel Management Office / Department of War) CONUS/OCONUS per diem rates for military personnel and contractors
  • DSSR (Department of State) OCONUS per diem rates and foreign allowances (e.g., COLA, hardship, LQA, danger pay, education) for foreign service personnel and contractors

Authentication

You need to include the X-API-Key:<your api key> header in requests to protected endpoints.
If you don´t, the API endpoint will return a 401 Unauthorized error. The public /v1/health liveness check requires no API key and does not count toward your quota.

MCP server

AI agents and MCP clients can call every /v1/ endpoint as a tool through the Streamable HTTP MCP server at https://mcp.allowancesapi.com/mcp. Initialization and tool discovery need no credentials; tool calls need the same X-API-Key header. The tool catalogue is listed under MCP below.

Dates and effective rates

Many endpoints accept a date query parameter to return the rate effective for a specific day. Accepted formats: YYYY-MM-DD or YYYYMMDD.

Verification URL

You can pass the include=verification_url query parameter to return an URL pointing to the official source for a given perdiem or allowance rate. The verification URL will dynamically include the country and location filter.

Example:

http://api.localhost/v1/dssr/perdiem/AU/location/10244?include=verification_url

Will include the following in the response:

"verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=10244&MenuHide=1&PerdiemBox=1&EffectiveDate=20260419",

Response shape

Responses are returned as JSON with consistent field names across sources whenever possible.

Errors and request IDs

Errors use a standardized JSON format and include a request_id. Every response includes an X-Request-ID header generated by the server.

Usage metering and quotas

Each plan has a monthly request quota enforced per account (not per API key).

The Make integration requires a paid plan; requests sent by the Make app from a Sandbox account are rejected with 403.

  • What counts: every /v1/ request that reaches a rate endpoint: GET lookups that are not served from cache, GET requests sent with X-Bypass-Cache: true or Cache-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/me returns monthly_queries_limit, used_queries, renewal_date (YYYY/MM/DD), period_start and period_end (ISO-8601, UTC). The window reported there is the one requests are counted against.
  • Over quota: requests return 429 Too Many Requests with X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Reset (seconds until the period ends) and X-RateLimit-Period-End (Unix timestamp).

Not affiliated with any government agency. Data is sourced from official public tables.

For a runnable GSA example, see estimating contractor proposal travel costs with the GSA per diem API, using the trip calculator and CSV exports.

Building a proposal pricing workflow? Learn how to automate overseas allowances for contractor proposals with dated lookups and saved rate inputs.

DSSR - OCONUS locations

GET /v1/dssr/allowances/{country_iso_code}

DSSR allowances by country

Returns State Department (DSSR) allowance rates for every post in a country: cost-of-living (COLA), hardship differential, living quarters (LQA), danger pay and education allowances, plus each post's per diem, in force today or on date. type limits the result to some allowances. For one post use get_allowances_by_location or get_allowances_by_postcode; for Department of Defense rates use the DTMO tools.

Parameters 4

country_iso_code stringrequired

path parameter

Example "BE"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

type string[]

query parameter

Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.

Example "cola"

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

Biweekly publication date of the DSSR rates.

verification_url string | null

Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].country stringrequired

The full, official name of the country recognized by the US Government.

results[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

results[].location stringrequired

The specific city, region, or installation name recognized by the DSSR.

results[].postcode string | null

The official DSSR Post Code identifier for this specific location.

results[].postcode (anyOf 1) string

results[].postcode (anyOf 2) null

results[].cola object | null

results[].cola (anyOf 1) object

results[].cola (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].cola (anyOf 1).post_allowance integerrequired

The Cost of Living Allowance rate, in percentage of base compensation.

results[].cola (anyOf 2) null

results[].hardship object | null

results[].hardship (anyOf 1) object

results[].hardship (anyOf 1).rate integerrequired

Post hardship differential rate, in percentage of base compensation.

results[].hardship (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].hardship (anyOf 2) null

results[].lqa object | null

results[].lqa (anyOf 1) object

results[].lqa (anyOf 1).with_family_group_2 integerrequired

results[].lqa (anyOf 1).with_family_group_3 integerrequired

results[].lqa (anyOf 1).with_family_group_4 integerrequired

results[].lqa (anyOf 1).without_family_group_2 integerrequired

results[].lqa (anyOf 1).without_family_group_3 integerrequired

results[].lqa (anyOf 1).without_family_group_4 integerrequired

results[].lqa (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].lqa (anyOf 2) null

results[].danger_pay object | null

results[].danger_pay (anyOf 1) object

results[].danger_pay (anyOf 2) null

results[].education object[] | null

results[].education (anyOf 1) object[]

results[].education (anyOf 1)[] object

results[].education (anyOf 2) null

results[].perdiem object[] | null

results[].perdiem (anyOf 1) object[]

results[].perdiem (anyOf 1)[] object

results[].perdiem (anyOf 1)[].lodging integerrequired

The maximum lodging allowance in USD per day.

results[].perdiem (anyOf 1)[].meals_incidental integerrequired

The maximum meals and incidental expenses (M&IE) allowance in USD per day.

results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired

The maximum total per diem rate, calculated as the sum of lodging + meals and incidental

results[].perdiem (anyOf 1)[].season string

The season number in format 'S1'/'S2'

results[].perdiem (anyOf 1)[].season_begin stringrequired

The starting month and day for this seasonal rate.

results[].perdiem (anyOf 1)[].season_end stringrequired

results[].perdiem (anyOf 1)[].publish_date stringrequired

The latest publication date for this rate

results[].perdiem (anyOf 1)[].effective_date stringrequired

The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).

results[].perdiem (anyOf 1)[].footnote_reference string | null

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null

results[].perdiem (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/allowances/LU?date=2026-07-11&type=cola&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/allowances/LU?date=2026-07-11&type=cola&verification_url=true. Post allowance is a percentage.

{
  "effective_date": "2026-06-28",
  "verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&COLABox=1&EffectiveDate=20260628",
  "results": [
    {
      "country": "Luxembourg",
      "iso_code": "LU",
      "location": "Luxembourg",
      "postcode": "11063",
      "cola": {
        "effective_date": "2026-06-28",
        "post_allowance": 50
      },
      "hardship": null,
      "lqa": null,
      "danger_pay": null,
      "education": null,
      "perdiem": null
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/allowances/{country_iso_code}/location/{location}

DSSR allowances by location name

Returns DSSR allowances (COLA, hardship, LQA, danger pay, education, per diem) for one post in a country matched by name, case-insensitive and partial ('toky' finds Tokyo), today or on date. Find exact post names with get_dssr_locations_by_country or search_perdiem. Use get_allowances_by_postcode when the DSSR post code is known, get_allowances for every post in the country.

Parameters 5

location stringrequired

path parameter

Example "LOCATION"

country_iso_code stringrequired

path parameter

Example "BE"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

type string[]

query parameter

Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.

Example "cola"

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

Biweekly publication date of the DSSR rates.

verification_url string | null

Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].country stringrequired

The full, official name of the country recognized by the US Government.

results[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

results[].location stringrequired

The specific city, region, or installation name recognized by the DSSR.

results[].postcode string | null

The official DSSR Post Code identifier for this specific location.

results[].postcode (anyOf 1) string

results[].postcode (anyOf 2) null

results[].cola object | null

results[].cola (anyOf 1) object

results[].cola (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].cola (anyOf 1).post_allowance integerrequired

The Cost of Living Allowance rate, in percentage of base compensation.

results[].cola (anyOf 2) null

results[].hardship object | null

results[].hardship (anyOf 1) object

results[].hardship (anyOf 1).rate integerrequired

Post hardship differential rate, in percentage of base compensation.

results[].hardship (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].hardship (anyOf 2) null

results[].lqa object | null

results[].lqa (anyOf 1) object

results[].lqa (anyOf 1).with_family_group_2 integerrequired

results[].lqa (anyOf 1).with_family_group_3 integerrequired

results[].lqa (anyOf 1).with_family_group_4 integerrequired

results[].lqa (anyOf 1).without_family_group_2 integerrequired

results[].lqa (anyOf 1).without_family_group_3 integerrequired

results[].lqa (anyOf 1).without_family_group_4 integerrequired

results[].lqa (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].lqa (anyOf 2) null

results[].danger_pay object | null

results[].danger_pay (anyOf 1) object

results[].danger_pay (anyOf 2) null

results[].education object[] | null

results[].education (anyOf 1) object[]

results[].education (anyOf 1)[] object

results[].education (anyOf 2) null

results[].perdiem object[] | null

results[].perdiem (anyOf 1) object[]

results[].perdiem (anyOf 1)[] object

results[].perdiem (anyOf 1)[].lodging integerrequired

The maximum lodging allowance in USD per day.

results[].perdiem (anyOf 1)[].meals_incidental integerrequired

The maximum meals and incidental expenses (M&IE) allowance in USD per day.

results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired

The maximum total per diem rate, calculated as the sum of lodging + meals and incidental

results[].perdiem (anyOf 1)[].season string

The season number in format 'S1'/'S2'

results[].perdiem (anyOf 1)[].season_begin stringrequired

The starting month and day for this seasonal rate.

results[].perdiem (anyOf 1)[].season_end stringrequired

results[].perdiem (anyOf 1)[].publish_date stringrequired

The latest publication date for this rate

results[].perdiem (anyOf 1)[].effective_date stringrequired

The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).

results[].perdiem (anyOf 1)[].footnote_reference string | null

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null

results[].perdiem (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/allowances/LU/location/Luxembourg?date=2026-07-11&type=cola&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/allowances/LU/location/Luxembourg?date=2026-07-11&type=cola&verification_url=true. Post allowance is a percentage.

{
  "effective_date": "2026-06-28",
  "verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&COLABox=1&EffectiveDate=20260628",
  "results": [
    {
      "country": "Luxembourg",
      "iso_code": "LU",
      "location": "Luxembourg",
      "postcode": "11063",
      "cola": {
        "effective_date": "2026-06-28",
        "post_allowance": 50
      },
      "hardship": null,
      "lqa": null,
      "danger_pay": null,
      "education": null,
      "perdiem": null
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/allowances/{country_iso_code}/postcode/{postcode}

DSSR allowances by location post code

Returns DSSR allowances (COLA, hardship, LQA, danger pay, education, per diem) for the post identified by its five-digit DSSR post code, today or on date. Post codes are the State Department's own identifiers and come back in every DSSR result, so this is the most precise lookup. Use get_allowances_by_location for a name, get_allowances for the whole country.

Parameters 5

postcode integerrequired

path parameter

5-digit DSSR post code (no zero-padding)

Example 12345

country_iso_code stringrequired

path parameter

Example "BE"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

type string[]

query parameter

Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.

Example "cola"

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

Biweekly publication date of the DSSR rates.

verification_url string | null

Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].country stringrequired

The full, official name of the country recognized by the US Government.

results[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

results[].location stringrequired

The specific city, region, or installation name recognized by the DSSR.

results[].postcode string | null

The official DSSR Post Code identifier for this specific location.

results[].postcode (anyOf 1) string

results[].postcode (anyOf 2) null

results[].cola object | null

results[].cola (anyOf 1) object

results[].cola (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].cola (anyOf 1).post_allowance integerrequired

The Cost of Living Allowance rate, in percentage of base compensation.

results[].cola (anyOf 2) null

results[].hardship object | null

results[].hardship (anyOf 1) object

results[].hardship (anyOf 1).rate integerrequired

Post hardship differential rate, in percentage of base compensation.

results[].hardship (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].hardship (anyOf 2) null

results[].lqa object | null

results[].lqa (anyOf 1) object

results[].lqa (anyOf 1).with_family_group_2 integerrequired

results[].lqa (anyOf 1).with_family_group_3 integerrequired

results[].lqa (anyOf 1).with_family_group_4 integerrequired

results[].lqa (anyOf 1).without_family_group_2 integerrequired

results[].lqa (anyOf 1).without_family_group_3 integerrequired

results[].lqa (anyOf 1).without_family_group_4 integerrequired

results[].lqa (anyOf 1).effective_date stringrequired

Biweekly publication date of the DSSR rates.

results[].lqa (anyOf 2) null

results[].danger_pay object | null

results[].danger_pay (anyOf 1) object

results[].danger_pay (anyOf 2) null

results[].education object[] | null

results[].education (anyOf 1) object[]

results[].education (anyOf 1)[] object

results[].education (anyOf 2) null

results[].perdiem object[] | null

results[].perdiem (anyOf 1) object[]

results[].perdiem (anyOf 1)[] object

results[].perdiem (anyOf 1)[].lodging integerrequired

The maximum lodging allowance in USD per day.

results[].perdiem (anyOf 1)[].meals_incidental integerrequired

The maximum meals and incidental expenses (M&IE) allowance in USD per day.

results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired

The maximum total per diem rate, calculated as the sum of lodging + meals and incidental

results[].perdiem (anyOf 1)[].season string

The season number in format 'S1'/'S2'

results[].perdiem (anyOf 1)[].season_begin stringrequired

The starting month and day for this seasonal rate.

results[].perdiem (anyOf 1)[].season_end stringrequired

results[].perdiem (anyOf 1)[].publish_date stringrequired

The latest publication date for this rate

results[].perdiem (anyOf 1)[].effective_date stringrequired

The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).

results[].perdiem (anyOf 1)[].footnote_reference string | null

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null

results[].perdiem (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/allowances/LU/postcode/11063?date=2026-07-11&type=cola&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/allowances/LU/postcode/11063?date=2026-07-11&type=cola&verification_url=true. Post allowance is a percentage.

{
  "effective_date": "2026-06-28",
  "verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&COLABox=1&EffectiveDate=20260628",
  "results": [
    {
      "country": "Luxembourg",
      "iso_code": "LU",
      "location": "Luxembourg",
      "postcode": "11063",
      "cola": {
        "effective_date": "2026-06-28",
        "post_allowance": 50
      },
      "hardship": null,
      "lqa": null,
      "danger_pay": null,
      "education": null,
      "perdiem": null
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/perdiem/search

Search DSSR Per Diem by country/location name

Finds DSSR per diem by a partial, case-insensitive country or post name of at least three characters, with no country code needed. Returns lodging, M&IE and maximum per diem per matching post, today or on date, with the post code for precise follow-up lookups. A name that matches nothing is a 404 error, not an empty list. Once the ISO code is known, the country tools are more precise.

Parameters 2

q stringrequired

query parameter

Required case-insensitive substring of a location or country name; at least three characters after trimming.

Example "Q"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

Response schema 200

effective_date stringrequired

Biweekly publication date of the DSSR rates.

verification_url string | null

Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].country stringrequired

The full, official name of the country recognized by the US Government.

results[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

results[].location stringrequired

The specific city, region, or installation name recognized by the DSSR.

results[].postcode string | null

The official DSSR Post Code identifier for this specific location.

results[].postcode (anyOf 1) string

results[].postcode (anyOf 2) null

results[].perdiem object[] | null

results[].perdiem (anyOf 1) object[]

results[].perdiem (anyOf 1)[] object

results[].perdiem (anyOf 1)[].lodging integerrequired

The maximum lodging allowance in USD per day.

results[].perdiem (anyOf 1)[].meals_incidental integerrequired

The maximum meals and incidental expenses (M&IE) allowance in USD per day.

results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired

The maximum total per diem rate, calculated as the sum of lodging + meals and incidental

results[].perdiem (anyOf 1)[].season string

The season number in format 'S1'/'S2'

results[].perdiem (anyOf 1)[].season_begin stringrequired

The starting month and day for this seasonal rate.

results[].perdiem (anyOf 1)[].season_end stringrequired

results[].perdiem (anyOf 1)[].publish_date stringrequired

The latest publication date for this rate

results[].perdiem (anyOf 1)[].effective_date stringrequired

The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).

results[].perdiem (anyOf 1)[].footnote_reference string | null

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null

results[].perdiem (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/perdiem/search?q=Luxembourg&date=2026-07-11' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/perdiem/search?q=Luxembourg&date=2026-07-11. Amounts are in USD per day.

{
  "effective_date": "2026-07-01",
  "verification_url": null,
  "results": [
    {
      "country": "Luxembourg",
      "iso_code": "LU",
      "location": "Luxembourg",
      "postcode": "11063",
      "perdiem": [
        {
          "lodging": 366,
          "meals_incidental": 138,
          "maximum_perdiem": 504,
          "season": "S1",
          "season_begin": "01/01",
          "season_end": "12/31",
          "publish_date": "2026-07-01",
          "effective_date": "2025-08-01",
          "footnote_reference": null
        }
      ]
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/perdiem/{country_iso_code}

DSSR per diem by country

Returns State Department (DSSR) per diem for every post in a country: lodging, M&IE and maximum per diem in USD per day, today or on date. For one post use get_perdiem_allowance_by_location or get_perdiem_allowance_by_postcode; for a place name without a country code use search_perdiem. For Department of Defense travel use get_dtmo_perdiem_oconus.

Parameters 3

country_iso_code stringrequired

path parameter

Example "BE"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

Biweekly publication date of the DSSR rates.

verification_url string | null

Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].country stringrequired

The full, official name of the country recognized by the US Government.

results[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

results[].location stringrequired

The specific city, region, or installation name recognized by the DSSR.

results[].postcode string | null

The official DSSR Post Code identifier for this specific location.

results[].postcode (anyOf 1) string

results[].postcode (anyOf 2) null

results[].perdiem object[] | null

results[].perdiem (anyOf 1) object[]

results[].perdiem (anyOf 1)[] object

results[].perdiem (anyOf 1)[].lodging integerrequired

The maximum lodging allowance in USD per day.

results[].perdiem (anyOf 1)[].meals_incidental integerrequired

The maximum meals and incidental expenses (M&IE) allowance in USD per day.

results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired

The maximum total per diem rate, calculated as the sum of lodging + meals and incidental

results[].perdiem (anyOf 1)[].season string

The season number in format 'S1'/'S2'

results[].perdiem (anyOf 1)[].season_begin stringrequired

The starting month and day for this seasonal rate.

results[].perdiem (anyOf 1)[].season_end stringrequired

results[].perdiem (anyOf 1)[].publish_date stringrequired

The latest publication date for this rate

results[].perdiem (anyOf 1)[].effective_date stringrequired

The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).

results[].perdiem (anyOf 1)[].footnote_reference string | null

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null

results[].perdiem (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/perdiem/LU?date=2026-07-11&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/perdiem/LU?date=2026-07-11&verification_url=true. Amounts are in USD per day.

{
  "effective_date": "2026-07-01",
  "verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&PerdiemBox=1&EffectiveDate=20260701",
  "results": [
    {
      "country": "Luxembourg",
      "iso_code": "LU",
      "location": "Luxembourg",
      "postcode": "11063",
      "perdiem": [
        {
          "lodging": 366,
          "meals_incidental": 138,
          "maximum_perdiem": 504,
          "season": "S1",
          "season_begin": "01/01",
          "season_end": "12/31",
          "publish_date": "2026-07-01",
          "effective_date": "2025-08-01",
          "footnote_reference": null
        }
      ]
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/perdiem/{country_iso_code}/location/{location}

DSSR per diem by location name

Returns DSSR per diem (lodging, M&IE and maximum per diem in USD per day) for one post in a country matched by name, case-insensitive and partial, today or on date. Find exact post names with get_dssr_locations_by_country or search_perdiem. Use get_perdiem_allowance for the whole country, get_perdiem_allowance_by_postcode for a known post code.

Parameters 4

location stringrequired

path parameter

Example "LOCATION"

country_iso_code stringrequired

path parameter

Example "BE"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

Biweekly publication date of the DSSR rates.

verification_url string | null

Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].country stringrequired

The full, official name of the country recognized by the US Government.

results[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

results[].location stringrequired

The specific city, region, or installation name recognized by the DSSR.

results[].postcode string | null

The official DSSR Post Code identifier for this specific location.

results[].postcode (anyOf 1) string

results[].postcode (anyOf 2) null

results[].perdiem object[] | null

results[].perdiem (anyOf 1) object[]

results[].perdiem (anyOf 1)[] object

results[].perdiem (anyOf 1)[].lodging integerrequired

The maximum lodging allowance in USD per day.

results[].perdiem (anyOf 1)[].meals_incidental integerrequired

The maximum meals and incidental expenses (M&IE) allowance in USD per day.

results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired

The maximum total per diem rate, calculated as the sum of lodging + meals and incidental

results[].perdiem (anyOf 1)[].season string

The season number in format 'S1'/'S2'

results[].perdiem (anyOf 1)[].season_begin stringrequired

The starting month and day for this seasonal rate.

results[].perdiem (anyOf 1)[].season_end stringrequired

results[].perdiem (anyOf 1)[].publish_date stringrequired

The latest publication date for this rate

results[].perdiem (anyOf 1)[].effective_date stringrequired

The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).

results[].perdiem (anyOf 1)[].footnote_reference string | null

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null

results[].perdiem (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/perdiem/LU/location/Luxembourg?date=2026-07-11&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/perdiem/LU/location/Luxembourg?date=2026-07-11&verification_url=true. Amounts are in USD per day.

{
  "effective_date": "2026-07-01",
  "verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&PerdiemBox=1&EffectiveDate=20260701",
  "results": [
    {
      "country": "Luxembourg",
      "iso_code": "LU",
      "location": "Luxembourg",
      "postcode": "11063",
      "perdiem": [
        {
          "lodging": 366,
          "meals_incidental": 138,
          "maximum_perdiem": 504,
          "season": "S1",
          "season_begin": "01/01",
          "season_end": "12/31",
          "publish_date": "2026-07-01",
          "effective_date": "2025-08-01",
          "footnote_reference": null
        }
      ]
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/perdiem/{country_iso_code}/postcode/{postcode}

DSSR per diem by location post code

Returns DSSR per diem (lodging, M&IE and maximum per diem in USD per day) for the post identified by its five-digit DSSR post code, today or on date. Every DSSR result carries the post code, so use it for follow-up lookups. Use get_perdiem_allowance_by_location for a name, get_perdiem_allowance for the whole country.

Parameters 4

postcode integerrequired

path parameter

5-digit DSSR post code (no zero-padding)

Example 12345

country_iso_code stringrequired

path parameter

Example "BE"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

Biweekly publication date of the DSSR rates.

verification_url string | null

Optional. The official U.S. Department of State URL where this data can be verified. Add include=verification_url to your query to include it.

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].country stringrequired

The full, official name of the country recognized by the US Government.

results[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

results[].location stringrequired

The specific city, region, or installation name recognized by the DSSR.

results[].postcode string | null

The official DSSR Post Code identifier for this specific location.

results[].postcode (anyOf 1) string

results[].postcode (anyOf 2) null

results[].perdiem object[] | null

results[].perdiem (anyOf 1) object[]

results[].perdiem (anyOf 1)[] object

results[].perdiem (anyOf 1)[].lodging integerrequired

The maximum lodging allowance in USD per day.

results[].perdiem (anyOf 1)[].meals_incidental integerrequired

The maximum meals and incidental expenses (M&IE) allowance in USD per day.

results[].perdiem (anyOf 1)[].maximum_perdiem integerrequired

The maximum total per diem rate, calculated as the sum of lodging + meals and incidental

results[].perdiem (anyOf 1)[].season string

The season number in format 'S1'/'S2'

results[].perdiem (anyOf 1)[].season_begin stringrequired

The starting month and day for this seasonal rate.

results[].perdiem (anyOf 1)[].season_end stringrequired

results[].perdiem (anyOf 1)[].publish_date stringrequired

The latest publication date for this rate

results[].perdiem (anyOf 1)[].effective_date stringrequired

The date of the last update for this rate. A rate can be published for months or years (publish_date) without changing (effective_date stays the same).

results[].perdiem (anyOf 1)[].footnote_reference string | null

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 1) string

results[].perdiem (anyOf 1)[].footnote_reference (anyOf 2) null

results[].perdiem (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/perdiem/LU/postcode/11063?date=2026-07-11&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/perdiem/LU/postcode/11063?date=2026-07-11&verification_url=true. Amounts are in USD per day.

{
  "effective_date": "2026-07-01",
  "verification_url": "https://allowances.state.gov/Web920/search_action.asp?PostCode=11063&MenuHide=1&PerdiemBox=1&EffectiveDate=20260701",
  "results": [
    {
      "country": "Luxembourg",
      "iso_code": "LU",
      "location": "Luxembourg",
      "postcode": "11063",
      "perdiem": [
        {
          "lodging": 366,
          "meals_incidental": 138,
          "maximum_perdiem": 504,
          "season": "S1",
          "season_begin": "01/01",
          "season_end": "12/31",
          "publish_date": "2026-07-01",
          "effective_date": "2025-08-01",
          "footnote_reference": null
        }
      ]
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/locations

List DSSR locations

Returns a paginated list of every DSSR post with its country, ISO code and post name; q filters by case-insensitive substring. total counts every match regardless of offset and limit. Use it to find the exact post name for the by-location tools when the country is unknown; get_dssr_locations_by_country is shorter when it is known. Returns no rates.

Parameters 3

q string | null

query parameter

Search by name

Example "Q"

offset integer

query parameter

Example 0

limit integer

query parameter

Example 10

Response schema 200

total integerrequired

Total number of locations matching the query, ignoring pagination.

offset integerrequired

The offset that was applied to this result set.

limit integerrequired

The maximum number of items returned in this result set.

items object[]required

items[] object

items[].country stringrequired

The full, official name of the country recognized by the US Government.

items[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

items[].name stringrequired

The specific city, region, or installation name recognized by the DSSR.

items[].source stringrequired

The authoritative government source of this location and rate data.

Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/locations?q=Brussels&offset=0&limit=1' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/locations?q=Brussels&offset=0&limit=1.

{
  "total": 1,
  "offset": 0,
  "limit": 1,
  "items": [
    {
      "country": "Belgium",
      "iso_code": "BE",
      "name": "Brussels",
      "source": "dssr"
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/countries

Resolve a country name to its ISO code and list its posts

Resolves a country name to its ISO alpha-2 code and lists the names of its DSSR posts; q matches the country name case-insensitively ('papua' finds PG). Use it before any tool that needs a country code. ZZ stands for Other Foreign Localities, not a country. Returns no rates.

Parameters 3

q string | null

query parameter

Search by country name

Example "Q"

offset integer

query parameter

Example 0

limit integer

query parameter

Example 20

Response schema 200

(body) object[]

[] object

[].name stringrequired

The full, official name of the country recognized by the US Government.

[].iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

[].locations string[]required

[].locations[] string

The specific city, region, or installation name recognized by the DSSR.

[].notes string[]required

Any special considerations regarding the country are listed in the notes.

[].notes[] string

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/countries?q=Luxembourg&limit=1&offset=0' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/countries?q=Luxembourg&limit=1&offset=0.

[
  {
    "name": "Luxembourg",
    "iso_code": "LU",
    "locations": [
      "Luxembourg"
    ],
    "notes": []
  }
]

Example response. Rates and dates are illustrative.

GET /v1/dssr/country/{country_iso_code}

Get country by ISO code

Returns one country by ISO alpha-2 code: its name, the names of its DSSR posts and State Department notes. Use get_countries to find the code from a name, and get_dssr_locations_by_country when the post codes are needed too. Returns no rates.

Parameters 1

country_iso_code stringrequired

path parameter

Example "BE"

Response schema 200

name stringrequired

The full, official name of the country recognized by the US Government.

iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

locations string[]required

locations[] string

The specific city, region, or installation name recognized by the DSSR.

notes string[]required

Any special considerations regarding the country are listed in the notes.

notes[] string

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/dssr/country/LU \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/country/LU.

{
  "name": "Luxembourg",
  "iso_code": "LU",
  "locations": [
    "Luxembourg"
  ],
  "notes": []
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/country/{country_iso_code}/locations

List DSSR locations by country

Returns the DSSR posts of a country by ISO alpha-2 code, each with its name and five-digit post code (external_id), as needed by the by-location and by-postcode tools. Use get_countries to resolve a name to the code. Returns no rates.

Parameters 1

country_iso_code stringrequired

path parameter

Example "BE"

Response schema 200

name stringrequired

The full, official name of the country recognized by the US Government.

iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

locations object[]

locations[] object

locations[].name stringrequired

The specific city, region, or installation name recognized by the DSSR.

locations[].external_id stringrequired

The unique postcode id assigned by DSSR for the locations. Format is a 5 digits number passed as string. Some specials cases may have a different external_id.

locations[].source stringrequired

The authoritative government source of this location and rate data.

Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]

notes string[]required

Any special considerations regarding the country are listed in the notes.

notes[] string

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/dssr/country/LU/locations \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/country/LU/locations.

{
  "name": "Luxembourg",
  "iso_code": "LU",
  "locations": [
    {
      "name": "Luxembourg",
      "external_id": "11063",
      "source": "dssr"
    }
  ],
  "notes": []
}

Example response. Rates and dates are illustrative.

GET /v1/dssr/cola-calculator/postcode/{postcode}

DSSR COLA calculator by postcode

Calculates the DSSR cost-of-living allowance (COLA) for a post: the COLA rate in percent and the annual and biweekly USD amounts for the given base salary and family size, today or on date. The post is identified by its five-digit DSSR post code (see get_dssr_locations_by_country). Use get_allowances for the COLA rate alone.

Parameters 4

postcode integerrequired

path parameter

5-digit DSSR post code (no zero-padding)

Example 12345

family_size integerrequired

query parameter

The number of family members, including the FS/DoS employee/contractor

Example 1

base_salary integerrequired

query parameter

Basic annual salary, excluding U.S. locality pay; including Overseas Comparability Pay.

Example 1

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

Response schema 200

effective_date stringrequired

Biweekly publication date of the DSSR rates.

base_salary integerrequired

family_size integerrequired

cola_rate integerrequired

annual_cola integerrequired

biweekly_cola integerrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dssr/cola-calculator/postcode/11063?date=2026-07-11&family_size=2&base_salary=100000' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dssr/cola-calculator/postcode/11063?date=2026-07-11&family_size=2&base_salary=100000. Salary and allowance amounts are in USD; cola_rate is a percentage.

{
  "effective_date": "2026-06-28",
  "base_salary": 100000,
  "family_size": 2,
  "cola_rate": 50,
  "annual_cola": 20900,
  "biweekly_cola": 802
}

Example response. Rates and dates are illustrative.

DTMO - Mil. CONUS/OCONUS

GET /v1/dtmo/perdiem/conus/{state_iso}

Get perdiem CONUS

Department of Defense per diem for the continental U.S. by state code (e.g. 'TX'); Alaska, Hawaii and the territories are served by the OCONUS endpoint. Returns lodging, local and proportional meal rates, incidentals and the maximum per diem (lodging + meals + incidentals) per season. q filters by location name. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.

Parameters 7

state_iso stringrequired

path parameter

Example "US-AL"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

year integer

query parameter

Example 1

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

q string | null

query parameter

Search by location name or state/country name

Example "Q"

offset integer

query parameter

Example 0

limit integer

query parameter

Example 50

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].iso_code stringrequired

results[].state_country stringrequired

results[].location stringrequired

results[].county string | null

US county of the location, to tell apart same-named cities in one state (e.g. the two Burbanks in California). CONUS locations only, null for OCONUS.

results[].county (anyOf 1) string

results[].county (anyOf 2) null

results[].season_begin stringrequired

results[].season_end stringrequired

results[].lodging integerrequired

results[].local_meal_rate integerrequired

results[].proportional_meal_rate integerrequired

results[].local_incidental integerrequired

results[].footnote_number string | nullrequired

results[].footnote_number (anyOf 1) stringrequired

results[].footnote_number (anyOf 2) nullrequired

results[].footnote_rate integer | nullrequired

results[].footnote_rate (anyOf 1) integerrequired

results[].footnote_rate (anyOf 2) nullrequired

results[].maximum_perdiem integerrequired

results[].effective_date stringrequired

results[].fiscal_year integerrequired

A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

results[].source string

The authoritative government source of this location and rate data.

Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]

results[].publish_date stringrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dtmo/perdiem/conus/US-DC?date=2026-07-11&q=Washington&offset=0&limit=1&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dtmo/perdiem/conus/US-DC?date=2026-07-11&q=Washington&offset=0&limit=1&verification_url=true. Amounts are in USD per day.

{
  "effective_date": "2025-10-01",
  "verification_url": "https://www.defensetravel.dod.mil/neorates/report/index.php?report=conus&state=DISTRICT OF COLUMBIA&year=None&elocs=YES&military=YES",
  "results": [
    {
      "iso_code": "US-DC",
      "state_country": "District of Columbia",
      "location": "Washington",
      "county": "District of Columbia",
      "season_begin": "07/01",
      "season_end": "08/31",
      "lodging": 183,
      "local_meal_rate": 87,
      "proportional_meal_rate": 53,
      "local_incidental": 5,
      "footnote_number": "None",
      "footnote_rate": 0,
      "maximum_perdiem": 275,
      "effective_date": "2025-10-01",
      "fiscal_year": 2026,
      "source": "dtmo",
      "publish_date": "2025-11-01"
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dtmo/perdiem/oconus/{oconus_iso_code}

Get perdiem OCONUS

Department of Defense per diem outside the continental U.S.: foreign countries by ISO alpha-2 code (e.g. 'PG'), and Alaska, Hawaii and U.S. territories by 'US-XX' code. Returns lodging, local and proportional meal rates, incidentals and the maximum per diem (lodging + meals + incidentals) per season. q filters by location name. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.

Parameters 7

oconus_iso_code stringrequired

path parameter

Example "US-AK"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

year integer

query parameter

Example 1

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

q string | null

query parameter

Search by location name or state/country name

Example "Q"

offset integer

query parameter

Example 0

limit integer

query parameter

Example 50

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].iso_code stringrequired

results[].state_country stringrequired

results[].location stringrequired

results[].county string | null

US county of the location, to tell apart same-named cities in one state (e.g. the two Burbanks in California). CONUS locations only, null for OCONUS.

results[].county (anyOf 1) string

results[].county (anyOf 2) null

results[].season_begin stringrequired

results[].season_end stringrequired

results[].lodging integerrequired

results[].local_meal_rate integerrequired

results[].proportional_meal_rate integerrequired

results[].local_incidental integerrequired

results[].footnote_number string | nullrequired

results[].footnote_number (anyOf 1) stringrequired

results[].footnote_number (anyOf 2) nullrequired

results[].footnote_rate integer | nullrequired

results[].footnote_rate (anyOf 1) integerrequired

results[].footnote_rate (anyOf 2) nullrequired

results[].maximum_perdiem integerrequired

results[].effective_date stringrequired

results[].fiscal_year integerrequired

A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

results[].source string

The authoritative government source of this location and rate data.

Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]

results[].publish_date stringrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dtmo/perdiem/oconus/LU?date=2026-07-11&q=Luxembourg&offset=0&limit=1&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dtmo/perdiem/oconus/LU?date=2026-07-11&q=Luxembourg&offset=0&limit=1&verification_url=true. Amounts are in USD per day.

{
  "effective_date": "2025-08-01",
  "verification_url": "https://www.defensetravel.dod.mil/neorates/report/index.php?report=oconus&country=LUXEMBOURG&date=2026-07-11&military=YES",
  "results": [
    {
      "iso_code": "LU-LU",
      "state_country": "Luxembourg",
      "location": "Luxembourg",
      "county": "",
      "season_begin": "01/01",
      "season_end": "12/31",
      "lodging": 366,
      "local_meal_rate": 111,
      "proportional_meal_rate": 65,
      "local_incidental": 27,
      "footnote_number": "None",
      "footnote_rate": 0,
      "maximum_perdiem": 504,
      "effective_date": "2025-08-01",
      "fiscal_year": 2026,
      "source": "dtmo",
      "publish_date": "2026-07-01"
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dtmo/perdiem/search

Search by location name

Finds Department of Defense per diem by location name ('Kabul') or country or state name ('Afghanistan'), across CONUS and OCONUS, with no code needed. Returns lodging, local and proportional meal rates, incidentals and maximum per diem per matching location and season. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.

Parameters 4

q string | null

query parameter

Search by location name or state/country name

Example "Q"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

year integer

query parameter

Example 1

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].iso_code stringrequired

results[].state_country stringrequired

results[].location stringrequired

results[].county string | null

US county of the location, to tell apart same-named cities in one state (e.g. the two Burbanks in California). CONUS locations only, null for OCONUS.

results[].county (anyOf 1) string

results[].county (anyOf 2) null

results[].season_begin stringrequired

results[].season_end stringrequired

results[].lodging integerrequired

results[].local_meal_rate integerrequired

results[].proportional_meal_rate integerrequired

results[].local_incidental integerrequired

results[].footnote_number string | nullrequired

results[].footnote_number (anyOf 1) stringrequired

results[].footnote_number (anyOf 2) nullrequired

results[].footnote_rate integer | nullrequired

results[].footnote_rate (anyOf 1) integerrequired

results[].footnote_rate (anyOf 2) nullrequired

results[].maximum_perdiem integerrequired

results[].effective_date stringrequired

results[].fiscal_year integerrequired

A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

results[].source string

The authoritative government source of this location and rate data.

Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]

results[].publish_date stringrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dtmo/perdiem/search?q=Luxembourg&date=2026-07-11&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dtmo/perdiem/search?q=Luxembourg&date=2026-07-11&verification_url=true. Amounts are in USD per day.

{
  "effective_date": "2025-08-01",
  "verification_url": "https://www.defensetravel.dod.mil/neorates/report/index.php?report=oconus&country=LUXEMBOURG&date=2026-07-11&military=YES",
  "results": [
    {
      "iso_code": "LU-LU",
      "state_country": "Luxembourg",
      "location": "Luxembourg",
      "county": "",
      "season_begin": "01/01",
      "season_end": "12/31",
      "lodging": 366,
      "local_meal_rate": 111,
      "proportional_meal_rate": 65,
      "local_incidental": 27,
      "footnote_number": "None",
      "footnote_rate": 0,
      "maximum_perdiem": 504,
      "effective_date": "2025-08-01",
      "fiscal_year": 2026,
      "source": "dtmo",
      "publish_date": "2026-07-01"
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/dtmo/locations/conus/{state_iso}

Get DTMO CONUS locations

Returns the DTMO per diem locations of a US state (US-XX code) with location name and county, as named in the Department of Defense CONUS table. Use it to find the name for the q filter of get_dtmo_perdiem_conus. Returns no rates. For other countries, Alaska, Hawaii and territories use get_dtmo_oconus_locations.

Parameters 1

state_iso stringrequired

path parameter

Example "US-AL"

Response schema 200

(body) object[]

[] object

[].state stringrequired

US State Name.

[].state_iso stringrequired

The 4-letter ISO 3166-2:US state code. The first part is US, the ISO 3166-1 alpha-2 code of the United States. The second part is two letters, which is the postal abbreviation of the state, district, or outlying area.

[].county stringrequired

[].name stringrequired

The specific city, region, or installation name recognized by the DSSR.

[].source stringrequired

The authoritative government source of this location and rate data.

Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/dtmo/locations/conus/US-DC \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dtmo/locations/conus/US-DC.

[
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Anacostia Ns",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Bolling AFB",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "District of Columbia",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Ft. Mcnair",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "JB Anacostia-Bolling",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Marine Barracks",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Naval Medical Command",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Naval Research Laboratory",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Naval Security Station",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "U.S. Naval Observatory",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "U.S. Soldier's & Airmen's Home",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Walter Reed Army Medical CTR",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Washington",
    "source": "DTMO"
  },
  {
    "state": "District of Columbia",
    "state_iso": "US-DC",
    "county": "District of Columbia",
    "name": "Washington Naval District",
    "source": "DTMO"
  }
]

Example response. Rates and dates are illustrative.

GET /v1/dtmo/locations/oconus/{country_iso_code}

Get DTMO OCONUS locations

Returns the DTMO per diem locations of a country by ISO alpha-2 code ('AU', 'BE'), as named in the Department of Defense OCONUS table. location filters by case-insensitive substring, taken literally (no wildcards); no match returns an empty list. Use the names for the q filter of get_dtmo_perdiem_oconus. Returns no rates.

Parameters 2

country_iso_code stringrequired

path parameter

Example "BE"

location string | null

query parameter

Filter by location name

Example "Austin"

Response schema 200

(body) object[]

[] object

[].country stringrequired

The full, official name of the country recognized by the US Government.

[].country_iso_code stringrequired

The 2-letter ISO 3166-1 alpha-2 country code.

[].name stringrequired

The specific city, region, or installation name recognized by the DSSR.

[].source stringrequired

The authoritative government source of this location and rate data.

Allowed values: ["DSSR", "DTMO", "GSA", "dssr", "dtmo", "gsa"]

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/dtmo/locations/oconus/LU?location=Luxembourg' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/dtmo/locations/oconus/LU?location=Luxembourg.

[
  {
    "country": "Luxembourg",
    "country_iso_code": "LU",
    "name": "Luxembourg",
    "source": "DTMO"
  }
]

Example response. Rates and dates are illustrative.

FEMA - Fire-safe lodging

GET /v1/fema/hotels/search

Search FEMA-listed properties by name and town

Return the properties whose name or city contains every word of q, case-insensitively, as a plain substring: courtyard dallas matches Courtyard properties in Dallas, mint house alexandria the Mint House in Alexandria. There is no fuzzy matching, so hampton inn does not find "Hampton by Hilton". Words of one character are ignored. state narrows the search to one state or territory (404 for a code FEMA does not list). Results are ordered by name then city and paginated with offset and limit (50 by default, 200 at most); total counts every match. No match returns an empty results list.

The Hotel and Motel Fire Safety Act of 1990 requires federal travelers to stay at a property on FEMA's Hotel and Motel National Master List to be reimbursed for lodging. Each property on the list has a FEMA ID. FEMA publishes the current list only; as_of is the date of the snapshot the results come from. This endpoint returns no rates: combine it with the GSA per diem lookups for the lodging ceiling.

Parameters 4

q stringrequired

query parameter

Words to find in the property name or city, all required, case-insensitive.

Example "mint house alexandria"

state string | null

query parameter

Restrict the search to one state or territory.

Example "AL"

offset integer

query parameter

Number of properties to skip.

Example 0

limit integer

query parameter

Properties per page, 200 at most.

Example 50

Response schema 200

as_of stringrequired

Date of the FEMA list snapshot the results come from. FEMA publishes the current list only; there is no history.

results object[]required

results[] object

results[].fema_id stringrequired

FEMA ID printed on the National Master List; the identifier travelers quote on vouchers.

results[].name stringrequired

results[].street string | nullrequired

Street address; null when FEMA lists only a P.O. box.

results[].street (anyOf 1) stringrequired

results[].street (anyOf 2) nullrequired

results[].city stringrequired

results[].state stringrequired

Two-letter state or territory code.

results[].zipcode string | nullrequired

Five-digit ZIP code.

results[].zipcode (anyOf 1) stringrequired

results[].zipcode (anyOf 2) nullrequired

results[].phone string | nullrequired

results[].phone (anyOf 1) stringrequired

results[].phone (anyOf 2) nullrequired

results[].property_type string | nullrequired

FEMA category: Hotel/Motel, Apartment/Condo, Bed & Breakfast, Short Term Rental, College/University or Military.

results[].property_type (anyOf 1) stringrequired

results[].property_type (anyOf 2) nullrequired

results[].stories integerrequired

Number of floors as registered with FEMA.

results[].sprinklers booleanrequired

True when FEMA records an automatic sprinkler system.

total integerrequired

Number of properties matching the query, ignoring pagination.

offset integerrequired

Offset applied to this page.

limit integerrequired

Maximum number of properties in this page.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The state code is not one FEMA lists.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/fema/hotels/search?q=mint+house+alexandria' \
  -H "X-API-Key: YOUR_KEY"
{
  "as_of": "2026-10-24",
  "total": 1,
  "offset": 0,
  "limit": 50,
  "results": [
    {
      "fema_id": "VA6026",
      "name": "Mint House Alexandria - Old Town",
      "street": "750 Thornton Way",
      "city": "Alexandria",
      "state": "VA",
      "zipcode": "22314",
      "phone": "855-972-9090",
      "property_type": "Apartment/Condo",
      "stories": 5,
      "sprinklers": true
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/fema/hotels/{fema_id}

FEMA-listed property by FEMA ID

Return the property registered under a FEMA ID, or 404 when the ID is not on the list.

The Hotel and Motel Fire Safety Act of 1990 requires federal travelers to stay at a property on FEMA's Hotel and Motel National Master List to be reimbursed for lodging. Each property on the list has a FEMA ID. FEMA publishes the current list only; as_of is the date of the snapshot the results come from. This endpoint returns no rates: combine it with the GSA per diem lookups for the lodging ceiling.

Parameters 1

fema_id stringrequired

path parameter

Example "VA6026"

Response schema 200

as_of stringrequired

Date of the FEMA list snapshot the results come from. FEMA publishes the current list only; there is no history.

results object[]required

results[] object

results[].fema_id stringrequired

FEMA ID printed on the National Master List; the identifier travelers quote on vouchers.

results[].name stringrequired

results[].street string | nullrequired

Street address; null when FEMA lists only a P.O. box.

results[].street (anyOf 1) stringrequired

results[].street (anyOf 2) nullrequired

results[].city stringrequired

results[].state stringrequired

Two-letter state or territory code.

results[].zipcode string | nullrequired

Five-digit ZIP code.

results[].zipcode (anyOf 1) stringrequired

results[].zipcode (anyOf 2) nullrequired

results[].phone string | nullrequired

results[].phone (anyOf 1) stringrequired

results[].phone (anyOf 2) nullrequired

results[].property_type string | nullrequired

FEMA category: Hotel/Motel, Apartment/Condo, Bed & Breakfast, Short Term Rental, College/University or Military.

results[].property_type (anyOf 1) stringrequired

results[].property_type (anyOf 2) nullrequired

results[].stories integerrequired

Number of floors as registered with FEMA.

results[].sprinklers booleanrequired

True when FEMA records an automatic sprinkler system.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The FEMA ID is not on the list.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/fema/hotels/VA6026 \
  -H "X-API-Key: YOUR_KEY"
{
  "as_of": "2026-10-24",
  "results": [
    {
      "fema_id": "VA6026",
      "name": "Mint House Alexandria - Old Town",
      "street": "750 Thornton Way",
      "city": "Alexandria",
      "state": "VA",
      "zipcode": "22314",
      "phone": "855-972-9090",
      "property_type": "Apartment/Condo",
      "stories": 5,
      "sprinklers": true
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/fema/hotels/zipcode/{zipcode}

FEMA-listed properties by ZIP code

Return every property on the list in a US ZIP code, ordered by name. The path accepts a five-digit ZIP or ZIP+4, normalized to the first five digits. A known ZIP with no listed property returns an empty results list; an unknown ZIP returns 404.

The Hotel and Motel Fire Safety Act of 1990 requires federal travelers to stay at a property on FEMA's Hotel and Motel National Master List to be reimbursed for lodging. Each property on the list has a FEMA ID. FEMA publishes the current list only; as_of is the date of the snapshot the results come from. This endpoint returns no rates: combine it with the GSA per diem lookups for the lodging ceiling.

Parameters 1

zipcode stringrequired

path parameter

Example "ZIPCODE"

Response schema 200

as_of stringrequired

Date of the FEMA list snapshot the results come from. FEMA publishes the current list only; there is no history.

results object[]required

results[] object

results[].fema_id stringrequired

FEMA ID printed on the National Master List; the identifier travelers quote on vouchers.

results[].name stringrequired

results[].street string | nullrequired

Street address; null when FEMA lists only a P.O. box.

results[].street (anyOf 1) stringrequired

results[].street (anyOf 2) nullrequired

results[].city stringrequired

results[].state stringrequired

Two-letter state or territory code.

results[].zipcode string | nullrequired

Five-digit ZIP code.

results[].zipcode (anyOf 1) stringrequired

results[].zipcode (anyOf 2) nullrequired

results[].phone string | nullrequired

results[].phone (anyOf 1) stringrequired

results[].phone (anyOf 2) nullrequired

results[].property_type string | nullrequired

FEMA category: Hotel/Motel, Apartment/Condo, Bed & Breakfast, Short Term Rental, College/University or Military.

results[].property_type (anyOf 1) stringrequired

results[].property_type (anyOf 2) nullrequired

results[].stories integerrequired

Number of floors as registered with FEMA.

results[].sprinklers booleanrequired

True when FEMA records an automatic sprinkler system.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The ZIP code is unknown.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/fema/hotels/zipcode/ZIPCODE \
  -H "X-API-Key: YOUR_KEY"
{
  "as_of": "2026-10-24",
  "results": [
    {
      "fema_id": "VA6026",
      "name": "Mint House Alexandria - Old Town",
      "street": "750 Thornton Way",
      "city": "Alexandria",
      "state": "VA",
      "zipcode": "22314",
      "phone": "855-972-9090",
      "property_type": "Apartment/Condo",
      "stories": 5,
      "sprinklers": true
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/fema/hotels/state/{state_iso}

FEMA-listed properties by state, optionally filtered by city

Return the properties on the list in a state, ordered by city then name and paginated with offset and limit (50 by default, 200 at most); total is the number of matches across all pages. The optional city is matched case-insensitively as a partial name, so york matches New York and Yorktown. The state path accepts the 50 states, DC and the territories FEMA lists (AS, GU, MP, PR, PW, VI); other codes return 404. A city that matches nothing returns an empty results list.

The Hotel and Motel Fire Safety Act of 1990 requires federal travelers to stay at a property on FEMA's Hotel and Motel National Master List to be reimbursed for lodging. Each property on the list has a FEMA ID. FEMA publishes the current list only; as_of is the date of the snapshot the results come from. This endpoint returns no rates: combine it with the GSA per diem lookups for the lodging ceiling.

Parameters 4

state_iso stringrequired

path parameter

Example "AL"

city string | null

query parameter

Case-insensitive partial match on the city name.

Example "Alexandria"

offset integer

query parameter

Number of properties to skip.

Example 0

limit integer

query parameter

Properties per page, 200 at most.

Example 50

Response schema 200

as_of stringrequired

Date of the FEMA list snapshot the results come from. FEMA publishes the current list only; there is no history.

results object[]required

results[] object

results[].fema_id stringrequired

FEMA ID printed on the National Master List; the identifier travelers quote on vouchers.

results[].name stringrequired

results[].street string | nullrequired

Street address; null when FEMA lists only a P.O. box.

results[].street (anyOf 1) stringrequired

results[].street (anyOf 2) nullrequired

results[].city stringrequired

results[].state stringrequired

Two-letter state or territory code.

results[].zipcode string | nullrequired

Five-digit ZIP code.

results[].zipcode (anyOf 1) stringrequired

results[].zipcode (anyOf 2) nullrequired

results[].phone string | nullrequired

results[].phone (anyOf 1) stringrequired

results[].phone (anyOf 2) nullrequired

results[].property_type string | nullrequired

FEMA category: Hotel/Motel, Apartment/Condo, Bed & Breakfast, Short Term Rental, College/University or Military.

results[].property_type (anyOf 1) stringrequired

results[].property_type (anyOf 2) nullrequired

results[].stories integerrequired

Number of floors as registered with FEMA.

results[].sprinklers booleanrequired

True when FEMA records an automatic sprinkler system.

total integerrequired

Number of properties matching the query, ignoring pagination.

offset integerrequired

Offset applied to this page.

limit integerrequired

Maximum number of properties in this page.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The state code is not one FEMA lists.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/fema/hotels/state/AL \
  -H "X-API-Key: YOUR_KEY"
{
  "as_of": "2026-10-24",
  "total": 1,
  "offset": 0,
  "limit": 50,
  "results": [
    {
      "fema_id": "VA6026",
      "name": "Mint House Alexandria - Old Town",
      "street": "750 Thornton Way",
      "city": "Alexandria",
      "state": "VA",
      "zipcode": "22314",
      "phone": "855-972-9090",
      "property_type": "Apartment/Condo",
      "stories": 5,
      "sprinklers": true
    }
  ]
}

Example response. Rates and dates are illustrative.

GSA - per diem, mileage, fleet and airfare

GET /v1/gsa/perdiem/destination/{destination_id}

GSA per diem rate by destination

Return the GSA per diem rate in effect for a specific GSA destination on a given date. A destination is a rate area defined by GSA and may represent a city, metropolitan area, county, or the Standard CONUS area. It is not necessarily a single municipality.

destination_id is the numeric identifier assigned to that GSA rate area in the source data. Use GET /v1/gsa/destinations to browse the available destinations and find the ID for the location you need. Destination ID 0 represents the Standard CONUS rate.

The response contains the seasonal lodging rate applicable on the requested date and the daily meals and incidental expenses (M&IE) rate. When date is omitted, today's rate is returned. Set verification_url=true to include the corresponding official GSA lookup URL.

Parameters 3

destination_id integerrequired

path parameter

GSA's numeric identifier for a rate area. Retrieve valid IDs from GET /v1/gsa/destinations; ID 0 is the Standard CONUS rate.

Example 75

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

verification_url boolean

query parameter

Include the official GSA per diem lookup URL in the response when true.

Example false

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].state stringrequired

results[].iso_code stringrequired

results[].destination_id integerrequired

results[].destination stringrequired

results[].county stringrequired

results[].season_begin stringrequired

results[].season_end stringrequired

results[].lodging integerrequired

results[].meals_incidental integerrequired

results[].effective_date stringrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The destination does not exist, or it has no rate for the requested date.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/destination/75 \
  -H "X-API-Key: YOUR_KEY"
{
  "effective_date": "2025-10-01",
  "verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&state=DC&city=&zip=",
  "results": [
    {
      "state": "District of Columbia",
      "iso_code": "US-DC",
      "destination_id": 75,
      "destination": "Washington",
      "county": "District of Columbia",
      "season_begin": "03/01",
      "season_end": "06/30",
      "lodging": 276,
      "meals_incidental": 92,
      "effective_date": "2025-10-01"
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/perdiem/state/{state_iso}

GSA per diem rates by state and date

Return every GSA destination rate in a state that applies on a specific date. Each result contains the seasonal lodging rate in effect on that date and the daily meals and incidental expenses (M&IE) rate. When date is omitted, today's rates are returned.

Use the optional location parameter to filter by a GSA destination or location-defined name. Matching is case-insensitive and accepts partial names. If the state has no non-standard destination rate, the Standard CONUS rate is returned. This endpoint covers GSA CONUS rates; unsupported or unknown state codes return 404.

Set verification_url=true to include the corresponding official GSA state lookup URL.

Parameters 4

state_iso stringrequired

path parameter

Two-letter US postal abbreviation for the state or District of Columbia.

Example "DC"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

location string | null

query parameter

Optional case-insensitive partial match against the GSA destination name or location-defined name.

Example "Washington"

verification_url boolean

query parameter

Include the official GSA state lookup URL in the response when true.

Example false

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].state stringrequired

results[].iso_code stringrequired

results[].destination_id integerrequired

results[].destination stringrequired

results[].county stringrequired

results[].season_begin stringrequired

results[].season_end stringrequired

results[].lodging integerrequired

results[].meals_incidental integerrequired

results[].effective_date stringrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The state is unsupported or unknown, or no rate matches the location and date.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/state/DC \
  -H "X-API-Key: YOUR_KEY"
{
  "effective_date": "2025-10-01",
  "verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&state=DC&city=&zip=",
  "results": [
    {
      "state": "District of Columbia",
      "iso_code": "US-DC",
      "destination_id": 75,
      "destination": "Washington",
      "county": "District of Columbia",
      "season_begin": "03/01",
      "season_end": "06/30",
      "lodging": 276,
      "meals_incidental": 92,
      "effective_date": "2025-10-01"
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/perdiem/state/{state_iso}/year/{year}

GSA per diem rates by state and fiscal year

Return every GSA destination rate in a US state (US-XX) for a US fiscal year (October 1 to September 30): the lodging rate for every month and the daily M&IE rate per destination. The optional location filters destinations by GSA destination or defined-area name, case-insensitive and partial. Set verification_url=true to include the official GSA state lookup URL. Use get_gsa_perdiem_by_state for the rate on one date.

Parameters 4

state_iso stringrequired

path parameter

Two-letter US postal abbreviation for the state or District of Columbia.

Example "DC"

year integerrequired

path parameter

Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example 2026

location string | null

query parameter

Optional case-insensitive partial match against the GSA destination name or location-defined name.

Example "Washington"

verification_url boolean

query parameter

Include the official GSA state lookup URL in the response when true.

Example false

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].state stringrequired

results[].iso_code stringrequired

results[].destination_id integerrequired

results[].destination stringrequired

results[].county stringrequired

results[].lodging objectrequired

results[].lodging.oct integerrequired

results[].lodging.nov integerrequired

results[].lodging.dec integerrequired

results[].lodging.jan integerrequired

results[].lodging.feb integerrequired

results[].lodging.mar integerrequired

results[].lodging.apr integerrequired

results[].lodging.may integerrequired

results[].lodging.jun integerrequired

results[].lodging.jul integerrequired

results[].lodging.aug integerrequired

results[].lodging.sep integerrequired

results[].meals_incidental integerrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

No per diem rates match the requested state, fiscal year, and optional location.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/state/DC/year/2026 \
  -H "X-API-Key: YOUR_KEY"
{
  "effective_date": "2025-10-01",
  "verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&city=&state=DC",
  "results": [
    {
      "state": "District of Columbia",
      "iso_code": "US-DC",
      "destination_id": 75,
      "destination": "Washington",
      "county": "District of Columbia",
      "lodging": {
        "oct": 275,
        "nov": 196,
        "dec": 196,
        "jan": 196,
        "feb": 196,
        "mar": 276,
        "apr": 276,
        "may": 276,
        "jun": 276,
        "jul": 183,
        "aug": 183,
        "sep": 275
      },
      "meals_incidental": 92
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/perdiem/zipcode/{zipcode}

GSA per diem rates by ZIP code and date

Return every GSA destination rate associated with a US ZIP code that applies on a specific date. Each result contains the seasonal lodging rate in effect on that date and the daily meals and incidental expenses (M&IE) rate. When date is omitted, today's rates are returned.

A ZIP code can map to more than one GSA destination. When that happens, results contains every applicable rate, and the API does not choose one automatically. Use the returned county or a geocoder to determine which destination applies to the travel location. If a known ZIP code has no non-standard destination, the Standard CONUS rate is returned.

The path accepts either a five-digit ZIP code or ZIP+4. ZIP+4 values are normalized to their first five digits. Set verification_url=true to include the corresponding official GSA lookup URL.

Parameters 3

zipcode stringrequired

path parameter

Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.

Example "01366"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

verification_url boolean

query parameter

Include the official GSA per diem lookup URL in the response when true.

Example false

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].state stringrequired

results[].iso_code stringrequired

results[].destination_id integerrequired

results[].destination stringrequired

results[].county stringrequired

results[].season_begin stringrequired

results[].season_end stringrequired

results[].lodging integerrequired

results[].meals_incidental integerrequired

results[].effective_date stringrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The ZIP code is unknown, or no per diem rate is available for the requested date.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/zipcode/01366 \
  -H "X-API-Key: YOUR_KEY"
{
  "effective_date": "2025-10-01",
  "verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&state=US&city=&zip=",
  "results": [
    {
      "state": "US Standard",
      "iso_code": "US-US",
      "destination_id": 0,
      "destination": "Standard Rate",
      "county": "CONUS",
      "season_begin": "10/01",
      "season_end": "09/30",
      "lodging": 110,
      "meals_incidental": 68,
      "effective_date": "2025-10-01"
    },
    {
      "state": "Massachusetts",
      "iso_code": "US-MA",
      "destination_id": 160,
      "destination": "Worcester",
      "county": "Worcester",
      "season_begin": "10/01",
      "season_end": "09/30",
      "lodging": 135,
      "meals_incidental": 80,
      "effective_date": "2025-10-01"
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/perdiem/zipcode/{zipcode}/year/{year}

GSA per diem rates by ZIP code and fiscal year

Return the GSA lodging rates for every month of a US fiscal year and the daily meals and incidental expenses (M&IE) rate associated with a ZIP code. A US fiscal year begins October 1 of the preceding calendar year and ends September 30.

A ZIP code can map to more than one GSA destination. When that happens, results contains every applicable rate. The API does not choose a destination automatically; use the returned county or a geocoder to determine which rate applies. ZIP codes without a non-standard destination return the Standard CONUS rate.

ZIP+4 input is accepted and normalized to its first five digits. Set verification_url=true to include the corresponding official GSA lookup URL.

Parameters 3

zipcode stringrequired

path parameter

Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.

Example "01366"

year integerrequired

path parameter

Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example 2026

verification_url boolean

query parameter

Include the official GSA ZIP-code lookup URL in the response when true.

Example false

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].state stringrequired

results[].iso_code stringrequired

results[].destination_id integerrequired

results[].destination stringrequired

results[].county stringrequired

results[].lodging objectrequired

results[].lodging.oct integerrequired

results[].lodging.nov integerrequired

results[].lodging.dec integerrequired

results[].lodging.jan integerrequired

results[].lodging.feb integerrequired

results[].lodging.mar integerrequired

results[].lodging.apr integerrequired

results[].lodging.may integerrequired

results[].lodging.jun integerrequired

results[].lodging.jul integerrequired

results[].lodging.aug integerrequired

results[].lodging.sep integerrequired

results[].meals_incidental integerrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The ZIP code does not exist in the database.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/perdiem/zipcode/01366/year/2026 \
  -H "X-API-Key: YOUR_KEY"
{
  "effective_date": "2025-10-01",
  "verification_url": "https://www.gsa.gov/travel/plan-book/per-diem-rates/per-diem-rates-results?action=perdiems_report&fiscal_year=2026&city=&zip=01366",
  "results": [
    {
      "state": "US Standard",
      "iso_code": "US-US",
      "destination_id": 0,
      "destination": "Standard Rate",
      "county": "CONUS",
      "lodging": {
        "oct": 110,
        "nov": 110,
        "dec": 110,
        "jan": 110,
        "feb": 110,
        "mar": 110,
        "apr": 110,
        "may": 110,
        "jun": 110,
        "jul": 110,
        "aug": 110,
        "sep": 110
      },
      "meals_incidental": 68
    },
    {
      "state": "Massachusetts",
      "iso_code": "US-MA",
      "destination_id": 160,
      "destination": "Worcester",
      "county": "Worcester",
      "lodging": {
        "oct": 135,
        "nov": 135,
        "dec": 135,
        "jan": 135,
        "feb": 135,
        "mar": 135,
        "apr": 135,
        "may": 135,
        "jun": 135,
        "jul": 135,
        "aug": 135,
        "sep": 135
      },
      "meals_incidental": 80
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/zipcode/{zipcode}

Get ZIP code metadata

Look up every state associated with a US ZIP code. Most ZIP codes belong to one state, but some cross state boundaries. In that case, states contains every matching state; the API does not choose one on the caller's behalf. This is a geographic metadata endpoint; it does not return GSA per diem rates. Use /v1/gsa/perdiem/zipcode/{zipcode} for rates.

The path accepts either a five-digit ZIP code or ZIP+4. ZIP+4 values are normalized to their first five digits before lookup, and the normalized five-digit ZIP is returned in the response. Leading zeroes are significant, so ZIP codes must be sent as strings.

Parameters 1

zipcode stringrequired

path parameter

Example "ZIPCODE"

Response schema 200

zipcode stringrequired

The normalized five-digit US ZIP code.

states string[]required

All states associated with the ZIP code, ordered alphabetically.

states[] string

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

The normalized ZIP code does not exist in the database.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/zipcode/ZIPCODE \
  -H "X-API-Key: YOUR_KEY"

Leading zeroes are preserved in the response.

{
  "zipcode": "00501",
  "states": [
    "New York"
  ]
}

Example response. Rates and dates are illustrative.

A request for 12084-1234 is looked up and returned as 12084.

{
  "zipcode": "12084",
  "states": [
    "New York"
  ]
}

Example response. Rates and dates are illustrative.

Every state relationship is returned; no state is selected automatically.

{
  "zipcode": "10506",
  "states": [
    "Connecticut",
    "New York"
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/destination/{destination_id}

Get GSA destination metadata by ID

Return the geographic metadata for one GSA destination rate area. A destination may represent a city, metropolitan area, county, group of jurisdictions, or the Standard CONUS area rather than a single municipality. name is GSA's short display name, while defined_name describes the geographic scope of the rate area.

destination_id is GSA's numeric identifier for that rate area. Use GET /v1/gsa/destinations to browse available destinations and find an ID. ID 0 identifies the Standard CONUS rate area.

This endpoint returns destination metadata only. Use GET /v1/gsa/perdiem/destination/{destination_id} to retrieve the per diem rate in effect for a particular date.

Parameters 1

destination_id integerrequired

path parameter

GSA's numeric identifier for a destination rate area. Retrieve valid IDs from GET /v1/gsa/destinations; ID 0 is Standard CONUS.

Example 75

Response schema 200

destination_id integerrequired

GSA's numeric identifier for the rate area. ID 0 is the Standard CONUS rate.

name stringrequired

Display name GSA uses for the destination rate area.

defined_name stringrequired

Geographic area GSA uses to define the destination, commonly a county or locality.

county stringrequired

County associated with the destination rate area.

state stringrequired

US State Name.

state_iso stringrequired

The 4-letter ISO 3166-2:US state code. The first part is US, the ISO 3166-1 alpha-2 code of the United States. The second part is two letters, which is the postal abbreviation of the state, district, or outlying area.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

No GSA destination exists with the requested destination ID.

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/destination/75 \
  -H "X-API-Key: YOUR_KEY"
{
  "destination_id": 75,
  "name": "Washington",
  "defined_name": "Washington DC (Also the Cities of Alexandria, Falls Church and Fairfax, and the Counties of Arlington and Fairfax, in Virginia; and the Counties of Montgomery and Prince George's in Maryland)",
  "county": "District of Columbia",
  "state": "District of Columbia",
  "state_iso": "US-DC"
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/destinations

List GSA destinations

Return the paginated list of GSA destination rate areas and their numeric IDs. A destination is an area for which GSA publishes a per diem rate; it may represent a city, metropolitan area, county, locality, or the Standard CONUS area rather than a single municipality.

Use destination_id with GET /v1/gsa/perdiem/destination/{destination_id} to retrieve the rate in effect for that destination. ID 0 identifies the Standard CONUS rate. name is GSA's display name, while defined_name, county, and state fields provide the geographic context needed to select the correct rate area.

Results are ordered by destination_id. Use offset and limit to page through the list. An offset beyond the available records returns an empty list, not a 404 response.

Parameters 2

offset integer

query parameter

Number of destination records to skip before returning results.

Example 0

limit integer

query parameter

Maximum number of destinations to return. The maximum is 200.

Example 100

Response schema 200

(body) object[]

[] object

[].destination_id integerrequired

GSA's numeric identifier for the rate area. ID 0 is the Standard CONUS rate.

[].name stringrequired

Display name GSA uses for the destination rate area.

[].defined_name stringrequired

Geographic area GSA uses to define the destination, commonly a county or locality.

[].county stringrequired

County associated with the destination rate area.

[].state stringrequired

US State Name.

[].state_iso stringrequired

The 4-letter ISO 3166-2:US state code. The first part is US, the ISO 3166-1 alpha-2 code of the United States. The second part is two letters, which is the postal abbreviation of the state, district, or outlying area.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/destinations \
  -H "X-API-Key: YOUR_KEY"
[
  {
    "destination_id": 0,
    "name": "Standard Rate",
    "defined_name": "Standard CONUS Rate",
    "county": "CONUS",
    "state": "US Standard",
    "state_iso": "US-US"
  },
  {
    "destination_id": 1,
    "name": "Birmingham",
    "defined_name": "Jefferson",
    "county": "Jefferson",
    "state": "Alabama",
    "state_iso": "US-AL"
  },
  {
    "destination_id": 2,
    "name": "Gulf Shores",
    "defined_name": "Baldwin",
    "county": "Baldwin",
    "state": "Alabama",
    "state_iso": "US-AL"
  }
]

Example response. Rates and dates are illustrative.

GET /v1/gsa/city-pairs/locations

City Pair airport and city codes

List or search the three-letter codes used by GSA City Pair awards for the fiscal year of date (today by default), with GSA's own city, state and country labels. Awards use IATA airport codes (DCA, IAD, BWI) for most domestic pairs and metropolitan city codes (WAS, NYC, LON) for others; only GSA decides which, so resolve the code here before calling the fare lookup. Several codes can share one city label. Without q, every code of the fiscal year is returned, ordered by code. With q (3+ characters), a code matches exactly and city/country names match by substring, case-insensitively. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example:

curl --get 'https://api.allowancesapi.com/v1/gsa/city-pairs/locations' -H 'X-API-Key: YOUR_KEY' --data-urlencode 'q=washington'

Labels mirror the latest imported awards table and change with it.

Parameters 2

q string | null

query parameter

Match a code exactly or a city/country name by substring; case-insensitive. Omit to list every code of the fiscal year.

Example "washington"

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

Response schema 200

(body) object[]

[] object

[].code stringrequired

GSA airport or metropolitan city code as used in City Pair awards.

[].city_name stringrequired

[].state string | null

US state abbreviation; null outside the United States.

[].state (anyOf 1) string

[].state (anyOf 2) null

[].country stringrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

The plan does not permit the requested date.

404

No code matches, or the requested fiscal year is not loaded.

422

Search term shorter than 3 characters or invalid date.

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/city-pairs/locations \
  -H "X-API-Key: YOUR_KEY"
[
  {
    "code": "DCA",
    "city_name": "WASHINGTON",
    "state": "DC",
    "country": "UNITED STATES"
  },
  {
    "code": "WAS",
    "city_name": "WASHINGTON",
    "state": "DC",
    "country": "UNITED STATES"
  }
]

Example response. Rates and dates are illustrative.

GET /v1/gsa/city-pairs/{origin}/{destination}

City Pair contract airfares

Return every GSA contract award matching the airport/city code pair and date (today by default). Codes are returned in alphabetical order; fares are one-way USD and valid in either direction. Source start/end dates are inclusive; overlapping amendments are both returned. No fallback to other fiscal years or dates. Null fare categories are unavailable. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date. Data reflects the latest imported table, not past publication snapshots. These are eligible government travelers' contract prices, not live seat availability or booking offers. Domestic fares exclude passenger facility, segment and security fees; international fares exclude taxes/fees but include fuel surcharges. Book through the agency's authorized system. Official CPP rules and price caveats; fare definitions.

Example (fixed date):

curl --get 'https://api.allowancesapi.com/v1/gsa/city-pairs/ABE/ATL' -H 'X-API-Key: YOUR_KEY' -H 'X-Bypass-Cache: 1' --data-urlencode 'date=2026-10-28' --data-urlencode 'verification_url=true'

See the 200 response example for all result fields. Importing does not invalidate existing cached responses; use X-Bypass-Cache: 1 to verify newly imported data.

Parameters 4

origin stringrequired

path parameter

Three-letter airport or international city code; case-insensitive. No city-name expansion.

Example "ABE"

destination stringrequired

path parameter

Three-letter airport or international city code; case-insensitive. No city-name expansion.

Example "ABE"

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].fiscal_year integerrequired

results[].origin_code stringrequired

results[].destination_code stringrequired

results[].airline_code stringrequired

results[].service stringrequired

N = non-stop; C = connecting.

Allowed values: ["N", "C"]

results[].effective_date stringrequired

results[].expiration_date stringrequired

results[].yca_fare number | null

One-way USD last-seat coach fare; null when unavailable.

results[].yca_fare (anyOf 1) number

results[].yca_fare (anyOf 2) null

results[].ca_fare number | null

One-way USD capacity-controlled coach fare; null when unavailable.

results[].ca_fare (anyOf 1) number

results[].ca_fare (anyOf 2) null

results[].business_fare number | null

One-way USD business (_CB) fare; null when unavailable.

results[].business_fare (anyOf 1) number

results[].business_fare (anyOf 2) null

results[].cp_fare number | null

One-way USD premium economy (_CP) fare; null when unavailable.

results[].cp_fare (anyOf 1) number

results[].cp_fare (anyOf 2) null

results[].cn_fare number | null

One-way USD non-refundable capacity-controlled fare; null when unavailable.

results[].cn_fare (anyOf 1) number

results[].cn_fare (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

The plan does not permit the requested date.

404

No award for this route/date, or the requested fiscal year is not loaded.

422

Invalid airport/city code or date.

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/gsa/city-pairs/ABE/ABE \
  -H "X-API-Key: YOUR_KEY"
{
  "effective_date": "2026-10-01",
  "verification_url": "https://www.gsa.gov/travel/plan-a-trip/transportation-airfare-rates-pov-rates/airfare-rates-city-pair-program",
  "results": [
    {
      "fiscal_year": 2027,
      "origin_code": "ABE",
      "destination_code": "ATL",
      "airline_code": "DL",
      "service": "N",
      "effective_date": "2026-10-01",
      "expiration_date": "2027-09-30",
      "yca_fare": 710,
      "ca_fare": 355,
      "business_fare": null,
      "cp_fare": null,
      "cn_fare": null
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/mileage

POV mileage reimbursement rates

Returns the GSA privately owned vehicle (POV) mileage reimbursement rates in USD per mile for airplane, automobile, government-furnished automobile, motorcycle and moving, in effect today or on date; type selects one. Use calculate_mileage_reimbursement to turn a distance into an amount.

Parameters 3

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

type string | null

query parameter

Filter by mileage type

Example "airplane"

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].mileage_type stringrequired

Allowed values: ["airplane", "automobile", "government_furnished_automobile", "motorcycle", "moving"]

results[].effective_date stringrequired

results[].rate_per_mile numberrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/gsa/mileage?date=2026-07-11&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/gsa/mileage?date=2026-07-11&verification_url=true. Rates are in USD per mile. Omit type to return all mileage types.

{
  "effective_date": "2026-01-01",
  "verification_url": "https://www.gsa.gov/travel/plan-a-trip/transportation-airfare-rates-pov-rates/privately-owned-vehicle-pov-mileage-reimbursement",
  "results": [
    {
      "mileage_type": "airplane",
      "effective_date": "2026-01-01",
      "rate_per_mile": 1.78
    },
    {
      "mileage_type": "automobile",
      "effective_date": "2026-01-01",
      "rate_per_mile": 0.725
    },
    {
      "mileage_type": "government_furnished_automobile",
      "effective_date": "2026-01-01",
      "rate_per_mile": 0.205
    },
    {
      "mileage_type": "motorcycle",
      "effective_date": "2026-01-01",
      "rate_per_mile": 0.705
    },
    {
      "mileage_type": "moving",
      "effective_date": "2026-01-01",
      "rate_per_mile": 0.205
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/mie-breakdowns

M&IE meal breakdowns

Return how daily M&IE totals break down into breakfast, lunch, dinner and incidental expenses, as in effect on the given date. The CONUS table breaks down the five standard CONUS M&IE tiers and is returned by default. Set region=oconus for the generic DTMO/DSSR M&IE total table. If date is not specified, today's breakdowns will be returned.

Parameters 4

date string | null

query parameter

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

Example "2026-01-01"

region string

query parameter

Breakdown table to return; defaults to CONUS

Example "conus"

total integer | null

query parameter

Filter by daily M&IE total in USD

Example 1

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

effective_date stringrequired

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

results object[]required

results[] object

results[].region stringrequired

Breakdown table the row belongs to: 'conus' covers the standard CONUS M&IE tiers, 'oconus' covers the M&IE totals set by DTMO/DSSR for OCONUS locations.

Allowed values: ["conus", "oconus"]

results[].effective_date stringrequired

Date this breakdown took effect (the 'Last updated' date published by GSA).

results[].mie_total integerrequired

Daily M&IE total in USD the breakdown applies to

results[].breakfast integerrequired

Breakfast portion of the M&IE total, in USD per day.

results[].lunch integerrequired

Lunch portion of the M&IE total, in USD per day.

results[].dinner integerrequired

Dinner portion of the M&IE total, in USD per day.

results[].incidentals integerrequired

Incidental expenses portion of the M&IE total, in USD per day.

results[].first_last_day number | null

First and last day of travel rate (75% of the M&IE total) in USD. CONUS only.

results[].first_last_day (anyOf 1) number

results[].first_last_day (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/gsa/mie-breakdowns?date=2026-07-11&region=conus&total=68&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/gsa/mie-breakdowns?date=2026-07-11&region=conus&total=68&verification_url=true. Amounts are in USD per day.

{
  "effective_date": "2026-06-23",
  "verification_url": "https://www.gsa.gov/travel/plan-a-trip/per-diem-rates/mie-breakdowns",
  "results": [
    {
      "region": "conus",
      "effective_date": "2026-06-23",
      "mie_total": 68,
      "breakfast": 16,
      "lunch": 19,
      "dinner": 28,
      "incidentals": 5,
      "first_last_day": 51.0
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/vehicle-rates/{rate_type}/{sin}

GSA Fleet vehicle leasing rates by SIN

Returns the GSA Fleet vehicle leasing rates (monthly lease rate and rate per mile) for the vehicle type identified by its Standard Item Number (SIN), from the standard (US) or europe rate schedule, for the current fiscal year unless year is given; rates are available from fiscal year 2022. SINs are the vehicle-type codes of the GSA Fleet rate schedule; the response names the vehicle type.

Parameters 4

rate_type stringrequired

path parameter

The GSA Fleet rate schedule: 'standard' covers vehicles leased in the United States, 'europe' covers vehicles leased in Europe.

Example "standard"

sin stringrequired

path parameter

Standard Item Number (SIN) identifying a GSA Fleet leased vehicle type, case insensitive.

Example "10B"

year integer

query parameter

Example 1

verification_url boolean

query parameter

If 'True', will include a verification url in the payload, pointing to the official government source. This is useful to crosscheck that the API returns the proper data and for auditing.

Example false

Response schema 200

sin stringrequired

Standard Item Number of the vehicle type

vehicle_description stringrequired

rate_type stringrequired

Allowed values: ["standard", "europe"]

results object[]required

results[] object

results[].fiscal_year integerrequired

US fiscal year the rates apply to (starts Oct 1st, ends Sep 30th)

results[].monthly_rate integer | null

Monthly lease rate in USD. Null when the vehicle has no fixed monthly rate, see monthly_rate_type.

results[].monthly_rate (anyOf 1) integer

results[].monthly_rate (anyOf 2) null

results[].monthly_rate_type stringrequired

'fixed' when monthly_rate holds the amount. 'see_fsr', 'unique_rate' and 'unique_rate_use_rate_module' mean the monthly rate is set per vehicle by GSA Fleet and monthly_rate is null.

Allowed values: ["fixed", "see_fsr", "unique_rate_use_rate_module", "unique_rate"]

results[].mileage_rate number | null

Rate per mile in USD

results[].mileage_rate (anyOf 1) number

results[].mileage_rate (anyOf 2) null

verification_url string | null

verification_url (anyOf 1) string

verification_url (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/gsa/vehicle-rates/standard/10B?year=2026&verification_url=true' \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/gsa/vehicle-rates/standard/10B?year=2026&verification_url=true. Monthly rates are in USD per month; mileage rates are in USD per mile.

{
  "sin": "10B",
  "vehicle_description": "Sedan, Midsize",
  "rate_type": "standard",
  "results": [
    {
      "fiscal_year": 2026,
      "monthly_rate": 421,
      "monthly_rate_type": "fixed",
      "mileage_rate": 0.21
    }
  ],
  "verification_url": "https://www.gsa.gov/buy-through-us/products-and-services/transportation-and-logistics-services/fleet-management/vehicle-leasing/vehicle-rates"
}

Example response. Rates and dates are illustrative.

GET /v1/gsa/fedrooms

List worldwide FedRooms properties

List current worldwide FedRooms properties with all six GSA spreadsheet columns: hotel name, address, postal city, state, postal code and country. Page through all properties using offset and limit (default 50, maximum 200); total counts matching properties. Optional q searches all six fields: every whitespace-separated word must occur as a case-insensitive literal substring in at least one field. Words may match different fields; there is no fuzzy matching. Optional country filters by ISO alpha-2 code (for example US or GB); every result includes country_iso_code while preserving the source country name. as_of is the UTC download date of the loaded snapshot, not a publication or effective date. verification_url always points to the official GSA page. No room prices or availability are supplied. Book through approved government channels to guarantee the FedRooms rate. This is a current list with no historical date lookup.

Parameters 4

country string | null

query parameter

Filter by ISO 3166-1 alpha-2 country code, e.g. US or GB.

Example "BE"

q string | null

query parameter

Search all six property fields; every word must match a case-insensitive literal substring.

Example "courtyard dallas"

offset integer

query parameter

Number of properties to skip.

Example 0

limit integer

query parameter

Properties per page, at most 200.

Example 50

Response schema 200

as_of stringrequired

UTC download date of the loaded snapshot, not its publication or effective date.

verification_url stringrequired

Official GSA FedRooms page; always included.

total integerrequired

Total matching properties across all pages.

offset integerrequired

Number of properties skipped.

limit integerrequired

Maximum properties on this page.

results object[]required

Worldwide FedRooms properties with every source column.

results[] object

results[].name stringrequired

Hotel name as listed by GSA.

results[].address stringrequired

Complete source street address.

results[].city stringrequired

Source postal city.

results[].state string | nullrequired

Source state or region name, null when not provided.

results[].state (anyOf 1) stringrequired

results[].state (anyOf 2) nullrequired

results[].zipcode string | nullrequired

Complete source postal code, including international formats; null when absent.

results[].zipcode (anyOf 1) stringrequired

results[].zipcode (anyOf 2) nullrequired

results[].country stringrequired

Source country name.

results[].country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. US or GB.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

503

No property-list snapshot is loaded.

curl -X GET https://api.allowancesapi.com/v1/gsa/fedrooms \
  -H "X-API-Key: YOUR_KEY"
{
  "as_of": "2026-11-05",
  "verification_url": "https://www.gsa.gov/travel/hotels-fedrooms",
  "total": 12234,
  "offset": 0,
  "limit": 50,
  "results": [
    {
      "name": "Holiday Inn Huntingdon - Racecourse",
      "address": "Thrapston Road",
      "city": "Huntingdon",
      "state": null,
      "zipcode": "PE28 4NL",
      "country": "United Kingdom",
      "country_iso_code": "GB"
    }
  ]
}

Example response. Rates and dates are illustrative.

POST /v1/gsa/calc/mileage

Calculate POV mileage reimbursement

Calculate mileage reimbursement with the official GSA rate in effect on the travel date (today if omitted). Provide a distance in miles and the vehicle type: automobile, airplane, motorcycle or moving. For automobile travel, say whether a government-furnished automobile was available, which selects the reduced rate. Returns the rate category, rate and effective date, and the amount rounded to the cent. Use get_mileage for the rates alone.

Request body application/json

distance numberrequired

One-way or total travel distance in miles, from 0.001 through 100,000.

vehicle_type stringrequired

Vehicle or travel category used to select the applicable GSA mileage rate.

Allowed values: ["automobile", "airplane", "motorcycle", "moving"]

government_vehicle_available boolean

Optional for automobile calculations and defaults to false. Use true when a government-furnished automobile is authorized and available; false selects the standard privately owned automobile rate.

date string | null

Travel date used to select the effective rate. Accepts YYYY-MM-DD or YYYYMMDD; defaults to today. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

Response schema 200

distance stringrequired

Travel distance in miles used in the calculation.

distance_unit string

The distance unit in miles.

vehicle_type stringrequired

Vehicle category supplied by the caller.

Allowed values: ["automobile", "airplane", "motorcycle", "moving"]

government_vehicle_available boolean | null

Automobile availability choice used to select the rate; omitted for other vehicles.

government_vehicle_available (anyOf 1) boolean

government_vehicle_available (anyOf 2) null

mileage_type stringrequired

Stored GSA mileage-rate category selected by the calculator.

Allowed values: ["airplane", "automobile", "government_furnished_automobile", "motorcycle", "moving"]

travel_date stringrequired

Travel date used for the effective-rate lookup.

rate_effective_date stringrequired

Effective date of the GSA rate used in the calculation.

rate_per_mile stringrequired

Exact official GSA rate per mile; serialized as a decimal string.

amount stringrequired

Calculated reimbursement rounded to cents; serialized with two decimals.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X POST https://api.allowancesapi.com/v1/gsa/calc/mileage \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  --data '{"date": "2026-07-11", "distance": 125.5, "government_vehicle_available": false, "vehicle_type": "automobile"}'

POST /v1/gsa/calc/perdiem/trip

Calculate a GSA CONUS trip per diem entitlement

Calculate estimated lodging and meals and incidental expenses (M&IE) reimbursement for a trip within the continental United States. The response provides a daily breakdown and trip totals.

Describe the trip

  • Add each temporary-duty stop in travel order, with inclusive arrival and departure dates.
  • Identify each stop with a GSA destination ID or ZIP code. A stop represents the temporary-duty locality, which may differ from the hotel location.
  • Optionally provide the actual nightly lodging cost and any meals that must be deducted.
  • When one stop ends on the same date another begins, the arriving stop applies to that date.

Calculation rules

  • The calculator selects the GSA rate in effect for each day, including seasonal and fiscal-year changes.
  • First and last travel days receive 75% of the M&IE rate; intermediate days receive 100%.
  • Submitted meal deductions use the official GSA meal values while preserving the required incidental expense amount.
  • Lodging reimbursement is limited to the nightly GSA cap. Any amount above the cap is reported as overage and is not included in the payable total.

Important notes

  • Submit only meals that you have determined must be deducted under FTR 301-11.21.
  • Single-day reimbursement applies only when the traveler is in eligible travel status for more than 12 hours.
  • If a lodging cost is omitted, the response still shows the nightly cap, but lodging and overall payable totals are null.
  • The response includes the calculation version and a source fingerprint to support auditing.

Request body application/json

stops object[]required

Ordered, contiguous TDY-locality stops for the trip.

stops[] object

stops[].location objectrequired

TDY locality for the stop; not merely the hotel location.

stops[].location.zipcode string | null

Five-digit US ZIP or ZIP+4. ZIP+4 is normalized to five digits.

stops[].location.zipcode (anyOf 1) string

stops[].location.zipcode (anyOf 2) null

stops[].location.destination_id integer | null

GSA destination identifier. Destination 0 is Standard CONUS.

stops[].location.destination_id (anyOf 1) integer

stops[].location.destination_id (anyOf 2) null

stops[].arrival_date stringrequired

First calendar date owned by this stop.

stops[].departure_date stringrequired

Shared boundary/return date; the arriving next stop owns a transition date.

stops[].lodging_cost_per_night number | string | null

Optional actual room cost applied to every lodging night in this stop. Must be a JSON number with no more than two decimal places.

stops[].lodging_cost_per_night (anyOf 1) number

stops[].lodging_cost_per_night (anyOf 2) string

stops[].lodging_cost_per_night (anyOf 3) null

deductible_meals object[]

Sparse caller-determined meal deductions, keyed by trip date.

deductible_meals[] object

deductible_meals[].date stringrequired

Inclusive trip date on which meals are deducted.

deductible_meals[].meals string[]required

Non-empty unique breakfast/lunch/dinner deductions for the date.

deductible_meals[].meals[] string

Allowed values: ["breakfast", "lunch", "dinner"]

verification_url boolean

Include deduplicated official GSA verification URLs when true.

Response schema 200

trip objectrequired

Inclusive trip date and day/night counts.

trip.start_date stringrequired

First inclusive trip date.

trip.end_date stringrequired

Final inclusive return date.

trip.days integerrequired

Number of M&IE calendar days.

trip.nights integerrequired

Number of lodging nights.

totals objectrequired

Reconciled totals built from rounded daily components.

totals.lodging_payable string | nullrequired

Sum of payable lodging, or null if any actual is missing.

totals.lodging_payable (anyOf 1) stringrequired

USD amount serialized as a fixed two-decimal string.

totals.lodging_payable (anyOf 2) nullrequired

totals.mie_payable stringrequired

Sum of all rounded daily payable M&IE amounts.

totals.total_payable string | nullrequired

Lodging plus M&IE, or null if any lodging actual is missing.

totals.total_payable (anyOf 1) stringrequired

USD amount serialized as a fixed two-decimal string.

totals.total_payable (anyOf 2) nullrequired

totals.lodging_overage string | nullrequired

Non-payable actual lodging above caps, or null if incomplete.

totals.lodging_overage (anyOf 1) stringrequired

USD amount serialized as a fixed two-decimal string.

totals.lodging_overage (anyOf 2) nullrequired

totals.lodging_actuals_complete booleanrequired

True when every lodging night has an actual cost.

days object[]required

Self-contained daily entitlement audit records.

days[] object

days[].date stringrequired

Calendar date represented by this audit record.

days[].locality objectrequired

TDY locality supplying the date's GSA rate.

days[].locality.destination_id integerrequired

GSA destination ID supplying this date's rate.

days[].locality.name stringrequired

GSA destination display name.

days[].locality.county stringrequired

County or CONUS area associated with the destination.

days[].rate_source string

Government rate source used by this calculator.

days[].fiscal_year integerrequired

GSA fiscal year of the selected per diem row.

days[].per_diem_effective_date stringrequired

Effective date of the selected GSA per diem source row.

days[].mie_breakdown_effective_date stringrequired

Effective date of the selected M&IE breakdown source row.

days[].day_type stringrequired

Day classification controlling M&IE proration.

Allowed values: ["first", "full", "last", "single_day"]

days[].mie objectrequired

M&IE calculation for this date.

days[].mie.full_rate stringrequired

Full daily GSA M&IE rate.

days[].mie.proration_factor numberrequired

0.75 on first/last/single days and 1.0 on full days.

days[].mie.prorated_rate stringrequired

Full rate multiplied by the applicable proration factor.

days[].mie.deducted_meals string[]required

Normalized caller-supplied meals deducted on this date.

days[].mie.deducted_meals[] string

Allowed values: ["breakfast", "lunch", "dinner"]

days[].mie.meal_deductions stringrequired

Sum of the full meal-specific deduction amounts.

days[].mie.payable stringrequired

M&IE payable after deductions and the incidental floor.

days[].mie.breakdown objectrequired

Official meal-specific breakdown used for deductions.

days[].mie.breakdown.breakfast stringrequired

Full breakfast deduction amount.

days[].mie.breakdown.lunch stringrequired

Full lunch deduction amount.

days[].mie.breakdown.dinner stringrequired

Full dinner deduction amount.

days[].mie.breakdown.incidentals stringrequired

Retained incidental-expense amount and payable floor.

days[].lodging objectrequired

Lodging calculation for the night beginning on this date.

days[].lodging.night booleanrequired

Whether an overnight stay begins on this date.

days[].lodging.cap string | null

Applicable GSA room-rate cap for this night.

days[].lodging.cap (anyOf 1) string

USD amount serialized as a fixed two-decimal string.

days[].lodging.cap (anyOf 2) null

days[].lodging.actual string | null

Caller-supplied actual room cost, if available.

days[].lodging.actual (anyOf 1) string

USD amount serialized as a fixed two-decimal string.

days[].lodging.actual (anyOf 2) null

days[].lodging.payable string | null

Actual room cost payable up to the cap.

days[].lodging.payable (anyOf 1) string

USD amount serialized as a fixed two-decimal string.

days[].lodging.payable (anyOf 2) null

days[].lodging.overage string | null

Actual nightly room cost above the GSA lodging cap. This amount is not included in lodging_payable or total_payable.

days[].lodging.overage (anyOf 1) string

USD amount serialized as a fixed two-decimal string.

days[].lodging.overage (anyOf 2) null

notes string[]required

Calculation-specific qualifications; empty for ordinary trips.

notes[] string

verification_urls object[] | null

Deduplicated official URLs, omitted unless requested.

verification_urls (anyOf 1) object[]

verification_urls (anyOf 1)[] object

verification_urls (anyOf 1)[].type stringrequired

Source page represented by the URL.

Allowed values: ["per_diem", "mie_breakdown"]

verification_urls (anyOf 1)[].url stringrequired

Official GSA source URL.

verification_urls (anyOf 1)[].destination_id integer | null

Destination represented by a per-diem URL.

verification_urls (anyOf 1)[].destination_id (anyOf 1) integer

verification_urls (anyOf 1)[].destination_id (anyOf 2) null

verification_urls (anyOf 1)[].fiscal_year integer | null

Fiscal year represented by a per-diem URL.

verification_urls (anyOf 1)[].fiscal_year (anyOf 1) integer

verification_urls (anyOf 1)[].fiscal_year (anyOf 2) null

verification_urls (anyOf 2) null

calculation_version stringrequired

Version identifier for result-affecting calculator rules.

source_fingerprint stringrequired

SHA-256 fingerprint of distinct source values used; not a snapshot ID.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X POST https://api.allowancesapi.com/v1/gsa/calc/perdiem/trip \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  --data '{"ambiguous_zip": {"summary": "Ambiguous ZIP returns candidates", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-12", "location": {"zipcode": "01366"}}]}}, "basic_complete_trip": {"summary": "Basic trip with complete lodging actuals", "value": {"stops": [{"arrival_date": "2026-10-01", "departure_date": "2026-10-03", "location": {"zipcode": "20001"}, "lodging_cost_per_night": 250}], "verification_url": true}}, "destination_retry": {"summary": "Retry an ambiguous ZIP with the selected destination", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-12", "location": {"destination_id": 160, "zipcode": "01366"}}]}}, "incidental_floor": {"summary": "All meal deductions trigger the incidental floor", "value": {"deductible_meals": [{"date": "2026-07-10", "meals": ["breakfast", "lunch", "dinner"]}], "stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-10", "location": {"destination_id": 75}}]}}, "lodging_caps_only": {"summary": "Omitted lodging actuals return caps and null lodging totals", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-12", "location": {"destination_id": 75}}]}}, "multi_stop_transition": {"summary": "The arriving stop owns the shared transition date", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-11", "location": {"destination_id": 75}, "lodging_cost_per_night": 200}, {"arrival_date": "2026-07-11", "departure_date": "2026-07-12", "location": {"destination_id": 160}, "lodging_cost_per_night": 150}]}}, "single_day": {"summary": "Conditional single-day subsistence calculation", "value": {"stops": [{"arrival_date": "2026-07-10", "departure_date": "2026-07-10", "location": {"destination_id": 75}}]}}}'

OPM - General Schedule pay

GET /v1/opm/localities

GS locality pay areas, optionally by county or city

List the locality pay areas of the latest pay year, with the code to use on the pay endpoints. The optional location keeps the areas whose name contains every word, and the areas of the counties and cities with that name. state narrows location to one state and has no effect without it.

County and city names must match exactly, ignoring case; a trailing county is optional. A place outside every listed area returns Rest of U.S. (RUS). Area names keep matching on any word they contain. matched_places lists the counties and cities behind each result. A place name can return several areas: the same name can exist in several states, which state narrows, and a city can span several areas, in which case all of them are returned and the official duty station decides. City data is not published by OPM, so for payroll use /v1/opm/localities/county/{fips}. An empty result does not mean Rest of U.S.: the name may be misspelled, and U.S. territories are not covered.

Parameters 2

location string | null

query parameter

County, city or locality area name.

Example "evanston"

state string | null

query parameter

Restrict location to one state.

Example "AL"

Response schema 200

year integerrequired

Pay year of the results, the latest one loaded.

results object[]required

results[] object

results[].locality_code stringrequired

OPM locality pay area code. It can look like a state code: AL is Albany.

results[].locality_name string | nullrequired

Locality pay area name as published for this pay year; null for the base table GS.

results[].locality_name (anyOf 1) stringrequired

results[].locality_name (anyOf 2) nullrequired

results[].locality_pct number | nullrequired

Locality payment in percent; null for the base table GS.

results[].locality_pct (anyOf 1) numberrequired

results[].locality_pct (anyOf 2) nullrequired

results[].matched_places string[]required

Counties and cities named by location that fall under this area; empty when none did.

results[].matched_places[] string

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/opm/localities \
  -H "X-API-Key: YOUR_KEY"
{
  "year": 2026,
  "results": [
    {
      "locality_code": "CHI",
      "locality_name": "Chicago-Naperville, IL-IN-WI",
      "locality_pct": 30.86,
      "matched_places": [
        "Evanston, IL (city)"
      ]
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/opm/localities/county/{fips}

GS locality pay area of a county

Return the locality pay area of a county for the latest pay year, using OPM's own definitions. A county that OPM doesn't list under an area falls under Rest of U.S. (RUS), and every county in Alaska or Hawaii returns that state's area. Returns 404 for an unknown code and for a Connecticut planning region, as OPM defines Connecticut by its eight legacy counties. U.S. territories fall under Rest of U.S. in OPM's definitions, but their county codes are not available here and return 404. Burlington County, NJ (34005) returns the Philadelphia area, while three military sites inside it (Fort Dix, Joint Base McGuire-Dix-Lakehurst and McGuire Air Force Base) belong to the New York area.

Parameters 1

fips stringrequired

path parameter

Example "17031"

Response schema 200

year integerrequired

Pay year of the results, the latest one loaded.

results object[]required

results[] object

results[].locality_code stringrequired

OPM locality pay area code. It can look like a state code: AL is Albany.

results[].locality_name string | nullrequired

Locality pay area name as published for this pay year; null for the base table GS.

results[].locality_name (anyOf 1) stringrequired

results[].locality_name (anyOf 2) nullrequired

results[].locality_pct number | nullrequired

Locality payment in percent; null for the base table GS.

results[].locality_pct (anyOf 1) numberrequired

results[].locality_pct (anyOf 2) nullrequired

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/opm/localities/county/17031 \
  -H "X-API-Key: YOUR_KEY"
{
  "year": 2026,
  "results": [
    {
      "locality_code": "CHI",
      "locality_name": "Chicago-Naperville, IL-IN-WI",
      "locality_pct": 30.86
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/opm/pay/search

Search GS pay by locality area

Return the latest General Schedule pay tables whose locality area matches every word of q: each word must be contained in the area name, case-insensitively, or equal its code. grade and step narrow the rates; no match returns an empty results list. Matching only looks at OPM's area names, not the counties and towns they cover, so a town missing from the names returns nothing, which does not mean Rest of U.S. Use get_opm_localities to resolve a place to its area.

Parameters 3

q stringrequired

query parameter

Words to find in the locality area name or code, all required, case-insensitive.

Example "chicago"

grade integer | null

query parameter

Return only this GS grade, 1 to 15.

Example 1

step integer | null

query parameter

Return only this step, 1 to 10.

Example 1

Response schema 200

year integerrequired

Pay year of the results, the latest one loaded.

results object[]required

results[] object

results[].locality_code stringrequired

OPM locality pay area code. It can look like a state code: AL is Albany.

results[].locality_name string | nullrequired

Locality pay area name as published for this pay year; null for the base table GS.

results[].locality_name (anyOf 1) stringrequired

results[].locality_name (anyOf 2) nullrequired

results[].locality_pct number | nullrequired

Locality payment in percent; null for the base table GS.

results[].locality_pct (anyOf 1) numberrequired

results[].locality_pct (anyOf 2) nullrequired

results[].rates object[]required

results[].rates[] object

results[].rates[].grade integerrequired

GS grade, 1 to 15.

results[].rates[].step integerrequired

Step within the grade, 1 to 10.

results[].rates[].annual integerrequired

Annual rate in USD.

results[].rates[].hourly numberrequired

Hourly rate in USD.

results[].rates[].overtime numberrequired

Overtime hourly rate in USD.

results[].rates[].capped booleanrequired

True when the rate is limited by the statutory pay cap.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET 'https://api.allowancesapi.com/v1/opm/pay/search?q=chicago' \
  -H "X-API-Key: YOUR_KEY"
{
  "year": 2026,
  "results": [
    {
      "locality_code": "CHI",
      "locality_name": "Chicago-Naperville, IL-IN-WI",
      "locality_pct": 30.86,
      "rates": [
        {
          "grade": 9,
          "step": 1,
          "annual": 68999,
          "hourly": 33.06,
          "overtime": 49.59,
          "capped": false
        }
      ]
    }
  ]
}

Example response. Rates and dates are illustrative.

GET /v1/opm/pay/{locality_code}

GS pay by locality code

Return the latest pay table of a locality pay area, ordered by grade and step, or 404 for an unknown code. grade and step narrow the rates. Use GS for the base table without locality pay, and RUS for Rest of U.S.

Parameters 3

locality_code stringrequired

path parameter

Example "CHI"

grade integer | null

query parameter

Return only this GS grade, 1 to 15.

Example 1

step integer | null

query parameter

Return only this step, 1 to 10.

Example 1

Response schema 200

year integerrequired

Pay year of the results, the latest one loaded.

results object[]required

results[] object

results[].locality_code stringrequired

OPM locality pay area code. It can look like a state code: AL is Albany.

results[].locality_name string | nullrequired

Locality pay area name as published for this pay year; null for the base table GS.

results[].locality_name (anyOf 1) stringrequired

results[].locality_name (anyOf 2) nullrequired

results[].locality_pct number | nullrequired

Locality payment in percent; null for the base table GS.

results[].locality_pct (anyOf 1) numberrequired

results[].locality_pct (anyOf 2) nullrequired

results[].rates object[]required

results[].rates[] object

results[].rates[].grade integerrequired

GS grade, 1 to 15.

results[].rates[].step integerrequired

Step within the grade, 1 to 10.

results[].rates[].annual integerrequired

Annual rate in USD.

results[].rates[].hourly numberrequired

Hourly rate in USD.

results[].rates[].overtime numberrequired

Overtime hourly rate in USD.

results[].rates[].capped booleanrequired

True when the rate is limited by the statutory pay cap.

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/opm/pay/CHI \
  -H "X-API-Key: YOUR_KEY"
{
  "year": 2026,
  "results": [
    {
      "locality_code": "CHI",
      "locality_name": "Chicago-Naperville, IL-IN-WI",
      "locality_pct": 30.86,
      "rates": [
        {
          "grade": 9,
          "step": 1,
          "annual": 68999,
          "hourly": 33.06,
          "overtime": 49.59,
          "capped": false
        }
      ]
    }
  ]
}

Example response. Rates and dates are illustrative.

Metadata

GET /v1/meta/latest

Latest data publications

Returns the most recent data loaded for each source, with its publication date and fiscal year: DSSR allowances and per diem, DTMO CONUS and OCONUS per diem, GSA per diem, mileage, vehicle rates and M&IE breakdowns, FEMA hotels and OPM pay tables. Use it to say how current an answer is. Returns no rates.

Response schema 200

dssr objectrequired

dssr.allowances objectrequired

dssr.allowances.published_date string | null

dssr.allowances.published_date (anyOf 1) string

dssr.allowances.published_date (anyOf 2) null

dssr.allowances.fiscal_year integer | null

dssr.allowances.fiscal_year (anyOf 1) integer

dssr.allowances.fiscal_year (anyOf 2) null

dssr.perdiem objectrequired

dssr.perdiem.published_date string | null

dssr.perdiem.published_date (anyOf 1) string

dssr.perdiem.published_date (anyOf 2) null

dssr.perdiem.fiscal_year integer | null

dssr.perdiem.fiscal_year (anyOf 1) integer

dssr.perdiem.fiscal_year (anyOf 2) null

dtmo objectrequired

dtmo.oconus_perdiem objectrequired

dtmo.oconus_perdiem.published_date string | null

dtmo.oconus_perdiem.published_date (anyOf 1) string

dtmo.oconus_perdiem.published_date (anyOf 2) null

dtmo.oconus_perdiem.fiscal_year integer | null

dtmo.oconus_perdiem.fiscal_year (anyOf 1) integer

dtmo.oconus_perdiem.fiscal_year (anyOf 2) null

dtmo.conus_perdiem objectrequired

dtmo.conus_perdiem.published_date string | null

dtmo.conus_perdiem.published_date (anyOf 1) string

dtmo.conus_perdiem.published_date (anyOf 2) null

dtmo.conus_perdiem.fiscal_year integer | null

dtmo.conus_perdiem.fiscal_year (anyOf 1) integer

dtmo.conus_perdiem.fiscal_year (anyOf 2) null

gsa objectrequired

gsa.conus_perdiem objectrequired

gsa.conus_perdiem.published_date string | null

gsa.conus_perdiem.published_date (anyOf 1) string

gsa.conus_perdiem.published_date (anyOf 2) null

gsa.conus_perdiem.fiscal_year integer | null

gsa.conus_perdiem.fiscal_year (anyOf 1) integer

gsa.conus_perdiem.fiscal_year (anyOf 2) null

gsa.mileage objectrequired

gsa.mileage.published_date string | null

gsa.mileage.published_date (anyOf 1) string

gsa.mileage.published_date (anyOf 2) null

gsa.mileage.fiscal_year integer | null

gsa.mileage.fiscal_year (anyOf 1) integer

gsa.mileage.fiscal_year (anyOf 2) null

gsa.vehicle_rates objectrequired

gsa.vehicle_rates.published_date string | null

gsa.vehicle_rates.published_date (anyOf 1) string

gsa.vehicle_rates.published_date (anyOf 2) null

gsa.vehicle_rates.fiscal_year integer | null

gsa.vehicle_rates.fiscal_year (anyOf 1) integer

gsa.vehicle_rates.fiscal_year (anyOf 2) null

gsa.mie_breakdown objectrequired

gsa.mie_breakdown.published_date string | null

gsa.mie_breakdown.published_date (anyOf 1) string

gsa.mie_breakdown.published_date (anyOf 2) null

gsa.mie_breakdown.fiscal_year integer | null

gsa.mie_breakdown.fiscal_year (anyOf 1) integer

gsa.mie_breakdown.fiscal_year (anyOf 2) null

fema objectrequired

fema.hotels objectrequired

fema.hotels.published_date string | null

fema.hotels.published_date (anyOf 1) string

fema.hotels.published_date (anyOf 2) null

fema.hotels.fiscal_year integer | null

fema.hotels.fiscal_year (anyOf 1) integer

fema.hotels.fiscal_year (anyOf 2) null

opm objectrequired

opm.pay_tables objectrequired

opm.pay_tables.published_date string | null

opm.pay_tables.published_date (anyOf 1) string

opm.pay_tables.published_date (anyOf 2) null

opm.pay_tables.fiscal_year integer | null

opm.pay_tables.fiscal_year (anyOf 1) integer

opm.pay_tables.fiscal_year (anyOf 2) null

Other responses

400

Bad Request

401

Unauthorized — Missing or invalid API key.

403

Forbidden — Insufficient permissions.

404

Not Found

422

Validation Error

429

Too Many Requests — Rate limit exceeded.

500

Internal Server Error

curl -X GET https://api.allowancesapi.com/v1/meta/latest \
  -H "X-API-Key: YOUR_KEY"

User

GET /v1/me

Get User

Returns the account behind the API key: plan, monthly request limit, requests used in the current billing period, and the period start, end and renewal date. Use it to explain a quota or plan error or to check remaining requests. This call does not count against the quota.

Response schema 200

(body) object

curl -X GET https://api.allowancesapi.com/v1/me \
  -H "X-API-Key: YOUR_KEY"

Response to GET /v1/me with a Pro account's X-API-Key. The request does not consume the account's query quota. monthly_queries_limit is returned as a string when configured through the environment.

{
  "user_id": 123,
  "user_email": "developer@example.com",
  "active_plan": "pro",
  "renewal_date": "2026/11/01",
  "period_start": "2026-10-01T00:00:00+00:00",
  "period_end": "2026-11-01T00:00:00+00:00",
  "monthly_queries_limit": "5000",
  "used_queries": 127,
  "status": "ok"
}

Example response. Rates and dates are illustrative.

MCP server & tools

AI agents and MCP clients can call every /v1/ endpoint of this API as a tool through the Streamable HTTP MCP server at https://mcp.allowancesapi.com/mcp. Initialization and tool discovery need no credentials. Tool calls need either an OAuth 2.1 sign-in with an Allowances API account (Claude, Claude Code and ChatGPT: a credential-less tool call is answered with HTTP 401 and the protected-resource metadata, see /mcp-server) or the X-API-Key header on the MCP connection; keys are never passed as tool arguments. Each tool call follows the authentication, date, plan and quota rules of the endpoint it wraps. Rate tools return verification_url, a link to the official government table for the returned location and date, unless called with verification_url=false. The tool catalogue is published in the x-mcp extension of this OpenAPI document and listed below, grouped like the endpoints.

U.S. government travel per diem and overseas allowances from the official GSA, DTMO and State Department (DSSR) tables, in USD per day.

Choosing a source. GSA tools: per diem inside the continental U.S. for civilian federal travel, by state and city or ZIP. DTMO tools: Department of Defense rates; OCONUS covers foreign countries plus Alaska, Hawaii and U.S. territories, CONUS covers the states. Use DTMO for military, DoD and defense-contractor travel. DSSR tools: State Department rates for civilian U.S. government employees abroad: per diem, COLA, hardship, danger pay, LQA, TQSA, education. If the traveller's agency is unknown, use GSA for CONUS and DSSR abroad, and say which source you used. FedRooms lists worldwide participating hotels, without prices. FEMA tools answer a different question: whether a lodging property is on FEMA's Hotel and Motel National Master List (Fire Safety Act compliance), by FEMA ID, ZIP, state and city, or a free-text search; they return no rates.

Finding a location. search_perdiem (DSSR) and search_dtmo_perdiem (DTMO) take a city or country name of at least three characters. Other tools need an ISO alpha-2 country code or a US-XX state code; get_countries and the locations tools resolve names.

Dates. Omit date for today's rates. A date returns the rates in force on that day; DTMO also accepts a fiscal year (Oct 1 to Sep 30). Each result row carries its own effective_date and season; the top-level effective_date is the publication period. Historical dates depend on the plan; a 403 states the restriction. Plan and quota errors are final: relay them, do not retry.

maximum_perdiem is lodging plus meals and incidentals. Rate results include verification_url, a link to the official government table for that location and date; give it to the user to confirm the figures (verification_url=false omits it).

Tool calls need an account sign-in or an X-API-Key header; free Sandbox keys: https://www.allowancesapi.com/register

For setup steps, example prompts, and result verification, read how to connect an AI assistant to government travel rates.

https://mcp.allowancesapi.com/mcp ↗

MCP - DSSR - OCONUS locations

TOOLREAD-ONLY get_allowances

DSSR allowances by country

Returns State Department (DSSR) allowance rates for every post in a country: cost-of-living (COLA), hardship differential, living quarters (LQA), danger pay and education allowances, plus each post's per diem, in force today or on date. type limits the result to some allowances. For one post use get_allowances_by_location or get_allowances_by_postcode; for Department of Defense rates use the DTMO tools.

Input schema

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

type string[]

Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.

Allowed values: ["cola", "hardship", "lqa", "danger_pay", "education"]

type[] string

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "type": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Allowance type",
      "description": "Filter returned allowances. Unknown values are ignored.<br/>If not specified, all allowances are returned.<br/>Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.<br/>Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.",
      "enum": [
        "cola",
        "hardship",
        "lqa",
        "danger_pay",
        "education"
      ]
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  },
  "required": [
    "country_iso_code"
  ]
}

TOOLREAD-ONLY get_allowances_by_location

DSSR allowances by location name

Returns DSSR allowances (COLA, hardship, LQA, danger pay, education, per diem) for one post in a country matched by name, case-insensitive and partial ('toky' finds Tokyo), today or on date. Find exact post names with get_dssr_locations_by_country or search_perdiem. Use get_allowances_by_postcode when the DSSR post code is known, get_allowances for every post in the country.

Input schema

location stringrequired

Location name, case insensitive

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

type string[]

Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.

Allowed values: ["cola", "hardship", "lqa", "danger_pay", "education"]

type[] string

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "location": {
      "type": "string",
      "description": "Location name, case insensitive",
      "openapi_examples": {
        "adelaide": {
          "summary": "Adelaide, Australia",
          "value": "Adelaide"
        },
        "tokyo": {
          "summary": "Tokyo, Japan (lowercase)",
          "value": "tokyo"
        },
        "partial": {
          "summary": "Tokyo, Japan (partial)",
          "value": "toky"
        }
      },
      "title": "Location"
    },
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "type": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Allowance type",
      "description": "Filter returned allowances. Unknown values are ignored.<br/>If not specified, all allowances are returned.<br/>Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.<br/>Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.",
      "enum": [
        "cola",
        "hardship",
        "lqa",
        "danger_pay",
        "education"
      ]
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  },
  "required": [
    "location",
    "country_iso_code"
  ]
}

TOOLREAD-ONLY get_allowances_by_postcode

DSSR allowances by location post code

Returns DSSR allowances (COLA, hardship, LQA, danger pay, education, per diem) for the post identified by its five-digit DSSR post code, today or on date. Post codes are the State Department's own identifiers and come back in every DSSR result, so this is the most precise lookup. Use get_allowances_by_location for a name, get_allowances for the whole country.

Input schema

postcode integerrequired

5-digit DSSR post code (no zero-padding)

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

type string[]

Filter returned allowances. Unknown values are ignored.
If not specified, all allowances are returned.
Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.
Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.

Allowed values: ["cola", "hardship", "lqa", "danger_pay", "education"]

type[] string

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "postcode": {
      "type": "integer",
      "maximum": 99999,
      "minimum": 10000,
      "title": "DSSR post code",
      "description": "5-digit DSSR post code (no zero-padding)"
    },
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "type": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Allowance type",
      "description": "Filter returned allowances. Unknown values are ignored.<br/>If not specified, all allowances are returned.<br/>Canonical values: cola, hardship, lqa, danger_pay, education, perdiem.<br/>Aliases accepted: cost_of_living, cost-of-living, danger, danger-pay, livingquarters.",
      "enum": [
        "cola",
        "hardship",
        "lqa",
        "danger_pay",
        "education"
      ]
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  },
  "required": [
    "postcode",
    "country_iso_code"
  ]
}

TOOLREAD-ONLY search_perdiem

Search DSSR per diem by name

Finds DSSR per diem by a partial, case-insensitive country or post name of at least three characters, with no country code needed. Returns lodging, M&IE and maximum per diem per matching post, today or on date, with the post code for precise follow-up lookups. A name that matches nothing is a 404 error, not an empty list. Once the ISO code is known, the country tools are more precise.

Input schema

q stringrequired

Required case-insensitive substring of a location or country name; at least three characters after trimming.

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 3,
      "description": "Required case-insensitive substring of a location or country name; at least three characters after trimming.",
      "title": "Q"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    }
  },
  "required": [
    "q"
  ]
}

TOOLREAD-ONLY get_perdiem_allowance

DSSR per diem by country

Returns State Department (DSSR) per diem for every post in a country: lodging, M&IE and maximum per diem in USD per day, today or on date. For one post use get_perdiem_allowance_by_location or get_perdiem_allowance_by_postcode; for a place name without a country code use search_perdiem. For Department of Defense travel use get_dtmo_perdiem_oconus.

Input schema

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  },
  "required": [
    "country_iso_code"
  ]
}

TOOLREAD-ONLY get_perdiem_allowance_by_location

DSSR per diem by location name

Returns DSSR per diem (lodging, M&IE and maximum per diem in USD per day) for one post in a country matched by name, case-insensitive and partial, today or on date. Find exact post names with get_dssr_locations_by_country or search_perdiem. Use get_perdiem_allowance for the whole country, get_perdiem_allowance_by_postcode for a known post code.

Input schema

location stringrequired

Location name, case insensitive

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "location": {
      "type": "string",
      "description": "Location name, case insensitive",
      "openapi_examples": {
        "adelaide": {
          "summary": "Adelaide, Australia",
          "value": "Adelaide"
        },
        "tokyo": {
          "summary": "Tokyo, Japan (lowercase)",
          "value": "tokyo"
        },
        "partial": {
          "summary": "Tokyo, Japan (partial)",
          "value": "toky"
        }
      },
      "title": "Location"
    },
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  },
  "required": [
    "location",
    "country_iso_code"
  ]
}

TOOLREAD-ONLY get_perdiem_allowance_by_postcode

DSSR per diem by location post code

Returns DSSR per diem (lodging, M&IE and maximum per diem in USD per day) for the post identified by its five-digit DSSR post code, today or on date. Every DSSR result carries the post code, so use it for follow-up lookups. Use get_perdiem_allowance_by_location for a name, get_perdiem_allowance for the whole country.

Input schema

postcode integerrequired

5-digit DSSR post code (no zero-padding)

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "postcode": {
      "type": "integer",
      "maximum": 99999,
      "minimum": 10000,
      "title": "DSSR post code",
      "description": "5-digit DSSR post code (no zero-padding)"
    },
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  },
  "required": [
    "postcode",
    "country_iso_code"
  ]
}

TOOLREAD-ONLY get_dssr_locations

List DSSR posts

Returns a paginated list of every DSSR post with its country, ISO code and post name; q filters by case-insensitive substring. total counts every match regardless of offset and limit. Use it to find the exact post name for the by-location tools when the country is unknown; get_dssr_locations_by_country is shorter when it is known. Returns no rates.

Input schema

q string | null

Search by name

q (anyOf 1) string

q (anyOf 2) null

offset integer

limit integer

{
  "type": "object",
  "properties": {
    "q": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 2
        },
        {
          "type": "null"
        }
      ],
      "description": "Search by name",
      "title": "Q"
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "title": "Offset"
    },
    "limit": {
      "type": "integer",
      "maximum": 20,
      "default": 10,
      "title": "Limit"
    }
  }
}

TOOLREAD-ONLY get_countries

Find country code and posts

Resolves a country name to its ISO alpha-2 code and lists the names of its DSSR posts; q matches the country name case-insensitively ('papua' finds PG). Use it before any tool that needs a country code. ZZ stands for Other Foreign Localities, not a country. Returns no rates.

Input schema

q string | null

Search by country name

q (anyOf 1) string

q (anyOf 2) null

offset integer

limit integer

{
  "type": "object",
  "properties": {
    "q": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 2
        },
        {
          "type": "null"
        }
      ],
      "description": "Search by country name",
      "title": "Q"
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "title": "Offset"
    },
    "limit": {
      "type": "integer",
      "maximum": 300,
      "default": 20,
      "title": "Limit"
    }
  }
}

TOOLREAD-ONLY get_country

Country by ISO code

Returns one country by ISO alpha-2 code: its name, the names of its DSSR posts and State Department notes. Use get_countries to find the code from a name, and get_dssr_locations_by_country when the post codes are needed too. Returns no rates.

Input schema

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

{
  "type": "object",
  "properties": {
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    }
  },
  "required": [
    "country_iso_code"
  ]
}

TOOLREAD-ONLY get_dssr_locations_by_country

DSSR posts in a country

Returns the DSSR posts of a country by ISO alpha-2 code, each with its name and five-digit post code (external_id), as needed by the by-location and by-postcode tools. Use get_countries to resolve a name to the code. Returns no rates.

Input schema

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

{
  "type": "object",
  "properties": {
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    }
  },
  "required": [
    "country_iso_code"
  ]
}

TOOLREAD-ONLY cola_calculator_by_postcode

DSSR COLA calculator

Calculates the DSSR cost-of-living allowance (COLA) for a post: the COLA rate in percent and the annual and biweekly USD amounts for the given base salary and family size, today or on date. The post is identified by its five-digit DSSR post code (see get_dssr_locations_by_country). Use get_allowances for the COLA rate alone.

Input schema

postcode integerrequired

5-digit DSSR post code (no zero-padding)

family_size integerrequired

The number of family members, including the FS/DoS employee/contractor

base_salary integerrequired

Basic annual salary, excluding U.S. locality pay; including Overseas Comparability Pay.

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

{
  "type": "object",
  "properties": {
    "postcode": {
      "type": "integer",
      "maximum": 99999,
      "minimum": 10000,
      "title": "DSSR post code",
      "description": "5-digit DSSR post code (no zero-padding)"
    },
    "family_size": {
      "type": "integer",
      "minimum": 1,
      "description": "The number of family members, including the FS/DoS employee/contractor",
      "title": "Family Size"
    },
    "base_salary": {
      "type": "integer",
      "minimum": 1000,
      "description": "Basic annual salary, excluding U.S. locality pay; including Overseas Comparability Pay.",
      "title": "Base Salary"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    }
  },
  "required": [
    "postcode",
    "family_size",
    "base_salary"
  ]
}

MCP - DTMO - Mil. CONUS/OCONUS

TOOLREAD-ONLY get_dtmo_perdiem_conus

DTMO CONUS per diem by state

Department of Defense per diem for the continental U.S. by state code (e.g. 'TX'); Alaska, Hawaii and the territories are served by the OCONUS endpoint. Returns lodging, local and proportional meal rates, incidentals and the maximum per diem (lodging + meals + incidentals) per season. q filters by location name. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.

Input schema

state_iso stringrequired

US state code: US- followed by the postal abbreviation, e.g. US-CA for California.

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

year integer

A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

q string | null

Search by location name or state/country name

q (anyOf 1) string

q (anyOf 2) null

offset integer

limit integer

{
  "type": "object",
  "properties": {
    "state_iso": {
      "type": "string",
      "description": "US state code: US- followed by the postal abbreviation, e.g. US-CA for California.",
      "examples": [
        "US-AL",
        "US-CA"
      ],
      "title": "State Iso"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "year": {
      "type": "integer",
      "description": "A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "openapi_examples": {
        "recent": {
          "value": 2026
        },
        "historic": {
          "value": 2005
        }
      },
      "title": "Year"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    },
    "q": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "minLength": 3,
      "description": "Search by location name or state/country name",
      "title": "Q"
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "title": "Offset"
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "title": "Limit"
    }
  },
  "required": [
    "state_iso"
  ]
}

TOOLREAD-ONLY get_dtmo_perdiem_oconus

DTMO OCONUS per diem by country

Department of Defense per diem outside the continental U.S.: foreign countries by ISO alpha-2 code (e.g. 'PG'), and Alaska, Hawaii and U.S. territories by 'US-XX' code. Returns lodging, local and proportional meal rates, incidentals and the maximum per diem (lodging + meals + incidentals) per season. q filters by location name. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.

Input schema

oconus_iso_code stringrequired

Foreign country ISO 3166-1 alpha-2 code (e.g. BE), or one of the OCONUS state codes US-AK, US-HI, US-PR, US-GU, US-VI, US-AS, US-MP, US-UM. Resolve a country name to its code with get_countries (q=name).

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

year integer

A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

q string | null

Search by location name or state/country name

q (anyOf 1) string

q (anyOf 2) null

offset integer

limit integer

{
  "type": "object",
  "properties": {
    "oconus_iso_code": {
      "type": "string",
      "description": "Foreign country ISO 3166-1 alpha-2 code (e.g. BE), or one of the OCONUS state codes US-AK, US-HI, US-PR, US-GU, US-VI, US-AS, US-MP, US-UM. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "US-AK",
        "BE"
      ],
      "title": "Oconus Iso Code"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "year": {
      "type": "integer",
      "description": "A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "openapi_examples": {
        "recent": {
          "value": 2026
        },
        "historic": {
          "value": 2005
        }
      },
      "title": "Year"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    },
    "q": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "minLength": 3,
      "description": "Search by location name or state/country name",
      "title": "Q"
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "title": "Offset"
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "title": "Limit"
    }
  },
  "required": [
    "oconus_iso_code"
  ]
}

TOOLREAD-ONLY search_dtmo_perdiem

Search DTMO per diem by name

Finds Department of Defense per diem by location name ('Kabul') or country or state name ('Afghanistan'), across CONUS and OCONUS, with no code needed. Returns lodging, local and proportional meal rates, incidentals and maximum per diem per matching location and season. date selects the rates in force on that day, year a fiscal year (Oct 1 to Sep 30); omit both for the current fiscal year.

Input schema

q string | null

Search by location name or state/country name

q (anyOf 1) string

q (anyOf 2) null

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

year integer

A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "q": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "minLength": 3,
      "description": "Search by location name or state/country name",
      "title": "Q"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "year": {
      "type": "integer",
      "description": "A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "openapi_examples": {
        "recent": {
          "value": 2026
        },
        "historic": {
          "value": 2005
        }
      },
      "title": "Year"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  }
}

TOOLREAD-ONLY get_dtmo_conus_locations

DTMO CONUS locations by state

Returns the DTMO per diem locations of a US state (US-XX code) with location name and county, as named in the Department of Defense CONUS table. Use it to find the name for the q filter of get_dtmo_perdiem_conus. Returns no rates. For other countries, Alaska, Hawaii and territories use get_dtmo_oconus_locations.

Input schema

state_iso stringrequired

US state code: US- followed by the postal abbreviation, e.g. US-CA for California.

{
  "type": "object",
  "properties": {
    "state_iso": {
      "type": "string",
      "description": "US state code: US- followed by the postal abbreviation, e.g. US-CA for California.",
      "examples": [
        "US-AL",
        "US-CA"
      ],
      "title": "State Iso"
    }
  },
  "required": [
    "state_iso"
  ]
}

TOOLREAD-ONLY get_dtmo_oconus_locations

DTMO OCONUS locations by country

Returns the DTMO per diem locations of a country by ISO alpha-2 code ('AU', 'BE'), as named in the Department of Defense OCONUS table. location filters by case-insensitive substring, taken literally (no wildcards); no match returns an empty list. Use the names for the q filter of get_dtmo_perdiem_oconus. Returns no rates.

Input schema

country_iso_code stringrequired

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

location string | null

Filter by location name

location (anyOf 1) string

location (anyOf 2) null

{
  "type": "object",
  "properties": {
    "country_iso_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
      "examples": [
        "BE",
        "JP",
        "KE"
      ],
      "title": "Country Iso Code"
    },
    "location": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Filter by location name",
      "title": "Location"
    }
  },
  "required": [
    "country_iso_code"
  ]
}

MCP - FEMA - Fire-safe lodging

TOOLREAD-ONLY search_fema_hotels

Search FEMA-listed properties by name and town

Searches FEMA's Hotel and Motel National Master List (fire-safe lodging, required for reimbursed federal travel) by property name and city: every word of q must appear as a plain substring of the name or city, with no fuzzy matching. state narrows to one state; paginated with offset, limit (up to 200) and total. Returns FEMA ID, address, phone and property details, no rates: pair with GSA per diem for the lodging cap.

Input schema

q stringrequired

Words to find in the property name or city, all required, case-insensitive.

state string | null

Restrict the search to one state or territory.

state (anyOf 1) string

2-digits US State ISO Code, format XX

state (anyOf 2) null

offset integer

Number of properties to skip.

limit integer

Properties per page, 200 at most.

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 3,
      "description": "Words to find in the property name or city, all required, case-insensitive.",
      "examples": [
        "mint house alexandria"
      ],
      "title": "Q"
    },
    "state": {
      "anyOf": [
        {
          "type": "string",
          "description": "2-digits US State ISO Code, format XX",
          "examples": [
            "AL",
            "CA"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Restrict the search to one state or territory.",
      "title": "State"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of properties to skip.",
      "default": 0,
      "title": "Offset"
    },
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Properties per page, 200 at most.",
      "default": 50,
      "title": "Limit"
    }
  },
  "required": [
    "q"
  ]
}

TOOLREAD-ONLY get_fema_hotel_by_id

FEMA-listed property by FEMA ID

Returns one property on FEMA's Hotel and Motel National Master List by FEMA ID, or a 404 error when the ID is not listed: name, address, phone, property type, stories and sprinklers, with as_of the date of the list snapshot. Use it to confirm a hotel is fire-safe for reimbursed federal lodging. No rates.

Input schema

fema_id stringrequired

FEMA ID of the property as printed on the Hotel and Motel National Master List, two letters followed by digits. Case-insensitive.

{
  "type": "object",
  "properties": {
    "fema_id": {
      "type": "string",
      "description": "FEMA ID of the property as printed on the Hotel and Motel National Master List, two letters followed by digits. Case-insensitive.",
      "examples": [
        "VA6026"
      ],
      "title": "Fema Id"
    }
  },
  "required": [
    "fema_id"
  ]
}

TOOLREAD-ONLY get_fema_hotels_by_zipcode

FEMA-listed properties by ZIP code

Returns every property on FEMA's Hotel and Motel National Master List in a US ZIP code (five digits or ZIP+4), ordered by name, with FEMA ID, address and property details. A known ZIP with no listed property returns an empty list, an unknown ZIP a 404 error. Fire-safe lodging is required for reimbursed federal travel; no rates, pair with get_gsa_perdiem_by_zipcode.

Input schema

zipcode stringrequired

US ZIP (12345) or ZIP+4 (12345-6789)

{
  "type": "object",
  "properties": {
    "zipcode": {
      "type": "string",
      "description": "US ZIP (12345) or ZIP+4 (12345-6789)",
      "openapi_examples": {
        "normal": {
          "summary": "Five digits postcode",
          "value": "12084"
        },
        "zip_plus_four": {
          "summary": "Zip+4 format",
          "value": "12084-1234"
        }
      },
      "title": "Zipcode"
    }
  },
  "required": [
    "zipcode"
  ]
}

TOOLREAD-ONLY get_fema_hotels_by_state_city

FEMA-listed hotels by state and city

Returns the properties on FEMA's Hotel and Motel National Master List in a US state, optionally narrowed by a partial, case-insensitive city ('york' matches New York and Yorktown), ordered by city then name and paginated with offset, limit (up to 200) and total. Covers the 50 states, DC and the territories FEMA lists. Returns FEMA ID, address and property details, no rates.

Input schema

state_iso stringrequired

2-digits US State ISO Code, format XX

city string | null

Case-insensitive partial match on the city name.

city (anyOf 1) string

city (anyOf 2) null

offset integer

Number of properties to skip.

limit integer

Properties per page, 200 at most.

{
  "type": "object",
  "properties": {
    "state_iso": {
      "type": "string",
      "description": "2-digits US State ISO Code, format XX",
      "examples": [
        "AL",
        "CA"
      ],
      "title": "State Iso"
    },
    "city": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 2
        },
        {
          "type": "null"
        }
      ],
      "description": "Case-insensitive partial match on the city name.",
      "examples": [
        "Alexandria"
      ],
      "title": "City"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of properties to skip.",
      "default": 0,
      "title": "Offset"
    },
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Properties per page, 200 at most.",
      "default": 50,
      "title": "Limit"
    }
  },
  "required": [
    "state_iso"
  ]
}

MCP - GSA - per diem, mileage, fleet and airfare

TOOLREAD-ONLY get_gsa_perdiem_by_destination

GSA per diem rate by destination

Returns the GSA per diem of one GSA destination rate area (a city, county, metro area or the Standard CONUS area, ID 0) in effect today or on date: the seasonal lodging rate and daily M&IE in USD. Destination IDs come from get_destinations or any GSA per diem result. When the ID is unknown use get_gsa_perdiem_by_zipcode or get_gsa_perdiem_by_state.

Input schema

destination_id integerrequired

GSA's numeric identifier for a rate area. Retrieve valid IDs from GET /v1/gsa/destinations; ID 0 is the Standard CONUS rate.

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "destination_id": {
      "type": "integer",
      "description": "GSA's numeric identifier for a rate area. Retrieve valid IDs from \`GET /v1/gsa/destinations\`; ID 0 is the Standard CONUS rate.",
      "title": "Destination Id"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "verification_url": {
      "type": "boolean",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true,
      "title": "Verification Url"
    }
  },
  "required": [
    "destination_id"
  ]
}

TOOLREAD-ONLY get_gsa_perdiem_by_state

GSA per diem rates by state and date

Returns every GSA destination rate in a US state (US-XX) in effect today or on date: seasonal lodging and daily M&IE in USD per destination, with its county. location filters by destination or defined-area name, case-insensitive and partial. A state with no non-standard destination returns the Standard CONUS rate. CONUS only: for Alaska, Hawaii, territories and abroad use the DTMO or DSSR tools.

Input schema

state_iso stringrequired

Two-letter US postal abbreviation for the state or District of Columbia.

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

location string | null

Optional case-insensitive partial match against the GSA destination name or location-defined name.

location (anyOf 1) string

location (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "state_iso": {
      "type": "string",
      "description": "Two-letter US postal abbreviation for the state or District of Columbia.",
      "title": "State Iso"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "location": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional case-insensitive partial match against the GSA destination name or location-defined name.",
      "title": "Location"
    },
    "verification_url": {
      "type": "boolean",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true,
      "title": "Verification Url"
    }
  },
  "required": [
    "state_iso"
  ]
}

TOOLREAD-ONLY get_gsa_perdiem_by_state_year

GSA per diem rates by state and fiscal year

Return every GSA destination rate in a US state (US-XX) for a US fiscal year (October 1 to September 30): the lodging rate for every month and the daily M&IE rate per destination. The optional location filters destinations by GSA destination or defined-area name, case-insensitive and partial. Set verification_url=true to include the official GSA state lookup URL. Use get_gsa_perdiem_by_state for the rate on one date.

Input schema

state_iso stringrequired

Two-letter US postal abbreviation for the state or District of Columbia.

year integerrequired

Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

location string | null

Optional case-insensitive partial match against the GSA destination name or location-defined name.

location (anyOf 1) string

location (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "state_iso": {
      "type": "string",
      "description": "Two-letter US postal abbreviation for the state or District of Columbia.",
      "title": "State Iso"
    },
    "year": {
      "type": "integer",
      "description": "Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Year"
    },
    "location": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional case-insensitive partial match against the GSA destination name or location-defined name.",
      "title": "Location"
    },
    "verification_url": {
      "type": "boolean",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true,
      "title": "Verification Url"
    }
  },
  "required": [
    "state_iso",
    "year"
  ]
}

TOOLREAD-ONLY get_gsa_perdiem_by_zipcode

GSA per diem rates by ZIP code and date

Returns the GSA per diem for a US ZIP code (five digits or ZIP+4) in effect today or on date: seasonal lodging and daily M&IE in USD. A ZIP can map to several destinations; then every rate is returned with its county and none is chosen for you. A ZIP with no non-standard destination returns the Standard CONUS rate. Use get_gsa_perdiem_by_zipcode_year for a whole fiscal year.

Input schema

zipcode stringrequired

Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "zipcode": {
      "type": "string",
      "description": "Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.",
      "title": "Zipcode"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "verification_url": {
      "type": "boolean",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true,
      "title": "Verification Url"
    }
  },
  "required": [
    "zipcode"
  ]
}

TOOLREAD-ONLY get_gsa_perdiem_by_zipcode_year

GSA per diem rates by ZIP code and fiscal year

Returns the GSA lodging rate for every month of a US fiscal year (October 1 to September 30) and the daily M&IE, in USD, for a US ZIP code (five digits or ZIP+4). A ZIP can map to several destinations; then every rate is returned with its county and none is chosen for you. A ZIP with no non-standard destination returns the Standard CONUS rate. Use get_gsa_perdiem_by_zipcode for the rate on one date.

Input schema

zipcode stringrequired

Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.

year integerrequired

Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "zipcode": {
      "type": "string",
      "description": "Five-digit US ZIP code, or ZIP+4. ZIP+4 values are normalized to the first five digits.",
      "title": "Zipcode"
    },
    "year": {
      "type": "integer",
      "description": "Four-digit US fiscal year. Fiscal year 2026 runs from 2025-10-01 through 2026-09-30. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Year"
    },
    "verification_url": {
      "type": "boolean",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true,
      "title": "Verification Url"
    }
  },
  "required": [
    "zipcode",
    "year"
  ]
}

TOOLREAD-ONLY get_zipcode

ZIP code metadata

Returns the state or states a US ZIP code (five digits or ZIP+4) belongs to; a ZIP that crosses a state line returns every state. Metadata only, no rates: use get_gsa_perdiem_by_zipcode for per diem. Send ZIPs as strings so leading zeros survive.

Input schema

zipcode stringrequired

US ZIP (12345) or ZIP+4 (12345-6789)

{
  "type": "object",
  "properties": {
    "zipcode": {
      "type": "string",
      "description": "US ZIP (12345) or ZIP+4 (12345-6789)",
      "openapi_examples": {
        "normal": {
          "summary": "Five digits postcode",
          "value": "12084"
        },
        "zip_plus_four": {
          "summary": "Zip+4 format",
          "value": "12084-1234"
        }
      },
      "title": "Zipcode"
    }
  },
  "required": [
    "zipcode"
  ]
}

TOOLREAD-ONLY get_destination_by_id

Get GSA destination metadata by ID

Returns the metadata of one GSA destination rate area by numeric ID: GSA's display name, the defined geographic scope, county and state. ID 0 is the Standard CONUS area. No rates: use get_gsa_perdiem_by_destination for the rate on a date and get_destinations to browse IDs.

Input schema

destination_id integerrequired

GSA's numeric identifier for a destination rate area. Retrieve valid IDs from GET /v1/gsa/destinations; ID 0 is Standard CONUS.

{
  "type": "object",
  "properties": {
    "destination_id": {
      "type": "integer",
      "description": "GSA's numeric identifier for a destination rate area. Retrieve valid IDs from \`GET /v1/gsa/destinations\`; ID 0 is Standard CONUS.",
      "title": "Destination Id"
    }
  },
  "required": [
    "destination_id"
  ]
}

TOOLREAD-ONLY get_destinations

List GSA destinations

Returns the paginated list of every GSA destination rate area with its numeric ID, display name, defined scope, county and state, ordered by ID (offset, limit; past the end is an empty list). Use the ID with get_gsa_perdiem_by_destination or calculate_trip_per_diem. No rates; a ZIP or state lookup is usually faster than browsing.

Input schema

offset integer

Number of destination records to skip before returning results.

limit integer

Maximum number of destinations to return. The maximum is 200.

{
  "type": "object",
  "properties": {
    "offset": {
      "type": "integer",
      "description": "Number of destination records to skip before returning results.",
      "default": 0,
      "title": "Offset"
    },
    "limit": {
      "type": "integer",
      "maximum": 200,
      "description": "Maximum number of destinations to return. The maximum is 200.",
      "default": 100,
      "title": "Limit"
    }
  }
}

TOOLREAD-ONLY get_city_pair_locations

City Pair airport and city codes

Returns the airport or metropolitan codes GSA uses in City Pair airfare awards for the fiscal year of date (today by default), with city, state and country. GSA decides whether a city uses airport codes (DCA, IAD) or a metro code (WAS), so resolve codes here before get_city_pairs. q (3+ characters) matches a code exactly or a city or country name by substring. Fiscal years other than the current one depend on the plan.

Input schema

q string | null

Match a code exactly or a city/country name by substring; case-insensitive. Omit to list every code of the fiscal year.

q (anyOf 1) string

q (anyOf 2) null

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

{
  "type": "object",
  "properties": {
    "q": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "minLength": 3,
      "description": "Match a code exactly or a city/country name by substring; case-insensitive. Omit to list every code of the fiscal year.",
      "examples": [
        "washington",
        "LON"
      ],
      "title": "Q"
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    }
  }
}

TOOLREAD-ONLY get_city_pairs

City Pair contract airfares

Returns GSA City Pair Program contract airfares between two codes (see get_city_pair_locations) on date, today by default: every matching award with airline, service and one-way USD fares by category (YCA, CA, business and others; null means not offered), valid in either direction. Government contract prices, not live availability; domestic fares exclude passenger and security fees. Other fiscal years depend on the plan; there is no fallback to another date.

Input schema

origin stringrequired

Three-letter airport or international city code; case-insensitive. No city-name expansion.

destination stringrequired

Three-letter airport or international city code; case-insensitive. No city-name expansion.

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

{
  "type": "object",
  "properties": {
    "origin": {
      "type": "string",
      "description": "Three-letter airport or international city code; case-insensitive. No city-name expansion.",
      "examples": [
        "ABE",
        "LON"
      ],
      "title": "Origin"
    },
    "destination": {
      "type": "string",
      "description": "Three-letter airport or international city code; case-insensitive. No city-name expansion.",
      "examples": [
        "ABE",
        "LON"
      ],
      "title": "Destination"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    }
  },
  "required": [
    "origin",
    "destination"
  ]
}

TOOLREAD-ONLY get_mileage

POV mileage rates

Returns the GSA privately owned vehicle (POV) mileage reimbursement rates in USD per mile for airplane, automobile, government-furnished automobile, motorcycle and moving, in effect today or on date; type selects one. Use calculate_mileage_reimbursement to turn a distance into an amount.

Input schema

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

type string | null

Filter by mileage type

type (anyOf 1) string

Allowed values: ["airplane", "automobile", "government_furnished_automobile", "motorcycle", "moving"]

type (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "type": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "airplane",
            "automobile",
            "government_furnished_automobile",
            "motorcycle",
            "moving"
          ],
          "title": "MileageType"
        },
        {
          "type": "null"
        }
      ],
      "description": "Filter by mileage type",
      "title": "Type"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  }
}

TOOLREAD-ONLY get_mie_breakdowns

M&IE meal breakdowns

Return how daily M&IE totals break down into breakfast, lunch, dinner and incidental expenses, as in effect on the given date. The CONUS table breaks down the five standard CONUS M&IE tiers and is returned by default. Set region=oconus for the generic DTMO/DSSR M&IE total table. If date is not specified, today's breakdowns will be returned.

Input schema

date string | null

The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

region string

Breakdown table to return; defaults to CONUS

Allowed values: ["conus", "oconus"]

total integer | null

Filter by daily M&IE total in USD

total (anyOf 1) integer

total (anyOf 2) null

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "description": "The day the rates must be in force, YYYY-MM-DD; today when omitted. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "title": "Date"
    },
    "region": {
      "type": "string",
      "enum": [
        "conus",
        "oconus"
      ],
      "title": "MieBreakdownRegion",
      "description": "Breakdown table to return; defaults to CONUS",
      "default": "conus"
    },
    "total": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Filter by daily M&IE total in USD",
      "title": "Total"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  }
}

TOOLREAD-ONLY get_fleet_rates_by_sin

GSA Fleet leasing rates

Returns the GSA Fleet vehicle leasing rates (monthly lease rate and rate per mile) for the vehicle type identified by its Standard Item Number (SIN), from the standard (US) or europe rate schedule, for the current fiscal year unless year is given; rates are available from fiscal year 2022. SINs are the vehicle-type codes of the GSA Fleet rate schedule; the response names the vehicle type.

Input schema

rate_type stringrequired

The GSA Fleet rate schedule: 'standard' covers vehicles leased in the United States, 'europe' covers vehicles leased in Europe.

Allowed values: ["standard", "europe"]

sin stringrequired

Standard Item Number (SIN) identifying a GSA Fleet leased vehicle type, case insensitive.

year integer

A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "rate_type": {
      "type": "string",
      "enum": [
        "standard",
        "europe"
      ],
      "title": "Fleet rate schedule",
      "description": "The GSA Fleet rate schedule: 'standard' covers vehicles leased in the United States, 'europe' covers vehicles leased in Europe."
    },
    "sin": {
      "type": "string",
      "title": "GSA Fleet SIN",
      "description": "Standard Item Number (SIN) identifying a GSA Fleet leased vehicle type, case insensitive."
    },
    "year": {
      "type": "integer",
      "description": "A fiscal year starts Oct 1st, ends Sep 30th. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "openapi_examples": {
        "recent": {
          "value": 2026
        },
        "historic": {
          "value": 2005
        }
      },
      "title": "Year"
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification URL",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  },
  "required": [
    "rate_type",
    "sin"
  ]
}

TOOLREAD-ONLY get_gsa_fedrooms

List worldwide FedRooms properties

Lists current worldwide FedRooms hotels with name, address, postal city, state, postal code and country. Optional q matches every word as a case-insensitive literal substring across those fields. country filters by ISO alpha-2 code; results include country_iso_code. Paginate with offset and limit (maximum 200); total counts matches. as_of is the UTC download date. verification_url always links to GSA. No prices or availability; book through approved channels for the FedRooms rate.

Input schema

country string | null

Filter by ISO 3166-1 alpha-2 country code, e.g. US or GB.

country (anyOf 1) string

ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).

country (anyOf 2) null

q string | null

Search all six property fields; every word must match a case-insensitive literal substring.

q (anyOf 1) string

q (anyOf 2) null

offset integer

Number of properties to skip.

limit integer

Properties per page, at most 200.

{
  "type": "object",
  "properties": {
    "country": {
      "anyOf": [
        {
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code, e.g. PG for Papua New Guinea; ZZ stands for 'Other Foreign Localities', not a country. Resolve a country name to its code with get_countries (q=name).",
          "examples": [
            "BE",
            "JP",
            "KE"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Filter by ISO 3166-1 alpha-2 country code, e.g. US or GB.",
      "title": "Country"
    },
    "q": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 2,
          "maxLength": 200,
          "pattern": "\\S"
        },
        {
          "type": "null"
        }
      ],
      "description": "Search all six property fields; every word must match a case-insensitive literal substring.",
      "examples": [
        "courtyard dallas"
      ],
      "title": "Q"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of properties to skip.",
      "default": 0,
      "title": "Offset"
    },
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Properties per page, at most 200.",
      "default": 50,
      "title": "Limit"
    }
  }
}

TOOLREAD-ONLY calculate_mileage_reimbursement

Mileage reimbursement calculator

Calculate mileage reimbursement with the official GSA rate in effect on the travel date (today if omitted). Provide a distance in miles and the vehicle type: automobile, airplane, motorcycle or moving. For automobile travel, say whether a government-furnished automobile was available, which selects the reduced rate. Returns the rate category, rate and effective date, and the amount rounded to the cent. Use get_mileage for the rates alone.

Input schema

distance numberrequired

One-way or total travel distance in miles, from 0.001 through 100,000.

vehicle_type stringrequired

Vehicle or travel category used to select the applicable GSA mileage rate.

Allowed values: ["automobile", "airplane", "motorcycle", "moving"]

government_vehicle_available boolean

Optional for automobile calculations and defaults to false. Use true when a government-furnished automobile is authorized and available; false selects the standard privately owned automobile rate.

date string | null

Travel date used to select the effective rate. Accepts YYYY-MM-DD or YYYYMMDD; defaults to today. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.

date (anyOf 1) string

date (anyOf 2) null

{
  "type": "object",
  "properties": {
    "distance": {
      "type": "number",
      "multipleOf": 0.001,
      "maximum": 100000.0,
      "exclusiveMinimum": 0.0,
      "title": "Distance",
      "description": "One-way or total travel distance in miles, from 0.001 through 100,000.",
      "example": 125.5
    },
    "vehicle_type": {
      "type": "string",
      "enum": [
        "automobile",
        "airplane",
        "motorcycle",
        "moving"
      ],
      "title": "MileageCalculatorVehicleType",
      "description": "Vehicle or travel category used to select the applicable GSA mileage rate.",
      "example": "automobile"
    },
    "government_vehicle_available": {
      "type": "boolean",
      "title": "Government Vehicle Available",
      "description": "Optional for automobile calculations and defaults to false. Use true when a government-furnished automobile is authorized and available; false selects the standard privately owned automobile rate.",
      "default": false,
      "example": false
    },
    "date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Date",
      "description": "Travel date used to select the effective rate. Accepts YYYY-MM-DD or YYYYMMDD; defaults to today. Plan limits: Sandbox and Google add-on accounts may query dates within 30 days of today, Pro the current and previous US fiscal year, Business any date.",
      "example": "2026-07-11"
    }
  },
  "required": [
    "distance",
    "vehicle_type"
  ]
}

TOOLREAD-ONLY calculate_trip_per_diem

GSA trip per diem calculator

Estimates GSA CONUS per diem for a multi-stop trip: a day-by-day breakdown and totals of payable lodging and M&IE. Each stop has inclusive arrival and departure dates and a GSA destination ID or ZIP code, optionally the actual nightly lodging cost and meals to deduct. Applies the rate in effect each day, 75% M&IE on first and last days, the official meal deductions and the lodging cap (excess reported as overage). Not for Department of Defense or foreign travel.

Input schema

stops object[]required

Ordered, contiguous TDY-locality stops for the trip.

stops[] object

stops[].location objectrequired

TDY locality for the stop; not merely the hotel location.

stops[].location.zipcode string | null

Five-digit US ZIP or ZIP+4. ZIP+4 is normalized to five digits.

stops[].location.zipcode (anyOf 1) string

stops[].location.zipcode (anyOf 2) null

stops[].location.destination_id integer | null

GSA destination identifier. Destination 0 is Standard CONUS.

stops[].location.destination_id (anyOf 1) integer

stops[].location.destination_id (anyOf 2) null

stops[].arrival_date stringrequired

First calendar date owned by this stop.

stops[].departure_date stringrequired

Shared boundary/return date; the arriving next stop owns a transition date.

stops[].lodging_cost_per_night number | string | null

Optional actual room cost applied to every lodging night in this stop. Must be a JSON number with no more than two decimal places.

stops[].lodging_cost_per_night (anyOf 1) number

stops[].lodging_cost_per_night (anyOf 2) string

stops[].lodging_cost_per_night (anyOf 3) null

deductible_meals object[]

Sparse caller-determined meal deductions, keyed by trip date.

deductible_meals[] object

deductible_meals[].date stringrequired

Inclusive trip date on which meals are deducted.

deductible_meals[].meals string[]required

Non-empty unique breakfast/lunch/dinner deductions for the date.

deductible_meals[].meals[] string

Allowed values: ["breakfast", "lunch", "dinner"]

verification_url boolean

Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.

{
  "type": "object",
  "properties": {
    "stops": {
      "items": {
        "properties": {
          "location": {
            "properties": {
              "zipcode": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Zipcode",
                "description": "Five-digit US ZIP or ZIP+4. ZIP+4 is normalized to five digits.",
                "examples": [
                  "20001",
                  "20001-1234"
                ]
              },
              "destination_id": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0.0
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Destination Id",
                "description": "GSA destination identifier. Destination 0 is Standard CONUS.",
                "examples": [
                  123
                ]
              }
            },
            "additionalProperties": false,
            "type": "object",
            "title": "GSATripLocationRequest",
            "description": "TDY locality for the stop; not merely the hotel location."
          },
          "arrival_date": {
            "type": "string",
            "format": "date",
            "title": "Arrival Date",
            "description": "First calendar date owned by this stop."
          },
          "departure_date": {
            "type": "string",
            "format": "date",
            "title": "Departure Date",
            "description": "Shared boundary/return date; the arriving next stop owns a transition date."
          },
          "lodging_cost_per_night": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100000.0,
                "minimum": 0.0
              },
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lodging Cost Per Night",
            "description": "Optional actual room cost applied to every lodging night in this stop. Must be a JSON number with no more than two decimal places.",
            "examples": [
              250.0
            ]
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "location",
          "arrival_date",
          "departure_date"
        ],
        "title": "GSATripStopRequest"
      },
      "type": "array",
      "maxItems": 50,
      "minItems": 1,
      "title": "Stops",
      "description": "Ordered, contiguous TDY-locality stops for the trip."
    },
    "deductible_meals": {
      "items": {
        "properties": {
          "date": {
            "type": "string",
            "format": "date",
            "title": "Date",
            "description": "Inclusive trip date on which meals are deducted."
          },
          "meals": {
            "items": {
              "type": "string",
              "enum": [
                "breakfast",
                "lunch",
                "dinner"
              ],
              "title": "GSATripMeal"
            },
            "type": "array",
            "minItems": 1,
            "title": "Meals",
            "description": "Non-empty unique breakfast/lunch/dinner deductions for the date."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "date",
          "meals"
        ],
        "title": "GSATripDeductibleMealsRequest"
      },
      "type": "array",
      "title": "Deductible Meals",
      "description": "Sparse caller-determined meal deductions, keyed by trip date."
    },
    "verification_url": {
      "type": "boolean",
      "title": "Verification Url",
      "description": "Included by default: a link to the official government table for the returned location and date, for the user to confirm the figures. Pass false to omit it.",
      "default": true
    }
  },
  "required": [
    "stops"
  ]
}

MCP - OPM - General Schedule pay

TOOLREAD-ONLY get_opm_localities

GS locality pay areas

Returns OPM General Schedule locality pay areas for the latest pay year with the code for get_opm_pay. location keeps areas whose name contains every word and areas of counties or cities with exactly that name (state narrows it); matched_places shows why. A place in no area returns Rest of U.S. (RUS); several areas come back when a name exists in several states or a city spans areas. Empty results mean an unknown name, not RUS. Territories are not covered.

Input schema

location string | null

County, city or locality area name.

location (anyOf 1) string

location (anyOf 2) null

state string | null

Restrict location to one state.

state (anyOf 1) string

2-digits US State ISO Code, format XX

state (anyOf 2) null

{
  "type": "object",
  "properties": {
    "location": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 2
        },
        {
          "type": "null"
        }
      ],
      "description": "County, city or locality area name.",
      "examples": [
        "evanston"
      ],
      "title": "Location"
    },
    "state": {
      "anyOf": [
        {
          "type": "string",
          "description": "2-digits US State ISO Code, format XX",
          "examples": [
            "AL",
            "CA"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Restrict \`location\` to one state.",
      "title": "State"
    }
  }
}

TOOLREAD-ONLY get_opm_locality_by_county

GS locality pay area of a county

Returns the General Schedule locality pay area of a county by five-digit FIPS code for the latest pay year, with the code for get_opm_pay. Counties outside every area return Rest of U.S. (RUS); every county in Alaska or Hawaii returns that state's area. Unknown codes, Connecticut planning regions and territory counties are 404 errors. Use get_opm_localities to search by name.

Input schema

fips stringrequired

Five-digit county FIPS code: two for the state and three for the county.

{
  "type": "object",
  "properties": {
    "fips": {
      "type": "string",
      "pattern": "^\\d{5}$",
      "description": "Five-digit county FIPS code: two for the state and three for the county.",
      "examples": [
        "17031"
      ],
      "title": "Fips"
    }
  },
  "required": [
    "fips"
  ]
}

TOOLREAD-ONLY search_opm_pay

Search GS pay by locality area

Return the latest General Schedule pay tables whose locality area matches every word of q: each word must be contained in the area name, case-insensitively, or equal its code. grade and step narrow the rates; no match returns an empty results list. Matching only looks at OPM's area names, not the counties and towns they cover, so a town missing from the names returns nothing, which does not mean Rest of U.S. Use get_opm_localities to resolve a place to its area.

Input schema

q stringrequired

Words to find in the locality area name or code, all required, case-insensitive.

grade integer | null

Return only this GS grade, 1 to 15.

grade (anyOf 1) integer

grade (anyOf 2) null

step integer | null

Return only this step, 1 to 10.

step (anyOf 1) integer

step (anyOf 2) null

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 2,
      "description": "Words to find in the locality area name or code, all required, case-insensitive.",
      "examples": [
        "chicago"
      ],
      "title": "Q"
    },
    "grade": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 15,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Return only this GS grade, 1 to 15.",
      "title": "Grade"
    },
    "step": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 10,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Return only this step, 1 to 10.",
      "title": "Step"
    }
  },
  "required": [
    "q"
  ]
}

TOOLREAD-ONLY get_opm_pay

GS pay by locality code

Return the latest pay table of a locality pay area, ordered by grade and step, or 404 for an unknown code. grade and step narrow the rates. Use GS for the base table without locality pay, and RUS for Rest of U.S.

Input schema

locality_code stringrequired

OPM locality pay area code, from /v1/opm/localities, or GS for the base table. Case-insensitive.

grade integer | null

Return only this GS grade, 1 to 15.

grade (anyOf 1) integer

grade (anyOf 2) null

step integer | null

Return only this step, 1 to 10.

step (anyOf 1) integer

step (anyOf 2) null

{
  "type": "object",
  "properties": {
    "locality_code": {
      "type": "string",
      "description": "OPM locality pay area code, from /v1/opm/localities, or GS for the base table. Case-insensitive.",
      "examples": [
        "CHI"
      ],
      "title": "Locality Code"
    },
    "grade": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 15,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Return only this GS grade, 1 to 15.",
      "title": "Grade"
    },
    "step": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 10,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Return only this step, 1 to 10.",
      "title": "Step"
    }
  },
  "required": [
    "locality_code"
  ]
}

MCP - Metadata

TOOLREAD-ONLY get_latest_publications

Latest data publications

Returns the most recent data loaded for each source, with its publication date and fiscal year: DSSR allowances and per diem, DTMO CONUS and OCONUS per diem, GSA per diem, mileage, vehicle rates and M&IE breakdowns, FEMA hotels and OPM pay tables. Use it to say how current an answer is. Returns no rates.

Input schema

(body) object

{
  "type": "object",
  "properties": {}
}

MCP - User

TOOLREAD-ONLY get_user

Account plan and quota

Returns the account behind the API key: plan, monthly request limit, requests used in the current billing period, and the period start, end and renewal date. Use it to explain a quota or plan error or to check remaining requests. This call does not count against the quota.

Input schema

(body) object

{
  "type": "object",
  "properties": {}
}