FHWA V2X App API

Open-source REST API published by the FHWA Saxton Transportation Operations Laboratory (STOL). It sits between mobile applications and a Multi-Access Edge Computing V2X broker, and provides Keycloak-backed authentication, ETX MQTT client registration, deposit of UPER-encoded SAE J2735 MAP and TIM messages scoped by GeoJSON geofences, J2735 decoding, GeoJSON path management, and per-vendor and per-user registration limits. 29 paths, 40 operations, 46 schemas, OpenAPI 3.1.0. FHWA operates NO public instance of this API — the contract's only server entry is the springdoc-generated http://localhost:8080 placeholder, and the operator supplies the base URL when they deploy the published container stack. baseURL is therefore deliberately null rather than guessed.

Operations 40

GET /prd/v2/registration Check registration status #
PUT /prd/v2/registration Update ETX client registration #
POST /prd/v2/registration Register ETX client #
GET /prd/v2/configurations/geofence Get geofence by ID #
PUT /prd/v2/configurations/geofence Update existing geofence #
POST /prd/v2/configurations/geofence Create new geofence #
DELETE /prd/v2/configurations/geofence Delete geofence #
POST /prd/v2/registration-connection Register and connect ETX client #
GET /prd/v2/paths Get all paths #
POST /prd/v2/paths Create or update path #
POST /prd/v2/deposit/geofence Deposit V2X Message #
DELETE /prd/v2/deposit/geofence Delete geofence by identifier #
POST /prd/v2/deposit/geofence/expiration/cleanup Manually trigger Geofence expiration cleanup #
POST /prd/v2/connection Establish ETX client connection #
POST /prd/v2/configurations/clear Clear multiple geofences #
GET /prd/v2/admin/vendor-limits Get all vendor limits #
POST /prd/v2/admin/vendor-limits Create or update vendor limits #
GET /prd/v2/admin/user-limits Get all user limits #
POST /prd/v2/admin/user-limits Create or update user limits #
POST /auth/token Generate authentication token #
GET /prd/v2/tim/icons/{version} Download TIM icons TAR.GZ #
GET /prd/v2/tim/configuration Get TIM configuration #
GET /prd/v2/secrets Get secret configuration #
GET /prd/v2/registration/cleanup/vendor/{vendorId} Clean up old registrations for vendor #
GET /prd/v2/paths/{id} Get path by ID #
DELETE /prd/v2/paths/{id} Delete path #
GET /prd/v2/deposit/geofence/expiration/expired Get expired Geofence deployments #
GET /prd/v2/deposit/geofence/expiration/cleanup/status Get cleanup service status #
GET /prd/v2/deposit/geofence/deployments Get all active Geofence deployments #
GET /prd/v2/deposit/geofence/deployments/{geofenceId} Get Geofence deployment by ID #
GET /prd/v2/deposit/geofence/deployments/{geofenceId}/geohashes Get geohashes for a Geofence deployment #
GET /prd/v2/deposit/geofence/deployments/user/{username} Get Geofence deployments by user #
GET /prd/v2/deposit/geofence/deployments/geohash/{geohash} Get Geofence deployments by geohash #
GET /prd/v2/deposit/geofence/deployments/expired Get expired Geofence deployments #
GET /prd/v2/configurations/geofence/ids Get all geofence IDs #
GET /prd/v2/admin/vendor-limits/{vendorId} Get vendor limits by vendor ID #
DELETE /prd/v2/admin/vendor-limits/{vendorId} Delete vendor limits #
GET /prd/v2/admin/user-limits/vendor/{vendorId} Get user limits by vendor ID #
GET /prd/v2/admin/user-limits/user/{username} Get user limits by username #
DELETE /prd/v2/admin/user-limits/user/{username}/vendor/{vendorId} Delete user limits #

Work with this as data

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/v2x-app-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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 Specification

federal-highway-administration-v2x-app-api-openapi.json Raw ↑
{
  "openapi": "3.1.0",
  "info": {
    "title": "V2X App API",
    "description": "API for Vehicle-to-Everything (V2X) Multi-Access Edge Computing (MEC) services. This App API provides endpoints for ETX registration, V2X Message Deposit, and authentication services.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "http://localhost:8080",
      "description": "Generated server url"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Path Management",
      "description": "Path management endpoints for GeoJSON-like path data"
    },
    {
      "name": "Registration",
      "description": "ETX client registration endpoints for the MQTT Broker"
    },
    {
      "name": "Geofence Expiration",
      "description": "Geofence expiration management endpoints"
    },
    {
      "name": "Secret Management",
      "description": "Secret configuration endpoints"
    },
    {
      "name": "Authentication",
      "description": "Authentication and authorization for Registration and Configuration endpoints"
    },
    {
      "name": "TIM Configuration",
      "description": "TIM ITIS phrases and metadata configuration endpoints"
    },
    {
      "name": "Registration",
      "description": "ETX client registration and connection management endpoints"
    },
    {
      "name": "Vendor Limits Management",
      "description": "Endpoints for managing vendor-wide registration limits"
    },
    {
      "name": "Authentication",
      "description": "Authentication and authorization for Registration and Deposit endpoints"
    },
    {
      "name": "User Limits Management",
      "description": "Endpoints for managing user registration limits"
    },
    {
      "name": "Deposit",
      "description": "V2X Message Deposit endpoints for deployment to the ETX MQTT Broker"
    },
    {
      "name": "Geofence Deployments",
      "description": "Geofence deployment management endpoints"
    }
  ],
  "paths": {
    "/prd/v2/registration": {
      "get": {
        "tags": [
          "Registration"
        ],
        "summary": "Check registration status",
        "description": "Checks the registration status of a device by its device ID against the ETX API",
        "operationId": "checkRegistration",
        "parameters": [
          {
            "name": "DeviceID",
            "in": "query",
            "description": "Device ID to check registration status for",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "f7306888-94c9-478b-a076-bba9378563a9"
          }
        ],
        "responses": {
          "200": {
            "description": "Registration status retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegistrationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid device ID",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/RegistrationCheckResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/RegistrationCheckResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/RegistrationCheckResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found - device not registered",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/RegistrationCheckResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/RegistrationCheckResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Registration"
        ],
        "summary": "Update ETX client registration",
        "description": "Updates an existing ETX client registration. This endpoint supports retry logic for handling pending registration updates. The client must provide a valid device ID for successful registration update.",
        "operationId": "putRegistration",
        "parameters": [
          {
            "name": "retry",
            "in": "query",
            "description": "Enable retry logic for pending registration updates",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "num_retries",
            "in": "query",
            "description": "Number of retry attempts for pending updates",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 5
            },
            "example": 5
          },
          {
            "name": "num_sec_to_sleep",
            "in": "query",
            "description": "Seconds to sleep between retry attempts",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 15
            },
            "example": 15
          }
        ],
        "requestBody": {
          "description": "Client registration update information",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistrationPutRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Registration update successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegistrationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid update data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "Not found - device not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Registration"
        ],
        "summary": "Register ETX client",
        "description": "Registers a new ETX client with the system. This endpoint supports retry logic for handling pending registrations. The client must provide valid client type and subtype information for successful registration.",
        "operationId": "postRegistration",
        "parameters": [
          {
            "name": "retry",
            "in": "query",
            "description": "Enable retry logic for pending registrations",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "num_retries",
            "in": "query",
            "description": "Number of retry attempts for pending registrations",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 5
            },
            "example": 5
          },
          {
            "name": "num_sec_to_sleep",
            "in": "query",
            "description": "Seconds to sleep between retry attempts",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 15
            },
            "example": 15
          }
        ],
        "requestBody": {
          "description": "Client registration information",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistrationPostRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Registration successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegistrationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid registration data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/prd/v2/configurations/geofence": {
      "get": {
        "tags": [
          "configuration-rest-controller"
        ],
        "summary": "Get geofence by ID",
        "description": "Retrieves detailed information for a specific geofence by its ID. This endpoint returns the complete geofence configuration including geometry, properties, and metadata.",
        "operationId": "getGeofence",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "Unique identifier of the geofence",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "geofence-001"
          }
        ],
        "responses": {
          "200": {
            "description": "Geofence details retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationGeofenceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid geofence ID",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "Not found - geofence not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "configuration-rest-controller"
        ],
        "summary": "Update existing geofence",
        "description": "Updates an existing geofence with new configuration. All fields in the request will replace the existing geofence configuration.",
        "operationId": "updateGeofence",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "Unique identifier of the geofence to update",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "geofence-001"
          }
        ],
        "requestBody": {
          "description": "Updated geofence configuration",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfigurationGeofence"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Geofence updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationGeofenceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid geofence configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "Not found - geofence not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "configuration-rest-controller"
        ],
        "summary": "Create new geofence",
        "description": "Creates a new geofence with the specified configuration. The geofence can be used for V2X traffic management and safety applications.",
        "operationId": "createGeofence",
        "requestBody": {
          "description": "Geofence configuration to create",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfigurationGeofence"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Geofence created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationGeofenceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid geofence configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "configuration-rest-controller"
        ],
        "summary": "Delete geofence",
        "description": "Deletes a geofence from the system. This operation is irreversible and will remove all associated configuration and data.",
        "operationId": "deleteGeofence",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "Unique identifier of the geofence to delete",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "geofence-001"
          }
        ],
        "responses": {
          "200": {
            "description": "Geofence deleted successfully"
          },
          "400": {
            "description": "Bad request - invalid geofence ID",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "Not found - geofence not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/prd/v2/registration-connection": {
      "post": {
        "tags": [
          "Registration"
        ],
        "summary": "Register and connect ETX client",
        "description": "Performs both client registration and connection establishment in a single operation. This endpoint first registers the client with the system, then establishes a connection using the returned device ID. This is a convenience endpoint that combines the functionality of both registration and connection endpoints.",
        "operationId": "postRegistrationConnection",
        "parameters": [
          {
            "name": "num_retries",
            "in": "query",
            "description": "Number of retry attempts for pending registrations",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 5
            },
            "example": 5
          },
          {
            "name": "num_sec_to_sleep",
            "in": "query",
            "description": "Seconds to sleep between retry attempts",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 15
            },
            "example": 15
          }
        ],
        "requestBody": {
          "description": "Combined registration and connection information",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistrationConnectionPostRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Registration and connection successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompleteResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid registration or connection data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "500": {
            "description": "Internal server error - registration or connection failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "deprecated": true,
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/prd/v2/paths": {
      "get": {
        "tags": [
          "Path Management"
        ],
        "summary": "Get all paths",
        "description": "Retrieves all active paths in GeoJSON-like format. This endpoint returns a collection of paths with their coordinates, timestamps, and metadata.",
        "operationId": "getAllPaths",
        "responses": {
          "200": {
            "description": "Paths retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PathsResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Path Management"
        ],
        "summary": "Create or update path",
        "description": "Creates a new path with GeoJSON-like structure, or updates an existing path if one with the same name already exists. Only administrators can create/update paths.",
        "operationId": "createPath",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PathRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Path created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PathResponse"
                }
              }
            }
          },
          "200": {
            "description": "Path updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PathResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid path data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/prd/v2/deposit/geofence": {
      "post": {
        "tags": [
          "Deposit"
        ],
        "summary": "Deposit V2X Message",
        "description": "Deposits V2X message data to the database. This endpoint is used to deploy V2X messages (TIM, MAP, etc.) with geospatial information. The configuration must include geofence overrides to define the deployment area. Vendor ID is automatically determined from the user\u0027s JWT token based on their role.",
        "operationId": "deposit",
        "requestBody": {
          "description": "Configuration data to deposit",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepositRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "V2X message deployed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeofenceDeploymentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid configuration data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "409": {
            "description": "Conflict - no available geohash or conflicting state",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large - exceeds maximum allowed geohashes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity - invalid ASN.1 data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Deposit"
        ],
        "summary": "Delete geofence by identifier",
        "description": "Deletes geofence deployments associated with a specific identifier. This endpoint allows for manual removal of geofence deployments by their identifier. The system will deactivate the geofence deployment by setting is_active to false. This follows REST best practices by using query parameters for resource identification.",
        "operationId": "deleteGeofence_1",
        "parameters": [
          {
            "name": "identifier",
            "in": "query",
            "description": "Geofence identifier to delete",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "GEOFENCE_12345"
          }
        ],
        "responses": {
          "204": {
            "description": "Geofence deleted successfully",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid or missing authentication",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "Not found - no geofence found with the specified identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/prd/v2/deposit/geofence/expiration/cleanup": {
      "post": {
        "tags": [
          "Geofence Expiration"
        ],
        "summary": "Manually trigger Geofence expiration cleanup",
        "description": "Manually triggers the cleanup process to deactivate expired Geofence deployments. This endpoint is useful for testing and immediate cleanup without waiting for the scheduled task.",
        "operationId": "triggerCleanup",
        "responses": {
          "200": {
            "description": "Cleanup completed successfully",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {}
                }
              }
            }
          },
          "401": {
            "descr

# --- truncated at 32 KB (115 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/federal-highway-administration/refs/heads/main/openapi/federal-highway-administration-v2x-app-api-openapi.json