Confirm account deletion
curl --request POST \
--url https://api.offlineprotocol.com/api/v1/users/me/delete-code \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-App-Id: <x-app-id>' \
--data '{
"otp": 123
}'import requests
url = "https://api.offlineprotocol.com/api/v1/users/me/delete-code"
payload = { "otp": 123 }
headers = {
"X-App-Id": "<x-app-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-App-Id': '<x-app-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({otp: 123})
};
fetch('https://api.offlineprotocol.com/api/v1/users/me/delete-code', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.offlineprotocol.com/api/v1/users/me/delete-code",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'otp' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-App-Id: <x-app-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.offlineprotocol.com/api/v1/users/me/delete-code"
payload := strings.NewReader("{\n \"otp\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-App-Id", "<x-app-id>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.offlineprotocol.com/api/v1/users/me/delete-code")
.header("X-App-Id", "<x-app-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"otp\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.offlineprotocol.com/api/v1/users/me/delete-code")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-App-Id"] = '<x-app-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"otp\": 123\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"data": "<unknown>"
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}Users
Confirm account deletion
Confirm the deletion code and schedule the OfflineID account for deletion 30 days later. Every session of the account is signed out at once.
POST
/
users
/
me
/
delete-code
Confirm account deletion
curl --request POST \
--url https://api.offlineprotocol.com/api/v1/users/me/delete-code \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-App-Id: <x-app-id>' \
--data '{
"otp": 123
}'import requests
url = "https://api.offlineprotocol.com/api/v1/users/me/delete-code"
payload = { "otp": 123 }
headers = {
"X-App-Id": "<x-app-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-App-Id': '<x-app-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({otp: 123})
};
fetch('https://api.offlineprotocol.com/api/v1/users/me/delete-code', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.offlineprotocol.com/api/v1/users/me/delete-code",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'otp' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-App-Id: <x-app-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.offlineprotocol.com/api/v1/users/me/delete-code"
payload := strings.NewReader("{\n \"otp\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-App-Id", "<x-app-id>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.offlineprotocol.com/api/v1/users/me/delete-code")
.header("X-App-Id", "<x-app-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"otp\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.offlineprotocol.com/api/v1/users/me/delete-code")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-App-Id"] = '<x-app-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"otp\": 123\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"data": "<unknown>"
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}{
"message": "<string>",
"data": {},
"error": {
"message": "<string>",
"code": "<string>",
"retryAfter": 123,
"currentHourCount": 123,
"limit": 123
}
}Confirming deletion signs the account out everywhere and deletes it 30 days later. Signing in before then cancels the deletion.
Account deletion purges the user’s indexed location rows. It does not remove permanent onchain Proof of Location records, including historical linkable tasks.

