Altitude is a web application that helps you triage and make decisions on flagged content from counter-terrorism databases. Read more about how it works.
Altitude is publicly available and part of Tech Against Terrorism.
Platforms can access Altitude directly or work with Tech Against Terrorism to receive free, bespoke onboarding support, including guided installation, testing, and feedback, plus they will gain access to a suite of specialist services for members. Learn more.
Altitude connects to the Terrorist Content Analytics Platform and the GIFCT Hash-Sharing Database. You will need login credentials in order to set up those connections.
It's simple to get started and try out the application:
-
Install prerequisite utilities
You will need to install a few tools before you can get started:
-
GNU Make: Run the commands specific to your platform:
-
Linux:
sudo apt-get install build-essential
-
Mac:
xcode-select --install
-
Windows:
winget install -e --id GnuWin32.Make
-
-
Docker: Install Docker Desktop from https://docs.docker.com/get-docker/.
-
Clone this repository
git clone https://github.com/Jigsaw-Code/altitude cd altitude
-
Configure and run the stack locally.
make PROD build start
You will be prompted to provide credentials to start up a database.
[!TIP] If you wish to use a port other than the default (
8080
), set thePORT
environment variable, e.g.PORT=1234 make PROD build start
[!TIP] If you wish to serve the application on a subpath (e.g.
www.example.com/foo/bar/
instead ofwww.example.com
), set theSERVE_PATH
environment variable, e.g.SERVE_PATH=/foo/bar/ make PROD build start
-
Connect API sources.
Once installed and running, you can load the web frontend at http://localhost:8080 (or your chosen port). Start out by configuring the tool by specifying which signal sources to connect to:
-
Upload target content into the system.
Data that you wish to be in scope of the tool can be submitted as target entities through a RESTful API. To create a new image target, you need to provide the content and its type. You can do something as simple as:
curl -H "Content-Type: application/json" \ --data '{"client_context": "abc", "content_type": "IMAGE", "content_bytes": "R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="}' \ "http://localhost:8080/api/targets/"
You can provide such as author metadata, to ensure moderators have as much context as needed during review. Consult the OpenAPI spec and documentation for more options.
All decisions made in the tool are logged to dated files under
./signal-service/logs/tasks/verdict-notifier
, so it's easy to evaluate the
output. If you wish to receive updates of verdicts for automated processing, you
can configure an endpoint on your server and provide it as a webhook when
deploying the tool using the ACTION_RECEIVER_URL
environment variable, e.g.:
ACTION_RECEIVER_URL=http://my-domain.com/verdicts/webhook make PROD build start
We send all decisions to this endpoint and will retry 5 times across 30 or so minutes before giving up. This endpoint must be able to receive a JSON with the following JSON Schema:
{
"type": "object",
"properties": {
"client_context": {
"type": "string",
"description": "An opaque string that you provided when the entity was initially created, or a URL."
},
"decision": {
"type": "string",
"enum": ["APPROVE", "BLOCK"]
},
"decision_time": {
"type": "string",
"format": "date-time"
}
}
}
Check out our FAQ.
See CONTRIBUTING.md
for details.
Apache 2.0; see LICENSE
for details.