Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/dtn:dtn-timestamps-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: '# Introduction
DTN API for consuming mapping services
# Map Tile API Playground
A tool that can be used to easily view the layers you have access to using your obtained credentials. It also serves as a simple reference implementation of an interactive map viewer based on the Map Tile API.
Access the Map Tile API Playground here.
If you are migrating from V1 to V2 of the DTN Map Tile API, please refer to our V2 Migration Guide'
version: 2.0.16
title: DTN Map Tile Timestamps API
servers:
- url: https://map.api.dtn.com/v2
description: Version 2 of our mapping API
security:
- clientCredentials: []
tags:
- name: Timestamps
description: Returns each timestamp for each of the layers the system has tiles for.
paths:
/timestamps/{layerId}:
get:
tags:
- Timestamps
summary: Returns list of timestamps of a given layer by id
operationId: getLayerTimestamps
parameters:
- $ref: '#/components/parameters/layer-id'
- $ref: '#/components/parameters/time-range'
- $ref: '#/components/parameters/accept-json'
- $ref: '#/components/parameters/force-off-interval'
- $ref: '#/components/parameters/layer-parameters'
responses:
'200':
$ref: '#/components/responses/timestamp-list'
'406':
$ref: '#/components/responses/not-acceptable'
'422':
$ref: '#/components/responses/unprocessable-entity'
default:
$ref: '#/components/responses/error'
components:
headers:
content-language:
description: Describe the language(s) intended for the audience.
schema:
type: string
default: en-US
x-request-id:
description: UUID compliant with RFC 4122 that uniquely identifies the request.
schema:
type: string
content-encoding:
description: Lists any encodings that have been applied to the returned payload.
schema:
type: string
parameters:
force-off-interval:
in: query
name: forceOffInterval
description: When set to true, this parameter forces the API to return the most recent time frame, even if it falls outside the regular intervals. If set to false or omitted, only data from the regular intervals is returned.
required: false
schema:
type: boolean
default: false
time-range:
in: query
name: time
description: Times range, in UTC and ISO 8601 compliant, delimited by a forward slash. The time range of data has a maximum of 24 hours allowed. This parameter is **optional**, and is mainly used for accessing older, archived data. If not given, returns the latest data available.
required: false
schema:
type: array
minItems: 2
maxItems: 2
items:
type: string
format: date-time
example: 2022-04-01T00:00:00Z/2022-04-02T00:00:00Z
layer-id:
in: path
name: layerId
description: 'Unique identifier for the layer. See the full list of layers on the [DTN Map Tile Layer Catalog](https://map.api.dtn.com/static/html/v2/layer-catalog.html).
'
required: true
schema:
type: string
description: id for the layer from which to receive data.
example: radar-base-ref-precip-type-na-contours
layer-parameters:
in: query
name: parameters
description: 'Key-value pair list, separated by semicolons, representing each of the desired parameter ids and values to use against this endpoint. When available, parameters are defined in the metadata endpoint for each given layer.
'
required: false
schema:
type: string
example: id-1:value-1;id-2:value-2
accept-json:
in: header
name: Accept
required: true
description: Indicates response media types that are acceptable.
schema:
type: string
enum:
- application/json
schemas:
general-error:
type: object
properties:
detail:
type: string
description: A human-readable description of the specific error.
type:
type: string
format: uri
description: A URL to a document describing the error condition.
title:
type: string
description: A short, human-readable title for the general error type.
status:
type: number
description: HTTP status code
instance:
type: string
format: uri
description: URL with the id for the specific error; this will often point to an error log for that specific response.
additionalProperties: true
valid-time:
type: object
properties:
tileSetId:
type: string
description: id to be used in tiles and image endpoints.
example: 46c63648-397c-469d-97a7-622825c58437
valid:
type: string
format: date-time
description: Datetime in ISO 8601 for which the tile set is valid for, in UTC.
example: '2021-01-01T00:00:00Z'
timestamp-wrapper:
type: object
properties:
issued:
type: string
format: date-time
description: Issued datetime in ISO 8601, in UTC. Null when not available.
example: '2021-01-01T00:00:00Z'
timestamps:
type: array
description: List of timestamps in ISO 8601, in UTC.
items:
$ref: '#/components/schemas/valid-time'
example:
issued: '2024-01-01T00:00:00Z'
timestamps:
- tileSetId: 0c1e8264-9434-4ea9-b576-cc6402b46e68
valid: '2024-01-01T00:00:00Z'
- tileSetId: 47bb476a-d184-439c-93cd-149d68049521
valid: '2024-01-01T01:00:00Z'
- tileSetId: 2c76c887-6ae3-49d3-a649-8c788259594e
valid: '2024-01-01T02:00:00Z'
- tileSetId: a52ffc09-3db5-4988-a67f-e37a7719e833
valid: '2024-01-01T03:00:00Z'
responses:
error:
description: error response
headers:
X-Request-ID:
$ref: '#/components/headers/x-request-id'
Content-Encoding:
$ref: '#/components/headers/content-encoding'
Content-Language:
$ref: '#/components/headers/content-language'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/general-error'
example:
type: https://map.api.dtn.com/v1/error-details/not-found
title: resource not found
detail: The layer you requested could not be found.
status: 404
instance: urn:dtn:maps:api:catalog:requestId:123e4567-e89b-12d3-a456-526614176000
not-acceptable:
description: The server cannot produce a response matching the list of acceptable values defined in the request's proactive content negotiation headers, and that the server is unwilling to supply a default representation.
headers:
X-Request-ID:
$ref: '#/components/headers/x-request-id'
Content-Encoding:
$ref: '#/components/headers/content-encoding'
Content-Language:
$ref: '#/components/headers/content-language'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/general-error'
example:
type: https://map.api.dtn.com/v1/error-details/not-allowed
title: not allowed
detail: Either the accept header is missing or none of the values are acceptable.
status: 406
instance: urn:dtn:maps:api:catalog:requestId:123e4567-e89b-12d3-a458-426614176000
unprocessable-entity:
description: The server understands the content type of the request entity, and the syntax of the request entity is correct, but it was unable to process the contained instructions.
headers:
X-Request-ID:
$ref: '#/components/headers/x-request-id'
Content-Encoding:
$ref: '#/components/headers/content-encoding'
Content-Language:
$ref: '#/components/headers/content-language'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/general-error'
example:
type: https://maps.dtn.com/error-details/invalid-object
title: Invalid object in request body
detail: 'Error in Query: The object '''' contains forbidden keys: ''param'''
status: 422
instance: urn:dtn:maps:api:timestamps/sevwx-nws-alert-zones:requestId:341af5d9-022b-4451-b06d-64ef2f2a5964
timestamp-list:
description: successful operation
headers:
X-Request-ID:
$ref: '#/components/headers/x-request-id'
Content-Encoding:
$ref: '#/components/headers/content-encoding'
Content-Language:
$ref: '#/components/headers/content-language'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/timestamp-wrapper'
schemas:
valid-time:
type: object
properties:
tileSetId:
type: string
description: id to be used in tiles and image endpoints.
example: 46c63648-397c-469d-97a7-622825c58437
valid:
type: string
format: date-time
description: Datetime in ISO 8601 for which the tile set is valid for, in UTC.
example: '2021-01-01T00:00:00Z'
timestamp-wrapper:
type: object
properties:
issued:
type: string
format: date-time
description: Issued datetime in ISO 8601, in UTC. Null when not available.
example: '2021-01-01T00:00:00Z'
timestamps:
type: array
description: List of timestamps in ISO 8601, in UTC.
items:
$ref: '#/components/schemas/valid-time'
example:
issued: '2024-01-01T00:00:00Z'
timestamps:
- tileSetId: 0c1e8264-9434-4ea9-b576-cc6402b46e68
valid: '2024-01-01T00:00:00Z'
- tileSetId: 47bb476a-d184-439c-93cd-149d68049521
valid: '2024-01-01T01:00:00Z'
- tileSetId: 2c76c887-6ae3-49d3-a649-8c788259594e
valid: '2024-01-01T02:00:00Z'
- tileSetId: a52ffc09-3db5-4988-a67f-e37a7719e833
valid: '2024-01-01T03:00:00Z'
general-error:
type: object
properties:
detail:
type: string
description: A human-readable description of the specific error.
type:
type: string
format: uri
description: A URL to a document describing the error condition.
title:
type: string
description: A short, human-readable title for the general error type.
status:
type: number
description: HTTP status code
instance:
type: string
format: uri
description: URL with the id for the specific error; this will often point to an error log for that specific response.
additionalProperties: true
parameters:
time-range:
in: query
name: time
description: Times range, in UTC and ISO 8601 compliant, delimited by a forward slash. The time range of data has a maximum of 24 hours allowed. This parameter is **optional**, and is mainly used for accessing older, archived data. If not given, returns the latest data available.
required: false
schema:
type: array
minItems: 2
maxItems: 2
items:
type: string
format: date-time
example: 2022-04-01T00:00:00Z/2022-04-02T00:00:00Z
layer-parameters:
in: query
name: parameters
description: 'Key-value pair list, separated by semicolons, representing each of the desired parameter ids and values to use against this endpoint. When available, parameters are defined in the metadata endpoint for each given layer.
'
required: false
schema:
type: string
example: id-1:value-1;id-2:value-2
layer-id:
in: path
name: layerId
description: 'Unique identifier for the layer. See the full list of layers on the [DTN Map Tile Layer Catalog](https://map.api.dtn.com/static/html/v2/layer-catalog.html).
'
required: true
schema:
type: string
description: id for the layer from which to receive data.
example: radar-base-ref-precip-type-na-contours
force-off-interval:
in: query
name: forceOffInterval
description: When set to true, this parameter forces the API to return the most recent time frame, even if it falls outside the regular intervals. If set to false or omitted, only data from the regular intervals is returned.
required: false
schema:
type: boolean
default: false
accept-json:
in: header
name: Accept
required: true
description: Indicates response media types that are acceptable.
schema:
type: string
enum:
- application/json
headers:
x-request-id:
description: UUID compliant with RFC 4122 that uniquely identifies the request.
schema:
type: string
content-encoding:
description: Lists any encodings that have been applied to the returned payload.
schema:
type: string
content-language:
description: Describe the language(s) intended for the audience.
schema:
type: string
default: en-US
securitySchemes:
clientCredentials:
type: oauth2
x-receive-token-in: request-body
flows:
clientCredentials:
tokenUrl: https://api.auth.dtn.com/v1/tokens/authorize
description: "# Using DAIS for M2M/API Auth\nYou have been given a Client ID and a Client Secret, which are used to request a DTN Access Token. DTN Access Tokens are required when making calls to each and every DTN API endpoint. The following information provides additional details on these tokens and how they are generated.\n## What is an Access Token and how is it different from an API Key?\nAn API Key is a random string of characters that an API uses to authorize whether or not a calling client has approved access to an endpoint. These keys are a non-standard approach to API authorization and are generally issued on a per-API basis.\n\nAn Access Token is also a string of characters but is a base-64 encoded JavaScript Object Notation Web Token, or JWT. JWTs are a widely accepted standard that use OAuth concepts and approaches. \n\nBoth API Keys and Access Tokens are used in an Authorization Request Header as a Bearer, meaning there is no difference in where you put this string of characters when you make calls to DTN APIs.\n## How to generate an Access Token?\nWhen requested, an Access Token is generated for your specific Client (ID/Secret) and for a specific API. The DTN Auth and Identity Service (DAIS) generates new Access Tokens for your client. The DAIS endpoint is `POST https://api.auth.dtn.com/v1/tokens/authorize`.\n\nThis endpoint takes two Header parameters:\n * `Content-Type: application/json`\n * `Accept: application/json`\n\nThis endpoint takes four parameters in the Request Body:\n * `grant_type`: this should always be client_credentials for generating machine-to-machine tokens.\n * `client_id`: this is the Client ID or Application ID using the token and is given to you by DTN's Identity Team. This ID will never change for your client/application.\n * `client_secret`: this is the Client Secret that is associated with the Application ID and is given to you by DTN's Identity Team. This key is subject to rotation for security purposes but always with the client's knowledge.\n * `audience`: this is the API for which this Access Token will be used. For the DTN Map Tile API, you need to use the following audience: https://map.api.dtn.com\n\nYou can use this CURL command template as a reference for obtaining an access token:\n ```\n curl --location --request POST 'https://api.auth.dtn.com/v1/tokens/authorize' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n\"grant_type\": \"client_credentials\",\n\"client_id\": \"insert your client id here\",\n\"client_secret\": \"insert your client secret here\",\n\"audience\": \"insert your audience here\"\n}' \n ```\n\n*This document, for demonstration purposes, supplies a client_id and client_secret in all code examples. This client/application is for a fictitious API and cannot be used in practice to gain unauthorized access to any other DTN API.*\nUpon generating a new Access Token, you should receive an HTTP Response from DAIS similar to this:\n ```\n {\n \"data\": {\n \"access_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InpfX21pZW13NGhoTmdvQWQxR3N6ciJ9.eyJodHRwczovL2F1dGguZHRuLmNvbS9jdXN0b21lcklkIjoiMTIzNDU2Nzg5MERlbW8iLCJodHRwczovL2F1dGguZHRuLmNvbS9wcm9kdWN0Q29kZSI6IkRlbW9BcGlQIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcmVxdWVzdGVySXAiOiIxOC4yMTMuMTc0LjI3IiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcnBzIjoiMTAwIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vdGllciI6IkJhc2ljIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcXVvdGEiOiI5OTk5OTkiLCJpc3MiOiJodHRwczovL2lkLmF1dGguZHRuLmNvbS8iLCJzdWIiOiJuZnlPM0tpS1BSOE4wREtSNUNMOGpTOUdGQkNEZXlGTUBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9kZW1vLWFwaS5hdXRoLmR0bi5jb20vIiwiaWF0IjoxNjU2MDk5MDY4LCJleHAiOjE2NTYwOTkxNTgsImF6cCI6Im5meU8zS2lLUFI4TjBES1I1Q0w4alM5R0ZCQ0RleUZNIiwic2NvcGUiOiJyZWFkOmRlbW8gY3JlYXRlOmRlbW8gdXBkYXRlOmRlbW8iLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMiLCJwZXJtaXNzaW9ucyI6WyJyZWFkOmRlbW8iLCJjcmVhdGU6ZGVtbyIsInVwZGF0ZTpkZW1vIl19.0VHdyp1w9PPFVI0FPheAwuKZwb5C25rwP-LPMXcSNoRmouvga1DZtNLA67ZzE_sAlc_VpaDRr6daLKr_Alw4347mw9sdjP8wKR27kCZa9JZK5PGQMmXHscATbzBEJYpCPklfyGaajgymqTBGnedcv8F0UvlRzQPsFeRPnVoX7BWOSXpMbyToGiXWkQLBQT7r96KAmLZOPJFZspPtjw-wH2mSL2WNa_nkB4j5vMGhGxlKiNRsKb30TH_WAel2hsxNlcPK3XHCmrMTYsNnu7HNqOTMn2i0__0rvBrhSWEw-_grqQDmWFJuWd7Qhi1q81AaJcdqgoSa_efz93QFclJUNw\",\n \"scope\": \"read:demo create:demo update:demo\",\n \"expires_in\": 90,\n \"token_type\": \"Bearer\"\n },\n \"meta\": {\n \"date_time\": \"2022-06-24T19:09:42.963Z\",\n \"name\": \"v1.tokens.authorize\",\n \"uuid\": \"ee6f9feb-dcf8-4421-a6fd-efd6beabdaa9\",\n \"start_timestamp\": 1656097782509,\n \"end_timestamp\": 1656097782963,\n \"execution_time\": 454\n }\n }\n ```\nLooking at this Response, you will see:\n * `access_token`: contains the JWT Access Token string you will use as your Bearer token.\n * `scope`: contains the scopes that this Access Token gives you permissions to access.\n * `expires_in`: contains the length of time before this Access Token will expire, in seconds.\n * `token_type`: verifies that this Access Token should be used as a Bearer token.\n\n## How to use an Access Token after one is generated?\nOnce a new Access Token is obtained, it is used in each call to a DTN API endpoint as a Bearer token in an Authorization Request Header. For example:\n ```\n Header: 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InpfX21pZW13NGhoTmdvQWQxR3N6ciJ9.eyJodHRwczovL2F1dGguZHRuLmNvbS9jdXN0b21lcklkIjoiMTIzNDU2Nzg5MERlbW8iLCJodHRwczovL2F1dGguZHRuLmNvbS9wcm9kdWN0Q29kZSI6IkRlbW9BcGlQIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcmVxdWVzdGVySXAiOiIxOC4yMTMuMTc0LjI3IiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcnBzIjoiMTAwIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vdGllciI6IkJhc2ljIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcXVvdGEiOiI5OTk5OTkiLCJpc3MiOiJodHRwczovL2lkLmF1dGguZHRuLmNvbS8iLCJzdWIiOiJuZnlPM0tpS1BSOE4wREtSNUNMOGpTOUdGQkNEZXlGTUBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9kZW1vLWFwaS5hdXRoLmR0bi5jb20vIiwiaWF0IjoxNjU2MDk5MDY4LCJleHAiOjE2NTYwOTkxNTgsImF6cCI6Im5meU8zS2lLUFI4TjBES1I1Q0w4alM5R0ZCQ0RleUZNIiwic2NvcGUiOiJyZWFkOmRlbW8gY3JlYXRlOmRlbW8gdXBkYXRlOmRlbW8iLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMiLCJwZXJtaXNzaW9ucyI6WyJyZWFkOmRlbW8iLCJjcmVhdGU6ZGVtbyIsInVwZGF0ZTpkZW1vIl19.0VHdyp1w9PPFVI0FPheAwuKZwb5C25rwP-LPMXcSNoRmouvga1DZtNLA67ZzE_sAlc_VpaDRr6daLKr_Alw4347mw9sdjP8wKR27kCZa9JZK5PGQMmXHscATbzBEJYpCPklfyGaajgymqTBGnedcv8F0UvlRzQPsFeRPnVoX7BWOSXpMbyToGiXWkQLBQT7r96KAmLZOPJFZspPtjw-wH2mSL2WNa_nkB4j5vMGhGxlKiNRsKb30TH_WAel2hsxNlcPK3XHCmrMTYsNnu7HNqOTMn2i0__0rvBrhSWEw-_grqQDmWFJuWd7Qhi1q81AaJcdqgoSa_efz93QFclJUNw'\n ```\n\n## Deconstructing the Access Token\nA DTN Access Token carries information within its JWT Body that is available on every API call. By deconstructing the JWT token, our Access Tokens will resemble:\n ```\n {\n \"https://auth.dtn.com/customerId\": \"1234567890Demo\",\n \"https://auth.dtn.com/productCode\": \"DemoApiP\",\n \"https://auth.dtn.com/requesterIp\": \"18.213.174.27\",\n \"https://auth.dtn.com/rps\": \"100\",\n \"https://auth.dtn.com/tier\": \"Basic\",\n \"https://auth.dtn.com/quota\": \"999999\",\n \"iss\": \"https://id.auth.dtn.com/\",\n \"sub\": \"nfyO3KiKPR8N0DKR5CL8jS9GFBCDeyFM@clients\",\n \"aud\": \"https://demo-api.auth.dtn.com/\",\n \"iat\": 1656099068,\n \"exp\": 1656099158,\n \"azp\": \"nfyO3KiKPR8N0DKR5CL8jS9GFBCDeyFM\",\n \"scope\": \"read:demo create:demo update:demo\",\n \"gty\": \"client-credentials\",\n \"permissions\": [\n \"read:demo\",\n \"create:demo\",\n \"update:demo\"\n ]\n }\n ```\n### Description of Claims\n\n | Claim | Type | Description |\n | -----------------------------------| --------------------------------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n | `https://auth.dtn.com/customerId` | String | Custom DTN claim containing the Customer ID found in the DTN Order Management/Salesforce system associated with this token. |\n | `https://auth.dtn.com/productCode` | String | Custom DTN claim containing the Identity product code associated with this token. |\n | `https://auth.dtn.com/requesterIp` | String | Custom DTN claim containing the IP address of the requesting client. |\n | `https://auth.dtn.com/rps` | String | Custom DTN claim containing the maximum rate per second this customer is authorized to utilize. |\n | `https://auth.dtn.com/tier` | String | Custom DTN claim containing the data tier the customer purchased for the requested access. |\n | `https://auth.dtn.com/quota` | String | Custom DTN claim containing the maximum yearly quota the customer purchased for calling DTN endpoints for the specific product. |\n | `iss` | String (URI) | The Security Token Service (STS) that issues and returns the token. If this value is not from `https://id.auth.dtn.com/`, the token should not be considered trusted. |\n | `sub` | String (URI) | The principle about which the token asserts information (the User ID or Client ID within the Identity Provider). A User ID will start with a prefix of `auth0\\|`, while the Client ID will end with the suffix `@clients`. |\n | `aud` | String \\| Array (Strings) (URI \\| [URI, …]) | Identifies the intended recipient(s) of the token – its audience. The token should be rejected if the audience does not contain values expected by the calling application. |\n | `iat` | Number (Timestamp) | “Issued At” indicates when the authentication for this token occurred. |\n | `exp` | Number (Timestamp) | The “expiration time” on or after which the JWT must not be accepted for processing. |\n | `azp` | String | The application/client ID of the client using the token. The application can cat as itself or on behalf of a user. |\n | `gty` | String (Space-delimited) | The grant type that was used to request the token – not an RFC 7519 registered claim (Auth0-specific). |\n | `permissions` | Array (Strings) | The grant type that was used to request the token – not an RFC 7519 registered claim (Auth0-specific). |\n\n "