API-dokumentation
Ett REST-API för att skapa, visa och hantera hemligheter. Alla förfrågningar och svar använder JSON, och all kryptering och dekryptering sker på din sida, så klartexten når aldrig våra servrar.
Översikt
Bas-URL:en för alla API-slutpunkter är:
https://password.link/api
Du kan använda API:et för att hantera både kryptering och dekryptering av hemligheten utanför vår tjänst, utan att behöva ladda några tillgångar från oss. Det tillåter också dig att använda vilken typ av leveransmetod som helst för den publika lösenordsdelen (halva lösenordet som används för att härleda krypteringsnyckeln för hemligheten från) och i princip skapa vilken typ av anpassad konfiguration som helst för att visa hemligheten.
För fungerande komplett kod, se Exempel på API.
Autentisering
Varje förfrågan måste autentiseras med en API-nyckel som skickas i Authorization-huvudet:
Authorization: ApiKey public_key_abcd...
Det finns två typer av API-nycklar:
| Nyckeltyp | Beskrivning |
|---|---|
| Publik API-nyckel | Avsedd för att skapa en egen självhostad sida för att visa hemligheter. Kan användas i publika skript. Tillåter endast visning och bekräftelse av hemligheter. |
| Privat API-nyckel | Krävs för alla andra API-åtgärder. Måste alltid hållas privat. |
Båda API-nycklarna innehåller typ av nyckel i själva nyckeln så att de lätt kan särskiljas.
Varje slutpunkt nedan visar vilken nyckeltyp den kräver.
Fel
När en förfrågan misslyckas innehåller svaret ett felobjekt:
{
"data": null,
"metadata": null,
"error": {
"message": "Ciphertext can't be blank",
"field": "ciphertext"
}
}
| Fält | Beskrivning |
|---|---|
message |
Det fullständiga felmeddelandet. |
field |
Fältet som felet gäller, när felet är ett valideringsfel. |
HTTP-svarets statuskod anger också typen av fel:
| Statuskod | Beskrivning |
|---|---|
403 Forbidden |
Förfrågan tilläts inte, till exempel på grund av en ogiltig API-nyckel. |
404 Not Found |
Den begärda resursen hittades inte. |
422 Unprocessable Content |
Förfrågan förstods men klarade inte valideringen, till exempel på grund av en saknad eller ogiltig parameter. |
Kryptering av hemligheter
Hemligheter krypteras på klientsidan innan de skickas till API:et. Det här avsnittet beskriver de lösenords- och chiffertextformat som tjänsten förväntar sig.
Lösenordsdelarna
Lösenordet som används för att kryptera hemligheten i AES måste bestå av två 18 tecken långa strängar. Den faktiska krypteringsnyckeln kommer att vara sammanfogningen av dessa två strängar ("privat del" + "publik del") och härleds från lösenordet med PBKDF2.
Password: fkgjbnvlakwiejgutnFIGKEOTIRUBNAKQJRL
=> Private part: fkgjbnvlakwiejgutn
=> Public part: FIGKEOTIRUBNAKQJRL
Den privata delen skickas till API:et (Base64-kodad) och lagras med hemligheten. Den publika delen skickas aldrig till API:et och levereras vanligtvis i själva länken, så vi kan aldrig dekryptera hemligheten själva.
Om du använder sidan för att visa hemligheter som vi tillhandahåller måste du också Base64-koda den publika delen. Om du använder en självhostad visningssida kan du använda samma metod eller skapa en egen. Se Exempel på API för referensimplementationer.
Chiffertextens format
Chiffertexten är ett JSON-objekt, kodat i Base64:
{
"cipher": "<Base64 encoded AES-GCM ciphertext>",
"iv": "<Base64 encoded 12-byte initialization vector>",
"salt": "<Base64 encoded 16-byte PBKDF2 salt>",
"iter": 10000
}
Du måste använda följande inställningar för AES när du krypterar hemligheten:
| Inställning | Värde |
|---|---|
| Läge | AES-GCM med en 128-bitars autentiseringstagg tillagd i slutet av chiffertexten (Web Crypto-standard) |
| Nyckellängd | 256 bits |
| Nyckelderivering | PBKDF2 med SHA-256 |
| PBKDF2-iterationer | Värdet i fältet iter. Tillåtet intervall 1000-1000000, vi rekommenderar 10000. |
| Initialiseringsvektor | 12 slumpmässiga byte |
| Salt | 16 slumpmässiga byte |
Äldre SJCL-format (föråldrat)
Chiffertexter som skapats med Stanford Javascript Crypto Library (SJCL) accepteras fortfarande: en SJCL-kompatibel chiffertext-JSON-sträng kodad i Base64, som använder AES-GCM ("mode:gcm"), en 256-bitars nyckel ("ks:256") och 10000 PBKDF2-iterationer ("iter:10000"). Det här formatet är föråldrat och stödet för det kommer att tas bort i framtiden.
Dekryptering av hemligheter
API:et Visa hemlighet returnerar chiffertexten exakt som den lagrades. Hemligheter som skapas i webbappen använder Web Crypto-formatet ovan. Hemligheter som skapats av äldre API-klienter, Chrome-tillägget eller ännu oöppnade länkar kan använda det äldre SJCL-formatet.
En självhostad visningssida måste hantera båda formaten. Avkoda chiffertexten från Base64 till JSON och kontrollera sedan om det finns en ct-nyckel: om den finns, dekryptera med SJCL, annars med Web Crypto. Se exemplet Visa hemlighet.
API-klienter som bara skapar hemligheter behöver inte ändras: SJCL-chiffertexter accepteras fortfarande vid skapande. Klienter som dekrypterar hemligheter som hämtats från API:et måste lägga till stöd för Web Crypto, annars misslyckas de med hemligheter som skapats i webbappen.
Skapa hemlighet
Skapar en krypterad hemlighet och returnerar dess ID. Chiffertexten måste skapas enligt beskrivningen i Kryptering av hemligheter. Returnerar 201 Created vid framgång.
Parametrar för begäran
| Parameter | Typ | Beskrivning |
|---|---|---|
ciphertextobligatorisk |
string |
En Web Crypto-kompatibel chiffertext-JSON-sträng av hemligheten, kodad i Base64. Äldre SJCL-kompatibla chiffertexter accepteras också (föråldrat). |
password_part_privateobligatorisk |
string |
Den privata lösenordsdelen som användes för att kryptera hemligheten, kodad i Base64. |
password_part_public |
string |
Den publika lösenordsdelen, kodad i Base64. Krävs endast när email_to används så att API:et kan e-posta den hostade hemlighetslänken. |
description |
string |
En beskrivning för hemligheten. Kan inte ses när hemligheten visas. |
message |
string |
Ett meddelande för hemligheten. Visas tillsammans med hemligheten. |
expiration |
integer |
En utgångstid för hemligheten, i timmar. Möjliga värden: 1-500. |
view_button |
boolean |
Visa en knapp för att visa hemligheten istället för att visa hemligheten direkt när länken öppnas. |
captcha |
boolean |
Visa en enkel CAPTCHA innan hemligheten visas, främst för att blockera automatiserade skannrar. |
password |
string |
Ett lösenord för hemligheten. |
max_views |
integer |
Hur många gånger hemligheten kan visas. Möjliga värden: 1-100. |
email_to |
string |
Kommaseparerade e-postmottagare som ska få den skapade hemlighetslänken. Kräver password_part_public. |
otp_email_recipient |
string |
E-postadress som får ett engångslösenord. När den är angiven måste mottagaren ange koden som skickats via e-post innan Secret kan visas. |
otp_recipient |
string |
Accepteras som alias för otp_email_recipient. Föredra otp_email_recipient för nya integrationer. |
otp_sms_recipient |
string |
Telefonnummer som tar emot ett engångslösenord via SMS, i internationellt format som börjar med + och utan mellanslag. |
allowed_ips |
string |
Kommaavgränsade IP-adresser eller CIDR-intervall som får visa Secret. |
allowed_locations |
array |
Array med ISO 3166-1 alfa-2-landskoder som får visa Secret. |
available_after |
datetime |
Datum och tid innan vilka Secret inte kan visas. |
secret_folder_id |
string |
ID för en befintlig Secret-mapp som ägs av API-nyckelanvändaren. |
reply_enabled |
boolean |
Aktivera ett engångssvar från mottagaren efter att Secret har visats. |
ack_required |
boolean |
Kräv mottagarbekräftelse innan Secret kan visas. |
ack_mode |
string |
Bekräftelseläge. Använd checkbox eller phrase. |
ack_phrase |
string |
Fras som mottagaren måste skriva. Krävs när ack_required är true och ack_mode är phrase. |
ack_disclosure_text |
string |
Upplysningstext som visas för mottagaren, upp till 500 tecken. |
ack_collect_name |
boolean |
samla in mottagarens namn med bekräftelsen. |
ack_name_required |
boolean |
Kräv mottagarens namn. Detta aktiverar också ack_collect_name. |
ack_collect_org |
boolean |
samla in mottagarens organisation med bekräftelsen. |
attachment |
object |
Metadata för en krypterad bilaga, se Bilagor. Kräver en aktiv plan. |
attachment.file_name |
string |
Det ursprungliga filnamnet som visas för mottagaren. Krävs när en bilaga anges. |
attachment.file_type |
string |
Den ursprungliga MIME-typen, till exempel text/plain eller application/pdf. Krävs när en bilaga anges. |
attachment.file_size |
integer |
Den ursprungliga okrypterade filstorleken i byte. Krävs när en bilaga anges. |
Team Secret Settings kan inaktivera, kräva eller tvinga standardvärden för stödda Secret-alternativ. API:t tillämpar dessa teamregler när ett Secret skapas.
Exempel på förfrågan
curl -H "Authorization: ApiKey private_key_abcd" \
-H "Content-Type: application/json" \
-X POST https://password.link/api/secrets \
-d '{
"ciphertext": "eyJjaXBoZXIiOiJRc3hxsN3...aXRlciI6MTAwMDB9",
"password_part_private": "ZmtnamJudmxha3dpZWpndXRu",
"description": "Database credentials",
"expiration": 24,
"view_button": true,
"max_views": 1
}'
Exempel på svar
{
"data": {
"id": "dT5g"
},
"metadata": {
"secrets_total": 70,
"secrets_usage": 25,
"secrets_allowance": 100,
"secret_requests_total": 10,
"secret_requests_allowance": 100
}
}
Länken till hemligheten bildas genom att kombinera URL:en till den hostade visningssidan, hemlighetens ID och den Base64-kodade publika lösenordsdelen:
https://password.link/<id>/#<public password part, Base64>
Bilagor
Att ladda upp en bilaga är en process i två steg: skapa först hemligheten med bilagans metadata (se Skapa hemlighet), kryptera sedan och ladda upp den krypterade bilagenyttolasten till den returnerade uppladdnings-URL:en.
Hemlighetens innehåll och bilagans innehåll krypteras separat. Båda använder Web Crypto-kompatibla AES-GCM-data, Base64-kodade, men nyttolastens fält kodas olika: hemlighetens nyttolast innehåller Base64-kodade fält och ett iter-fält, medan bilagans nyttolast innehåller fält med råa binära strängar.
Kryptering av bilagan
Före kryptering representerar du filen som en data-URL:
data:<mime-type>;base64,<base64 file bytes>
Bilagans krypteringslösenord är den råa privata lösenordsdelen sammanfogad med den råa publika lösenordsdelen (ingen Base64-kodning).
Kryptera den data-URL-strängen med AES-GCM med PBKDF2-SHA256, 10000 iterationer, en härledd 256-bitars nyckel, ett slumpmässigt 16-byte salt och en slumpmässig 12-byte IV. Lagra den krypterade bilagenyttolasten som ett JSON-objekt och Base64-koda sedan JSON-strängen:
{
"cipher": "<binary string>",
"iv": "<binary string>",
"salt": "<binary string>"
}
Uppladdning av den krypterade filen
När en bilaga ingår innehåller svaret från skapandet av hemligheten ett uppladdningsmål i data.attachment.upload:
{
"data": {
"id": "dT5g",
"attachment": {
"file_name": "example.txt",
"upload": {
"url": "/api/secrets/dT5g/attachment",
"fields": {},
"metadata": {}
}
}
},
"metadata": {}
}
Ladda upp den Base64-kodade krypterade JSON:en som text/plain med multipart/form-data till den returnerade upload.url. Lägg till alla returnerade nyckel/värde-par från upload.metadata eller upload.fields i formulärdatan innan du lägger till den krypterade filen. Fältet för den krypterade filen måste heta file.
För Password.link-uppladdnings-URL:er, inkludera samma privata API-nyckel i Authorization: ApiKey <key>-huvudet. Direkta uppladdnings-URL:er för lagring, till exempel försignerade S3-URL:er, ska endast ta emot de returnerade formulärfälten och det krypterade file-fältet.
Uppladdnings-URL:er som hostas på Password.link inkluderar ett tomt fields-objekt. Direkta lagringsuppladdnings-URL:er, såsom förhandsignerade S3-URL:er, returnerar signeringsfält i metadata istället.
Storleksgränser för bilagor beror på kontots eller teamets tilldelning, och den krypterade uppladdningen är större än originalfilen eftersom filen konverteras till Base64 och krypteras.
Visa hemlighet
Hämtar chiffertexten, den privata lösenordsdelen och andra detaljer om en hemlighet. Den här slutpunkten kan användas för att skapa en egen självhostad sida för att visa hemligheter som inte läser in några skript eller andra resurser från vår tjänst. Returnerar 200 OK vid framgång.
Att framgångsrikt hämta en hemlighet markerar den automatiskt som visad och raderar därmed chiffertexten och den privata lösenordsdelen från vår databas, vilket gör det omöjligt att visa hemligheten igen.
Chiffertexten kan vara i Web Crypto-formatet eller i det äldre SJCL-formatet. Identifiera SJCL-nyttolaster med hjälp av en ct-nyckel i den avkodade JSON-datan. Se Dekryptering av hemligheter.
Om hemligheten är skyddad med en OTP-kod eller ett lösenord, skicka värdet i ett begäranshuvud. Värden i frågesträngen accepteras inte. Utan ett giltigt värde returneras 403 Forbidden med secret_status satt till otp_required eller password_required. Om en hemlighet har både en OTP-mottagare och ett lösenord kontrolleras endast OTP-koden, på samma sätt som när hemligheten öppnas i en webbläsare.
OTP-koden skickas till OTP-mottagaren när denne öppnar länken till hemligheten. API:et skickar den inte. Hemligheter som endast begränsar tillåtna mottagares e-postadresser kräver ingen OTP-kod via API:et.
Begäranshuvuden
| Huvud | Typ | Beskrivning |
|---|---|---|
X-Secret-Otp |
string |
OTP-koden som skickats till OTP-mottagaren. Krävs när hemligheten är skyddad med en OTP-kod. |
X-Secret-Password |
string |
Hemlighetens lösenord. Krävs när hemligheten är lösenordsskyddad. |
Exempel på förfrågan
curl -H "Authorization: ApiKey public_key_abcd" \
https://password.link/api/secrets/dT5g
Exempel på svar
{
"data": {
"id": "dT5g",
"ciphertext": "eyJjaXBoZXIiOiJRc3hxsN3...aXRlciI6MTAwMDB9",
"password_part_private": "ZmtnamJudmxha3dpZWpndXRu",
"message": "Here are the credentials we talked about"
},
"metadata": null
}
Bekräfta Secret
Skickar mottagarens bekräftelse för en hemlighet som skapats med ack_required och returnerar samma hemlighetsdata som View Secret när bekräftelsen är giltig. Returnerar 200 OK vid framgång.
Om bekräftelse krävs returnerar GET /api/secrets/<id> 403 Forbidden med secret_status satt till ack_required tills den här slutpunkten används.
Ogiltiga eller ofullständiga bekräftelsedata returnerar också 403 Forbidden. De returneras inte som valideringsfel.
Om hemligheten är skyddad med en OTP-kod eller ett lösenord, skicka värdet i samma huvuden som för ”Visa hemlighet”, eller som otp och password i JSON-begärans brödtext.
Parametrar för begäran
| Parameter | Typ | Beskrivning |
|---|---|---|
ack_confirmed |
boolean |
Sätt till true för bekräftelse via kryssruta. |
ack_phrase |
string |
Krävs för frasbekräftelse och måste matcha frasen som konfigurerats för Secret. |
ack_signer_name |
string |
Mottagarens namn, krävs när namninsamling är aktiverad och markerad som obligatorisk. |
ack_signer_org |
string |
Mottagarens organisation, lagras när organisationsinsamling är aktiverad. |
Exempel på förfrågan
curl -H "Authorization: ApiKey public_key_abcd" \
-H "Content-Type: application/json" \
-X POST https://password.link/api/secrets/dT5g/acknowledge \
-d '{"ack_confirmed": true, "ack_signer_name": "Jane Doe"}'
Lista hemligheter
Hämtar en lista över hemligheter. Innehåller inte chiffertexterna eller de privata lösenordsdelarna, endast ID:n, beskrivningar och liknande. Returnerar 200 OK vid framgång.
Det maximala antalet returnerade resultat för varje fråga är begränsat till 50. Du kan styra offseten med den valfria frågeparametern offset, till exempel: /api/secrets?offset=50
Exempel på förfrågan
curl -H "Authorization: ApiKey private_key_abcd" \
https://password.link/api/secrets
Exempel på svar
{
"data": [
{
"id": "dT5g",
"created_at": "2026-07-02T10:00:00.000Z",
"message": "Here are the credentials we talked about",
"description": "Database credentials",
"view_button": true,
"captcha": false,
"password": false,
"expiration": 24,
"expired": false,
"view_times": 1,
"max_views": 1,
"secret_folder_id": "5e976e6e-d205-4f58-8df9-5ac0048bc702",
"views": [
{
"viewed_at": "2026-07-02T12:34:56.000Z",
"viewed_by_ip": "192.0.2.10",
"viewed_by_user_agent": "Mozilla/5.0 ..."
}
]
}
],
"metadata": {
"secrets_total": 70,
"secrets_usage": 25,
"secrets_allowance": 100,
"secret_requests_total": 10,
"secret_requests_allowance": 100
}
}
Uppdatera Secret
Uppdaterar inställningar och metadata som stöds för en befintlig hemlighet. Returnerar 204 No Content vid framgång.
PATCH ersätter inte hemlighetens krypterade innehåll, skickar inte om leverans-e-post och skapar inte metadata för bilageuppladdning. Använd Create Secret för chiffertext, lösenordsdelar, länkleverans och bilagor.
Följande parametrar kan uppdateras, med samma betydelse som i Create Secret:
description, message, expiration, max_views,
view_button, captcha, password,
otp_email_recipient, otp_recipient, otp_sms_recipient,
allowed_ips, allowed_locations, available_after,
secret_folder_id, reply_enabled,
ack_required, ack_mode, ack_phrase, ack_disclosure_text,
ack_collect_name, ack_name_required, ack_collect_org
ciphertext, password_part_private, password_part_public, email_to och bilagemetadata kan endast anges vid skapandet. De ignoreras av PATCH.
Exempel på förfrågan
curl -H "Authorization: ApiKey private_key_abcd" \
-H "Content-Type: application/json" \
-X PATCH https://password.link/api/secrets/dT5g \
-d '{"description": "Updated description", "otp_email_recipient": "recipient@example.com"}'
Radera hemlighet
Raderar en hemlighet. Returnerar 200 OK vid framgång.
Exempel på förfrågan
curl -H "Authorization: ApiKey private_key_abcd" \
-X DELETE https://password.link/api/secrets/dT5g
Exempel på svar
{
"data": null,
"metadata": {
"secrets_total": 69,
"secrets_usage": 24,
"secrets_allowance": 100,
"secret_requests_total": 10,
"secret_requests_allowance": 100
}
}
Skapa Secret-mapp
Skapar en hemlighetsmapp. Returnerar 201 Created vid framgång.
Parametrar för begäran
| Parameter | Typ | Beskrivning |
|---|---|---|
nameobligatorisk |
string |
Mappnamn. |
description |
string |
Mappbeskrivning. |
Exempel på svar
{
"data": {
"id": "5e976e6e-d205-4f58-8df9-5ac0048bc702"
},
"metadata": {
"secrets_total": 70,
"secrets_usage": 25,
"secrets_allowance": 100,
"secret_requests_total": 10,
"secret_requests_allowance": 100
}
}
Lista Secret-mappar
Hämtar en lista över hemlighetsmappar. Returnerar 200 OK vid framgång.
Exempel på svar
{
"data": [
{
"id": "5e976e6e-d205-4f58-8df9-5ac0048bc702",
"name": "Clients",
"description": "Client credentials",
"created_at": "2026-07-02T10:00:00.000Z",
"updated_at": "2026-07-02T10:00:00.000Z"
}
],
"metadata": {
"secrets_total": 70,
"secrets_usage": 25,
"secrets_allowance": 100,
"secret_requests_total": 10,
"secret_requests_allowance": 100
}
}
Uppdatera Secret-mapp
Uppdaterar namnet och beskrivningen för en hemlighetsmapp. Accepterar samma parametrar som Create Secret Folder och returnerar 204 No Content vid framgång.
Radera hemlig mapp
Raderar en hemlighetsmapp. Returnerar 200 OK vid framgång.
Skapa hemlig begäran
Skapar en ny hemlig begäran. Returnerar 201 Created vid framgång.
Parametrar för begäran
| Parameter | Typ | Beskrivning |
|---|---|---|
description |
string |
Beskrivning för den hemliga begäran. |
message |
string |
Meddelande för Secret Request-tittaren. |
expiration |
integer |
Utgångstid för den hemliga begäran, i timmar. |
limit |
integer |
Användningsgräns för den hemliga begäran. |
send_request_to_email |
string |
Skicka den skapade länken för hemlig begäran till den angivna e-postadressen. |
send_request_to_sms |
string |
Skicka den skapade Secret Request-länken till det angivna telefonnumret. |
send_to_email |
string |
Skicka den hemliga länken som skapats med hjälp av den hemliga begäran till den angivna e-postadressen. |
secret_description |
string |
Beskrivning för den hemlighet som skapats med hjälp av hemlighetsbegäran. |
secret_message |
string |
Meddelande för den hemlighet som skapats med hjälp av hemlighetsbegäran. |
secret_expiration |
integer |
Utgångstid för hemligheten som skapas med den hemliga förfrågan, i timmar.utgångstid i timmar för den hemlighet som skapats med hjälp av hemlighetsbegäran. |
secret_password |
string |
Lösenord för det Secret som skapats med Secret Request. |
secret_max_views |
integer |
Visningsgräns för den hemlighet som skapats med hjälp av hemlighetsbegäran. |
template_id |
string |
ID för begärandemallen som ska användas. |
secret_allowed_emails |
string |
Kommaavgränsade e-postadresser eller domäner som får öppna Secrets skapade med denna Secret Request. |
secret_allowed_ips |
string |
Kommaavgränsade IP-adresser eller CIDR-intervall som får öppna Secrets skapade med denna Secret Request. |
Exempel på förfrågan
curl -H "Authorization: ApiKey private_key_abcd" \
-H "Content-Type: application/json" \
-X POST https://password.link/api/secret_requests \
-d '{"description": "Request for VPN credentials", "expiration": 48}'
Exempel på svar
{
"data": {
"id": "5e976e6e-d205-4f58-8df9-5ac0048bc702"
},
"metadata": {
"secrets_total": 70,
"secrets_usage": 25,
"secrets_allowance": 100,
"secret_requests_total": 10,
"secret_requests_allowance": 100
}
}
Lista hemliga förfrågningar
Hämtar en lista över hemliga begäranden. Returnerar 200 OK vid framgång.
Det maximala antalet returnerade resultat för varje fråga är begränsat till 50. Du kan styra offseten med den valfria frågeparametern offset, till exempel: /api/secret_requests?offset=50
Listsvaret innehåller inte secret_allowed_emails eller secret_allowed_ips.
Exempel på förfrågan
curl -H "Authorization: ApiKey private_key_abcd" \
https://password.link/api/secret_requests
Exempel på svar
{
"data": [
{
"id": "5e976e6e-d205-4f58-8df9-5ac0048bc702",
"description": "Request for VPN credentials",
"message": "Please send me the VPN credentials",
"expiration": 48,
"limit": 1,
"send_request_to_email": "request-recipient@example.com",
"send_request_to_sms": "+358401234567",
"send_to_email": "example@example.com",
"secret_description": "VPN credentials",
"secret_message": null,
"secret_expiration": 24,
"secret_max_views": 1,
"secret_password": false,
"template_id": null
}
],
"metadata": {
"secrets_total": 70,
"secrets_usage": 25,
"secrets_allowance": 100,
"secret_requests_total": 10,
"secret_requests_allowance": 100
}
}
Begäran om att ta bort hemlighet
Raderar en hemlig begäran. Returnerar 200 OK vid framgång.
Exempel på förfrågan
curl -H "Authorization: ApiKey private_key_abcd" \
-X DELETE https://password.link/api/secret_requests/5e976e6e-d205-4f58-8df9-5ac0048bc702