Privacy Operations API Documentation

Read supplied privacy policies, notices, and records, list stated categories and retention periods, and point at missing or inconsistent fields. Payment is the exact USDC price on Base with x402.

POSThttps://brainiac.software/api/v1/privacy-operations/policy-structure-audit$0.04 USDC

Audit privacy policy structure

List headings and Section lines in a supplied policy and compare them with the sections the caller marks as required. Headings are still listed when a required section is absent. A missing section is a gap in the document, not a legal conclusion.

Body

FieldRequiredNotes
textNostring
policyNostring
noticeNostring
jsonNostring
csvNostring
fileNoobject; Object
sectionsNoarray; Array
requirementsNoarray; Array
categoriesNoarray; Array
cookiesNoarray; Array
consentsNoarray; Array
requestsNoarray; Array
evidenceNoarray; Array

Request exampleJSON

{
  "policy": "# Purposes\n# Retention\nWe collect addresses for sign in.\n",
  "requirements": [
    {
      "kind": "section",
      "name": "Purposes"
    },
    {
      "kind": "section",
      "name": "Legal basis"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-03T17:00:00.000Z",
  "gdprCompliance": false,
  "legalConclusion": false,
  "recordsAccessed": false,
  "recordsDeleted": false,
  "status": "checked",
  "sections": [
    {
      "name": "Purposes"
    },
    {
      "name": "Retention"
    }
  ],
  "requirements": [
    {
      "name": "Purposes",
      "present": true,
      "interpretation": "stated"
    },
    {
      "name": "Legal basis",
      "present": false,
      "interpretation": "none"
    }
  ],
  "findings": [
    {
      "kind": "ignored",
      "code": "unlabeled_line",
      "subject": "policy",
      "detail": "Lines without a recognized label were not read and their text was not copied."
    },
    {
      "kind": "missing",
      "code": "section_missing",
      "subject": "Legal basis",
      "detail": "This required section was not in the supplied headings. This is not a legal conclusion."
    }
  ],
  "limitations": [
    "This is not a GDPR compliance determination or a legal conclusion.",
    "Categories, purposes, retention periods, and stated legal bases are copied only from labeled fields supplied by the caller.",
    "Email addresses and other direct identifiers are not copied into the response.",
    "No external customer record is accessed or deleted.",
    "A missing item means it was not in the supplied documents."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/privacy-operations/policy-structure-audit" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "policy": "# Purposes\n# Retention\nWe collect addresses for sign in.\n",
  "requirements": [
    {
      "kind": "section",
      "name": "Purposes"
    },
    {
      "kind": "section",
      "name": "Legal basis"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/privacy-operations/personal-data-inventory-extract$0.04 USDC

Extract a personal data inventory

Copy categories, purposes, stated legal bases, and retention periods from Category fields. Prose is not mined for categories, and a stated basis is not assessed.

Body

FieldRequiredNotes
textNostring
policyNostring
noticeNostring
jsonNostring
csvNostring
fileNoobject; Object
sectionsNoarray; Array
requirementsNoarray; Array
categoriesNoarray; Array
cookiesNoarray; Array
consentsNoarray; Array
requestsNoarray; Array
evidenceNoarray; Array

Request exampleJSON

{
  "categories": [
    {
      "name": "account email",
      "purpose": "sign in",
      "basis": "contract",
      "retention": "30 days"
    },
    {
      "name": "support notes",
      "purpose": "support"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-03T17:00:00.000Z",
  "gdprCompliance": false,
  "legalConclusion": false,
  "recordsAccessed": false,
  "recordsDeleted": false,
  "status": "extracted",
  "categories": [
    {
      "name": "account email",
      "purpose": "sign in",
      "basis": "contract",
      "retention": "30 days",
      "document": "",
      "basisStated": true,
      "interpretation": "stated"
    },
    {
      "name": "support notes",
      "purpose": "support",
      "basis": "",
      "retention": "",
      "document": "",
      "basisStated": false,
      "interpretation": "stated"
    }
  ],
  "findings": [
    {
      "kind": "missing",
      "code": "basis_missing",
      "subject": "support notes",
      "detail": "No legal basis was stated for this category. None was inferred."
    },
    {
      "kind": "missing",
      "code": "retention_missing",
      "subject": "support notes",
      "detail": "No retention period was stated for this category."
    }
  ],
  "limitations": [
    "This is not a GDPR compliance determination or a legal conclusion.",
    "Categories, purposes, retention periods, and stated legal bases are copied only from labeled fields supplied by the caller.",
    "Email addresses and other direct identifiers are not copied into the response.",
    "No external customer record is accessed or deleted.",
    "A missing item means it was not in the supplied documents."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/privacy-operations/personal-data-inventory-extract" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "categories": [
    {
      "name": "account email",
      "purpose": "sign in",
      "basis": "contract",
      "retention": "30 days"
    },
    {
      "name": "support notes",
      "purpose": "support"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/privacy-operations/data-retention-policy-check$0.04 USDC

Check stated retention periods

Read retention periods stated by the caller. A period counts only as days, months, years, account lifetime, or until deletion. Months are not converted to days, and no statutory period is invented.

Body

FieldRequiredNotes
textNostring
policyNostring
noticeNostring
jsonNostring
csvNostring
fileNoobject; Object
sectionsNoarray; Array
requirementsNoarray; Array
categoriesNoarray; Array
cookiesNoarray; Array
consentsNoarray; Array
requestsNoarray; Array
evidenceNoarray; Array

Request exampleJSON

{
  "categories": [
    {
      "name": "account email",
      "purpose": "sign in",
      "basis": "contract",
      "retention": "30 days"
    },
    {
      "name": "support notes",
      "purpose": "support",
      "basis": "consent",
      "retention": "soon"
    }
  ],
  "requirements": [
    {
      "kind": "category",
      "name": "billing"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-03T17:00:00.000Z",
  "gdprCompliance": false,
  "legalConclusion": false,
  "recordsAccessed": false,
  "recordsDeleted": false,
  "status": "checked",
  "periods": [
    {
      "category": "account email",
      "period": "30 days",
      "unit": "day",
      "count": 30,
      "readable": true,
      "interpretation": "stated"
    },
    {
      "category": "support notes",
      "period": "soon",
      "unit": "",
      "count": 0,
      "readable": false,
      "interpretation": "stated"
    }
  ],
  "findings": [
    {
      "kind": "observation",
      "code": "period_unreadable",
      "subject": "support notes",
      "detail": "The stated retention period is not a day, month, year, account lifetime, or until deletion. It was not rewritten."
    },
    {
      "kind": "missing",
      "code": "retention_required_missing",
      "subject": "billing",
      "detail": "This caller-required category has no stated retention period."
    }
  ],
  "limitations": [
    "This is not a GDPR compliance determination or a legal conclusion.",
    "Categories, purposes, retention periods, and stated legal bases are copied only from labeled fields supplied by the caller.",
    "Email addresses and other direct identifiers are not copied into the response.",
    "No external customer record is accessed or deleted.",
    "A missing item means it was not in the supplied documents."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/privacy-operations/data-retention-policy-check" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "categories": [
    {
      "name": "account email",
      "purpose": "sign in",
      "basis": "contract",
      "retention": "30 days"
    },
    {
      "name": "support notes",
      "purpose": "support",
      "basis": "consent",
      "retention": "soon"
    }
  ],
  "requirements": [
    {
      "kind": "category",
      "name": "billing"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/privacy-operations/notice-consistency-check$0.05 USDC

Compare a policy and a notice

Compare purpose, stated basis, and retention for the same category in a supplied policy and notice. A difference is reported and neither document is chosen.

Body

FieldRequiredNotes
textNostring
policyNostring
noticeNostring
jsonNostring
csvNostring
fileNoobject; Object
sectionsNoarray; Array
requirementsNoarray; Array
categoriesNoarray; Array
cookiesNoarray; Array
consentsNoarray; Array
requestsNoarray; Array
evidenceNoarray; Array

Request exampleJSON

{
  "policy": "Category: account email | sign in | contract | 30 days\n",
  "notice": "Category: account email | marketing | contract | 30 days\n"
}

Response exampleJSON

{
  "checkedAt": "2026-11-03T17:00:00.000Z",
  "gdprCompliance": false,
  "legalConclusion": false,
  "recordsAccessed": false,
  "recordsDeleted": false,
  "status": "compared",
  "comparisons": [
    {
      "category": "account email",
      "field": "purpose",
      "policy": "sign in",
      "notice": "marketing",
      "match": false,
      "interpretation": "stated"
    },
    {
      "category": "account email",
      "field": "basis",
      "policy": "contract",
      "notice": "contract",
      "match": true,
      "interpretation": "stated"
    },
    {
      "category": "account email",
      "field": "retention",
      "policy": "30 days",
      "notice": "30 days",
      "match": true,
      "interpretation": "stated"
    }
  ],
  "findings": [
    {
      "kind": "conflict",
      "code": "value_differs",
      "subject": "account email purpose",
      "detail": "The stated purpose differs between the policy and the notice. Neither value was chosen."
    }
  ],
  "limitations": [
    "This is not a GDPR compliance determination or a legal conclusion.",
    "Categories, purposes, retention periods, and stated legal bases are copied only from labeled fields supplied by the caller.",
    "Email addresses and other direct identifiers are not copied into the response.",
    "No external customer record is accessed or deleted.",
    "A missing item means it was not in the supplied documents."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/privacy-operations/notice-consistency-check" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "policy": "Category: account email | sign in | contract | 30 days\n",
  "notice": "Category: account email | marketing | contract | 30 days\n"
}
JSON
POSThttps://brainiac.software/api/v1/privacy-operations/data-subject-request-classify$0.03 USDC

Classify data subject requests

Match a supplied request type to access, deletion, correction, export, objection, or restriction. Any other wording is left unrecognized. No response deadline is calculated.

Body

FieldRequiredNotes
textNostring
policyNostring
noticeNostring
jsonNostring
csvNostring
fileNoobject; Object
sectionsNoarray; Array
requirementsNoarray; Array
categoriesNoarray; Array
cookiesNoarray; Array
consentsNoarray; Array
requestsNoarray; Array
evidenceNoarray; Array

Request exampleJSON

{
  "requests": [
    {
      "id": "R-100",
      "type": "deletion",
      "received": "2026-11-01"
    },
    {
      "id": "R-200",
      "type": "erase me",
      "received": "2026-02-31"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-03T17:00:00.000Z",
  "gdprCompliance": false,
  "legalConclusion": false,
  "recordsAccessed": false,
  "recordsDeleted": false,
  "status": "classified",
  "requests": [
    {
      "id": "R-100",
      "type": "deletion",
      "recognized": true,
      "received": "2026-11-01",
      "legalDeadline": false,
      "interpretation": "stated"
    },
    {
      "id": "R-200",
      "type": "erase me",
      "recognized": false,
      "received": "",
      "legalDeadline": false,
      "interpretation": "stated"
    }
  ],
  "findings": [
    {
      "kind": "observation",
      "code": "type_unrecognized",
      "subject": "R-200",
      "detail": "The request type is not one of access, deletion, correction, export, objection, or restriction. It was not remapped."
    },
    {
      "kind": "observation",
      "code": "date_unreadable",
      "subject": "R-200",
      "detail": "The received date is not a real YYYY-MM-DD day. It was not rewritten."
    }
  ],
  "limitations": [
    "This is not a GDPR compliance determination or a legal conclusion.",
    "Categories, purposes, retention periods, and stated legal bases are copied only from labeled fields supplied by the caller.",
    "Email addresses and other direct identifiers are not copied into the response.",
    "No external customer record is accessed or deleted.",
    "A missing item means it was not in the supplied documents."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/privacy-operations/data-subject-request-classify" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "requests": [
    {
      "id": "R-100",
      "type": "deletion",
      "received": "2026-11-01"
    },
    {
      "id": "R-200",
      "type": "erase me",
      "received": "2026-02-31"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/privacy-operations/data-deletion-evidence-check$0.04 USDC

Check deletion evidence

Compare supplied deletion requests with supplied evidence lines. A line that says deleted is only a statement in the request. No external record is accessed or deleted.

Body

FieldRequiredNotes
textNostring
policyNostring
noticeNostring
jsonNostring
csvNostring
fileNoobject; Object
sectionsNoarray; Array
requirementsNoarray; Array
categoriesNoarray; Array
cookiesNoarray; Array
consentsNoarray; Array
requestsNoarray; Array
evidenceNoarray; Array

Request exampleJSON

{
  "requests": [
    {
      "id": "R-100",
      "type": "deletion",
      "received": "2026-11-01"
    },
    {
      "id": "R-200",
      "type": "deletion",
      "received": "2026-11-01"
    }
  ],
  "evidence": [
    {
      "requestId": "R-100",
      "action": "deleted",
      "date": "2026-11-02"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-03T17:00:00.000Z",
  "gdprCompliance": false,
  "legalConclusion": false,
  "recordsAccessed": false,
  "recordsDeleted": false,
  "status": "checked",
  "checks": [
    {
      "requestId": "R-100",
      "action": "deleted",
      "recognized": true,
      "date": "2026-11-02",
      "deletionStated": true,
      "interpretation": "stated"
    }
  ],
  "findings": [
    {
      "kind": "observation",
      "code": "deletion_stated",
      "subject": "R-100",
      "detail": "The supplied record says deleted. No external record was deleted."
    },
    {
      "kind": "missing",
      "code": "evidence_missing",
      "subject": "R-200",
      "detail": "This deletion request has no supplied evidence. No record was deleted."
    }
  ],
  "limitations": [
    "This is not a GDPR compliance determination or a legal conclusion.",
    "Categories, purposes, retention periods, and stated legal bases are copied only from labeled fields supplied by the caller.",
    "Email addresses and other direct identifiers are not copied into the response.",
    "No external customer record is accessed or deleted.",
    "A missing item means it was not in the supplied documents."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/privacy-operations/data-deletion-evidence-check" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "requests": [
    {
      "id": "R-100",
      "type": "deletion",
      "received": "2026-11-01"
    },
    {
      "id": "R-200",
      "type": "deletion",
      "received": "2026-11-01"
    }
  ],
  "evidence": [
    {
      "requestId": "R-100",
      "action": "deleted",
      "date": "2026-11-02"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/privacy-operations/documentation-report$0.12 USDC

Report privacy documentation

Combine supplied sections, categories, retention periods, notice differences, cookie consent states, request types, and deletion evidence. The report does not determine GDPR compliance.

Body

FieldRequiredNotes
textNostring
policyNostring
noticeNostring
jsonNostring
csvNostring
fileNoobject; Object
sectionsNoarray; Array
requirementsNoarray; Array
categoriesNoarray; Array
cookiesNoarray; Array
consentsNoarray; Array
requestsNoarray; Array
evidenceNoarray; Array

Request exampleJSON

{
  "policy": "# Purposes\nCategory: account email | sign in | contract | 30 days\n",
  "notice": "Category: account email | marketing | contract | 30 days\n",
  "requirements": [
    {
      "kind": "section",
      "name": "Legal basis"
    },
    {
      "kind": "category",
      "name": "billing"
    }
  ],
  "cookies": [
    {
      "name": "analytics",
      "purpose": "measurement",
      "duration": "30 days",
      "consent": "optional"
    }
  ],
  "consents": [
    {
      "name": "analytics",
      "state": "not-set"
    }
  ],
  "requests": [
    {
      "id": "R-100",
      "type": "deletion",
      "received": "2026-11-01"
    },
    {
      "id": "R-200",
      "type": "deletion",
      "received": "2026-11-01"
    }
  ],
  "evidence": [
    {
      "requestId": "R-100",
      "action": "deleted",
      "date": "2026-11-02"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-03T17:00:00.000Z",
  "gdprCompliance": false,
  "legalConclusion": false,
  "recordsAccessed": false,
  "recordsDeleted": false,
  "status": "checked",
  "sectionCount": 1,
  "categoryCount": 2,
  "sections": [
    {
      "name": "Purposes"
    }
  ],
  "categories": [
    {
      "name": "account email",
      "purpose": "sign in",
      "basis": "contract",
      "retention": "30 days",
      "document": "policy",
      "basisStated": true,
      "interpretation": "stated"
    },
    {
      "name": "account email",
      "purpose": "marketing",
      "basis": "contract",
      "retention": "30 days",
      "document": "notice",
      "basisStated": true,
      "interpretation": "stated"
    }
  ],
  "periods": [
    {
      "category": "account email",
      "period": "30 days",
      "unit": "day",
      "count": 30,
      "readable": true,
      "interpretation": "stated"
    },
    {
      "category": "account email",
      "period": "30 days",
      "unit": "day",
      "count": 30,
      "readable": true,
      "interpretation": "stated"
    }
  ],
  "comparisons": [
    {
      "category": "account email",
      "field": "purpose",
      "policy": "sign in",
      "notice": "marketing",
      "match": false,
      "interpretation": "stated"
    },
    {
      "category": "account email",
      "field": "basis",
      "policy": "contract",
      "notice": "contract",
      "match": true,
      "interpretation": "stated"
    },
    {
      "category": "account email",
      "field": "retention",
      "policy": "30 days",
      "notice": "30 days",
      "match": true,
      "interpretation": "stated"
    }
  ],
  "consentEnforced": false,
  "cookies": [
    {
      "name": "analytics",
      "purpose": "measurement",
      "duration": "30 days",
      "consent": "optional",
      "consentState": "not-set",
      "interpretation": "stated"
    }
  ],
  "requests": [
    {
      "id": "R-100",
      "type": "deletion",
      "recognized": true,
      "received": "2026-11-01",
      "legalDeadline": false,
      "interpretation": "stated"
    },
    {
      "id": "R-200",
      "type": "deletion",
      "recognized": true,
      "received": "2026-11-01",
      "legalDeadline": false,
      "interpretation": "stated"
    }
  ],
  "checks": [
    {
      "requestId": "R-100",
      "action": "deleted",
      "recognized": true,
      "date": "2026-11-02",
      "deletionStated": true,
      "interpretation": "stated"
    }
  ],
  "findings": [
    {
      "kind": "missing",
      "code": "section_missing",
      "subject": "Legal basis",
      "detail": "This required section was not in the supplied headings. This is not a legal conclusion."
    },
    {
      "kind": "missing",
      "code": "retention_required_missing",
      "subject": "billing",
      "detail": "This caller-required category has no stated retention period."
    },
    {
      "kind": "conflict",
      "code": "value_differs",
      "subject": "account email purpose",
      "detail": "The stated purpose differs between the policy and the notice. Neither value was chosen."
    },
    {
      "kind": "missing",
      "code": "consent_not_set",
      "subject": "analytics",
      "detail": "This cookie is marked optional and no opt-in or opt-out state was supplied. Consent was not enforced."
    },
    {
      "kind": "observation",
      "code": "deletion_stated",
      "subject": "R-100",
      "detail": "The supplied record says deleted. No external record was deleted."
    },
    {
      "kind": "missing",
      "code": "evidence_missing",
      "subject": "R-200",
      "detail": "This deletion request has no supplied evidence. No record was deleted."
    }
  ],
  "limitations": [
    "This is not a GDPR compliance determination or a legal conclusion.",
    "Categories, purposes, retention periods, and stated legal bases are copied only from labeled fields supplied by the caller.",
    "Email addresses and other direct identifiers are not copied into the response.",
    "No external customer record is accessed or deleted.",
    "A missing item means it was not in the supplied documents."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/privacy-operations/documentation-report" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "policy": "# Purposes\nCategory: account email | sign in | contract | 30 days\n",
  "notice": "Category: account email | marketing | contract | 30 days\n",
  "requirements": [
    {
      "kind": "section",
      "name": "Legal basis"
    },
    {
      "kind": "category",
      "name": "billing"
    }
  ],
  "cookies": [
    {
      "name": "analytics",
      "purpose": "measurement",
      "duration": "30 days",
      "consent": "optional"
    }
  ],
  "consents": [
    {
      "name": "analytics",
      "state": "not-set"
    }
  ],
  "requests": [
    {
      "id": "R-100",
      "type": "deletion",
      "received": "2026-11-01"
    },
    {
      "id": "R-200",
      "type": "deletion",
      "received": "2026-11-01"
    }
  ],
  "evidence": [
    {
      "requestId": "R-100",
      "action": "deleted",
      "date": "2026-11-02"
    }
  ]
}
JSON