generated: '2026-07-21' method: derived source: >- openapi/typingdna-authentication-api-openapi-original.json and openapi/typingdna-verify-2fa-openapi.json — entities from components.schemas and path parameters; TypingDNA's model is user-centric (patterns are stored per user id), so the graph is shallow by design. entities: - name: User id_field: id (client-chosen string, hashed/anonymized recommended) description: The end-user whose typing behavior is enrolled; identified by the {id} path parameter on every Authentication API operation. - name: TypingPattern description: A recorded typing pattern string (type 0 anytext, 1 sametext, 2 extended) produced by a recorder and submitted in request bodies (tp/typing patterns). - name: VerificationResult schema: AuthResponseBody description: 'Result of /verify or /auto: result, score, confidence, net_score, action, message_code.' - name: UserProfile schema: CheckUserResponseBody description: 'Counts of enrolled patterns per device/type for a user: count, mobilecount, type/textid breakdowns.' - name: Quote schema: GetQuoteResponseBody description: Text quote served for typing (same-text flows). - name: VerifyApplication description: 'Verify 2FA Application (clientId + applicationId + secret, bound to a domain) that scopes OTP flows.' - name: OTP description: One-time password generated by a Verify 2FA enrollment/verification, validated via /otp/validate. relationships: - {from: User, to: TypingPattern, kind: has_many, via: 'id (path parameter on /save/{id}, /auto/{id})'} - {from: TypingPattern, to: VerificationResult, kind: has_one, via: '/verify/{id} response'} - {from: User, to: UserProfile, kind: has_one, via: 'GET /user/{id}'} - {from: VerifyApplication, to: User, kind: has_many, via: 'user identifier (email, phone or custom id)'} - {from: User, to: OTP, kind: has_many, via: 'Verify 2FA flows (/otp/send, /otp/validate)'}