FORTYEIGHT sits at the intersection of artificial intelligence, human rights and consent.
We help organisations and governments connect their technology directly with people, therefore we've built (or are building) three different API's.
Notify us each time you've made a new observation, and we'll help inform the person you observed.
Fully available. Exposes the following endpoints.
/v0/notifications/
- This is where your organisation notifies us of new observations. Once you notified us we will add the observation to our escrow where it waits to be claimed by the person connected to it. It will not sit there forever, depending on regulatory guidelines it will be automatically deleted after a cerain amount of time./v1/escrow/observations/
- This is where your organisation can query our escrow, i.e. retrieve observations which you've notified us before.Request first-party validation for low confidence observations, to improve models and accuracy.
Coming soon!
Autonomously request new, or expanded data for an observed person, with real-time consent.
Coming soon!
All requests to FORTYEIGHT API's are authenticated by an API key.
You can retrieve your API key and API key usage by visiting the FORTYEIGHT Dashboard under https://manage.fortyeight.ai/accounts/general/
Make sure to use the x-api-key
header to send your API key with every request and be sure to use https
only.
Security Scheme Type | API Key |
---|---|
Header parameter name: | x-api-key |
Use this endpoint when you want to notify us of an observation.
The Audit API will respond with a requestId
and extendedRequestId
in case you need to track the observation through our system. Once the observation enters the escrow you can query for and delete it by using the observation id
which is distinct from the requestId
and extendedRequestId
and will be assigned once the observation enters the escrow.
You can supply any number of key/value data. Examples for data are as follows.
"gender": "female"
, "skin tone": "warm"
, and would supply this as data
.data
, e.g. "interest snowboarding": "yes"
, "interest technology": "no"
.data
, e.g. "voice recording triggered": "yes"
, "voice transcribed": "play music"
.If you want to invite observed users to join FORTYEIGHT set the invite
flag in the corresponding identity
. In case the user hasn't signed up for FORTYEIGHT yet we will send out an email (if the identity is of type EMAIL_ADDRESS
) or an SMS (if the identity is of type MOBILE_NUMBER
) to the identity record.
The observation to store
type required | string Enum: "FACIAL_RECOGNITION" "SMART_MIRRORS" "COVID19_MONITORING" "ARTIFICIAL_INTELLIGENCE" "ADVERTISING" "NETWORKS" "MISC" The type of the observation |
required | object (KeyValue) |
timestamp required | string <date-time> The date and time the observation was made |
required | Array of objects (Identity) non-empty The identities associated with this observation |
{- "type": "ADVERTISING",
- "data": {
- "key1": "string",
- "key2": "string",
- "keyN": "string"
}, - "timestamp": "2019-08-24T14:15:22Z",
- "identities": [
- {
- "identity": "foo@bar.baz",
- "type": "EMAIL_ADDRESS",
- "invite": true
}
]
}
Query the escrow for observations. Use the limit
and lastKey
query parameters to paginate through the results.
observationType | string Filter by an observation type |
lastKey | string Request a paginated result |
limit | number The number of results to return |
import requests observation_type = "ADVERTISING" limit = 100 url = f"https://api.fortyeight.ai/v1/escrow/observations" \ f"?observationType={observation_type}" \ f"&limit={limit}" headers = {"x-api-key": YOUR_API_KEY} requests.get(url, headers=headers)
{- "observations": [
- {
- "id": "9e3ad3bb-84f0-4754-b814-33c5c19af632",
- "type": "ADVERTISING",
- "data": {
- "key1": "string",
- "key2": "string",
- "keyN": "string"
}, - "timestamp": "2019-08-24T14:15:22Z",
- "received": "2019-08-24T14:15:22Z",
- "expires": 1614359139,
- "identities": [
- {
- "identity": "foo@bar.baz",
- "type": "EMAIL_ADDRESS",
- "invite": true
}
], - "requestId": "497d1e2b-273f-4b3f-91d3-4cf90faf6e1a",
- "extendedRequestId": "Z67_KGJ1rPEFqLA="
}
]
}
Retrieve information about a single observation stored in the escrow.
observationId required | string The version 4 UUID of the observation to retrieve information about |
import requests observation_id = "9e3ad3bb-84f0-4754-b814-33c5c19af632" url = f"https://api.fortyeight.ai/v1/escrow/observations/" \ f"{observation_id}/" headers = {"x-api-key": YOUR_API_KEY} requests.get(url, headers=headers)
{- "id": "9e3ad3bb-84f0-4754-b814-33c5c19af632",
- "type": "ADVERTISING",
- "data": {
- "key1": "string",
- "key2": "string",
- "keyN": "string"
}, - "timestamp": "2019-08-24T14:15:22Z",
- "received": "2019-08-24T14:15:22Z",
- "expires": 1614359139,
- "identities": [
- {
- "identity": "foo@bar.baz",
- "type": "EMAIL_ADDRESS",
- "invite": true
}
], - "requestId": "497d1e2b-273f-4b3f-91d3-4cf90faf6e1a",
- "extendedRequestId": "Z67_KGJ1rPEFqLA="
}
Delete a single observation from the escrow.
observationId required | string The version 4 UUID of the observation to delete |
import requests observation_id = "9e3ad3bb-84f0-4754-b814-33c5c19af632" url = f"https://api.fortyeight.ai/v1/escrow/observations/" \ f"{observation_id}/" headers = {"x-api-key": YOUR_API_KEY} requests.delete(url, headers=headers)