For the complete documentation index, see llms.txt. This page is also available as Markdown.

NOTAM Watcher API

The Notamify Watcher Service allows automatic retrieval of new interpretations in Notamify based on configurable filters. The service supports listener management via webhooks, enabling applications to subscribe to NOTAM updates by airport code, category, subcategory, or specific NOTAM identifiers.

The Watcher service charges credits based on the number of NOTAM deliveries sent to registered listeners:

  • Default: 1 credit = 5 shipments — 1 credit is deducted for every 5 NOTAMs shipped to your listeners.

  • An account-specific shipments-per-credit allowance may override the default rate.

  • Lifecycle messages are not chargeable.

  • If the user has no credits remaining, further shipments are blocked until credits are topped up.

An account can have up to 15 listeners.

If you specified webhook_url the service will provide each new notam for the filter as described in Watcher API Webhook messages.

Watcher API expects to receive a 2xx success response, such as 200, after delivering a webhook message. 25 consecutive failed deliveries will pause the listener by setting active: false.

Python SDK Example

The Notamify Python SDK provides typed methods for all Watcher operations:

from notamify_sdk import NotamifyClient

client = NotamifyClient(token="YOUR_API_KEY")

# List all listeners
listeners = client.list_listeners()
for listener in listeners:
    print(f"{listener.name} ({listener.id}) — active: {listener.active}")

# Create a listener with filters
listener = client.create_listener(
    name="JFK Runway Monitor",
    webhook_url="https://your-server.com/webhooks/notamify",
    filters={
        "notam_icao": ["KJFK"],
        "category": ["RUNWAY"],
    },
    lifecycle_enabled=True,
    mode="prod",
)
print(f"Created listener: {listener.id}")

# Update a listener
updated = client.update_listener(
    listener.id,
    filters={
        "notam_icao": ["KJFK", "KEWR"],
        "category": ["AERODROME", "OBSTACLES"],
    },
)

# Delete a listener
client.delete_listener(listener.id)

# Sandbox testing — trigger a test delivery
result = client.send_sandbox_message(listener.id)
print(f"Sandbox delivery: {result}")

Use Notamify API key to validate the requests. Received webhook messages should be authenticated via Webhook Secret. Read more: Webhook Security

List listeners

get

Returns all registered listeners for the authenticated account.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Responses
200

List of listeners

application/json
get/listeners

Create listener

post

Registers a webhook URL and filters. Filters use OR within a field and AND across fields. For example, category=['AERODROME','AIRSPACE'] matches either category; combining with notam_icao=['EPWA'] requires both fields to match. Using category=['all'] matches any category. mode defaults to 'prod'. lifecycle.enabled controls separate notifications when previously delivered NOTAMs are later cancelled or replaced. lifecycle.types can narrow those events to cancelled and/or replaced. Each owner can have at most one active listener whose webhook host is trycloudflare.com or a subdomain of it.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
namestring · max: 100Optional

Optional human-readable name for the listener (max 100 characters).

webhook_urlstring · uriOptional

Destination HTTPS/HTTP endpoint for notifications. Must be a public URL, not localhost or private network ranges. Each owner can have at most one active trycloudflare.com webhook listener. Required when emails are omitted or empty.

emailsstring · email[] · max: 3Optional

Optional email recipients for notification delivery. Required when webhook_url is omitted.

activebooleanOptional

Whether the listener is active. Defaults to true if not provided. Set to false to temporarily disable notifications without deleting the listener.

Default: true
modestring · enumOptional

Listener delivery mode. 'prod' receives live matching events. 'sandbox' is for manual test sends only.

Default: prodPossible values:
Responses
201

Listener created

application/json
idstringRequired
team_idstringOptional

Team context when the listener was created or updated by a team-authenticated principal. Team-level alert email profiles apply only when this value is present.

namestring · max: 100Optional

Optional human-readable name for the listener (max 100 characters).

webhook_urlstring · uriOptional

Destination HTTPS/HTTP endpoint for notifications. Must be a public URL, not localhost or private network ranges. Each owner can have at most one active trycloudflare.com webhook listener.

emailsstring · email[] · max: 3Optional

Optional email recipients for notification delivery.

activebooleanRequired

Whether the listener is active and will receive notifications.

modestring · enumRequired

Listener delivery mode. 'prod' receives live matching events. 'sandbox' is for manual test sends only.

Possible values:
created_atstring · date-timeRequired
updated_atstring · date-timeRequired
webhook_secretstringOptional

Webhook signing secret (returned once on creation/rotation).

post/listeners

Update listener

put

Updates webhook URL and/or filters using the same rules as creation. mode can be changed between 'prod' and 'sandbox'. lifecycle.enabled controls separate notifications when previously delivered NOTAMs are later cancelled or replaced. lifecycle.types can narrow those events to cancelled and/or replaced.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired

Listener ID

Body
namestring · max: 100Optional

Optional human-readable name for the listener (max 100 characters).

webhook_urlstring · uriOptional

Destination HTTPS/HTTP endpoint for notifications. Must be a public URL, not localhost or private network ranges. Each owner can have at most one active trycloudflare.com webhook listener. Required when emails are omitted or empty.

emailsstring · email[] · max: 3Optional

Optional email recipients for notification delivery. Required when webhook_url is omitted.

activebooleanOptional

Whether the listener is active. Defaults to true if not provided. Set to false to temporarily disable notifications without deleting the listener.

Default: true
modestring · enumOptional

Listener delivery mode. 'prod' receives live matching events. 'sandbox' is for manual test sends only.

Default: prodPossible values:
Responses
200

Listener updated

application/json
idstringRequired
team_idstringOptional

Team context when the listener was created or updated by a team-authenticated principal. Team-level alert email profiles apply only when this value is present.

namestring · max: 100Optional

Optional human-readable name for the listener (max 100 characters).

webhook_urlstring · uriOptional

Destination HTTPS/HTTP endpoint for notifications. Must be a public URL, not localhost or private network ranges. Each owner can have at most one active trycloudflare.com webhook listener.

emailsstring · email[] · max: 3Optional

Optional email recipients for notification delivery.

activebooleanRequired

Whether the listener is active and will receive notifications.

modestring · enumRequired

Listener delivery mode. 'prod' receives live matching events. 'sandbox' is for manual test sends only.

Possible values:
created_atstring · date-timeRequired
updated_atstring · date-timeRequired
put/listeners/{id}

Delete listener

delete
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired

Listener ID

Responses
204

Deleted

No content

delete/listeners/{id}

No content

Last updated