{"id":13414929,"url":"https://github.com/dschep/ntfy","last_synced_at":"2025-05-11T03:45:15.354Z","repository":{"id":37580140,"uuid":"48198706","full_name":"dschep/ntfy","owner":"dschep","description":"🖥️📱🔔 A utility for sending notifications, on demand and when commands finish.","archived":false,"fork":false,"pushed_at":"2025-03-05T14:05:37.000Z","size":9238,"stargazers_count":4879,"open_issues_count":101,"forks_count":216,"subscribers_count":75,"default_branch":"master","last_synced_at":"2025-05-11T03:45:06.274Z","etag":null,"topics":["bash","linux","macos","notifications","push-notifications","windows","zsh"],"latest_commit_sha":null,"homepage":"http://ntfy.rtfd.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dschep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-12-17T21:15:49.000Z","updated_at":"2025-05-03T02:19:08.000Z","dependencies_parsed_at":"2023-02-15T21:00:39.226Z","dependency_job_id":"cfea9e4d-e31d-4aa6-8c28-88f27985b9de","html_url":"https://github.com/dschep/ntfy","commit_stats":{"total_commits":524,"total_committers":48,"mean_commits":"10.916666666666666","dds":0.3015267175572519,"last_synced_commit":"398014eee761082ec15f8d7ab0433ee73ee7f734"},"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dschep%2Fntfy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dschep%2Fntfy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dschep%2Fntfy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dschep%2Fntfy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dschep","download_url":"https://codeload.github.com/dschep/ntfy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253514555,"owners_count":21920334,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","linux","macos","notifications","push-notifications","windows","zsh"],"created_at":"2024-07-30T21:00:39.982Z","updated_at":"2025-05-11T03:45:15.329Z","avatar_url":"https://github.com/dschep.png","language":"Python","readme":"# About `ntfy`\n\n[![Version](https://img.shields.io/pypi/v/ntfy.svg?logo=data%3Aimage/svg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNDAiIGhlaWdodD0iMjQwIj48cGF0aCBmaWxsPSIjMzY3MWEyIiBkPSJNNjIuNDc2IDMzLjRjMC0xNi4zNiA0LjM4Ni0yNS4yNiAyOC42MDctMjkuNDk4IDE2LjQ0NC0yLjg4IDM3LjUyOC0zLjI0MiA1Ny4xOTMgMCAxNS41MzMgMi41NjQgMjguNjA3IDE0LjEzNCAyOC42MDcgMjkuNDk3djUzLjk3YzAgMTUuODMtMTIuNjkzIDI4Ljc5NS0yOC42MDcgMjguNzk1SDkxLjA4M2MtMTkuNDEgMC0zNS43NyAxNi41NS0zNS43NyAzNS4yNnYyNS44OTVIMzUuNjVjLTE2LjYzNiAwLTI2LjMyLTExLjk5My0zMC4zODgtMjguNzc2LTUuNDktMjIuNTQ2LTUuMjU2LTM1Ljk4IDAtNTcuNTc0QzkuODE4IDcyLjEzNyAyNC4zNzUgNjIuMTk4IDQxLjAxIDYyLjE5OGg3OC42OHYtNy4yMDRINjIuNDc2VjMzLjR6Ii8%2BPHBhdGggZmlsbD0iI2ZmZDA0NiIgZD0iTTE3Ni44ODMgMjA2LjEyM2MwIDE2LjM2LTE0LjE5OCAyNC42NDQtMjguNjA3IDI4Ljc3Ni0yMS42NzggNi4yMy0zOS4wNzUgNS4yNzMtNTcuMTkzIDAtMTUuMTMtNC40MS0yOC42MDctMTMuNDE3LTI4LjYwNy0yOC43OHYtNTMuOTdjMC0xNS41MzMgMTIuOTQ3LTI4Ljc5OCAyOC42MDctMjguNzk4aDU3LjE5M2MxOS4wNSAwIDM1Ljc3LTE2LjQ2NSAzNS43Ny0zNS45OFY2Mi4xOTZoMjEuNDQ0YzE2LjY1NiAwIDI0LjQ5NiAxMi4zNzYgMjguNjA3IDI4Ljc3NyA1LjcyMiAyMi43OCA1Ljk3NiAzOS44MTcgMCA1Ny41NzQtNS43ODUgMTcuMjUtMTEuOTcyIDI4Ljc3Ny0yOC42MDcgMjguNzc3aC04NS44djcuMjA1aDU3LjE5M3YyMS41OXoiLz48L3N2Zz4%3D)](https://pypi.org/project/ntfy/)\n[![Docs](http://readthedocs.org/projects/ntfy/badge/?version=latest)](http://ntfy.readthedocs.org/en/stable/?badge=latest)\n[![SayThanks](https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg)](https://saythanks.io/to/dschep)\n\n`ntfy` brings notification to your shell. It can automatically provide\ndesktop notifications when long running commands finish or it can send\npush notifications to your phone when a specific command finishes.\nConfused? This video demonstrates some of this functionality:\n\n![image](https://raw.githubusercontent.com/dschep/ntfy/master/docs/demo.gif)\n\n## Quickstart\n\n``` shell\n$ sudo pip install ntfy\n$ ntfy send test\n# send a notification when the command `sleep 10` finishes\n# this sends the message '\"sleep 10\" succeeded in 0:10 minutes'\n$ ntfy done sleep 10\n$ ntfy -b pushover -o user_key t0k3n send 'Pushover test!'\n$ ntfy -t 'ntfy' send \"Here's a custom notification title!\"\n$ echo -e 'backends: [\"pushover\"]\\npushover: {\"user_key\": \"t0k3n\"}' \u003e ~/.ntfy.yml\n$ ntfy send \"Pushover via config file!\"\n$ ntfy done --pid 6379  # pid extra\n$ ntfy send \":tada: ntfy supports emoji! :100:\"  # emoji extra\n# Enable shell integration\n$ echo 'eval \"$(ntfy shell-integration)\"' \u003e\u003e ~/.bashrc\n```\n\n## Install\n\nThe install technique in the quickstart is the suggested method of\ninstallation. It can be installed in a virtualenv, but with some\ncaveats: Linux notifications require `--system-site-packages` for the\nvirtualenv and OS X notifications don\\'t work at all.\n\n**:penguin: NOTE:** [Linux Desktop\nNotifications](#linux-desktop-notifications---linux) require Python DBUS\nbindings. See [here](#linux-desktop-notifications---linux) for more\ninfo.\n\n### Shell integration\n\n`ntfy` has support for **automatically** sending notifications when long\nrunning commands finish in bash and zsh. In bash it emulates zsh\\'s\npreexec and precmd functionality with\n[rcaloras/bash-preexec](https://github.com/rcaloras/bash-preexec). To\nenable it add the following to your `.bashrc` or `.zshrc`:\n\n``` shell\neval \"$(ntfy shell-integration)\"\n```\n\nBy default it will only send notifications for commands lasting longer\nthan 10 seconds and if the terminal is focused. Terminal focus works on\nX11(Linux) and with Terminal.app and iTerm2 on MacOS. Both options can\nbe configured via the `--longer-than` and `--foreground-too` options.\n\nTo avoid unnecessary notifications when running interactive programs,\nprograms listed in `AUTO_NTFY_DONE_IGNORE` don\\'t generate\nnotifications. For example:\n\n``` shell\nexport AUTO_NTFY_DONE_IGNORE=\"vim screen meld\"\n```\n\n### Extras\n\n`ntfy` has a few features that require extra dependencies.\n\n:   -   `ntfy done -p $PID` requires installing as\n        `pip install ntfy[pid]`\n    -   [emoji](https://en.wikipedia.org/wiki/Emoji) support requires\n        installing as `pip install ntfy[emoji]`\n    -   [XMPP](https://xmpp.org/) support requires installing as\n        `pip install ntfy[xmpp]`\n    -   [Telegram](https://telegram.org/) support requires installing as\n        `pip install ntfy[telegram]`\n    -   [Instapush](https://instapush.im/) support requires installing\n        as `pip install ntfy[instapush]`\n    -   [Slack](https://slack.com/) support requires installing as\n        `pip install ntfy[slack]`\n    -   [Slack Incoming webhook](https://slack.com/) - simpler slack\n        implementation that doesn\\'t have additional dependencies\n    -   [Rocket.Chat](https://Rocket.Chat) support requires installing\n        as `pip install ntfy[rocketchat]`\n\nTo install multiple extras, separate with commas: e.g.,\n`pip install ntfy[pid,emoji]`.\n\n## Configuring `ntfy`\n\n`ntfy` is configured with a YAML file stored at `~/.ntfy.yml` or in\nstandard platform specific locations:\n\n-   Linux - `~/.config/ntfy/ntfy.yml`\n-   macOS - `~/Library/Application Support/ntfy/ntfy.yml`\n-   Windows - `C:\\Users\\\u003cUser\u003e\\AppData\\Local\\dschep\\ntfy.yml`\n\n### Backends\n\nThe backends key specifies what backends to use by default. Each backend\nhas its own configuration, stored in a key of its own name. For example:\n\n``` yaml\n---\nbackends:\n    - pushover\npushover:\n    user_key: hunter2\npushbullet:\n    access_token: hunter2\nsimplepush:\n    key: hunter2\nslack:\n    token: slacktoken\n    recipient: \"#slackchannel\"\nxmpp:\n     jid: \"user@gmail.com\"\n     password: \"xxxx\"\n     mtype: \"chat\"\n     recipient: \"me@jit.si\"\n```\n\nIf you want mulitple configs for the same backend type, you can specify\nany name and then specify the backend with a backend key. For example:\n\n``` yaml\n---\npushover:\n    user_key: hunter2\ncellphone:\n    backend: pushover\n    user_key: hunter2\n```\n\nSee the backends below for available backends and options. As of v2.6.0\n`ntfy` also supports [3rd party backends](#3rd-party-backends)\n\n### [Pushover](https://pushover.net) - `pushover`\n\nRequired parameters:\n\n:   -   `user_key`\n\nOptional parameters:\n\n:   -   `sound`\n    -   `priority`\n    -   `expire`\n    -   `retry`\n    -   `callback`\n    -   `api_token` - use your own application token\n    -   `device` - target a device, if omitted, notification is sent to\n        all devices\n    -   `url`\n    -   `url_title`\n    -   `html`\n\n### [Pushbullet](https://pushbullet.com) - `pushbullet`\n\nRequired parameter:\n\n:   -   `access_token` - Your Pushbullet access token, created at\n        \u003chttps://www.pushbullet.com/#settings/account\u003e\n\nOptional parameters:\n\n:   -   `device_iden` - a device identifier, if omited, notification is\n        sent to all devices\n    -   `email` - send notification to pushbullet user with the\n        specified email or send an email if they aren\\'t a pushullet\n        user\n\n### [Simplepush](https://simplepush.io) - `simplepush`\n\nRequired parameter:\n\n:   -   `key` - Your Simplepush key, created by installing the Android\n        App (no registration required) at \u003chttps://simplepush.io\u003e\n\nOptional parameters:\n\n:   -   `event` - sets ringtone and vibration pattern for incoming\n        notifications (can be defined in the simplepush app)\n\n### XMPP - `xmpp`\n\nRequires parameters:\n\n:   -   `jid`\n    -   `password`\n    -   `recipient`\n\nOptional parameters\n\n:   -   `hostname` (if not from jid)\n    -   `port`\n    -   `path_to_certs`\n    -   `mtype`\n\nRequires extras, install like this: `pip install ntfy[xmpp]`.\n\nTo verify the SSL certificates offered by a server: path_to_certs =\n\\\"path/to/ca/cert\\\"\n\nWithout dnspython library installed, you will need to specify the server\nhostname if it doesn\\'t match the jid.\n\nSpecify port if other than 5222. NOTE: Ignored without specified\nhostname\n\nNOTE: Google Hangouts doesn\\'t support XMPP since 2017\n\n### [Telegram](https://telegram.org) - `telegram`\n\nRequires extras, install like this: `pip install ntfy[telegram]`.\n\nRequires `ntfy` to be installed as `ntfy[telegram]`. This backend is\nconfigured the first time you will try to use it:\n`ntfy -b telegram send \"Telegram configured for ntfy\"`.\n\n### [Pushjet](https://pushjet.io/) - `pushjet`\n\nRequired parameter:\n\n:   -   `secret` - The Pushjet service secret token, created with\n        \u003chttp://docs.pushjet.io/docs/creating-a-new-service\u003e\n\nOptional parameters:\n\n:   -   \n\n        `endpoint` - custom Pushjet API endpoint\n\n        :   (defaults to \u003chttps://api.pushjet.io\u003e)\n\n    -   `level` - The importance level from 1(low) to 5(high)\n\n    -   `link`\n\n### [Notifico](https://n.tkte.ch/) - `notifico`\n\nRequired parameter:\n\n:   -   \n\n        `webhook` - The webhook link, created at \u003chttps://n.tkte.ch/\u003e\n\n        :   (choose `Plain Text` service when creating the webhook)\n\n### [Slack](https://slack.com) - `slack`\n\nRequires extras, install like this: `pip install ntfy[slack]`.\n\nRequired parameter:\n\n:   -   `token` - The Slack service secret token, either a legacy user\n        token created at\n        \u003chttps://api.slack.com/custom-integrations/legacy-tokens\u003e or a\n        token obtained by creating an app at\n        \u003chttps://api.slack.com/apps?new_app=1\u003e with `chat:write:bot`\n        scope and linking it to a workspace.\n    -   `recipient` - The Slack channel or user to send notifications\n        to. If you use the `#` symbol the message is send to a Slack\n        channel and if you use the `@` symbol the message is send to a\n        Slack user.\n\n[Slack Incoming Webhook](https://slack.com) - `slack_webhook`\n\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\nRequired parameter: \\* `url` - the URL of the incoming webhook \\*\n`user` - The Slack channel or user to send notifications to\n\n### [Instapush](https://instapush.im/) - `insta`\n\nRequires extras, install like this `pip install ntfy[instapush]`.\n\nInstapush does not support notification title. It sends template-driven\nnotifications, so you have to setup you events on the dashboard first.\nThe backend is called insta due to homonymy with the instapush python\nwrapper\n\nRequired parameters:\n\n:   -   `appid` - The application id\n    -   `secret` - The application secret\n    -   `event_name` - The instapush event to be used\n    -   `trackers` - The array of trakers to use\n\nNote on trackers: Trackers are placeholders for events (a sort of\nnotification template). If you defined more than one tracker in your\nevent you\\'ll have to provide more messages. At the moment, the only way\nto do so is to separate each message with a colon (:) character. You can\nalso escape the separator character: Example:\n\n``` shell\nntfy -b insta send \"message1:message2\"\nntfy -b insta send \"message1:message2\\:with\\:colons\"\n```\n\n### [Prowl](https://www.prowlapp.com/) - `prowl`\n\nOptional parameters:\n\n:   -   `api_key`\n    -   `provider_key`\n    -   `priority`\n    -   `url`\n\n### [Linux Desktop Notifications](https://developer.gnome.org/notification-spec/) - `linux`\n\nWorks via [dbus]{.title-ref}, works with most DEs like Gnome, KDE, XFCE\nand with libnotify.\n\nThe following dependecies should be installed.\n\n``` shell\n$ sudo apt install python-dbus # on ubuntu/debian\n```\n\nYou will need to install some font that supports emojis (in Debian\n[fonts-symbola]{.title-ref} or Gentoo\n[media-fonts/symbola]{.title-ref}).\n\nOptional parameters:\n\n:   -   `icon` - Specifies path to the notification icon, empty string\n        for no icon.\n    -   `urgency` - Specifies the urgency level (low, normal, critical).\n    -   `transient` - Skip the history (exp: the Gnome message tray)\n        (true, false).\n    -   `soundfile` - Specifies the notification sound file (e.g.\n        /usr/share/sounds/notif.wav).\n    -   `timeout` - Specifies notification expiration time level (-1 -\n        system default, 0 - never expire).\n\n### Windows Desktop Notifications - `win32`\n\nUses `pywin32`.\n\n### Mac OS X Notification Center - `darwin`\n\nRequires `ntfy` to be installed globally (not in a virtualenv).\n\n### System log - `systemlog`\n\nUses the `syslog` core Python module, which is not available on Windows\nplatforms.\n\nOptional parameters:\n\n:   -   `prio` - Syslog priority level. Default is `ALERT`. Possible\n        values are:\n\n        -   EMERG\n        -   ALERT\n        -   CRIT\n        -   ERR\n        -   WARNING\n        -   NOTICE\n        -   INFO\n        -   DEBUG\n\n    -   `facility` - Syslog facility. Default is `LOCAL5`. Possible\n        values are:\n\n        -   KERN\n        -   USER\n        -   MAIL\n        -   DAEMON\n        -   AUTH\n        -   LPR\n        -   NEWS\n        -   UUCP\n        -   CRON\n        -   SYSLOG\n        -   LOCAL0\n        -   LOCAL1\n        -   LOCAL2\n        -   LOCAL3\n        -   LOCAL4\n        -   LOCAL5\n        -   LOCAL6\n        -   LOCAL7\n\n    -   `fmt` - Format of the message to be sent to the system logger.\n        The title and the message are specified using the following\n        placeholders:\n\n        -   `{title}`\n        -   `{message}`\n\n        Default is `[{title}] {message}`.\n\n### [Termux:API](https://play.google.com/store/apps/details?id=com.termux.api\u0026hl=en) - `termux`\n\nRequires the app to be install from the Play store and the CLI utility\nbe installed with `apt install termux-api`.\n\n### [Pushalot](https://pushalot.com) - `pushalot`\n\nRequired parameter:\n\n:   -   `auth_token` - Your private Pushalot auth token, found here\n        \u003chttps://pushalot.com/manager/authorizations\u003e\n\nOptional parameters:\n\n:   -   `source` - source of the notification\n    -   `ttl` - message expire time in minutes (time to live)\n    -   `url` - URL to include in the notifications\n    -   `url_title` - visible URL title (ignored if no url specified)\n    -   `image` - URL of image included in the notifications\n    -   `important` - mark notifications as important\n    -   `silent` - mark notifications as silent\n\n### [Rocket.Chat](https://rocket.chat) - `rocketchat`\n\nRequires extras, install like this: `pip install ntfy[rocketchat]`.\n\nRequired parameters:\n\n:   -   `url` - URL of your Rocket.Chat instance\n    -   `username` - login username\n    -   `password` - login password\n    -   `room` - room/channel name to post in\n\n### [Matrix.org](https://matrix.org) - `matrix`\n\nRequires extras, install like this: `pip install ntfy[matrix]`.\n\nRequired parameters:\n\n:   -   `url` - URL of your homeserver instance\n    -   `roomId` - room to post in\n    -   `userId` - login userid\n    -   `password` - login password\n    -   `token` - access token\n\nYou must either specify `token`, or `userId` and `password`.\n\n[Webpush](https://github.com/dschep/ntfy-webpush) - `ntfy_webpush`\n\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\\~\nWebpush support is provded by an external ntfy module, install like\nthis: `pip install ntfy ntfy-webpush`.\n\nRequired parameters:\n\n:   -   `subscription_info` - A\n        [PushSubscription](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\n        Object\n    -   `private_key` - the path to private key file or anything else\n        that works with\n        [pywebpush](https://github.com/web-push-libs/pywebpush).\n\nFor more info, see [ntfy-webpush]{#ntfy-webpush}\n\\\u003chttps://github.com/dschep/ntfy-webpush\\\u003e\\`\\_\n\n### 3rd party backends\n\nTo use or implement your own backends, specify the full path of the\nmodule as your backend. The module needs to contain a module with a\nfunction called `notify` with the following signature:\n\n``` python\ndef notify(title, message, **kwargs):\n    \"\"\"\n    kwargs contains retcode if using ntfy done or ntfy shell-integration\n    and all options in your backend's section of the config\n    \"\"\"\n    pass\n```\n\n### Other options\n\nTitle is configurable with the [title]{.title-ref} key in the config.\nExample:\n\n``` yaml\n---\ntitle: Customized Title\n```\n\n### Backends ToDo\n\n-   [Airgram](http://www.airgramapp.com)\n-   [Boxcar](https://boxcar.io)\n\n## Testing\n\n``` shell\npython setup.py test\n```\n\n## Contributors\n\n-   [dschep](https://github.com/dschep) - Maintainer \u0026 Lead Developer\n-   [danryder](https://github.com/danryder) - XMPP Backend \u0026 emoji\n    support\n-   [oz123](https://github.com/oz123) - Linux desktop notification\n    improvements\n-   [schwert](https://github.com/schwert) - PushJet support\n-   [rahiel](https://github.com/rahiel) - Telegram support\n-   [tymm](https://github.com/tymm) - Simplepush support\n-   [jungle-boogie](https://github.com/jungle-boogie) - Documentation\n    updates\n-   [tjbenator](https://github.com/tjbenator) - Advanced Pushover\n    options\n-   [mobiusklein](https://github.com/mobiusklein) - Win32 Bugfix\n-   [rcaloras](https://github.com/rcaloras) - Creator of\n    [bash-prexec]{.title-ref}, without which there woudn\\'t be bash\n    shell integration for [ntfy]{.title-ref}\n-   [eightnoteight](https://github.com/eightnoteight) - Notifico support\n-   [juanpabloaj](https://github.com/juanpabloaj) - Slack support\n-   [giuseongit](https://github.com/giuseongit) - Instapush support\n-   [jlesage](https://github.com/jlesage) - Systemlog support\n-   [sambrightman](https://github.com/sambrightman) - Prowl support\n-   [mlesniew](https://github.com/mlesniew) - Pushalot support\n-   [webworxshop](https://github.com/webworxshop) - Rocket.Chat support\n-   [rhabbachi](https://github.com/rhabbachi) - transient option in\n    Linux desktop notifications\n-   [Half-Shot](https://github.com/Half-Shot) - Matrix support\n","funding_links":[],"categories":["Uncategorized","Python","Command Line","Programming","\u003ca name=\"system\"\u003e\u003c/a\u003eSystem tools"],"sub_categories":["Uncategorized","Dependency Management"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdschep%2Fntfy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdschep%2Fntfy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdschep%2Fntfy/lists"}