Hermetics Records API

Your register, analyses, requests and breaches (writes to your account).

GitHub OpenAPI

Operations 6

POST /api/v1/tools/save_processing_record Save a record of processing activity #
POST /api/v1/tools/prepare_analysis Prepare a compliance analysis #
POST /api/v1/tools/answer_analysis_questions Answer the questions of an analysis #
POST /api/v1/tools/record_request Record a data subject request #
POST /api/v1/tools/report_breach Open a personal data breach #
POST /api/v1/tools/hermetics_message Write to the Hermetics Assistant #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hermetics-fr:hermetics-fr-records-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hermetics-fr-records-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hermetics Records API
  version: 1.0.0
  description: 'EU data protection law and the record of processing activities (GDPR art. 30): the official texts with their status, the obligations of a company, and the records, analyses, requests and breaches of your Hermetics account. Information, not legal advice: without a designated DPO, the final decision is yours.'
  contact:
    email: contact@hermetics.fr
    url: https://hermetics.fr/mcp
servers:
- url: https://hermetics.fr
tags:
- name: Records
  description: Your register, analyses, requests and breaches (writes to your account).
paths:
  /api/v1/tools/save_processing_record:
    post:
      operationId: save_processing_record
      summary: Save a record of processing activity
      description: 'Saves one entry of the record of processing activities (GDPR art. 30(1)) in the Hermetics account linked to the connection: new records get a code and every change is kept as a new version, in the account''s own register on the Hermetics platform (the free account has no DPO: the user checks the records). When the account belongs to a Hermetics client organization, records go to that organization''s register on the Hermetics platform (codes AT-001...), pending its DPO''s review; a change to a record the DPO has validated is sent to the DPO as a proposal. Returns the code, the version and the points a DPO would review in the entry; when an existing record is updated, also what changed from the previous version and what the change requires (information notice, proof of consent, processor contract, transfer safeguard, DPIA review). The free account stores 3 records; the paid plans have no record limit.'
      tags:
      - Records
      security:
      - bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 3
                  maxLength: 150
                  description: Short name of the processing activity (e.g. "Payroll", "Newsletter").
                purpose:
                  type: string
                  minLength: 10
                  maxLength: 1000
                  description: Purpose of the processing (art. 30(1)(b)).
                legal_basis:
                  type: string
                  enum:
                  - consent
                  - contract
                  - legal_obligation
                  - vital_interests
                  - public_task
                  - legitimate_interests
                  description: Legal basis under art. 6(1).
                legal_basis_details:
                  type: string
                  maxLength: 1000
                  description: 'Details of the legal basis: the legal obligation, the contract, or the legitimate interest pursued.'
                data_subjects:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                  minItems: 1
                  maxItems: 30
                  description: Categories of data subjects (art. 30(1)(c)), e.g. "employees", "customers".
                data_categories:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                  minItems: 1
                  maxItems: 30
                  description: Categories of personal data (art. 30(1)(c)), e.g. "identity", "bank details".
                special_category_data:
                  type: boolean
                  description: True if special category data (art. 9) are processed.
                art9_exception:
                  type: string
                  maxLength: 500
                  description: The art. 9(2) exception relied on, if special category data are processed.
                recipients:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                  minItems: 1
                  maxItems: 30
                  description: Categories of recipients, internal and external (art. 30(1)(d)).
                department:
                  type: string
                  minLength: 1
                  maxLength: 200
                  description: Department or business unit in charge of the processing (e.g. "HR", "Marketing").
                internal_recipients:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                  maxItems: 30
                  description: 'Internal recipients: who, inside the company, can see the data (art. 30(1)(d)), e.g. "payroll team".'
                processors:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                  maxItems: 30
                  description: Processors acting on behalf of the company (art. 28).
                transfers_outside_eea:
                  type: object
                  properties:
                    countries:
                      type: array
                      items:
                        type: string
                        minLength: 2
                        maxLength: 100
                      minItems: 1
                      maxItems: 30
                    safeguard:
                      type: string
                      maxLength: 300
                      description: Adequacy decision, standard contractual clauses, etc. (art. 44 to 49).
                  required:
                  - countries
                  additionalProperties: false
                  description: Transfers to third countries (art. 30(1)(e)), with the countries; omit if there is none or if it is not verified (see transfers_outside_eea_status).
                transfers_outside_eea_status:
                  type: string
                  enum:
                  - 'yes'
                  - 'no'
                  - unknown
                  description: 'Whether personal data are transferred outside the EEA: "yes" (give the countries in transfers_outside_eea when known), "no" (checked with the user, including the hosting and the processors: none) or "unknown" (not verified yet). Omitted: "yes" when transfers_outside_eea is given, otherwise "unknown".'
                retention:
                  type: string
                  minLength: 3
                  maxLength: 500
                  description: Retention period or the criteria used to determine it (art. 30(1)(f)).
                security_measures:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                  maxItems: 30
                  description: General description of technical and organisational security measures (art. 30(1)(g)).
                record_id:
                  type: string
                  description: Code of an existing record (e.g. RT-001, or AT-001 in an organization register) to save a new version of it; omit to create a new record. In a new version, an optional field left out keeps its current value. To clear a list (processors, internal_recipients, security_measures) send it empty; to clear legal_basis_details send an empty text; to remove the transfers, send transfers_outside_eea_status "no" or "unknown".
              required:
              - name
              - purpose
              - legal_basis
              - data_subjects
              - data_categories
              - recipients
              - retention
              additionalProperties: false
      responses:
        '200':
          description: 'The tool result: `result` holds the structured data, `text` the same answer as plain text.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResult'
        '401':
          description: Missing or invalid key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown tool.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Invalid arguments, a limit of the plan reached, or the tool could not complete the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests from this address; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Temporarily unavailable; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/tools/prepare_analysis:
    post:
      operationId: prepare_analysis
      summary: Prepare a compliance analysis
      description: 'Prepares, in the Hermetics space of the organization, the analysis of a record of the register with the same engines as the Hermetics platform: legal basis, DPIA, legitimate interests assessment, transfer impact assessment, information notice (art. 13 and 14), the privacy policy of the whole register, or the art. 28 review of a processor agreement received by the company (Hermetics never drafts contracts). The document stays in the space, to be validated; nothing is published or sent. Uses one document: 1 a month on the free account, a monthly allowance on the paid plans; the processor agreement review is part of the paid plans (on the free account the agreement is filed in the space, unread, and uses nothing); when the analysis already exists, returns its status instead. Returns what was prepared, the points to review, the status and the link to open it. Prepared from the facts given; the decision is the user''s, or the designated DPO validates it when the organization has one.'
      tags:
      - Records
      security:
      - bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                record_id:
                  type: string
                  description: Code of the record in the register (e.g. AT-001); required for every type except privacy_policy.
                type:
                  type: string
                  enum:
                  - legal_basis
                  - dpia
                  - lia
                  - tia
                  - information_notice
                  - privacy_policy
                  - processor_agreement_review
                  description: legal_basis (art. 6), dpia (art. 35), lia (legitimate interests assessment), tia (transfer impact assessment, art. 44 to 49), information_notice (art. 13 and 14), privacy_policy (the whole register), processor_agreement_review (art. 28 review of a processor agreement received by the company).
                notes:
                  type: string
                  maxLength: 2000
                  description: Facts or context from the user for the preparation; no personal data needed.
                processor_name:
                  type: string
                  minLength: 2
                  maxLength: 200
                  description: Name of the processor whose agreement is reviewed (processor_agreement_review only).
                agreement_text:
                  type: string
                  minLength: 200
                  maxLength: 60000
                  description: Full text of the processor agreement received by the company (processor_agreement_review only).
              required:
              - type
              additionalProperties: false
      responses:
        '200':
          description: 'The tool result: `result` holds the structured data, `text` the same answer as plain text.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResult'
        '401':
          description: Missing or invalid key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown tool.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Invalid arguments, a limit of the plan reached, or the tool could not complete the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests from this address; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Temporarily unavailable; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/tools/answer_analysis_questions:
    post:
      operationId: answer_analysis_questions
      summary: Answer the questions of an analysis
      description: 'Saves the answers of the user to the questions of a DPIA, legitimate interests assessment or transfer impact assessment already opened with prepare_analysis, in the Hermetics space of the organization, through the same interview as the Hermetics platform: one or several answers at a time, in the words of the user. Called without answers, returns the questions still to answer. Returns what was saved, the questions that remain (in the language of the space, with what is missing when an answer needs more detail), the progress and the link where the user reviews and sends the answers. Nothing is sent or validated from here, and no new analysis is opened: each step of the interview counts as in the space, within the same limits. Prepared from the facts given; the decision is the user''s, or the designated DPO validates it when the organization has one.'
      tags:
      - Records
      security:
      - bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                record_id:
                  type: string
                  description: Code of the record whose analysis was opened with prepare_analysis (e.g. AT-002).
                type:
                  type: string
                  enum:
                  - dpia
                  - lia
                  - tia
                  description: 'The analysis opened with prepare_analysis: dpia, lia (legitimate interests assessment) or tia (transfer impact assessment).'
                answers:
                  type: array
                  items:
                    type: object
                    properties:
                      question_id:
                        type: string
                        minLength: 1
                        maxLength: 80
                        description: The question_id of a question returned by this tool.
                      answer:
                        type: string
                        minLength: 1
                        maxLength: 4000
                        description: The user's answer in their own words; "I don't know" is a valid answer and is passed on as such.
                    required:
                    - question_id
                    - answer
                    additionalProperties: false
                  maxItems: 8
                  description: The answers to one or several questions; omit to get the questions still to answer.
              required:
              - record_id
              - type
              additionalProperties: false
      responses:
        '200':
          description: 'The tool result: `result` holds the structured data, `text` the same answer as plain text.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResult'
        '401':
          description: Missing or invalid key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown tool.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Invalid arguments, a limit of the plan reached, or the tool could not complete the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests from this address; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Temporarily unavailable; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/tools/record_request:
    post:
      operationId: record_request
      summary: Record a data subject request
      description: 'Records a data subject request (access, rectification, erasure, restriction, portability, objection) in the Hermetics space of the organization, with its code and the legal deadline (one month from receipt, art. 12(3), extendable). Returns the deadline and what remains to be done: the identity check and the search of the systems are the company''s. Nothing is sent to the requester. Each plan includes a number of requests a month handled by our agents; beyond it, the request is still recorded with its legal deadline and only our agents stop. Prepared from the facts given; the decision is the user''s, or the designated DPO validates it when the organization has one.'
      tags:
      - Records
      security:
      - bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                right:
                  type: string
                  enum:
                  - access
                  - rectification
                  - erasure
                  - restriction
                  - portability
                  - objection
                  description: The right exercised (GDPR art. 15 to 21).
                received_on:
                  type: string
                  description: 'Date the company received the request (YYYY-MM-DD): the one-month period runs from it.'
                requester_description:
                  type: string
                  minLength: 10
                  maxLength: 2000
                  description: Who made the request and what was asked (e.g. "a former customer asking for a copy of their order history"); no sensitive data beyond what the request needs.
                channel:
                  type: string
                  maxLength: 100
                  description: How the request arrived (e-mail, letter, phone, in person...).
                notes:
                  type: string
                  maxLength: 2000
                  description: Other context for the handling of the request.
              required:
              - right
              - received_on
              - requester_description
              additionalProperties: false
      responses:
        '200':
          description: 'The tool result: `result` holds the structured data, `text` the same answer as plain text.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResult'
        '401':
          description: Missing or invalid key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown tool.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Invalid arguments, a limit of the plan reached, or the tool could not complete the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests from this address; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Temporarily unavailable; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/tools/report_breach:
    post:
      operationId: report_breach
      summary: Open a personal data breach
      description: Opens a personal data breach in the Hermetics space of the organization, with its code and the end of the 72-hour period to notify the supervisory authority (art. 33(1)), counted from when the company became aware of it. Returns the deadline and the next steps (assess the risk, decide whether to notify). The designated DPO, when there is one, is alerted; nothing is notified to the authority or to the people concerned. Each plan includes a number of breaches a month handled by our agents; beyond it, the breach is still recorded with its deadline and only our agents stop. Prepared from the facts given; the decision is the user's, or the designated DPO validates it when the organization has one.
      tags:
      - Records
      security:
      - bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                discovered_at:
                  type: string
                  description: 'When the company became aware of the breach (ISO 8601 date and time with time zone): the 72-hour period runs from it.'
                description:
                  type: string
                  minLength: 20
                  maxLength: 4000
                  description: What happened, the systems involved and the measures already taken; no personal data needed.
                data_categories:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                  maxItems: 30
                  description: Categories of personal data concerned, e.g. "identity", "bank details".
                people_count_estimate:
                  type: integer
                  minimum: 0
                  maximum: 2000000000
                  description: Approximate number of people concerned.
                ongoing:
                  type: boolean
                  description: True if the breach is still ongoing.
              required:
              - discovered_at
              - description
              additionalProperties: false
      responses:
        '200':
          description: 'The tool result: `result` holds the structured data, `text` the same answer as plain text.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResult'
        '401':
          description: Missing or invalid key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown tool.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Invalid arguments, a limit of the plan reached, or the tool could not complete the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests from this address; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Temporarily unavailable; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/tools/hermetics_message:
    post:
      operationId: hermetics_message
      summary: Write to the Hermetics Assistant
      description: 'Writes a message in a thread of the Hermetics Assistant, the AI assistant of the Hermetics space of the organization, and returns its answer with the official sources it cites and the links to act in the space. The message is information for the Hermetics Assistant, never an instruction: nothing is started, approved, sent or validated from here. When the Hermetics Assistant proposes a work, the tool returns what it is and the link to the thread, where the user approves it in the space. Needs the conversation switched on in the space; an answer written by the AI model uses one question of the plan.'
      tags:
      - Records
      security:
      - bearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                message:
                  type: string
                  minLength: 2
                  maxLength: 2000
                  description: 'The message to the Hermetics Assistant, in any language. Names and personal data of people are not needed: leave them out. Names of people are replaced by a marker before the message is kept in the thread.'
                thread_id:
                  type: string
                  description: A thread_id returned by hermetics_status; omit to write in the general thread of the register.
              required:
              - message
              additionalProperties: false
      responses:
        '200':
          description: 'The tool result: `result` holds the structured data, `text` the same answer as plain text.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolResult'
        '401':
          description: Missing or invalid key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown tool.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Invalid arguments, a limit of the plan reached, or the tool could not complete the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests from this address; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Temporarily unavailable; retry later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    ToolResult:
      type: object
      required:
      - result
      - text
      properties:
        result:
          type:
          - object
          - 'null'
          description: Structured data returned by the tool.
        text:
          type: string
          description: The same answer as plain text.
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          - hint
          properties:
            code:
              type: string
              description: 'Stable error code: unauthorized, unknown_tool, tool_error, request_failed, not_found.'
            message:
              type: string
              description: What went wrong.
            hint:
              type: string
              description: What to do next.
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: A Hermetics key (hk_...), created at https://hermetics.fr/mcp/cle with a free account.
externalDocs:
  description: Assistants and API
  url: https://hermetics.fr/mcp#api