Files
presidio/docs/api-docs/api-docs.yml
Omri Mendels 23888dcab9 Revert accidental migration push to main
Reverts a725ecfa ("updates to docs and markdown") and bee25c35 ("docs and md renames"), which were pushed to main by mistake. The migration work is preserved on a separate branch and will be reintroduced via a proper branch/PR.
2026-06-25 23:38:24 +03:00

786 lines
25 KiB
YAML

openapi: 3.0.0
info:
description: Context aware, pluggable and customizable PII anonymization service for text and images.
version: "2.0"
title: Presidio
contact:
name: Presidio support
email: presidio@microsoft.com
url: https://github.com/microsoft/presidio
x-logo:
url: "logo.svg"
altText: "Presidio"
backgroundColor: "#ffffff"
license:
name: MIT
url: 'https://github.com/microsoft/presidio/blob/main/LICENSE'
externalDocs:
description: Presidio documentation.
url: 'https://microsoft.github.io/presidio/'
tags:
- name: Analyzer
description: Detecting PII entities in text
- name: Anonymizer
description: Anonymizing detected PII text entities with desired values.
paths:
/analyze:
post:
servers:
- url: https://presidio-analyzer-prod.azurewebsites.net
tags:
- Analyzer
summary: "Analyze Text"
description: "Recognizes PII entities in a given text and returns their types, locations and score"
requestBody:
$ref: "#/components/requestBodies/AnalyzeRequest"
responses:
200:
description: OK
content:
application/json:
schema:
oneOf:
- description: "A list of analysis results (when input text is a single string)"
type: array
items:
$ref: "#/components/schemas/RecognizerResultWithAnalysisExplanation"
- description: "A list of analysis result lists (when input text is an array of strings)"
type: array
items:
type: array
items:
$ref: "#/components/schemas/RecognizerResultWithAnalysisExplanation"
examples:
Enhanced response (single text):
value:
[
{ "entity_type": "PERSON", "start": 0, "end": 10, "score": 0.85,
"analysis_explanation": {
"recognizer": "SpacyRecognizer", "pattern_name": null, "pattern": null, "original_score": 0.85,
"score": 0.85, "textual_explanation": "Identified as PERSON by Spacy's Named Entity Recognition",
"score_context_improvement": 0, "supportive_context_word": "", "validation_result": null
}
},
{ "entity_type": "US_DRIVER_LICENSE", "start": 30, "end": 38, "score": 0.6499999999999999,
"analysis_explanation": {
"recognizer": "UsLicenseRecognizer", "pattern_name": "Driver License - Alphanumeric (weak)",
"pattern": "\\\\b([A-Z][0-9]{3,6}|[A-Z][0-9]{5,9}|[A-Z][0-9]{6,8}|[A-Z][0-9]{4,8}|[A-Z][0-9]{9,11}|[A-Z]{1,2}[0-9]{5,6}|H[0-9]{8}|V[0-9]{6}|X[0-9]{8}|A-Z]{2}[0-9]{2,5}|[A-Z]{2}[0-9]{3,7}|[0-9]{2}[A-Z]{3}[0-9]{5,6}|[A-Z][0-9]{13,14}|[A-Z][0-9]{18}|[A-Z][0-9]{6}R|[A-Z][0-9]{9}|[A-Z][0-9]{1,12}|[0-9]{9}[A-Z]|[A-Z]{2}[0-9]{6}[A-Z]|[0-9]{8}[A-Z]{2}|[0-9]{3}[A-Z]{2}[0-9]{4}|[A-Z][0-9][A-Z][0-9][A-Z]|[0-9]{7,8}[A-Z])\\\\b",
"original_score": 0.3, "score": 0.6499999999999999, "textual_explanation": null,
"score_context_improvement": 0.3499999999999999, "supportive_context_word": "driver",
"validation_result": null
}
}
]
Lean response (single text):
value:
[
{
"analysis_explanation": null,
"end": 38,
"entity_type": "US_DRIVER_LICENSE",
"score": 0.6499999999999999,
"start": 30
}
]
Batch response (array of texts):
value:
[
[
{ "entity_type": "PERSON", "start": 0, "end": 10, "score": 0.85, "analysis_explanation": null },
{ "entity_type": "US_DRIVER_LICENSE", "start": 30, "end": 38, "score": 0.6499999999999999, "analysis_explanation": null }
],
[
{ "entity_type": "EMAIL_ADDRESS", "start": 15, "end": 35, "score": 0.95, "analysis_explanation": null }
]
]
/recognizers:
get:
servers:
- url: https://presidio-analyzer-prod.azurewebsites.net
tags:
- Analyzer
summary: "Get Recognizers"
description: "Get the available PII recognizers for a given language"
parameters:
- in: query
name: language
schema:
type: string
example: en
description: "Two characters for the desired language in ISO_639-1 format"
responses:
200:
description: OK
content:
application/json:
schema:
description: "A list of supported recognizers"
type: array
items:
type: string
description: "Recognizer name"
example:
[
"CryptoRecognizer", "CreditCardRecognizer", "IbanRecognizer", "UsPhoneRecognizer",
"EmailRecognizer","UsPassportRecognizer", "NhsRecognizer", "IpRecognizer",
"SpacyRecognizer","SgFinRecognizer", "UsSsnRecognizer","UsBankRecognizer",
"DomainRecognizer", "UsLicenseRecognizer", "UsItinRecognizer"
]
/supportedentities:
get:
servers:
- url: https://presidio-analyzer-prod.azurewebsites.net
tags:
- Analyzer
summary: "Get supported entities"
description: "Get the list of PII entities Presidio-Analyzer is capable of detecting"
parameters:
- in: query
name: language
schema:
type: string
example: en
description: "Two characters for the desired language in ISO_639-1 format"
responses:
200:
description: OK
content:
application/json:
schema:
description: "A list of supported entities"
type: array
items:
$ref: "#/components/schemas/EntityTypes"
example:
[ "PHONE_NUMBER", "US_DRIVER_LICENSE", "US_PASSPORT", "LOCATION", "CREDIT_CARD", "CRYPTO",
"UK_NHS", "US_SSN", "US_BANK_NUMBER", "EMAIL_ADDRESS", "DATE_TIME", "IP_ADDRESS", "PERSON", "IBAN_CODE",
"NRP", "US_ITIN", "MEDICAL_LICENSE", "URL" ]
/anonymize:
post:
servers:
- url: https://presidio-anonymizer-prod.azurewebsites.net
tags:
- Anonymizer
summary: "Anonymize Text"
requestBody:
$ref: "#/components/requestBodies/AnonymizeRequest"
responses:
200:
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/AnonymizeResponse"
examples:
Replace and Redact Anonymizers:
value:
{ "text": "hello world, my name is ANONYMIZED. My number is: ", "items": [ { "operator": "redact", "entity_type": "PHONE_NUMBER", "start": 50, "end": 50, "text": "" }, { "operator": "replace", "entity_type": "NAME", "start": 24, "end": 34, "text": "ANONYMIZED" } ] }
Replace as default Anonymizer:
value:
{ "text": "hello world, my name is ANONYMIZED. My number is: ANONYMIZED", "items": [ { "operator": "replace", "entity_type": "PHONE_NUMBER", "start": 50, "end": 60, "text": "ANONYMIZED" }, { "operator": "replace", "entity_type": "NAME", "start": 24, "end": 34, "text": "ANONYMIZED" } ] }
400:
$ref: "#/components/responses/400BadRequest"
422:
$ref: "#/components/responses/422UnprocessableEntity"
/anonymizers:
get:
servers:
- url: https://presidio-anonymizer-prod.azurewebsites.net
tags:
- Anonymizer
summary: "Get supported anonymizers"
responses:
200:
description: OK
content:
application/json:
schema:
description: "A list of all built-in supported anonymizers"
type: array
items:
description: "The Anonymizer name"
type: string
example: "mask"
example:
[ "hash", "mask", "redact", "replace", "encrypt" ]
/deanonymize:
post:
servers:
- url: https://presidio-anonymizer-prod.azurewebsites.net
tags:
- Anonymizer
summary: "Deanonymize Text"
requestBody:
$ref: "#/components/requestBodies/DeanonymizeRequest"
responses:
200:
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/DeanonymizeResponse"
examples:
Decrypt Single PII:
value:
{ "text": "text_for_encryption", "items": [ { "start": 0, "end": 19, "operator":"decrypt", "text": "text_for_encryption","entity_type": "NUMBER" } ] }
400:
$ref: "#/components/responses/400BadRequest"
422:
$ref: "#/components/responses/422UnprocessableEntity"
/deanonymizers:
get:
servers:
- url: https://presidio-anonymizer-prod.azurewebsites.net
tags:
- Anonymizer
summary: "Get supported deanonymizers"
responses:
200:
description: OK
content:
application/json:
schema:
description: "A list of all built-in supported deanonymizers"
type: array
items:
description: "The Deanonymizer name"
type: string
example: "decrypt"
example:
[ "decrypt" ]
/health:
get:
servers:
- url: https://presidio-anonymizer-prod.azurewebsites.net
tags:
- Anonymizer
- Analyzer
summary: "Healthcheck"
responses:
200:
description: OK
content:
text/plain:
schema:
type: string
example: Presidio Anonymizer service is up
components:
requestBodies:
AnalyzeRequest:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AnalyzeRequest"
examples:
Minimal Request (single text):
value:
{
"text": "John Smith drivers license is AC432223",
"language": "en"
}
Minimal Request (batch request):
value:
{
"text": ["John Smith drivers license is AC432223", "John Smith drivers license is AC432223 and the zip code is 12345"],
"language": "en"
}
Enhanced Request (single text):
value:
{
"text": "John Smith drivers license is AC432223 and the zip code is 12345",
"language": "en",
"return_decision_process": false,
"correlation_id": "123e4567-e89b-12d3-a456-426614174000",
"score_threshold": 0.6,
"entities": ["US_DRIVER_LICENSE", "ZIP"],
"trace": false,
"ad_hoc_recognizers":[
{
"name": "Zip code Recognizer",
"supported_language": "en",
"patterns": [
{
"name": "zip code (weak)",
"regex": "(\\b\\d{5}(?:\\-\\d{4})?\\b)",
"score": 0.01
}
],
"context": ["zip", "code"],
"supported_entity":"ZIP"
}
]
}
AnonymizeRequest:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AnonymizeRequest"
examples:
Replace and Redact Anonymizers:
value:
{
"text": "hello world, my name is Jane Doe. My number is: 034453334",
"anonymizers": {
"PERSON": { "type": "redact" },
"PHONE_NUMBER": { "type": "replace", "new_value": "ANONYMIZED" }
},
"analyzer_results": [
{ "start": 24, "end": 32, "score": 0.8, "entity_type": "PERSON" },
{ "start": 48, "end": 57, "score": 0.95, "entity_type": "PHONE_NUMBER" }
]
}
Replace as default Anonymizer:
value:
{
"text": "hello world, my name is Jane Doe.",
"anonymizers": {
"DEFAULT": { "type": "replace", "new_value": "ANONYMIZED" },
},
"analyzer_results": [
{ "start": 24, "end": 32, "score": 0.8, "entity_type": "PERSON" },
]
}
DeanonymizeRequest:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DeanonymizeRequest"
examples:
Deanonymize text:
value:
{
"text": "My name is S184CMt9Drj7QaKQ21JTrpYzghnboTF9pn/neN8JME0=",
"deanonymizers": {
"PERSON": {
"type": "decrypt",
"key": "WmZq4t7w!z%C&F)J"
}
},
"anonymizer_results": [ {
"start": 11,
"end": 55,
"entity_type": "PERSON"
} ]
}
schemas:
AnalyzeRequest:
type: object
required:
- text
- language
properties:
text:
oneOf:
- type: string
- type: array
items:
type: string
description: "The text to analyze. Can be a single string or an array of strings."
example: "hello world, my name is Jane Doe. My number is: 034453334"
language:
type: string
description: "Two characters for the desired language in ISO_639-1 format"
example: "en"
correlation_id:
type: string
description: "A correlation id to append to headers and traces"
score_threshold:
type: number
format: double
description: "The minimal detection score threshold"
entities:
type: array
items:
$ref: "#/components/schemas/EntityTypes"
description: "A list of entities to analyze"
return_decision_process:
type: boolean
description: "Whether to include analysis explanation in the response"
ad_hoc_recognizers:
type: array
description: "list of recognizers to be used in the context of this request only (ad-hoc)."
items:
$ref: "#/components/schemas/PatternRecognizer"
context:
type: array
description: "list of context words which may help to raise recognized entities confidence"
items:
description: "The context word"
type: string
example: "address"
AnonymizeRequest:
type: object
required:
- text
- analyzer_results
properties:
text:
type: string
description: "The text to anonymize"
example: "hello world, my name is Jane Doe. My number is: 034453334"
anonymizers:
description: "Object where the key is DEFAULT or the ENTITY_TYPE and the value is the anonymizer definition"
type: object
additionalProperties:
anyOf:
- $ref: "#/components/schemas/Replace"
- $ref: "#/components/schemas/Redact"
- $ref: "#/components/schemas/Mask"
- $ref: "#/components/schemas/Hash"
- $ref: "#/components/schemas/Encrypt"
default:
{ "DEFAULT": { "type": "replace", "new_value": "<ENTITY_TYPE>" } }
analyzer_results:
type: array
description: "Array of analyzer detections"
items:
$ref: "#/components/schemas/RecognizerResult"
DeanonymizeRequest:
type: object
required:
- text
- anonymizer_results
- deanonymizers
properties:
text:
type: string
description: "The anonymized text"
example: "My name is S184CMt9Drj7QaKQ21JTrpYzghnboTF9pn/neN8JME0="
deanonymizers:
description: "Object where the key is DEFAULT or the ENTITY_TYPE and the value is decrypt since it is the only one supported"
type: object
additionalProperties:
anyOf:
- $ref: "#/components/schemas/Decrypt"
default:
{ "DEFAULT": { "type": "decrypt", "key": "3t6w9z$C&F)J@NcR" } }
anonymizer_results:
type: array
description: "Array of anonymized PIIs"
items:
$ref: "#/components/schemas/OperatorResult"
RecognizerResult:
type: object
required:
- start
- end
- score
- entity_type
properties:
start:
type: integer
description: "Where the PII starts"
example: 24
end:
type: integer
description: "Where the PII ends"
example: 32
score:
type: number
format: double
description: "The PII detection score"
example: 0.8
entity_type:
$ref: "#/components/schemas/EntityTypes"
RecognizerResultWithAnalysisExplanation:
allOf:
- $ref: '#/components/schemas/RecognizerResult'
- type: object
properties:
analysis_explanation:
$ref: "#/components/schemas/AnalysisExplanation"
AnalysisExplanation:
type: object
properties:
recognizer:
type: string
description: "Name of recognizer that made the decision"
pattern_name:
type: string
description: "name of pattern (if decision was made by a PatternRecognizer)"
pattern:
type: string
description: "Regex pattern that was applied (if PatternRecognizer)"
original_score:
type: number
format: double
description: "Recognizer's confidence in result"
score:
type: number
format: double
description: "The PII detection score"
textual_explanation:
type: string
description: "Free text for describing a decision of a logic or model"
score_context_improvement:
type: number
format: double
description: "Difference from the original score"
supportive_context_word:
type: string
description: "The context word which helped increase the score"
validation_result:
type: boolean
nullable: true
description: "Result of a validation (e.g. checksum)"
Pattern:
type: object
properties:
name:
type: string
description: "Name of regular expression pattern"
regex:
type: string
description: "Regex pattern string"
score:
type: number
format: double
description: "Detection confidence of this pattern (0.01 if very noisy, 0.6-1.0 if very specific)"
PatternRecognizer:
type: object
description: "A regular expressions or deny-list based recognizer"
properties:
name:
type: string
description: "Name of recognizer"
supported_language:
type: string
description: "Language code supported by this recognizer"
patterns:
description: "List of type Pattern containing regex expressions with additional metadata."
type: array
items:
$ref: "#/components/schemas/Pattern"
deny_list:
type: array
description: "List of words to be returned as PII if found."
items:
type: string
context:
description: "List of words to be used to increase confidence if found in the vicinity of detected entities."
type: array
items:
type: string
supported_entity:
type: string
description: "The name of entity this ad hoc recognizer detects"
EntityTypes:
description: "The supported PII entity types."
type: string
example: PERSON
Replace:
title: Replace
description: "Replace with a given value"
type: object
required:
- type
- new_value
properties:
type:
type: string
description: "replace"
example: replace
new_value:
type: string
description: "The string to replace with"
example: VALUE
Redact:
title: Redact
description: "Replace with an empty string"
type: object
required:
- type
properties:
type:
type: string
description: "redact"
example: redact
Mask:
title: Mask
description: "Replace with a given character"
type: object
required:
- type
- masking_char
- chars_to_mask
properties:
type:
type: string
description: "mask"
example: mask
masking_char:
type: string
description: "The replacement character"
example: "*"
chars_to_mask:
type: integer
description: "The amount of characters that should be replaced"
example: 4
from_end:
type: boolean
description: "Whether to mask the PII from it's end"
example: true
default: false
Hash:
title: Hash
description: "Replace with hashed value"
type: object
required:
- type
properties:
type:
type: string
description: "hash"
example: hash
hash_type:
type: string
description: "The hashing algorithm"
enum:
- sha256
- sha512
example: sha256
default: sha256
Encrypt:
title: Encrypt
description: "Replace with an encrypted value"
type: object
required:
- type
- key
properties:
type:
type: string
description: "encrypt"
example: encrypt
key:
type: string
description: "Cryptographic key of length 128, 192 or 256 bits, in a string format"
example: "3t6w9z$C&F)J@NcR"
Decrypt:
title: Decrypt
description: "Replace encrypted PII decrypted text"
type: object
required:
- type
- key
properties:
type:
type: string
description: "decrypt"
example: decrypt
key:
type: string
description: "Cryptographic key of length 128, 192 or 256 bits, in a string format"
example: "3t6w9z$C&F)J@NcR"
AnonymizeResponse:
type: object
properties:
text:
type: string
items:
type: array
description: "Array of anonymized entities"
items:
$ref: "#/components/schemas/OperatorResult"
OperatorResult:
required:
- start
- end
- entity_type
type: object
properties:
operator:
type: string
description: "Name of the used operator"
entity_type:
type: string
description: "Type of the PII entity"
start:
type: integer
description: "Start index of the changed text"
end:
type: integer
description: "End index in the changed text"
text:
type: string
description: "The new text returned"
DeanonymizeResponse:
type: object
properties:
text:
type: string
items:
type: array
description: "Array of deanonymized entities"
items:
$ref: "#/components/schemas/OperatorResult"
responses:
400BadRequest:
description: Bad request
content:
application/json:
schema:
type: object
properties:
error:
type: string
example: "Invalid request json"
422UnprocessableEntity:
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
error:
type: string
example: "Invalid input, text can not be empty"