├── .changeset └── config.json ├── .env.example ├── .git_hooks ├── commit-msg └── pre-push ├── .github └── workflows │ ├── analyze-commits.yml │ ├── check-templates-consistency.yml │ ├── coverage-diff.yml │ ├── coverage-report.yml │ ├── e2e-tests.yml │ ├── functional_tests.yml │ ├── publish.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── .schema-version ├── .swagger-codegen-ignore ├── .swagger-codegen └── VERSION ├── .vscode └── launch.json ├── CHANGELOG.md ├── CODEOWNERS ├── LICENSE ├── README.md ├── bin └── swagger-codegen-cli.jar ├── changeset-publish.sh ├── changeset-version.sh ├── commitlint.config.js ├── config.json ├── contributing.md ├── delete_visitor_example.py ├── docker-compose.yml ├── docs ├── Botd.md ├── BotdBot.md ├── BotdBotResult.md ├── BrowserDetails.md ├── ClonedApp.md ├── DecryptionKey.md ├── DeprecatedGeolocation.md ├── DeveloperTools.md ├── Emulator.md ├── Error.md ├── ErrorCode.md ├── ErrorPlainResponse.md ├── ErrorResponse.md ├── EventsGetResponse.md ├── EventsUpdateRequest.md ├── FactoryReset.md ├── FingerprintApi.md ├── Frida.md ├── Geolocation.md ├── GeolocationCity.md ├── GeolocationContinent.md ├── GeolocationCountry.md ├── GeolocationSubdivision.md ├── GeolocationSubdivisions.md ├── HighActivity.md ├── IPBlocklist.md ├── IPBlocklistDetails.md ├── IPInfo.md ├── IPInfoASN.md ├── IPInfoDataCenter.md ├── IPInfoV4.md ├── IPInfoV6.md ├── Identification.md ├── IdentificationConfidence.md ├── IdentificationSeenAt.md ├── Incognito.md ├── Jailbroken.md ├── LocationSpoofing.md ├── MitMAttack.md ├── PrivacySettings.md ├── ProductBotd.md ├── ProductClonedApp.md ├── ProductDeveloperTools.md ├── ProductEmulator.md ├── ProductFactoryReset.md ├── ProductFrida.md ├── ProductHighActivity.md ├── ProductIPBlocklist.md ├── ProductIPInfo.md ├── ProductIdentification.md ├── ProductIncognito.md ├── ProductJailbroken.md ├── ProductLocationSpoofing.md ├── ProductMitMAttack.md ├── ProductPrivacySettings.md ├── ProductProxy.md ├── ProductRawDeviceAttributes.md ├── ProductRemoteControl.md ├── ProductRootApps.md ├── ProductSuspectScore.md ├── ProductTampering.md ├── ProductTor.md ├── ProductVPN.md ├── ProductVelocity.md ├── ProductVirtualMachine.md ├── Products.md ├── Proxy.md ├── ProxyConfidence.md ├── RawDeviceAttribute.md ├── RawDeviceAttributeError.md ├── RawDeviceAttributes.md ├── RelatedVisitor.md ├── RelatedVisitorsResponse.md ├── RemoteControl.md ├── RootApps.md ├── SealedResults.md ├── SearchEventsResponse.md ├── SearchEventsResponseEvents.md ├── SuspectScore.md ├── Tag.md ├── Tampering.md ├── Tor.md ├── VPN.md ├── VPNConfidence.md ├── VPNMethods.md ├── Velocity.md ├── VelocityData.md ├── VelocityIntervals.md ├── VirtualMachine.md ├── Visit.md ├── VisitorsGetResponse.md ├── Webhook.md ├── WebhookClonedApp.md ├── WebhookDeveloperTools.md ├── WebhookEmulator.md ├── WebhookFactoryReset.md ├── WebhookFrida.md ├── WebhookHighActivity.md ├── WebhookIPBlocklist.md ├── WebhookIPInfo.md ├── WebhookJailbroken.md ├── WebhookLocationSpoofing.md ├── WebhookMitMAttack.md ├── WebhookPrivacySettings.md ├── WebhookProxy.md ├── WebhookRawDeviceAttributes.md ├── WebhookRemoteControl.md ├── WebhookRootApps.md ├── WebhookSuspectScore.md ├── WebhookTampering.md ├── WebhookTor.md ├── WebhookVPN.md ├── WebhookVelocity.md └── WebhookVirtualMachine.md ├── fingerprint_pro_server_api_sdk ├── __init__.py ├── api │ ├── __init__.py │ └── fingerprint_api.py ├── api_client.py ├── base_model.py ├── configuration.py ├── dummy_pool.py ├── extend_exception.py ├── models │ ├── __init__.py │ ├── botd.py │ ├── botd_bot.py │ ├── botd_bot_result.py │ ├── browser_details.py │ ├── cloned_app.py │ ├── deprecated_geolocation.py │ ├── developer_tools.py │ ├── emulator.py │ ├── error.py │ ├── error_code.py │ ├── error_plain_response.py │ ├── error_response.py │ ├── events_get_response.py │ ├── events_update_request.py │ ├── factory_reset.py │ ├── frida.py │ ├── geolocation.py │ ├── geolocation_city.py │ ├── geolocation_continent.py │ ├── geolocation_country.py │ ├── geolocation_subdivision.py │ ├── geolocation_subdivisions.py │ ├── high_activity.py │ ├── identification.py │ ├── identification_confidence.py │ ├── identification_seen_at.py │ ├── incognito.py │ ├── ip_blocklist.py │ ├── ip_blocklist_details.py │ ├── ip_info.py │ ├── ip_info_asn.py │ ├── ip_info_data_center.py │ ├── ip_info_v4.py │ ├── ip_info_v6.py │ ├── jailbroken.py │ ├── location_spoofing.py │ ├── mit_m_attack.py │ ├── privacy_settings.py │ ├── product_botd.py │ ├── product_cloned_app.py │ ├── product_developer_tools.py │ ├── product_emulator.py │ ├── product_factory_reset.py │ ├── product_frida.py │ ├── product_high_activity.py │ ├── product_identification.py │ ├── product_incognito.py │ ├── product_ip_blocklist.py │ ├── product_ip_info.py │ ├── product_jailbroken.py │ ├── product_location_spoofing.py │ ├── product_mit_m_attack.py │ ├── product_privacy_settings.py │ ├── product_proxy.py │ ├── product_raw_device_attributes.py │ ├── product_remote_control.py │ ├── product_root_apps.py │ ├── product_suspect_score.py │ ├── product_tampering.py │ ├── product_tor.py │ ├── product_velocity.py │ ├── product_virtual_machine.py │ ├── product_vpn.py │ ├── products.py │ ├── proxy.py │ ├── proxy_confidence.py │ ├── raw_device_attribute.py │ ├── raw_device_attribute_error.py │ ├── raw_device_attributes.py │ ├── related_visitor.py │ ├── related_visitors_response.py │ ├── remote_control.py │ ├── root_apps.py │ ├── search_events_response.py │ ├── search_events_response_events.py │ ├── suspect_score.py │ ├── tag.py │ ├── tampering.py │ ├── tor.py │ ├── velocity.py │ ├── velocity_data.py │ ├── velocity_intervals.py │ ├── virtual_machine.py │ ├── visit.py │ ├── visitors_get_response.py │ ├── vpn.py │ ├── vpn_confidence.py │ ├── vpn_methods.py │ ├── webhook.py │ ├── webhook_cloned_app.py │ ├── webhook_developer_tools.py │ ├── webhook_emulator.py │ ├── webhook_factory_reset.py │ ├── webhook_frida.py │ ├── webhook_high_activity.py │ ├── webhook_ip_blocklist.py │ ├── webhook_ip_info.py │ ├── webhook_jailbroken.py │ ├── webhook_location_spoofing.py │ ├── webhook_mit_m_attack.py │ ├── webhook_privacy_settings.py │ ├── webhook_proxy.py │ ├── webhook_raw_device_attributes.py │ ├── webhook_remote_control.py │ ├── webhook_root_apps.py │ ├── webhook_suspect_score.py │ ├── webhook_tampering.py │ ├── webhook_tor.py │ ├── webhook_velocity.py │ ├── webhook_virtual_machine.py │ └── webhook_vpn.py ├── rest.py ├── sealed.py └── webhook_validation.py ├── fix_codegen_problems.py ├── generate.sh ├── generate_coverage_summary.py ├── install_hooks.sh ├── package.json ├── pnpm-lock.yaml ├── requirements.txt ├── res └── fingerprint-server-api.yaml ├── run_checks.py ├── sealed_results_example.py ├── setup.cfg ├── setup.py ├── sync.sh ├── template ├── README.mustache ├── __init__api.mustache ├── __init__model.mustache ├── __init__package.mustache ├── api.mustache ├── api_client.mustache ├── api_doc.mustache ├── configuration.mustache ├── model.mustache ├── model_doc.mustache ├── rest.mustache └── setup.mustache ├── test-requirements.txt ├── test ├── __init__.py ├── mocks │ ├── errors │ │ ├── 400_bot_type_invalid.json │ │ ├── 400_end_time_invalid.json │ │ ├── 400_ip_address_invalid.json │ │ ├── 400_limit_invalid.json │ │ ├── 400_linked_id_invalid.json │ │ ├── 400_pagination_key_invalid.json │ │ ├── 400_request_body_invalid.json │ │ ├── 400_reverse_invalid.json │ │ ├── 400_start_time_invalid.json │ │ ├── 400_visitor_id_invalid.json │ │ ├── 400_visitor_id_required.json │ │ ├── 403_feature_not_enabled.json │ │ ├── 403_subscription_not_active.json │ │ ├── 403_token_not_found.json │ │ ├── 403_token_required.json │ │ ├── 403_wrong_region.json │ │ ├── 404_request_not_found.json │ │ ├── 404_visitor_not_found.json │ │ ├── 409_state_not_ready.json │ │ └── 429_too_many_requests.json │ ├── get_event_200.json │ ├── get_event_200_all_errors.json │ ├── get_event_200_botd_failed_error.json │ ├── get_event_200_extra_fields.json │ ├── get_event_200_identification_failed_error.json │ ├── get_event_200_too_many_requests_error.json │ ├── get_event_200_with_broken_format.json │ ├── get_event_200_with_unknown_field.json │ ├── get_event_search_200.json │ ├── get_visitors_200_limit_1.json │ ├── get_visitors_200_limit_500.json │ ├── get_visitors_400_bad_request.json │ ├── get_visitors_403_forbidden.json │ ├── get_visitors_429_too_many_requests.json │ ├── related-visitors │ │ ├── get_related_visitors_200.json │ │ └── get_related_visitors_200_empty.json │ ├── update_event_multiple_fields_request.json │ ├── update_event_one_field_request.json │ └── webhook.json ├── test_base_model.py ├── test_fingerprint_api.py ├── test_sealed.py └── test_webhook_validation.py ├── update_event_example.py └── webhook_signature_example.py /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.2/schema.json", 3 | "changelog": [ 4 | "@fingerprintjs/changesets-changelog-format", 5 | { 6 | "repo": "fingerprintjs/fingerprint-pro-server-api-python-sdk" 7 | } 8 | ], 9 | "commit": false, 10 | "fixed": [], 11 | "linked": [], 12 | "access": "restricted", 13 | "baseBranch": "main", 14 | "updateInternalDependencies": "patch", 15 | "ignore": [], 16 | "privatePackages": { 17 | "version": true, 18 | "tag": true 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | PRIVATE_KEY= 2 | VISITOR_ID_TO_DELETE= # for delete visitor example 3 | REQUEST_ID_TO_UPDATE= # for update event example 4 | # put 'eu' or 'ap' if necessary, 'us' is default 5 | REGION= 6 | -------------------------------------------------------------------------------- /.git_hooks/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | npx commitlint --edit $1 4 | -------------------------------------------------------------------------------- /.git_hooks/pre-push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | containsref() { if [[ $2 =~ $1 ]]; then echo 1; else echo 0; fi } 5 | 6 | push_command=$(ps -ocommand= -p $PPID | cut -d' ' -f 4) 7 | protected_branch='main' 8 | current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') 9 | is_push_to_main_origin=$(containsref 'git@github.com:/?fingerprintjs/' "$push_command") 10 | 11 | # Block pushes only to protected branch in main repository 12 | if [ $is_push_to_main_origin = 1 ] && [ "$protected_branch" = "$current_branch" ]; then 13 | echo "You are on the $protected_branch branch, push blocked." 14 | exit 1 # push will not execute 15 | fi 16 | -------------------------------------------------------------------------------- /.github/workflows/analyze-commits.yml: -------------------------------------------------------------------------------- 1 | name: Analyze Commit Messages 2 | on: [pull_request] 3 | 4 | permissions: 5 | pull-requests: write 6 | contents: write 7 | jobs: 8 | analyze-commits: 9 | name: Generate docs and coverage report 10 | uses: fingerprintjs/dx-team-toolkit/.github/workflows/analyze-commits.yml@v1 11 | with: 12 | previewNotes: false 13 | 14 | preview-changeset: 15 | name: Preview changeset 16 | uses: fingerprintjs/dx-team-toolkit/.github/workflows/preview-changeset-release.yml@v1 17 | with: 18 | pr-title: ${{ github.event.pull_request.title }} 19 | -------------------------------------------------------------------------------- /.github/workflows/check-templates-consistency.yml: -------------------------------------------------------------------------------- 1 | name: Check template consistency 2 | 3 | on: 4 | pull_request: 5 | 6 | permissions: 7 | pull-requests: write 8 | 9 | jobs: 10 | check-template-consistency: 11 | uses: fingerprintjs/dx-team-toolkit/.github/workflows/check-template-consistency.yml@v1 12 | with: 13 | generate-command: 'bash ./generate.sh' -------------------------------------------------------------------------------- /.github/workflows/coverage-diff.yml: -------------------------------------------------------------------------------- 1 | name: 'coverage-diff' 2 | on: 3 | pull_request: 4 | branches: 5 | - master 6 | - main 7 | jobs: 8 | coverage-diff: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | - uses: actions/setup-python@v5 13 | with: 14 | python-version: "3.12" 15 | - name: "Install dependencies" 16 | run: | 17 | python -m pip install --upgrade pip 18 | pip install -r requirements.txt 19 | pip install -r test-requirements.txt 20 | - name: "Generate coverage" 21 | run: | 22 | coverage run --source=fingerprint_pro_server_api_sdk -m pytest 23 | coverage xml 24 | - name: Get Cover 25 | uses: orgoro/coverage@3f13a558c5af7376496aa4848bf0224aead366ac 26 | with: 27 | coverageFile: ./coverage.xml 28 | token: ${{ secrets.GITHUB_TOKEN }} 29 | -------------------------------------------------------------------------------- /.github/workflows/coverage-report.yml: -------------------------------------------------------------------------------- 1 | name: 'coverage-report' 2 | on: 3 | push: 4 | branches: 5 | - main 6 | - coverage # remove before merge to main 7 | 8 | permissions: 9 | contents: write 10 | jobs: 11 | coverage-report: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - uses: actions/setup-python@v5 16 | with: 17 | python-version: "3.13" 18 | - name: "Install dependencies" 19 | run: | 20 | python -m pip install --upgrade pip 21 | pip install -r requirements.txt 22 | pip install -r test-requirements.txt 23 | - name: "Generate coverage" 24 | run: | 25 | coverage run --source=fingerprint_pro_server_api_sdk -m pytest 26 | coverage html 27 | coverage json 28 | python ./generate_coverage_summary.py 29 | rm ./htmlcov/.gitignore 30 | 31 | - name: Create Coverage Badges 32 | uses: jaywcjlove/coverage-badges-cli@e07f25709cd25486855c1ba1b26da53576ff3620 33 | with: 34 | source: coverage-summary.json 35 | output: htmlcov/badges.svg 36 | 37 | - name: Deploy 🚀 38 | uses: JamesIves/github-pages-deploy-action@8817a56e5bfec6e2b08345c81f4d422db53a2cdc 39 | with: 40 | branch: gh-pages 41 | folder: htmlcov 42 | -------------------------------------------------------------------------------- /.github/workflows/e2e-tests.yml: -------------------------------------------------------------------------------- 1 | name: E2E Tests 2 | on: 3 | workflow_call: 4 | 5 | jobs: 6 | read-version: 7 | name: 'Read package version' 8 | runs-on: ubuntu-latest 9 | outputs: 10 | version: ${{ steps.version.outputs.version }} 11 | steps: 12 | - uses: actions/checkout@v4 13 | - name: Read version from config.json 14 | id: version 15 | run: echo version=$(node -p "require('./package.json').version") >> $GITHUB_OUTPUT 16 | e2e-tests: 17 | name: 'Run E2E tests' 18 | needs: read-version 19 | uses: fingerprintjs/dx-team-toolkit/.github/workflows/run-server-sdk-e2e-tests.yml@v1 20 | with: 21 | sdk: python 22 | sdkVersion: ${{ needs.read-version.outputs.version }} 23 | appId: ${{ vars.RUNNER_APP_ID }} 24 | commitSha: ${{ github.event.pull_request.head.sha || github.sha }} 25 | secrets: 26 | APP_PRIVATE_KEY: ${{ secrets.RUNNER_APP_PRIVATE_KEY }} 27 | SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 28 | -------------------------------------------------------------------------------- /.github/workflows/functional_tests.yml: -------------------------------------------------------------------------------- 1 | name: Functional tests 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches-ignore: 6 | - main 7 | schedule: 8 | - cron: "0 5 * * *" 9 | 10 | jobs: 11 | functional_tests: 12 | name: Functional tests for Python ${{ matrix.python-version }} 13 | runs-on: "ubuntu-latest" 14 | environment: test 15 | 16 | strategy: 17 | fail-fast: false 18 | max-parallel: 1 19 | matrix: 20 | python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13", "pypy3.9", "pypy3.10" ] 21 | 22 | steps: 23 | - uses: actions/checkout@v4 24 | - uses: actions/setup-python@v5 25 | with: 26 | python-version: ${{ matrix.python-version }} 27 | - name: "Install dependencies" 28 | run: | 29 | python -m pip install --upgrade pip 30 | pip install -r requirements.txt 31 | 32 | - name: "Try to get data using SDK" 33 | run: "python ./run_checks.py" 34 | env: 35 | PRIVATE_KEY: "${{ secrets.PRIVATE_KEY }}" 36 | 37 | report-status: 38 | needs: functional_tests 39 | if: always() 40 | uses: fingerprintjs/dx-team-toolkit/.github/workflows/report-workflow-status.yml@v1 41 | with: 42 | notification_title: 'Python SDK Functional Test has {status_message}' 43 | job_status: ${{ needs.functional_tests.result }} 44 | secrets: 45 | SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 46 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish' 2 | on: 3 | release: 4 | types: 5 | - published 6 | workflow_dispatch: 7 | inputs: 8 | tag: 9 | required: true 10 | type: string 11 | description: Tag name to release 12 | 13 | jobs: 14 | publish: 15 | name: 'Publish to PyPI' 16 | runs-on: ubuntu-latest 17 | environment: 18 | name: production 19 | url: https://pypi.org/p/fingerprint-pro-server-api-sdk 20 | permissions: 21 | id-token: write # IMPORTANT: this permission is mandatory for trusted publishing 22 | steps: 23 | - name: 'Checkout repository' 24 | uses: actions/checkout@v4 25 | if: github.event_name == 'release' 26 | with: 27 | ref: ${{ github.event.release.tag_name }} 28 | 29 | - name: 'Checkout repository' 30 | uses: actions/checkout@v4 31 | if: github.event_name == 'workflow_dispatch' 32 | with: 33 | ref: ${{ github.event.inputs.tag }} 34 | 35 | - name: 'Install Python' 36 | uses: actions/setup-python@v5 37 | with: 38 | python-version: '3.12' 39 | 40 | - name: 'Build' 41 | run: | 42 | python -m pip install --upgrade pip 43 | pip install -r requirements.txt 44 | pip install wheel 45 | pip install twine 46 | python setup.py sdist bdist_wheel 47 | 48 | - name: Publish package distributions to PyPI 49 | uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc 50 | 51 | e2e-tests: 52 | needs: publish 53 | uses: ./.github/workflows/e2e-tests.yml 54 | secrets: inherit 55 | 56 | 57 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: 'Release' 2 | on: 3 | push: 4 | branches: 5 | - main 6 | - dev 7 | 8 | jobs: 9 | release: 10 | name: 'Release project' 11 | uses: fingerprintjs/dx-team-toolkit/.github/workflows/release-sdk-changesets.yml@v1 12 | with: 13 | appId: ${{ vars.APP_ID }} 14 | runnerAppId: ${{ vars.RUNNER_APP_ID }} 15 | version-command: bash ./changeset-version.sh 16 | publish-command: bash ./changeset-publish.sh 17 | language: python 18 | language-version: '3.12' 19 | prepare-command: | 20 | python -m pip install --upgrade pip 21 | pip install -r requirements.txt 22 | pip install wheel 23 | pip install twine 24 | secrets: 25 | APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} 26 | RUNNER_APP_PRIVATE_KEY: ${{ secrets.RUNNER_APP_PRIVATE_KEY }} 27 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - main 7 | workflow_dispatch: 8 | 9 | jobs: 10 | tests: 11 | name: "Python ${{ matrix.python-version }}" 12 | runs-on: "ubuntu-latest" 13 | 14 | strategy: 15 | matrix: 16 | python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13", "pypy3.9", "pypy3.10" ] 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | - uses: actions/setup-python@v5 21 | with: 22 | python-version: "${{ matrix.python-version }}" 23 | - name: "Install dependencies" 24 | run: | 25 | python -m pip install --upgrade pip 26 | pip install -r requirements.txt 27 | pip install -r test-requirements.txt 28 | 29 | - name: "Run tests for ${{ matrix.python-version }}" 30 | run: "pytest" 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | coverage.json 46 | coverage-summary.json 47 | *,cover 48 | .hypothesis/ 49 | venv/ 50 | .python-version 51 | 52 | # Translations 53 | *.mo 54 | *.pot 55 | 56 | # Django stuff: 57 | *.log 58 | 59 | # Sphinx documentation 60 | docs/_build/ 61 | 62 | # PyBuilder 63 | target/ 64 | 65 | #Ipython Notebook 66 | .ipynb_checkpoints 67 | 68 | .idea 69 | .vscode 70 | .DS_Store 71 | 72 | .env 73 | node_modules/** 74 | -------------------------------------------------------------------------------- /.schema-version: -------------------------------------------------------------------------------- 1 | v2.7.0 -------------------------------------------------------------------------------- /.swagger-codegen-ignore: -------------------------------------------------------------------------------- 1 | # Swagger Codegen Ignore 2 | # Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen 3 | 4 | # Use this file to prevent files from being overwritten by the generator. 5 | # The patterns follow closely to .gitignore or .dockerignore. 6 | 7 | # As an example, the C# client generator defines ApiClient.cs. 8 | # You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: 9 | #ApiClient.cs 10 | 11 | # You can match any string of characters against a directory, file or extension with a single asterisk (*): 12 | #foo/*/qux 13 | # The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux 14 | 15 | # You can recursively match patterns against a directory, file or extension with a double asterisk (**): 16 | #foo/**/qux 17 | # This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux 18 | 19 | # You can also negate patterns with an exclamation (!). 20 | # For example, you can ignore all files in a docs folder with the file extension .md: 21 | #docs/*.md 22 | # Then explicitly reverse the ignore rule for a single file: 23 | #!docs/README.md 24 | 25 | .gitignore 26 | .travis.yml 27 | git_push.sh 28 | tox.ini 29 | test/*.py 30 | fingerprint_pro_server_api_sdk/models/error_plain_response.py 31 | requirements.txt 32 | test-requirements.txt 33 | -------------------------------------------------------------------------------- /.swagger-codegen/VERSION: -------------------------------------------------------------------------------- 1 | 3.0.34 -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Python: Current File", 9 | "type": "python", 10 | "request": "launch", 11 | "program": "${file}", 12 | "console": "integratedTerminal", 13 | "justMyCode": true, 14 | "env": { 15 | "VISITOR_ID": "uYIm7Ksp5rf00SllPhFp", 16 | "REQUEST_ID": "1662542583652.pLBzed", 17 | "PRIVATE_KEY": "MMFSjCCXN0DeACxOAsA4" 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @ilfa @TheUnderScorer @erayaydin 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 FingerprintJS 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /bin/swagger-codegen-cli.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fingerprintjs/fingerprint-pro-server-api-python-sdk/9ace44fa0bd15138e662223b03dddefe9fe0d05f/bin/swagger-codegen-cli.jar -------------------------------------------------------------------------------- /changeset-publish.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | bash ./generate.sh && pnpm exec changeset publish 3 | -------------------------------------------------------------------------------- /changeset-version.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | pnpm exec changeset version && bash ./generate.sh 3 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { extends: ['@fingerprintjs/commit-lint-dx-team'] }; 2 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "packageName": "fingerprint_pro_server_api_sdk", 3 | "packageUrl": "https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk", 4 | "gitUserId": "fingerprintjs", 5 | "gitRepoId": "fingerprint-pro-server-api-python-sdk" 6 | } -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to Fingerprint Server API SDK 2 | 3 | ## Structure 4 | 5 | Most files in the project are autogenerated by [swagger-codegen](https://swagger.io/tools/swagger-codegen/) with `urllib3` library for python (default). 6 | 7 | - [template](./template) - folder contains redefined templates of `swagger-codegen`. Original templates you can find in [swagger-codegen repo](https://github.com/swagger-api/swagger-codegen/tree/751e59df060b1c3ecf54921e104f2086dfa9f820/modules/swagger-codegen/src/main/resources/python). 8 | - [docs](./docs) - generated documentation for models and [API Client](./docs/FingerprintApi.md). 9 | - [fingerprint_pro_server_api_sdk](./fingerprint_pro_server_api_sdk) - API Client code is generated automatically. 10 | 11 | ## Code generation 12 | 13 | You need `swagger-codegen` to run code generation. There are many ways described in the [readme](https://github.com/swagger-api/swagger-codegen). 14 | In the project we use local jar file `swagger-codegen-cli.jar`. 15 | 16 | You can just run `./generate.sh` script and it will do all the work. 17 | 18 | To download fresh OpenAPI schema run `./sync.sh` 19 | 20 | ### Configuration 21 | 22 | Project configuration is described in `config.json` file. To read about available parameters run the command below: 23 | 24 | ```shell 25 | java -jar ./bin/swagger-codegen-cli.jar config-help -l python 26 | ``` 27 | 28 | ### Testing the local source code of the SDK 29 | 30 | To make requests using the local source code of the SDK: 31 | 32 | 1. Define your Secret API key, Visitor ID, Request ID and Region by creating a `.env` file at the root of the repository. (See [example](./.env.example))) 33 | 2. Run the following commands: 34 | 35 | ```shell 36 | pip install -r requirements.txt 37 | python run_checks.py 38 | ``` 39 | 40 | #### Test environment 41 | 42 | You need to install `python` and `pip`. 43 | Then you can run: 44 | 45 | ```shell 46 | pip install -r requirements.txt 47 | pip install -r test-requirements.txt 48 | ``` 49 | 50 | #### Running tests 51 | 52 | ```shell 53 | pytest 54 | ``` 55 | 56 | ### How to publish 57 | 58 | We use [changesets](https://github.com/changesets/changesets) for handling release notes. If there are relevant changes, please add them to changeset via `pnpm exec changeset`. You need to run `pnpm install` before doing so. 59 | 60 | #### Pre-release flow 61 | 62 | Pre-release will be created after merging pr to the `dev` branch and running the `release` workflow. 63 | 64 | Python uses PEP 440 for versions format, so we convert a pre-release version from semver to PEP 440 in the `./generate.sh`. 65 | -------------------------------------------------------------------------------- /delete_visitor_example.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import fingerprint_pro_server_api_sdk 4 | from fingerprint_pro_server_api_sdk.rest import ApiException 5 | 6 | from dotenv import load_dotenv 7 | 8 | load_dotenv() 9 | 10 | # configure 11 | configuration = fingerprint_pro_server_api_sdk.Configuration( 12 | api_key=os.environ["PRIVATE_KEY"], region=os.environ.get("REGION", "us")) 13 | 14 | # create an instance of the API class 15 | api_instance = fingerprint_pro_server_api_sdk.FingerprintApi(configuration) 16 | visitor_id = os.environ["VISITOR_ID_TO_DELETE"] 17 | 18 | try: 19 | api_instance.delete_visitor_data(visitor_id) 20 | except ApiException as e: 21 | print("Exception when calling DefaultApi->delete_visitor_data: %s\n" % e) 22 | exit(1) 23 | 24 | print("Visitor data deleted!") 25 | 26 | exit(0) 27 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | app: 5 | image: python:3.9-slim 6 | container_name: python_sdk_app_container 7 | working_dir: /app 8 | volumes: 9 | - .:/app 10 | - python_packages:/usr/local/lib/python3.9/site-packages 11 | depends_on: 12 | - install_deps 13 | command: python ./run_checks.py 14 | 15 | install_deps: 16 | image: python:3.9-slim 17 | container_name: python_sdk_install_deps_container 18 | working_dir: /app 19 | volumes: 20 | - .:/app 21 | - .cache/pip:/root/.cache/pip 22 | - python_packages:/usr/local/lib/python3.9/site-packages 23 | command: pip install --no-cache-dir -r requirements.txt 24 | 25 | install_test_deps: 26 | image: python:3.9-slim 27 | container_name: python_sdk_install_test_deps_container 28 | working_dir: /app 29 | volumes: 30 | - .:/app 31 | - .cache/pip:/root/.cache/pip 32 | - python_packages:/usr/local/lib/python3.9/site-packages 33 | depends_on: 34 | - install_deps 35 | command: pip install --no-cache-dir -r test-requirements.txt 36 | 37 | test: 38 | image: python:3.9-slim 39 | container_name: python_sdk_test_container 40 | working_dir: /app 41 | volumes: 42 | - .:/app 43 | - python_packages:/usr/local/lib/python3.9/site-packages 44 | depends_on: 45 | - install_test_deps 46 | command: python -m pytest 47 | env_file: 48 | - .env 49 | 50 | volumes: 51 | python_packages: 52 | 53 | -------------------------------------------------------------------------------- /docs/Botd.md: -------------------------------------------------------------------------------- 1 | # Botd 2 | Contains all the information from Bot Detection product 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **bot** | [**BotdBot**](BotdBot.md) | | 9 | **meta** | [**Tag**](Tag.md) | | [optional] 10 | **linked_id** | **str** | A customer-provided id that was sent with the request. | [optional] 11 | **url** | **str** | Page URL from which the request was sent. | 12 | **ip** | **str** | IP address of the requesting browser or bot. | 13 | **time** | **datetime** | Time in UTC when the request from the JS agent was made. We recommend to treat requests that are older than 2 minutes as malicious. Otherwise, request replay attacks are possible. | 14 | **user_agent** | **str** | | 15 | **request_id** | **str** | Unique identifier of the user's request. | 16 | 17 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 18 | 19 | -------------------------------------------------------------------------------- /docs/BotdBot.md: -------------------------------------------------------------------------------- 1 | # BotdBot 2 | Stores bot detection result 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **result** | [**BotdBotResult**](BotdBotResult.md) | | 9 | **type** | **str** | | [optional] 10 | 11 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 12 | 13 | -------------------------------------------------------------------------------- /docs/BotdBotResult.md: -------------------------------------------------------------------------------- 1 | # BotdBotResult 2 | Bot detection result: 3 | * `notDetected` - the visitor is not a bot 4 | * `good` - good bot detected, such as Google bot, Baidu Spider, AlexaBot and so on 5 | * `bad` - bad bot detected, such as Selenium, Puppeteer, Playwright, headless browsers, and so on 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/BrowserDetails.md: -------------------------------------------------------------------------------- 1 | # BrowserDetails 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **browser_name** | **str** | | 7 | **browser_major_version** | **str** | | 8 | **browser_full_version** | **str** | | 9 | **os** | **str** | | 10 | **os_version** | **str** | | 11 | **device** | **str** | | 12 | **user_agent** | **str** | | 13 | 14 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 15 | 16 | -------------------------------------------------------------------------------- /docs/ClonedApp.md: -------------------------------------------------------------------------------- 1 | # ClonedApp 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Android specific cloned application detection. There are 2 values: * `true` - Presence of app cloners work detected (e.g. fully cloned application found or launch of it inside of a not main working profile detected). * `false` - No signs of cloned application detected or the client is not Android. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/DecryptionKey.md: -------------------------------------------------------------------------------- 1 | # DecryptionKey 2 | 3 | ## Properties 4 | 5 | | Name | Type | Description | Notes | 6 | |---------------|-------------------------|-----------------------------------------------------------------------------------|-------| 7 | | **Key** | **bytes** | Key generated in dashboard that will be used to decrypt sealed result | | 8 | | **Algorithm** | **DecryptionAlgorithm** | Algorithm to use for decryption. Currently only "aes-256-gcm" value is supported. | | 9 | 10 | 11 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 12 | 13 | -------------------------------------------------------------------------------- /docs/DeprecatedGeolocation.md: -------------------------------------------------------------------------------- 1 | # DeprecatedGeolocation 2 | This field is **deprecated** and will not return a result for **applications created after January 23rd, 2024**. Please use the [IP Geolocation Smart signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) for geolocation information. 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **accuracy_radius** | **int** | The IP address is likely to be within this radius (in km) of the specified location. | [optional] 9 | **latitude** | **float** | | [optional] 10 | **longitude** | **float** | | [optional] 11 | **postal_code** | **str** | | [optional] 12 | **timezone** | **str** | | [optional] 13 | **city** | [**GeolocationCity**](GeolocationCity.md) | | [optional] 14 | **country** | [**GeolocationCountry**](GeolocationCountry.md) | | [optional] 15 | **continent** | [**GeolocationContinent**](GeolocationContinent.md) | | [optional] 16 | **subdivisions** | [**GeolocationSubdivisions**](GeolocationSubdivisions.md) | | [optional] 17 | 18 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 19 | 20 | -------------------------------------------------------------------------------- /docs/DeveloperTools.md: -------------------------------------------------------------------------------- 1 | # DeveloperTools 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the browser is Chrome with DevTools open or Firefox with Developer Tools open, `false` otherwise. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/Emulator.md: -------------------------------------------------------------------------------- 1 | # Emulator 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Android specific emulator detection. There are 2 values: * `true` - Emulated environment detected (e.g. launch inside of AVD). * `false` - No signs of emulated environment detected or the client is not Android. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/Error.md: -------------------------------------------------------------------------------- 1 | # Error 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **code** | [**ErrorCode**](ErrorCode.md) | | 7 | **message** | **str** | | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ErrorCode.md: -------------------------------------------------------------------------------- 1 | # ErrorCode 2 | Error code: 3 | * `RequestCannotBeParsed` - the query parameters or JSON payload contains some errors 4 | that prevented us from parsing it (wrong type/surpassed limits). 5 | * `TokenRequired` - `Auth-API-Key` header is missing or empty. 6 | * `TokenNotFound` - no Fingerprint application found for specified secret key. 7 | * `SubscriptionNotActive` - Fingerprint application is not active. 8 | * `WrongRegion` - server and application region differ. 9 | * `FeatureNotEnabled` - this feature (for example, Delete API) is not enabled for your application. 10 | * `RequestNotFound` - the specified request ID was not found. It never existed, expired, or it has been deleted. 11 | * `VisitorNotFound` - The specified visitor ID was not found. It never existed or it may have already been deleted. 12 | * `TooManyRequests` - the limit on secret API key requests per second has been exceeded. 13 | * `429 Too Many Requests` - the limit on secret API key requests per second has been exceeded. 14 | * `StateNotReady` - The event specified with request id is 15 | not ready for updates yet. Try again. 16 | This error happens in rare cases when update API is called immediately 17 | after receiving the request id on the client. In case you need to send 18 | information right away, we recommend using the JS agent API instead. 19 | * `Failed` - internal server error. 20 | 21 | 22 | -------------------------------------------------------------------------------- /docs/ErrorPlainResponse.md: -------------------------------------------------------------------------------- 1 | # ErrorPlainResponse 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **error** | **str** | | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/ErrorResponse.md: -------------------------------------------------------------------------------- 1 | # ErrorResponse 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **error** | [**Error**](Error.md) | | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/EventsGetResponse.md: -------------------------------------------------------------------------------- 1 | # EventsGetResponse 2 | Contains results from all activated products - Fingerprint Pro, Bot Detection, and others. 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **products** | [**Products**](Products.md) | | 9 | 10 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 11 | 12 | -------------------------------------------------------------------------------- /docs/EventsUpdateRequest.md: -------------------------------------------------------------------------------- 1 | # EventsUpdateRequest 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **linked_id** | **str** | LinkedID value to assign to the existing event | [optional] 7 | **tag** | [**Tag**](Tag.md) | | [optional] 8 | **suspect** | **bool** | Suspect flag indicating observed suspicious or fraudulent event | [optional] 9 | 10 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 11 | 12 | -------------------------------------------------------------------------------- /docs/FactoryReset.md: -------------------------------------------------------------------------------- 1 | # FactoryReset 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **time** | **datetime** | Indicates the time (in UTC) of the most recent factory reset that happened on the **mobile device**. When a factory reset cannot be detected on the mobile device or when the request is initiated from a browser, this field will correspond to the *epoch* time (i.e 1 Jan 1970 UTC). See [Factory Reset Detection](https://dev.fingerprint.com/docs/smart-signals-overview#factory-reset-detection) to learn more about this Smart Signal. | 7 | **timestamp** | **int** | This field is just another representation of the value in the `time` field. The time of the most recent factory reset that happened on the **mobile device** is expressed as Unix epoch time. | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/Frida.md: -------------------------------------------------------------------------------- 1 | # Frida 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | [Frida](https://frida.re/docs/) detection for Android and iOS devices. There are 2 values: * `true` - Frida detected * `false` - No signs of Frida or the client is not a mobile device. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/Geolocation.md: -------------------------------------------------------------------------------- 1 | # Geolocation 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **accuracy_radius** | **int** | The IP address is likely to be within this radius (in km) of the specified location. | [optional] 7 | **latitude** | **float** | | [optional] 8 | **longitude** | **float** | | [optional] 9 | **postal_code** | **str** | | [optional] 10 | **timezone** | **str** | | [optional] 11 | **city** | [**GeolocationCity**](GeolocationCity.md) | | [optional] 12 | **country** | [**GeolocationCountry**](GeolocationCountry.md) | | [optional] 13 | **continent** | [**GeolocationContinent**](GeolocationContinent.md) | | [optional] 14 | **subdivisions** | [**GeolocationSubdivisions**](GeolocationSubdivisions.md) | | [optional] 15 | 16 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 17 | 18 | -------------------------------------------------------------------------------- /docs/GeolocationCity.md: -------------------------------------------------------------------------------- 1 | # GeolocationCity 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **name** | **str** | | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/GeolocationContinent.md: -------------------------------------------------------------------------------- 1 | # GeolocationContinent 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **code** | **str** | | 7 | **name** | **str** | | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/GeolocationCountry.md: -------------------------------------------------------------------------------- 1 | # GeolocationCountry 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **code** | **str** | | 7 | **name** | **str** | | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/GeolocationSubdivision.md: -------------------------------------------------------------------------------- 1 | # GeolocationSubdivision 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **iso_code** | **str** | | 7 | **name** | **str** | | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/GeolocationSubdivisions.md: -------------------------------------------------------------------------------- 1 | # GeolocationSubdivisions 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | 7 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 8 | 9 | -------------------------------------------------------------------------------- /docs/HighActivity.md: -------------------------------------------------------------------------------- 1 | # HighActivity 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Flag indicating if the request came from a high-activity visitor. | 7 | **daily_requests** | **int** | Number of requests from the same visitor in the previous day. | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/IPBlocklist.md: -------------------------------------------------------------------------------- 1 | # IPBlocklist 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if request IP address is part of any database that we use to search for known malicious actors, `false` otherwise. | 7 | **details** | [**IPBlocklistDetails**](IPBlocklistDetails.md) | | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/IPBlocklistDetails.md: -------------------------------------------------------------------------------- 1 | # IPBlocklistDetails 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **email_spam** | **bool** | IP address was part of a known email spam attack (SMTP). | 7 | **attack_source** | **bool** | IP address was part of a known network attack (SSH/HTTPS). | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/IPInfo.md: -------------------------------------------------------------------------------- 1 | # IPInfo 2 | Details about the request IP address. Has separate fields for v4 and v6 IP address versions. 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **v4** | [**IPInfoV4**](IPInfoV4.md) | | [optional] 9 | **v6** | [**IPInfoV6**](IPInfoV6.md) | | [optional] 10 | 11 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 12 | 13 | -------------------------------------------------------------------------------- /docs/IPInfoASN.md: -------------------------------------------------------------------------------- 1 | # IPInfoASN 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **asn** | **str** | | 7 | **name** | **str** | | 8 | **network** | **str** | | 9 | 10 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 11 | 12 | -------------------------------------------------------------------------------- /docs/IPInfoDataCenter.md: -------------------------------------------------------------------------------- 1 | # IPInfoDataCenter 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | | 7 | **name** | **str** | | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/IPInfoV4.md: -------------------------------------------------------------------------------- 1 | # IPInfoV4 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **address** | **str** | | 7 | **geolocation** | [**Geolocation**](Geolocation.md) | | 8 | **asn** | [**IPInfoASN**](IPInfoASN.md) | | [optional] 9 | **datacenter** | [**IPInfoDataCenter**](IPInfoDataCenter.md) | | [optional] 10 | 11 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 12 | 13 | -------------------------------------------------------------------------------- /docs/IPInfoV6.md: -------------------------------------------------------------------------------- 1 | # IPInfoV6 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **address** | **str** | | 7 | **geolocation** | [**Geolocation**](Geolocation.md) | | 8 | **asn** | [**IPInfoASN**](IPInfoASN.md) | | [optional] 9 | **datacenter** | [**IPInfoDataCenter**](IPInfoDataCenter.md) | | [optional] 10 | 11 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 12 | 13 | -------------------------------------------------------------------------------- /docs/Identification.md: -------------------------------------------------------------------------------- 1 | # Identification 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **visitor_id** | **str** | String of 20 characters that uniquely identifies the visitor's browser. | 7 | **request_id** | **str** | Unique identifier of the user's request. | 8 | **browser_details** | [**BrowserDetails**](BrowserDetails.md) | | 9 | **incognito** | **bool** | Flag if user used incognito session. | 10 | **ip** | **str** | IP address of the requesting browser or bot. | 11 | **ip_location** | [**DeprecatedGeolocation**](DeprecatedGeolocation.md) | | [optional] 12 | **linked_id** | **str** | A customer-provided id that was sent with the request. | [optional] 13 | **suspect** | **bool** | Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event endpoint](https://dev.fingerprint.com/reference/updateevent). | [optional] 14 | **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | 15 | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format, when the request from the JS agent was made. We recommend to treat requests that are older than 2 minutes as malicious. Otherwise, request replay attacks are possible. | 16 | **url** | **str** | Page URL from which the request was sent. | 17 | **tag** | [**Tag**](Tag.md) | | 18 | **confidence** | [**IdentificationConfidence**](IdentificationConfidence.md) | | [optional] 19 | **visitor_found** | **bool** | Attribute represents if a visitor had been identified before. | 20 | **first_seen_at** | [**IdentificationSeenAt**](IdentificationSeenAt.md) | | 21 | **last_seen_at** | [**IdentificationSeenAt**](IdentificationSeenAt.md) | | 22 | **components** | [**RawDeviceAttributes**](RawDeviceAttributes.md) | | [optional] 23 | 24 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 25 | 26 | -------------------------------------------------------------------------------- /docs/IdentificationConfidence.md: -------------------------------------------------------------------------------- 1 | # IdentificationConfidence 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **score** | **float** | The confidence score is a floating-point number between 0 and 1 that represents the probability of accurate identification. | 7 | **revision** | **str** | The revision name of the method used to calculate the Confidence score. This field is only present for customers who opted in to an alternative calculation method. | [optional] 8 | **comment** | **str** | | [optional] 9 | 10 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 11 | 12 | -------------------------------------------------------------------------------- /docs/IdentificationSeenAt.md: -------------------------------------------------------------------------------- 1 | # IdentificationSeenAt 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **_global** | **datetime** | | 7 | **subscription** | **datetime** | | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/Incognito.md: -------------------------------------------------------------------------------- 1 | # Incognito 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if we detected incognito mode used in the browser, `false` otherwise. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/Jailbroken.md: -------------------------------------------------------------------------------- 1 | # Jailbroken 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | iOS specific jailbreak detection. There are 2 values: * `true` - Jailbreak detected. * `false` - No signs of jailbreak or the client is not iOS. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/LocationSpoofing.md: -------------------------------------------------------------------------------- 1 | # LocationSpoofing 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Flag indicating whether the request came from a mobile device with location spoofing enabled. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/MitMAttack.md: -------------------------------------------------------------------------------- 1 | # MitMAttack 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | * `true` - When requests made from your users' mobile devices to Fingerprint servers have been intercepted and potentially modified. * `false` - Otherwise or when the request originated from a browser. See [MitM Attack Detection](https://dev.fingerprint.com/docs/smart-signals-reference#mitm-attack-detection) to learn more about this Smart Signal. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/PrivacySettings.md: -------------------------------------------------------------------------------- 1 | # PrivacySettings 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/ProductBotd.md: -------------------------------------------------------------------------------- 1 | # ProductBotd 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Botd**](Botd.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductClonedApp.md: -------------------------------------------------------------------------------- 1 | # ProductClonedApp 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**ClonedApp**](ClonedApp.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductDeveloperTools.md: -------------------------------------------------------------------------------- 1 | # ProductDeveloperTools 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**DeveloperTools**](DeveloperTools.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductEmulator.md: -------------------------------------------------------------------------------- 1 | # ProductEmulator 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Emulator**](Emulator.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductFactoryReset.md: -------------------------------------------------------------------------------- 1 | # ProductFactoryReset 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**FactoryReset**](FactoryReset.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductFrida.md: -------------------------------------------------------------------------------- 1 | # ProductFrida 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Frida**](Frida.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductHighActivity.md: -------------------------------------------------------------------------------- 1 | # ProductHighActivity 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**HighActivity**](HighActivity.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductIPBlocklist.md: -------------------------------------------------------------------------------- 1 | # ProductIPBlocklist 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**IPBlocklist**](IPBlocklist.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductIPInfo.md: -------------------------------------------------------------------------------- 1 | # ProductIPInfo 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**IPInfo**](IPInfo.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductIdentification.md: -------------------------------------------------------------------------------- 1 | # ProductIdentification 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Identification**](Identification.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductIncognito.md: -------------------------------------------------------------------------------- 1 | # ProductIncognito 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Incognito**](Incognito.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductJailbroken.md: -------------------------------------------------------------------------------- 1 | # ProductJailbroken 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Jailbroken**](Jailbroken.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductLocationSpoofing.md: -------------------------------------------------------------------------------- 1 | # ProductLocationSpoofing 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**LocationSpoofing**](LocationSpoofing.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductMitMAttack.md: -------------------------------------------------------------------------------- 1 | # ProductMitMAttack 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**MitMAttack**](MitMAttack.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductPrivacySettings.md: -------------------------------------------------------------------------------- 1 | # ProductPrivacySettings 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**PrivacySettings**](PrivacySettings.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductProxy.md: -------------------------------------------------------------------------------- 1 | # ProductProxy 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Proxy**](Proxy.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductRawDeviceAttributes.md: -------------------------------------------------------------------------------- 1 | # ProductRawDeviceAttributes 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**RawDeviceAttributes**](RawDeviceAttributes.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductRemoteControl.md: -------------------------------------------------------------------------------- 1 | # ProductRemoteControl 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**RemoteControl**](RemoteControl.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductRootApps.md: -------------------------------------------------------------------------------- 1 | # ProductRootApps 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**RootApps**](RootApps.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductSuspectScore.md: -------------------------------------------------------------------------------- 1 | # ProductSuspectScore 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**SuspectScore**](SuspectScore.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductTampering.md: -------------------------------------------------------------------------------- 1 | # ProductTampering 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Tampering**](Tampering.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductTor.md: -------------------------------------------------------------------------------- 1 | # ProductTor 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Tor**](Tor.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductVPN.md: -------------------------------------------------------------------------------- 1 | # ProductVPN 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**VPN**](VPN.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductVelocity.md: -------------------------------------------------------------------------------- 1 | # ProductVelocity 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**Velocity**](Velocity.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProductVirtualMachine.md: -------------------------------------------------------------------------------- 1 | # ProductVirtualMachine 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **data** | [**VirtualMachine**](VirtualMachine.md) | | [optional] 7 | **error** | [**Error**](Error.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/Products.md: -------------------------------------------------------------------------------- 1 | # Products 2 | Contains all information about the request identified by `requestId`, depending on the pricing plan (Pro, Pro Plus, Enterprise) 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **identification** | [**ProductIdentification**](ProductIdentification.md) | | [optional] 9 | **botd** | [**ProductBotd**](ProductBotd.md) | | [optional] 10 | **root_apps** | [**ProductRootApps**](ProductRootApps.md) | | [optional] 11 | **emulator** | [**ProductEmulator**](ProductEmulator.md) | | [optional] 12 | **ip_info** | [**ProductIPInfo**](ProductIPInfo.md) | | [optional] 13 | **ip_blocklist** | [**ProductIPBlocklist**](ProductIPBlocklist.md) | | [optional] 14 | **tor** | [**ProductTor**](ProductTor.md) | | [optional] 15 | **vpn** | [**ProductVPN**](ProductVPN.md) | | [optional] 16 | **proxy** | [**ProductProxy**](ProductProxy.md) | | [optional] 17 | **incognito** | [**ProductIncognito**](ProductIncognito.md) | | [optional] 18 | **tampering** | [**ProductTampering**](ProductTampering.md) | | [optional] 19 | **cloned_app** | [**ProductClonedApp**](ProductClonedApp.md) | | [optional] 20 | **factory_reset** | [**ProductFactoryReset**](ProductFactoryReset.md) | | [optional] 21 | **jailbroken** | [**ProductJailbroken**](ProductJailbroken.md) | | [optional] 22 | **frida** | [**ProductFrida**](ProductFrida.md) | | [optional] 23 | **privacy_settings** | [**ProductPrivacySettings**](ProductPrivacySettings.md) | | [optional] 24 | **virtual_machine** | [**ProductVirtualMachine**](ProductVirtualMachine.md) | | [optional] 25 | **raw_device_attributes** | [**ProductRawDeviceAttributes**](ProductRawDeviceAttributes.md) | | [optional] 26 | **high_activity** | [**ProductHighActivity**](ProductHighActivity.md) | | [optional] 27 | **location_spoofing** | [**ProductLocationSpoofing**](ProductLocationSpoofing.md) | | [optional] 28 | **suspect_score** | [**ProductSuspectScore**](ProductSuspectScore.md) | | [optional] 29 | **remote_control** | [**ProductRemoteControl**](ProductRemoteControl.md) | | [optional] 30 | **velocity** | [**ProductVelocity**](ProductVelocity.md) | | [optional] 31 | **developer_tools** | [**ProductDeveloperTools**](ProductDeveloperTools.md) | | [optional] 32 | **mitm_attack** | [**ProductMitMAttack**](ProductMitMAttack.md) | | [optional] 33 | 34 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 35 | 36 | -------------------------------------------------------------------------------- /docs/Proxy.md: -------------------------------------------------------------------------------- 1 | # Proxy 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | IP address was used by a public proxy provider or belonged to a known recent residential proxy | 7 | **confidence** | [**ProxyConfidence**](ProxyConfidence.md) | | 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/ProxyConfidence.md: -------------------------------------------------------------------------------- 1 | # ProxyConfidence 2 | Confidence level of the proxy detection. 3 | If a proxy is not detected, confidence is "high". 4 | If it's detected, can be "low", "medium", or "high". 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/RawDeviceAttribute.md: -------------------------------------------------------------------------------- 1 | # RawDeviceAttribute 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **value** | **object** | | [optional] 7 | **error** | [**RawDeviceAttributeError**](RawDeviceAttributeError.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/RawDeviceAttributeError.md: -------------------------------------------------------------------------------- 1 | # RawDeviceAttributeError 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **name** | **str** | | [optional] 7 | **message** | **str** | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/RawDeviceAttributes.md: -------------------------------------------------------------------------------- 1 | # RawDeviceAttributes 2 | It includes 35+ raw browser identification attributes to provide Fingerprint users with even more information than our standard visitor ID provides. This enables Fingerprint users to not have to run our open-source product in conjunction with Fingerprint Pro Plus and Enterprise to get those additional attributes. 3 | Warning: The raw signals data can change at any moment as we improve the product. We cannot guarantee the internal shape of raw device attributes to be stable, so typical semantic versioning rules do not apply here. Use this data with caution without assuming a specific structure beyond the generic type provided here. 4 | 5 | 6 | 7 | ## Properties 8 | The rawAttributes object follows this general shape: `{ value: any } | { error: { name: string; message: string; } }` 9 | 10 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 11 | 12 | -------------------------------------------------------------------------------- /docs/RelatedVisitor.md: -------------------------------------------------------------------------------- 1 | # RelatedVisitor 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **visitor_id** | **str** | Visitor ID of a browser that originates from the same mobile device as the input visitor ID. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/RelatedVisitorsResponse.md: -------------------------------------------------------------------------------- 1 | # RelatedVisitorsResponse 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **related_visitors** | [**list[RelatedVisitor]**](RelatedVisitor.md) | | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/RemoteControl.md: -------------------------------------------------------------------------------- 1 | # RemoteControl 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the request came from a machine being remotely controlled (e.g. TeamViewer), `false` otherwise. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/RootApps.md: -------------------------------------------------------------------------------- 1 | # RootApps 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Android specific root management apps detection. There are 2 values: * `true` - Root Management Apps detected (e.g. Magisk). * `false` - No Root Management Apps detected or the client isn't Android. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/SealedResults.md: -------------------------------------------------------------------------------- 1 | # Sealed results 2 | 3 | ## **UnsealEventResponse** 4 | > unseal_event_response(sealed: bytes, keys: DecryptionKey[]) -> EventsGetResponse 5 | 6 | Decrypts the sealed response with provided keys. 7 | ### Required Parameters 8 | 9 | | Name | Type | Description | Notes | 10 | |------------|---------------------|------------------------------------------------------------------------------------------|-------| 11 | | **sealed** | **bytes** | Base64 encoded sealed data | | 12 | | **keys** | **DecryptionKey[]** | Decryption keys. The SDK will try to decrypt the result with each key until it succeeds. | | 13 | 14 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 15 | -------------------------------------------------------------------------------- /docs/SearchEventsResponse.md: -------------------------------------------------------------------------------- 1 | # SearchEventsResponse 2 | Contains a list of all identification events matching the specified search criteria. 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **events** | [**list[SearchEventsResponseEvents]**](SearchEventsResponseEvents.md) | | [optional] 9 | **pagination_key** | **str** | Use this value in the `pagination_key` parameter to request the next page of search results. | [optional] 10 | 11 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 12 | 13 | -------------------------------------------------------------------------------- /docs/SearchEventsResponseEvents.md: -------------------------------------------------------------------------------- 1 | # SearchEventsResponseEvents 2 | Device intelligence results for the identification event. 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **products** | [**Products**](Products.md) | | 9 | 10 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 11 | 12 | -------------------------------------------------------------------------------- /docs/SuspectScore.md: -------------------------------------------------------------------------------- 1 | # SuspectScore 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **int** | Suspect Score is an easy way to integrate Smart Signals into your fraud protection work flow. It is a weighted representation of all Smart Signals present in the payload that helps identify suspicious activity. The value range is [0; S] where S is sum of all Smart Signals weights. See more details here: https://dev.fingerprint.com/docs/suspect-score | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/Tag.md: -------------------------------------------------------------------------------- 1 | # Tag 2 | A customer-provided value or an object that was sent with identification request. 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/Tampering.md: -------------------------------------------------------------------------------- 1 | # Tampering 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Indicates if an identification request from a browser or an Android SDK has been tampered with. Not supported in the iOS SDK, is always `false` for iOS requests. * `true` - If the request meets either of the following conditions: * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). * `false` - If the request is considered genuine or was generated by the iOS SDK. | 7 | **anomaly_score** | **float** | A score that indicates the extent of anomalous data in the request. This field applies to requests originating from **both** browsers and Android SDKs. * Values above `0.5` indicate that the request has been tampered with. * Values below `0.5` indicate that the request is genuine. | 8 | **anti_detect_browser** | **bool** | Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. This field does not apply to requests originating from mobile SDKs. * `true` - The browser resembles a known anti-detect browser, for example, Incognition. * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. | 9 | 10 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 11 | 12 | -------------------------------------------------------------------------------- /docs/Tor.md: -------------------------------------------------------------------------------- 1 | # Tor 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the request IP address is a known tor exit node, `false` otherwise. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/VPN.md: -------------------------------------------------------------------------------- 1 | # VPN 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | VPN or other anonymizing service has been used when sending the request. | 7 | **confidence** | [**VPNConfidence**](VPNConfidence.md) | | 8 | **origin_timezone** | **str** | Local timezone which is used in timezoneMismatch method. | 9 | **origin_country** | **str** | Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). | 10 | **methods** | [**VPNMethods**](VPNMethods.md) | | 11 | 12 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 13 | 14 | -------------------------------------------------------------------------------- /docs/VPNConfidence.md: -------------------------------------------------------------------------------- 1 | # VPNConfidence 2 | A confidence rating for the VPN detection result — "low", "medium", or "high". Depends on the combination of results returned from all VPN detection methods. 3 | 4 | -------------------------------------------------------------------------------- /docs/VPNMethods.md: -------------------------------------------------------------------------------- 1 | # VPNMethods 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **timezone_mismatch** | **bool** | The browser timezone doesn't match the timezone inferred from the request IP address. | 7 | **public_vpn** | **bool** | Request IP address is owned and used by a public VPN service provider. | 8 | **auxiliary_mobile** | **bool** | This method applies to mobile devices only. Indicates the result of additional methods used to detect a VPN in mobile devices. | 9 | **os_mismatch** | **bool** | The browser runs on a different operating system than the operating system inferred from the request network signature. | 10 | **relay** | **bool** | Request IP address belongs to a relay service provider, indicating the use of relay services like [Apple Private relay](https://support.apple.com/en-us/102602) or [Cloudflare Warp](https://developers.cloudflare.com/warp-client/). * Like VPNs, relay services anonymize the visitor's true IP address. * Unlike traditional VPNs, relay services don't let visitors spoof their location by choosing an exit node in a different country. This field allows you to differentiate VPN users and relay service users in your fraud prevention logic. | 11 | 12 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 13 | 14 | -------------------------------------------------------------------------------- /docs/Velocity.md: -------------------------------------------------------------------------------- 1 | # Velocity 2 | Sums key data points for a specific `visitorId`, `ipAddress` and `linkedId` at three distinct time 3 | intervals: 5 minutes, 1 hour, and 24 hours as follows: 4 | 5 | - Number of distinct IP addresses associated to the visitor ID. 6 | - Number of distinct linked IDs associated with the visitor ID. 7 | - Number of distinct countries associated with the visitor ID. 8 | - Number of identification events associated with the visitor ID. 9 | - Number of identification events associated with the detected IP address. 10 | - Number of distinct IP addresses associated with the provided linked ID. 11 | - Number of distinct visitor IDs associated with the provided linked ID. 12 | 13 | The `24h` interval of `distinctIp`, `distinctLinkedId`, `distinctCountry`, 14 | `distinctIpByLinkedId` and `distinctVisitorIdByLinkedId` will be omitted 15 | if the number of `events` for the visitor ID in the last 24 16 | hours (`events.intervals.['24h']`) is higher than 20.000. 17 | 18 | 19 | 20 | ## Properties 21 | Name | Type | Description | Notes 22 | ------------ | ------------- | ------------- | ------------- 23 | **distinct_ip** | [**VelocityData**](VelocityData.md) | | 24 | **distinct_linked_id** | [**VelocityData**](VelocityData.md) | | 25 | **distinct_country** | [**VelocityData**](VelocityData.md) | | 26 | **events** | [**VelocityData**](VelocityData.md) | | 27 | **ip_events** | [**VelocityData**](VelocityData.md) | | 28 | **distinct_ip_by_linked_id** | [**VelocityData**](VelocityData.md) | | 29 | **distinct_visitor_id_by_linked_id** | [**VelocityData**](VelocityData.md) | | 30 | 31 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 32 | 33 | -------------------------------------------------------------------------------- /docs/VelocityData.md: -------------------------------------------------------------------------------- 1 | # VelocityData 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **intervals** | [**VelocityIntervals**](VelocityIntervals.md) | | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/VelocityIntervals.md: -------------------------------------------------------------------------------- 1 | # VelocityIntervals 2 | Is absent if the velocity data could not be generated for the visitor ID. 3 | 4 | 5 | 6 | ## Properties 7 | Name | Type | Description | Notes 8 | ------------ | ------------- | ------------- | ------------- 9 | **_5m** | **int** | | 10 | **_1h** | **int** | | 11 | **_24h** | **int** | The `24h` interval of `distinctIp`, `distinctLinkedId`, `distinctCountry`, `distinctIpByLinkedId` and `distinctVisitorIdByLinkedId` will be omitted if the number of `events`` for the visitor ID in the last 24 hours (`events.intervals.['24h']`) is higher than 20.000. | [optional] 12 | 13 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 14 | 15 | -------------------------------------------------------------------------------- /docs/VirtualMachine.md: -------------------------------------------------------------------------------- 1 | # VirtualMachine 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. | 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/Visit.md: -------------------------------------------------------------------------------- 1 | # Visit 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **request_id** | **str** | Unique identifier of the user's request. | 7 | **browser_details** | [**BrowserDetails**](BrowserDetails.md) | | 8 | **incognito** | **bool** | Flag if user used incognito session. | 9 | **ip** | **str** | IP address of the requesting browser or bot. | 10 | **ip_location** | [**DeprecatedGeolocation**](DeprecatedGeolocation.md) | | [optional] 11 | **linked_id** | **str** | A customer-provided id that was sent with the request. | [optional] 12 | **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | 13 | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format, when the request from the client agent was made. We recommend to treat requests that are older than 2 minutes as malicious. Otherwise, request replay attacks are possible. | 14 | **url** | **str** | Page URL from which the request was sent. | 15 | **tag** | [**Tag**](Tag.md) | | 16 | **confidence** | [**IdentificationConfidence**](IdentificationConfidence.md) | | [optional] 17 | **visitor_found** | **bool** | Attribute represents if a visitor had been identified before. | 18 | **first_seen_at** | [**IdentificationSeenAt**](IdentificationSeenAt.md) | | 19 | **last_seen_at** | [**IdentificationSeenAt**](IdentificationSeenAt.md) | | 20 | **components** | [**RawDeviceAttributes**](RawDeviceAttributes.md) | | [optional] 21 | 22 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 23 | 24 | -------------------------------------------------------------------------------- /docs/VisitorsGetResponse.md: -------------------------------------------------------------------------------- 1 | # VisitorsGetResponse 2 | Pagination-related fields `lastTimestamp` and `paginationKey` are included if you use a pagination parameter like `limit` or `before` and there is more data available on the next page. 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **visitor_id** | **str** | | 9 | **visits** | [**list[Visit]**](Visit.md) | | 10 | **last_timestamp** | **int** | ⚠️ Deprecated paging attribute, please use `paginationKey` instead. Timestamp of the last visit in the current page of results. | [optional] 11 | **pagination_key** | **str** | Request ID of the last visit in the current page of results. Use this value in the following request as the `paginationKey` parameter to get the next page of results. | [optional] 12 | 13 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 14 | 15 | -------------------------------------------------------------------------------- /docs/WebhookClonedApp.md: -------------------------------------------------------------------------------- 1 | # WebhookClonedApp 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Android specific cloned application detection. There are 2 values: * `true` - Presence of app cloners work detected (e.g. fully cloned application found or launch of it inside of a not main working profile detected). * `false` - No signs of cloned application detected or the client is not Android. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookDeveloperTools.md: -------------------------------------------------------------------------------- 1 | # WebhookDeveloperTools 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the browser is Chrome with DevTools open or Firefox with Developer Tools open, `false` otherwise. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookEmulator.md: -------------------------------------------------------------------------------- 1 | # WebhookEmulator 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Android specific emulator detection. There are 2 values: * `true` - Emulated environment detected (e.g. launch inside of AVD). * `false` - No signs of emulated environment detected or the client is not Android. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookFactoryReset.md: -------------------------------------------------------------------------------- 1 | # WebhookFactoryReset 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **time** | **datetime** | Indicates the time (in UTC) of the most recent factory reset that happened on the **mobile device**. When a factory reset cannot be detected on the mobile device or when the request is initiated from a browser, this field will correspond to the *epoch* time (i.e 1 Jan 1970 UTC). See [Factory Reset Detection](https://dev.fingerprint.com/docs/smart-signals-overview#factory-reset-detection) to learn more about this Smart Signal. | [optional] 7 | **timestamp** | **int** | This field is just another representation of the value in the `time` field. The time of the most recent factory reset that happened on the **mobile device** is expressed as Unix epoch time. | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/WebhookFrida.md: -------------------------------------------------------------------------------- 1 | # WebhookFrida 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | [Frida](https://frida.re/docs/) detection for Android and iOS devices. There are 2 values: * `true` - Frida detected * `false` - No signs of Frida or the client is not a mobile device. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookHighActivity.md: -------------------------------------------------------------------------------- 1 | # WebhookHighActivity 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Flag indicating if the request came from a high-activity visitor. | 7 | **daily_requests** | **int** | Number of requests from the same visitor in the previous day. | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/WebhookIPBlocklist.md: -------------------------------------------------------------------------------- 1 | # WebhookIPBlocklist 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if request IP address is part of any database that we use to search for known malicious actors, `false` otherwise. | [optional] 7 | **details** | [**IPBlocklistDetails**](IPBlocklistDetails.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/WebhookIPInfo.md: -------------------------------------------------------------------------------- 1 | # WebhookIPInfo 2 | Details about the request IP address. Has separate fields for v4 and v6 IP address versions. 3 | 4 | 5 | ## Properties 6 | Name | Type | Description | Notes 7 | ------------ | ------------- | ------------- | ------------- 8 | **v4** | [**IPInfoV4**](IPInfoV4.md) | | [optional] 9 | **v6** | [**IPInfoV6**](IPInfoV6.md) | | [optional] 10 | 11 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 12 | 13 | -------------------------------------------------------------------------------- /docs/WebhookJailbroken.md: -------------------------------------------------------------------------------- 1 | # WebhookJailbroken 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | iOS specific jailbreak detection. There are 2 values: * `true` - Jailbreak detected. * `false` - No signs of jailbreak or the client is not iOS. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookLocationSpoofing.md: -------------------------------------------------------------------------------- 1 | # WebhookLocationSpoofing 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Flag indicating whether the request came from a mobile device with location spoofing enabled. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookMitMAttack.md: -------------------------------------------------------------------------------- 1 | # WebhookMitMAttack 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | * `true` - When requests made from your users' mobile devices to Fingerprint servers have been intercepted and potentially modified. * `false` - Otherwise or when the request originated from a browser. See [MitM Attack Detection](https://dev.fingerprint.com/docs/smart-signals-overview#mitm-attack-detection) to learn more about this Smart Signal. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookPrivacySettings.md: -------------------------------------------------------------------------------- 1 | # WebhookPrivacySettings 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookProxy.md: -------------------------------------------------------------------------------- 1 | # WebhookProxy 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | IP address was used by a public proxy provider or belonged to a known recent residential proxy | [optional] 7 | **confidence** | [**ProxyConfidence**](ProxyConfidence.md) | | [optional] 8 | 9 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 10 | 11 | -------------------------------------------------------------------------------- /docs/WebhookRawDeviceAttributes.md: -------------------------------------------------------------------------------- 1 | # WebhookRawDeviceAttributes 2 | It includes 35+ raw browser identification attributes to provide Fingerprint users with even more information than our standard visitor ID provides. This enables Fingerprint users to not have to run our open-source product in conjunction with Fingerprint Pro Plus and Enterprise to get those additional attributes. 3 | Warning: The raw signals data can change at any moment as we improve the product. We cannot guarantee the internal shape of raw device attributes to be stable, so typical semantic versioning rules do not apply here. Use this data with caution without assuming a specific structure beyond the generic type provided here. 4 | 5 | 6 | 7 | ## Properties 8 | Name | Type | Description | Notes 9 | ------------ | ------------- | ------------- | ------------- 10 | 11 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 12 | 13 | -------------------------------------------------------------------------------- /docs/WebhookRemoteControl.md: -------------------------------------------------------------------------------- 1 | # WebhookRemoteControl 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the request came from a machine being remotely controlled (e.g. TeamViewer), `false` otherwise. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookRootApps.md: -------------------------------------------------------------------------------- 1 | # WebhookRootApps 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Android specific root management apps detection. There are 2 values: * `true` - Root Management Apps detected (e.g. Magisk). * `false` - No Root Management Apps detected or the client isn't Android. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookSuspectScore.md: -------------------------------------------------------------------------------- 1 | # WebhookSuspectScore 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **int** | Suspect Score is an easy way to integrate Smart Signals into your fraud protection work flow. It is a weighted representation of all Smart Signals present in the payload that helps identify suspicious activity. The value range is [0; S] where S is sum of all Smart Signals weights. See more details here: https://dev.fingerprint.com/docs/suspect-score | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookTampering.md: -------------------------------------------------------------------------------- 1 | # WebhookTampering 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | Indicates if an identification request from a browser or an Android SDK has been tampered with. Not supported in the iOS SDK, is always `false` for iOS requests. * `true` - If the request meets either of the following conditions: * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). * `false` - If the request is considered genuine or was generated by the iOS SDK. | [optional] 7 | **anomaly_score** | **float** | A score that indicates the extent of anomalous data in the request. This field applies to requests originating from **both** browsers and Android SDKs. * Values above `0.5` indicate that the request has been tampered with. * Values below `0.5` indicate that the request is genuine. | [optional] 8 | **anti_detect_browser** | **bool** | Anti-detect browsers try to evade identification by masking or manipulating their fingerprint to imitate legitimate browser configurations. This field does not apply to requests originating from mobile SDKs. * `true` - The browser resembles a known anti-detect browser, for example, Incognition. * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. | [optional] 9 | 10 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 11 | 12 | -------------------------------------------------------------------------------- /docs/WebhookTor.md: -------------------------------------------------------------------------------- 1 | # WebhookTor 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the request IP address is a known tor exit node, `false` otherwise. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /docs/WebhookVPN.md: -------------------------------------------------------------------------------- 1 | # WebhookVPN 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | VPN or other anonymizing service has been used when sending the request. | [optional] 7 | **confidence** | [**VPNConfidence**](VPNConfidence.md) | | [optional] 8 | **origin_timezone** | **str** | Local timezone which is used in timezoneMismatch method. | [optional] 9 | **origin_country** | **str** | Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). | [optional] 10 | **methods** | [**VPNMethods**](VPNMethods.md) | | [optional] 11 | 12 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 13 | 14 | -------------------------------------------------------------------------------- /docs/WebhookVelocity.md: -------------------------------------------------------------------------------- 1 | # WebhookVelocity 2 | Sums key data points for a specific `visitorId`, `ipAddress` and `linkedId` at three distinct time 3 | intervals: 5 minutes, 1 hour, and 24 hours as follows: 4 | 5 | - Number of distinct IP addresses associated to the visitor ID. 6 | - Number of distinct linked IDs associated with the visitor ID. 7 | - Number of distinct countries associated with the visitor ID. 8 | - Number of identification events associated with the visitor ID. 9 | - Number of identification events associated with the detected IP address. 10 | - Number of distinct IP addresses associated with the provided linked ID. 11 | - Number of distinct visitor IDs associated with the provided linked ID. 12 | 13 | The `24h` interval of `distinctIp`, `distinctLinkedId`, `distinctCountry`, 14 | `distinctIpByLinkedId` and `distinctVisitorIdByLinkedId` will be omitted 15 | if the number of `events` for the visitor ID in the last 24 16 | hours (`events.intervals.['24h']`) is higher than 20.000. 17 | 18 | 19 | 20 | ## Properties 21 | Name | Type | Description | Notes 22 | ------------ | ------------- | ------------- | ------------- 23 | **distinct_ip** | [**VelocityData**](VelocityData.md) | | [optional] 24 | **distinct_linked_id** | [**VelocityData**](VelocityData.md) | | [optional] 25 | **distinct_country** | [**VelocityData**](VelocityData.md) | | [optional] 26 | **events** | [**VelocityData**](VelocityData.md) | | [optional] 27 | **ip_events** | [**VelocityData**](VelocityData.md) | | [optional] 28 | **distinct_ip_by_linked_id** | [**VelocityData**](VelocityData.md) | | [optional] 29 | **distinct_visitor_id_by_linked_id** | [**VelocityData**](VelocityData.md) | | [optional] 30 | 31 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 32 | 33 | -------------------------------------------------------------------------------- /docs/WebhookVirtualMachine.md: -------------------------------------------------------------------------------- 1 | # WebhookVirtualMachine 2 | 3 | ## Properties 4 | Name | Type | Description | Notes 5 | ------------ | ------------- | ------------- | ------------- 6 | **result** | **bool** | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. | [optional] 7 | 8 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 9 | 10 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/api/__init__.py: -------------------------------------------------------------------------------- 1 | # flake8: noqa 2 | 3 | # import apis into api package 4 | from fingerprint_pro_server_api_sdk.api.fingerprint_api import FingerprintApi 5 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/base_model.py: -------------------------------------------------------------------------------- 1 | import pprint 2 | from typing import Union, Dict 3 | 4 | 5 | class BaseModel: 6 | """Base class for all models with utility methods.""" 7 | 8 | swagger_types: Dict[str, str] = {} 9 | attribute_map: Dict[str, str] = {} 10 | nullable_map: Dict[str, bool] = {} 11 | 12 | def to_dict(self) -> Dict[str, Union[list, dict]]: 13 | """Returns the model properties as a dict""" 14 | result = {} 15 | 16 | for attr, _ in self.swagger_types.items(): 17 | value = getattr(self, attr) 18 | if isinstance(value, list): 19 | result[attr] = list(map( 20 | lambda x: x.to_dict() if hasattr(x, "to_dict") else x, 21 | value 22 | )) 23 | elif hasattr(value, "to_dict"): 24 | result[attr] = value.to_dict() 25 | elif isinstance(value, Dict): 26 | result[attr] = dict(map( 27 | lambda item: (item[0], item[1].to_dict()) 28 | if hasattr(item[1], "to_dict") else item, 29 | value.items() 30 | )) 31 | elif value is None: 32 | if self.nullable_map[attr]: 33 | result[attr] = None 34 | 35 | continue 36 | else: 37 | result[attr] = value 38 | if issubclass(type(self), Dict): 39 | for key, value in self.items(): 40 | result[key] = value 41 | 42 | return result 43 | 44 | def to_str(self) -> str: 45 | """Returns the string representation of the model""" 46 | return pprint.pformat(self.to_dict()) 47 | 48 | def __repr__(self) -> str: 49 | """For `print` and `pprint`""" 50 | return self.to_str() 51 | 52 | def __eq__(self, other) -> bool: 53 | """Returns true if both objects are equal""" 54 | if not isinstance(other, type(self)): 55 | return False 56 | return self.to_dict() == other.to_dict() 57 | 58 | def __ne__(self, other) -> bool: 59 | """Returns true if both objects are not equal""" 60 | return not self.__eq__(other) 61 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/dummy_pool.py: -------------------------------------------------------------------------------- 1 | class DummyAsyncResult: 2 | def __init__(self, value): 3 | self.value = value 4 | 5 | def get(self): 6 | return self.value 7 | 8 | 9 | class DummyPool: 10 | def apply_async(self, func, args=(), kwds={}, callback=None): 11 | result = func(*args, **kwds) 12 | if callback is not None: 13 | callback(result) 14 | return DummyAsyncResult(result) 15 | 16 | def close(self): 17 | pass 18 | 19 | def join(self): 20 | pass 21 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/extend_exception.py: -------------------------------------------------------------------------------- 1 | from fingerprint_pro_server_api_sdk.rest import KnownApiException 2 | 3 | 4 | def extend_exception(exception, error_object): 5 | if exception.status == 429: 6 | try: 7 | error_object.retry_after = int(exception.headers.get('retry-after')) 8 | except Exception: 9 | error_object.retry_after = 1 10 | return KnownApiException(exception, error_object) 11 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/botd_bot_result.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class BotdBotResult(BaseModel): 19 | """ 20 | Bot detection result: * `notDetected` - the visitor is not a bot * `good` - good bot detected, such as Google bot, Baidu Spider, AlexaBot and so on * `bad` - bad bot detected, such as Selenium, Puppeteer, Playwright, headless browsers, and so on 21 | 22 | NOTE: This class is auto generated by the swagger code generator program. 23 | 24 | Do not edit the class manually. 25 | """ 26 | 27 | """ 28 | allowed enum values 29 | """ 30 | NOTDETECTED = "notDetected" 31 | GOOD = "good" 32 | BAD = "bad" 33 | """ 34 | Attributes: 35 | swagger_types (dict): The key is attribute name 36 | and the value is attribute type. 37 | attribute_map (dict): The key is attribute name 38 | and the value is json key in definition. 39 | """ 40 | swagger_types = { 41 | } 42 | 43 | nullable_map = { 44 | } 45 | 46 | attribute_map = { 47 | } 48 | 49 | def __init__(self): # noqa: E501 50 | """BotdBotResult - a model defined in Swagger""" # noqa: E501 51 | self.discriminator = None 52 | 53 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/developer_tools.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class DeveloperTools(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """DeveloperTools - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this DeveloperTools. # noqa: E501 51 | 52 | `true` if the browser is Chrome with DevTools open or Firefox with Developer Tools open, `false` otherwise. # noqa: E501 53 | 54 | :return: The result of this DeveloperTools. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this DeveloperTools. 61 | 62 | `true` if the browser is Chrome with DevTools open or Firefox with Developer Tools open, `false` otherwise. # noqa: E501 63 | 64 | :param result: The result of this DeveloperTools. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/error_plain_response.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class ErrorPlainResponse(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'error': 'str' 32 | } 33 | 34 | attribute_map = { 35 | 'error': 'error' 36 | } 37 | 38 | def __init__(self, error=None): # noqa: E501 39 | """ErrorPlainResponse - a model defined in Swagger""" # noqa: E501 40 | self._error = None 41 | self.discriminator = None 42 | self.error = error 43 | self.retry_after = 0 44 | 45 | @property 46 | def error(self) -> str: 47 | """Gets the error of this ErrorPlainResponse. # noqa: E501 48 | 49 | 50 | :return: The error of this ErrorPlainResponse. # noqa: E501 51 | """ 52 | return self._error 53 | 54 | @error.setter 55 | def error(self, error: str): 56 | """Sets the error of this ErrorPlainResponse. 57 | 58 | 59 | :param error: The error of this ErrorPlainResponse. # noqa: E501 60 | """ 61 | if error is None: 62 | raise ValueError("Invalid value for `error`, must not be `None`") # noqa: E501 63 | 64 | self._error = error 65 | 66 | @property 67 | def retry_after(self) -> int: 68 | """Indicates how many seconds you should wait before attempting the next request for 429 error """ 69 | return self._retry_after 70 | 71 | @retry_after.setter 72 | def retry_after(self, retry_after: int): 73 | self._retry_after = retry_after 74 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/error_response.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | from fingerprint_pro_server_api_sdk.models.error import Error 17 | 18 | 19 | class ErrorResponse(BaseModel): 20 | """NOTE: This class is auto generated by the swagger code generator program. 21 | 22 | Do not edit the class manually. 23 | """ 24 | """ 25 | Attributes: 26 | swagger_types (dict): The key is attribute name 27 | and the value is attribute type. 28 | attribute_map (dict): The key is attribute name 29 | and the value is json key in definition. 30 | """ 31 | swagger_types = { 32 | 'error': 'Error' 33 | } 34 | 35 | nullable_map = { 36 | 'error': False 37 | } 38 | 39 | attribute_map = { 40 | 'error': 'error' 41 | } 42 | 43 | def __init__(self, error=None): # noqa: E501 44 | """ErrorResponse - a model defined in Swagger""" # noqa: E501 45 | self._error = None 46 | self.discriminator = None 47 | self.error = error 48 | 49 | @property 50 | def error(self) -> Error: 51 | """Gets the error of this ErrorResponse. # noqa: E501 52 | 53 | 54 | :return: The error of this ErrorResponse. # noqa: E501 55 | """ 56 | return self._error 57 | 58 | @error.setter 59 | def error(self, error: Error): 60 | """Sets the error of this ErrorResponse. 61 | 62 | 63 | :param error: The error of this ErrorResponse. # noqa: E501 64 | """ 65 | if error is None: 66 | raise ValueError("Invalid value for `error`, must not be `None`") # noqa: E501 67 | 68 | self._error = error 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/events_get_response.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | from fingerprint_pro_server_api_sdk.models.products import Products 17 | 18 | 19 | class EventsGetResponse(BaseModel): 20 | """ 21 | Contains results from all activated products - Fingerprint Pro, Bot Detection, and others. 22 | 23 | NOTE: This class is auto generated by the swagger code generator program. 24 | 25 | Do not edit the class manually. 26 | """ 27 | """ 28 | Attributes: 29 | swagger_types (dict): The key is attribute name 30 | and the value is attribute type. 31 | attribute_map (dict): The key is attribute name 32 | and the value is json key in definition. 33 | """ 34 | swagger_types = { 35 | 'products': 'Products' 36 | } 37 | 38 | nullable_map = { 39 | 'products': False 40 | } 41 | 42 | attribute_map = { 43 | 'products': 'products' 44 | } 45 | 46 | def __init__(self, products=None): # noqa: E501 47 | """EventsGetResponse - a model defined in Swagger""" # noqa: E501 48 | self._products = None 49 | self.discriminator = None 50 | self.products = products 51 | 52 | @property 53 | def products(self) -> Products: 54 | """Gets the products of this EventsGetResponse. # noqa: E501 55 | 56 | 57 | :return: The products of this EventsGetResponse. # noqa: E501 58 | """ 59 | return self._products 60 | 61 | @products.setter 62 | def products(self, products: Products): 63 | """Sets the products of this EventsGetResponse. 64 | 65 | 66 | :param products: The products of this EventsGetResponse. # noqa: E501 67 | """ 68 | if products is None: 69 | raise ValueError("Invalid value for `products`, must not be `None`") # noqa: E501 70 | 71 | self._products = products 72 | 73 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/frida.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class Frida(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """Frida - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this Frida. # noqa: E501 51 | 52 | [Frida](https://frida.re/docs/) detection for Android and iOS devices. There are 2 values: * `true` - Frida detected * `false` - No signs of Frida or the client is not a mobile device. # noqa: E501 53 | 54 | :return: The result of this Frida. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this Frida. 61 | 62 | [Frida](https://frida.re/docs/) detection for Android and iOS devices. There are 2 values: * `true` - Frida detected * `false` - No signs of Frida or the client is not a mobile device. # noqa: E501 63 | 64 | :param result: The result of this Frida. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/geolocation_city.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class GeolocationCity(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'name': 'str' 32 | } 33 | 34 | nullable_map = { 35 | 'name': False 36 | } 37 | 38 | attribute_map = { 39 | 'name': 'name' 40 | } 41 | 42 | def __init__(self, name=None): # noqa: E501 43 | """GeolocationCity - a model defined in Swagger""" # noqa: E501 44 | self._name = None 45 | self.discriminator = None 46 | self.name = name 47 | 48 | @property 49 | def name(self) -> str: 50 | """Gets the name of this GeolocationCity. # noqa: E501 51 | 52 | 53 | :return: The name of this GeolocationCity. # noqa: E501 54 | """ 55 | return self._name 56 | 57 | @name.setter 58 | def name(self, name: str): 59 | """Sets the name of this GeolocationCity. 60 | 61 | 62 | :param name: The name of this GeolocationCity. # noqa: E501 63 | """ 64 | if name is None: 65 | raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 66 | 67 | self._name = name 68 | 69 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/geolocation_subdivisions.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class GeolocationSubdivisions(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | } 32 | 33 | nullable_map = { 34 | } 35 | 36 | attribute_map = { 37 | } 38 | 39 | def __init__(self): # noqa: E501 40 | """GeolocationSubdivisions - a model defined in Swagger""" # noqa: E501 41 | self.discriminator = None 42 | 43 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/incognito.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class Incognito(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """Incognito - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this Incognito. # noqa: E501 51 | 52 | `true` if we detected incognito mode used in the browser, `false` otherwise. # noqa: E501 53 | 54 | :return: The result of this Incognito. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this Incognito. 61 | 62 | `true` if we detected incognito mode used in the browser, `false` otherwise. # noqa: E501 63 | 64 | :param result: The result of this Incognito. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/jailbroken.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class Jailbroken(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """Jailbroken - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this Jailbroken. # noqa: E501 51 | 52 | iOS specific jailbreak detection. There are 2 values: * `true` - Jailbreak detected. * `false` - No signs of jailbreak or the client is not iOS. # noqa: E501 53 | 54 | :return: The result of this Jailbroken. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this Jailbroken. 61 | 62 | iOS specific jailbreak detection. There are 2 values: * `true` - Jailbreak detected. * `false` - No signs of jailbreak or the client is not iOS. # noqa: E501 63 | 64 | :param result: The result of this Jailbroken. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/location_spoofing.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class LocationSpoofing(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """LocationSpoofing - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this LocationSpoofing. # noqa: E501 51 | 52 | Flag indicating whether the request came from a mobile device with location spoofing enabled. # noqa: E501 53 | 54 | :return: The result of this LocationSpoofing. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this LocationSpoofing. 61 | 62 | Flag indicating whether the request came from a mobile device with location spoofing enabled. # noqa: E501 63 | 64 | :param result: The result of this LocationSpoofing. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/privacy_settings.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class PrivacySettings(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """PrivacySettings - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this PrivacySettings. # noqa: E501 51 | 52 | `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. # noqa: E501 53 | 54 | :return: The result of this PrivacySettings. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this PrivacySettings. 61 | 62 | `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. # noqa: E501 63 | 64 | :param result: The result of this PrivacySettings. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/proxy_confidence.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class ProxyConfidence(BaseModel): 19 | """ 20 | Confidence level of the proxy detection. If a proxy is not detected, confidence is \"high\". If it's detected, can be \"low\", \"medium\", or \"high\". 21 | 22 | NOTE: This class is auto generated by the swagger code generator program. 23 | 24 | Do not edit the class manually. 25 | """ 26 | 27 | """ 28 | allowed enum values 29 | """ 30 | LOW = "low" 31 | MEDIUM = "medium" 32 | HIGH = "high" 33 | """ 34 | Attributes: 35 | swagger_types (dict): The key is attribute name 36 | and the value is attribute type. 37 | attribute_map (dict): The key is attribute name 38 | and the value is json key in definition. 39 | """ 40 | swagger_types = { 41 | } 42 | 43 | nullable_map = { 44 | } 45 | 46 | attribute_map = { 47 | } 48 | 49 | def __init__(self): # noqa: E501 50 | """ProxyConfidence - a model defined in Swagger""" # noqa: E501 51 | self.discriminator = None 52 | 53 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/raw_device_attributes.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class RawDeviceAttributes(dict): 19 | """ 20 | It includes 35+ raw browser identification attributes to provide Fingerprint users with even more information than our standard visitor ID provides. This enables Fingerprint users to not have to run our open-source product in conjunction with Fingerprint Pro Plus and Enterprise to get those additional attributes. Warning: The raw signals data can change at any moment as we improve the product. We cannot guarantee the internal shape of raw device attributes to be stable, so typical semantic versioning rules do not apply here. Use this data with caution without assuming a specific structure beyond the generic type provided here. 21 | 22 | NOTE: This class is auto generated by the swagger code generator program. 23 | 24 | Do not edit the class manually. 25 | """ 26 | """ 27 | Attributes: 28 | swagger_types (dict): The key is attribute name 29 | and the value is attribute type. 30 | attribute_map (dict): The key is attribute name 31 | and the value is json key in definition. 32 | """ 33 | swagger_types = { 34 | } 35 | 36 | nullable_map = { 37 | } 38 | 39 | attribute_map = { 40 | } 41 | 42 | __parent_class__ = 'dict' 43 | 44 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/related_visitor.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class RelatedVisitor(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'visitor_id': 'str' 32 | } 33 | 34 | nullable_map = { 35 | 'visitor_id': False 36 | } 37 | 38 | attribute_map = { 39 | 'visitor_id': 'visitorId' 40 | } 41 | 42 | def __init__(self, visitor_id=None): # noqa: E501 43 | """RelatedVisitor - a model defined in Swagger""" # noqa: E501 44 | self._visitor_id = None 45 | self.discriminator = None 46 | self.visitor_id = visitor_id 47 | 48 | @property 49 | def visitor_id(self) -> str: 50 | """Gets the visitor_id of this RelatedVisitor. # noqa: E501 51 | 52 | Visitor ID of a browser that originates from the same mobile device as the input visitor ID. # noqa: E501 53 | 54 | :return: The visitor_id of this RelatedVisitor. # noqa: E501 55 | """ 56 | return self._visitor_id 57 | 58 | @visitor_id.setter 59 | def visitor_id(self, visitor_id: str): 60 | """Sets the visitor_id of this RelatedVisitor. 61 | 62 | Visitor ID of a browser that originates from the same mobile device as the input visitor ID. # noqa: E501 63 | 64 | :param visitor_id: The visitor_id of this RelatedVisitor. # noqa: E501 65 | """ 66 | if visitor_id is None: 67 | raise ValueError("Invalid value for `visitor_id`, must not be `None`") # noqa: E501 68 | 69 | self._visitor_id = visitor_id 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/related_visitors_response.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | from fingerprint_pro_server_api_sdk.models.related_visitor import RelatedVisitor 17 | 18 | 19 | class RelatedVisitorsResponse(BaseModel): 20 | """NOTE: This class is auto generated by the swagger code generator program. 21 | 22 | Do not edit the class manually. 23 | """ 24 | """ 25 | Attributes: 26 | swagger_types (dict): The key is attribute name 27 | and the value is attribute type. 28 | attribute_map (dict): The key is attribute name 29 | and the value is json key in definition. 30 | """ 31 | swagger_types = { 32 | 'related_visitors': 'list[RelatedVisitor]' 33 | } 34 | 35 | nullable_map = { 36 | 'related_visitors': False 37 | } 38 | 39 | attribute_map = { 40 | 'related_visitors': 'relatedVisitors' 41 | } 42 | 43 | def __init__(self, related_visitors=None): # noqa: E501 44 | """RelatedVisitorsResponse - a model defined in Swagger""" # noqa: E501 45 | self._related_visitors = None 46 | self.discriminator = None 47 | self.related_visitors = related_visitors 48 | 49 | @property 50 | def related_visitors(self) -> List[RelatedVisitor]: 51 | """Gets the related_visitors of this RelatedVisitorsResponse. # noqa: E501 52 | 53 | 54 | :return: The related_visitors of this RelatedVisitorsResponse. # noqa: E501 55 | """ 56 | return self._related_visitors 57 | 58 | @related_visitors.setter 59 | def related_visitors(self, related_visitors: List[RelatedVisitor]): 60 | """Sets the related_visitors of this RelatedVisitorsResponse. 61 | 62 | 63 | :param related_visitors: The related_visitors of this RelatedVisitorsResponse. # noqa: E501 64 | """ 65 | if related_visitors is None: 66 | raise ValueError("Invalid value for `related_visitors`, must not be `None`") # noqa: E501 67 | 68 | self._related_visitors = related_visitors 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/remote_control.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class RemoteControl(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """RemoteControl - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this RemoteControl. # noqa: E501 51 | 52 | `true` if the request came from a machine being remotely controlled (e.g. TeamViewer), `false` otherwise. # noqa: E501 53 | 54 | :return: The result of this RemoteControl. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this RemoteControl. 61 | 62 | `true` if the request came from a machine being remotely controlled (e.g. TeamViewer), `false` otherwise. # noqa: E501 63 | 64 | :param result: The result of this RemoteControl. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/search_events_response_events.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | from fingerprint_pro_server_api_sdk.models.products import Products 17 | 18 | 19 | class SearchEventsResponseEvents(BaseModel): 20 | """ 21 | Device intelligence results for the identification event. 22 | 23 | NOTE: This class is auto generated by the swagger code generator program. 24 | 25 | Do not edit the class manually. 26 | """ 27 | """ 28 | Attributes: 29 | swagger_types (dict): The key is attribute name 30 | and the value is attribute type. 31 | attribute_map (dict): The key is attribute name 32 | and the value is json key in definition. 33 | """ 34 | swagger_types = { 35 | 'products': 'Products' 36 | } 37 | 38 | nullable_map = { 39 | 'products': False 40 | } 41 | 42 | attribute_map = { 43 | 'products': 'products' 44 | } 45 | 46 | def __init__(self, products=None): # noqa: E501 47 | """SearchEventsResponseEvents - a model defined in Swagger""" # noqa: E501 48 | self._products = None 49 | self.discriminator = None 50 | self.products = products 51 | 52 | @property 53 | def products(self) -> Products: 54 | """Gets the products of this SearchEventsResponseEvents. # noqa: E501 55 | 56 | 57 | :return: The products of this SearchEventsResponseEvents. # noqa: E501 58 | """ 59 | return self._products 60 | 61 | @products.setter 62 | def products(self, products: Products): 63 | """Sets the products of this SearchEventsResponseEvents. 64 | 65 | 66 | :param products: The products of this SearchEventsResponseEvents. # noqa: E501 67 | """ 68 | if products is None: 69 | raise ValueError("Invalid value for `products`, must not be `None`") # noqa: E501 70 | 71 | self._products = products 72 | 73 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/tag.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class Tag(dict): 19 | """ 20 | A customer-provided value or an object that was sent with identification request. 21 | 22 | NOTE: This class is auto generated by the swagger code generator program. 23 | 24 | Do not edit the class manually. 25 | """ 26 | """ 27 | Attributes: 28 | swagger_types (dict): The key is attribute name 29 | and the value is attribute type. 30 | attribute_map (dict): The key is attribute name 31 | and the value is json key in definition. 32 | """ 33 | swagger_types = { 34 | } 35 | 36 | nullable_map = { 37 | } 38 | 39 | attribute_map = { 40 | } 41 | 42 | __parent_class__ = 'dict' 43 | 44 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/tor.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class Tor(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """Tor - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this Tor. # noqa: E501 51 | 52 | `true` if the request IP address is a known tor exit node, `false` otherwise. # noqa: E501 53 | 54 | :return: The result of this Tor. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this Tor. 61 | 62 | `true` if the request IP address is a known tor exit node, `false` otherwise. # noqa: E501 63 | 64 | :param result: The result of this Tor. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/velocity_data.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | from fingerprint_pro_server_api_sdk.models.velocity_intervals import VelocityIntervals 17 | 18 | 19 | class VelocityData(BaseModel): 20 | """NOTE: This class is auto generated by the swagger code generator program. 21 | 22 | Do not edit the class manually. 23 | """ 24 | """ 25 | Attributes: 26 | swagger_types (dict): The key is attribute name 27 | and the value is attribute type. 28 | attribute_map (dict): The key is attribute name 29 | and the value is json key in definition. 30 | """ 31 | swagger_types = { 32 | 'intervals': 'VelocityIntervals' 33 | } 34 | 35 | nullable_map = { 36 | 'intervals': False 37 | } 38 | 39 | attribute_map = { 40 | 'intervals': 'intervals' 41 | } 42 | 43 | def __init__(self, intervals=None): # noqa: E501 44 | """VelocityData - a model defined in Swagger""" # noqa: E501 45 | self._intervals = None 46 | self.discriminator = None 47 | if intervals is not None: 48 | self.intervals = intervals 49 | 50 | @property 51 | def intervals(self) -> Optional[VelocityIntervals]: 52 | """Gets the intervals of this VelocityData. # noqa: E501 53 | 54 | 55 | :return: The intervals of this VelocityData. # noqa: E501 56 | """ 57 | return self._intervals 58 | 59 | @intervals.setter 60 | def intervals(self, intervals: Optional[VelocityIntervals]): 61 | """Sets the intervals of this VelocityData. 62 | 63 | 64 | :param intervals: The intervals of this VelocityData. # noqa: E501 65 | """ 66 | 67 | self._intervals = intervals 68 | 69 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/virtual_machine.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class VirtualMachine(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """VirtualMachine - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | self.result = result 47 | 48 | @property 49 | def result(self) -> bool: 50 | """Gets the result of this VirtualMachine. # noqa: E501 51 | 52 | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. # noqa: E501 53 | 54 | :return: The result of this VirtualMachine. # noqa: E501 55 | """ 56 | return self._result 57 | 58 | @result.setter 59 | def result(self, result: bool): 60 | """Sets the result of this VirtualMachine. 61 | 62 | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. # noqa: E501 63 | 64 | :param result: The result of this VirtualMachine. # noqa: E501 65 | """ 66 | if result is None: 67 | raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 68 | 69 | self._result = result 70 | 71 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/vpn_confidence.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class VPNConfidence(BaseModel): 19 | """ 20 | A confidence rating for the VPN detection result — \"low\", \"medium\", or \"high\". Depends on the combination of results returned from all VPN detection methods. 21 | 22 | NOTE: This class is auto generated by the swagger code generator program. 23 | 24 | Do not edit the class manually. 25 | """ 26 | 27 | """ 28 | allowed enum values 29 | """ 30 | LOW = "low" 31 | MEDIUM = "medium" 32 | HIGH = "high" 33 | """ 34 | Attributes: 35 | swagger_types (dict): The key is attribute name 36 | and the value is attribute type. 37 | attribute_map (dict): The key is attribute name 38 | and the value is json key in definition. 39 | """ 40 | swagger_types = { 41 | } 42 | 43 | nullable_map = { 44 | } 45 | 46 | attribute_map = { 47 | } 48 | 49 | def __init__(self): # noqa: E501 50 | """VPNConfidence - a model defined in Swagger""" # noqa: E501 51 | self.discriminator = None 52 | 53 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_developer_tools.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookDeveloperTools(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookDeveloperTools - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookDeveloperTools. # noqa: E501 52 | 53 | `true` if the browser is Chrome with DevTools open or Firefox with Developer Tools open, `false` otherwise. # noqa: E501 54 | 55 | :return: The result of this WebhookDeveloperTools. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookDeveloperTools. 62 | 63 | `true` if the browser is Chrome with DevTools open or Firefox with Developer Tools open, `false` otherwise. # noqa: E501 64 | 65 | :param result: The result of this WebhookDeveloperTools. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_frida.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookFrida(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookFrida - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookFrida. # noqa: E501 52 | 53 | [Frida](https://frida.re/docs/) detection for Android and iOS devices. There are 2 values: * `true` - Frida detected * `false` - No signs of Frida or the client is not a mobile device. # noqa: E501 54 | 55 | :return: The result of this WebhookFrida. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookFrida. 62 | 63 | [Frida](https://frida.re/docs/) detection for Android and iOS devices. There are 2 values: * `true` - Frida detected * `false` - No signs of Frida or the client is not a mobile device. # noqa: E501 64 | 65 | :param result: The result of this WebhookFrida. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_jailbroken.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookJailbroken(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookJailbroken - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookJailbroken. # noqa: E501 52 | 53 | iOS specific jailbreak detection. There are 2 values: * `true` - Jailbreak detected. * `false` - No signs of jailbreak or the client is not iOS. # noqa: E501 54 | 55 | :return: The result of this WebhookJailbroken. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookJailbroken. 62 | 63 | iOS specific jailbreak detection. There are 2 values: * `true` - Jailbreak detected. * `false` - No signs of jailbreak or the client is not iOS. # noqa: E501 64 | 65 | :param result: The result of this WebhookJailbroken. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_location_spoofing.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookLocationSpoofing(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookLocationSpoofing - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookLocationSpoofing. # noqa: E501 52 | 53 | Flag indicating whether the request came from a mobile device with location spoofing enabled. # noqa: E501 54 | 55 | :return: The result of this WebhookLocationSpoofing. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookLocationSpoofing. 62 | 63 | Flag indicating whether the request came from a mobile device with location spoofing enabled. # noqa: E501 64 | 65 | :param result: The result of this WebhookLocationSpoofing. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_privacy_settings.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookPrivacySettings(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookPrivacySettings - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookPrivacySettings. # noqa: E501 52 | 53 | `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. # noqa: E501 54 | 55 | :return: The result of this WebhookPrivacySettings. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookPrivacySettings. 62 | 63 | `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. # noqa: E501 64 | 65 | :param result: The result of this WebhookPrivacySettings. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_raw_device_attributes.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookRawDeviceAttributes(dict): 19 | """ 20 | It includes 35+ raw browser identification attributes to provide Fingerprint users with even more information than our standard visitor ID provides. This enables Fingerprint users to not have to run our open-source product in conjunction with Fingerprint Pro Plus and Enterprise to get those additional attributes. Warning: The raw signals data can change at any moment as we improve the product. We cannot guarantee the internal shape of raw device attributes to be stable, so typical semantic versioning rules do not apply here. Use this data with caution without assuming a specific structure beyond the generic type provided here. 21 | 22 | NOTE: This class is auto generated by the swagger code generator program. 23 | 24 | Do not edit the class manually. 25 | """ 26 | """ 27 | Attributes: 28 | swagger_types (dict): The key is attribute name 29 | and the value is attribute type. 30 | attribute_map (dict): The key is attribute name 31 | and the value is json key in definition. 32 | """ 33 | swagger_types = { 34 | } 35 | 36 | nullable_map = { 37 | } 38 | 39 | attribute_map = { 40 | } 41 | 42 | __parent_class__ = 'dict' 43 | 44 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_remote_control.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookRemoteControl(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookRemoteControl - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookRemoteControl. # noqa: E501 52 | 53 | `true` if the request came from a machine being remotely controlled (e.g. TeamViewer), `false` otherwise. # noqa: E501 54 | 55 | :return: The result of this WebhookRemoteControl. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookRemoteControl. 62 | 63 | `true` if the request came from a machine being remotely controlled (e.g. TeamViewer), `false` otherwise. # noqa: E501 64 | 65 | :param result: The result of this WebhookRemoteControl. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_root_apps.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookRootApps(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookRootApps - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookRootApps. # noqa: E501 52 | 53 | Android specific root management apps detection. There are 2 values: * `true` - Root Management Apps detected (e.g. Magisk). * `false` - No Root Management Apps detected or the client isn't Android. # noqa: E501 54 | 55 | :return: The result of this WebhookRootApps. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookRootApps. 62 | 63 | Android specific root management apps detection. There are 2 values: * `true` - Root Management Apps detected (e.g. Magisk). * `false` - No Root Management Apps detected or the client isn't Android. # noqa: E501 64 | 65 | :param result: The result of this WebhookRootApps. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_tor.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookTor(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookTor - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookTor. # noqa: E501 52 | 53 | `true` if the request IP address is a known tor exit node, `false` otherwise. # noqa: E501 54 | 55 | :return: The result of this WebhookTor. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookTor. 62 | 63 | `true` if the request IP address is a known tor exit node, `false` otherwise. # noqa: E501 64 | 65 | :param result: The result of this WebhookTor. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/models/webhook_virtual_machine.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Fingerprint Server API 5 | 6 | Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 7 | 8 | OpenAPI spec version: 3 9 | Contact: support@fingerprint.com 10 | Generated by: https://github.com/swagger-api/swagger-codegen.git 11 | """ 12 | 13 | import re # noqa: F401 14 | from typing import Dict, List, Optional # noqa: F401 15 | from fingerprint_pro_server_api_sdk.base_model import BaseModel 16 | 17 | 18 | class WebhookVirtualMachine(BaseModel): 19 | """NOTE: This class is auto generated by the swagger code generator program. 20 | 21 | Do not edit the class manually. 22 | """ 23 | """ 24 | Attributes: 25 | swagger_types (dict): The key is attribute name 26 | and the value is attribute type. 27 | attribute_map (dict): The key is attribute name 28 | and the value is json key in definition. 29 | """ 30 | swagger_types = { 31 | 'result': 'bool' 32 | } 33 | 34 | nullable_map = { 35 | 'result': False 36 | } 37 | 38 | attribute_map = { 39 | 'result': 'result' 40 | } 41 | 42 | def __init__(self, result=None): # noqa: E501 43 | """WebhookVirtualMachine - a model defined in Swagger""" # noqa: E501 44 | self._result = None 45 | self.discriminator = None 46 | if result is not None: 47 | self.result = result 48 | 49 | @property 50 | def result(self) -> Optional[bool]: 51 | """Gets the result of this WebhookVirtualMachine. # noqa: E501 52 | 53 | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. # noqa: E501 54 | 55 | :return: The result of this WebhookVirtualMachine. # noqa: E501 56 | """ 57 | return self._result 58 | 59 | @result.setter 60 | def result(self, result: Optional[bool]): 61 | """Sets the result of this WebhookVirtualMachine. 62 | 63 | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. # noqa: E501 64 | 65 | :param result: The result of this WebhookVirtualMachine. # noqa: E501 66 | """ 67 | 68 | self._result = result 69 | 70 | -------------------------------------------------------------------------------- /fingerprint_pro_server_api_sdk/webhook_validation.py: -------------------------------------------------------------------------------- 1 | import hmac 2 | import hashlib 3 | 4 | 5 | class WebhookValidation: 6 | """Manages work with webhooks.""" 7 | @staticmethod 8 | def is_valid_hmac_signature(signature: str, data: bytes, secret: str) -> bool: 9 | """Validates an HMAC signature.""" 10 | hmac_instance = hmac.new(secret.encode('utf-8'), data, hashlib.sha256) 11 | computed_hash = hmac_instance.hexdigest() 12 | return signature == computed_hash 13 | 14 | @staticmethod 15 | def is_valid_webhook_signature(header: str, data: bytes, secret: str) -> bool: 16 | """Verifies the HMAC signature extracted from the "fpjs-event-signature" header of the incoming request. 17 | This is a part of the webhook signing process, which is available only for enterprise customers. 18 | If you wish to enable it, please contact our support: https://fingerprint.com/support""" 19 | 20 | signatures = header.split(',') 21 | 22 | for signature in signatures: 23 | parts = signature.split('=') 24 | if len(parts) == 2: 25 | version, hash_value = parts 26 | if version == "v1" and WebhookValidation.is_valid_hmac_signature(hash_value, data, secret): 27 | return True 28 | 29 | return False 30 | 31 | -------------------------------------------------------------------------------- /fix_codegen_problems.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | 4 | 5 | def camel_to_snake(name): 6 | """Converts CamelCase to snake_case.""" 7 | s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 8 | return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower() 9 | 10 | 11 | def convert_to_snake_case(text): 12 | """Converts __to__snake__case imports to correct imports.""" 13 | pattern = r'__to__snake__case\(([a-zA-Z0-9]+)\)' 14 | 15 | def replacer(match): 16 | class_name = match.group(1) 17 | snake_case_name = camel_to_snake(class_name) 18 | return snake_case_name 19 | 20 | return re.sub(pattern, replacer, text) 21 | 22 | 23 | def convert_type_annotations(text): 24 | """Replaces dict(str, object) with dict[str, object] in function annotations.""" 25 | result = text 26 | replacement_pairs = [ 27 | (r'-> dict\((\w+), (\w+)\):', r'-> Dict[\1, \2]:'), 28 | (r'-> Optional\[dict\((\w+), (\w+)\)\]:', r'-> Optional[Dict[\1, \2]]:'), 29 | (r': dict\((\w+), (\w+)\)', r': Dict[\1, \2]'), 30 | (r': Optional\[dict\((\w+), (\w+)\)\]', r': Optional[Dict[\1, \2]]'), 31 | (r'-> list\[(\w+)\]:', r'-> List[\1]:'), 32 | (r'-> Optional\[list\[(\w+)\]\]:', r'-> Optional[List[\1]]:'), 33 | (r': list\[(\w+)\]', r': List[\1]'), 34 | (r': Optional\[list\[(\w+)\]\]', r': Optional[List[\1]]') 35 | ] 36 | for pattern, replacement in replacement_pairs: 37 | result = re.sub(pattern, replacement, result) 38 | return result 39 | 40 | 41 | def process_file(file_path: str): 42 | """Reads file, performs conversion and writes back.""" 43 | with open(file_path, 'r+', encoding='utf-8') as file: 44 | content = file.read() 45 | 46 | content = convert_to_snake_case(content) 47 | content = convert_type_annotations(content) 48 | 49 | with open(file_path, 'w', encoding='utf-8') as file: 50 | file.write(content) 51 | 52 | 53 | def process_models(): 54 | """Run through all models.""" 55 | directory = './fingerprint_pro_server_api_sdk/models' 56 | for root, _, files in os.walk(directory): 57 | for file in files: 58 | if file.endswith('.py'): 59 | file_path = os.path.join(root, file) 60 | process_file(file_path) 61 | 62 | 63 | if __name__ == "__main__": 64 | process_models() 65 | 66 | -------------------------------------------------------------------------------- /generate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VERSION=$(jq -r '.version' package.json) 4 | 5 | while getopts "v:" arg; do 6 | case $arg in 7 | v) 8 | VERSION=$OPTARG 9 | ;; 10 | esac 11 | done 12 | 13 | # Make prerelease version compatible with PEP 440 14 | if [[ $VERSION =~ (.*-test\.)([0-9]+) ]]; then 15 | BASE_VERSION=${BASH_REMATCH[1]} 16 | DEV_NUMBER=${BASH_REMATCH[2]} 17 | VERSION="${BASE_VERSION%-rc.}.rc${DEV_NUMBER}" 18 | fi 19 | 20 | # jar was downloaded from here https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.34/ 21 | 22 | find ./docs -type f ! -name "DecryptionKey.md" ! -name "SealedResults.md" -exec rm {} + 23 | cd fingerprint_pro_server_api_sdk/models 24 | shopt -s extglob 25 | rm !("error_plain_response.py") 26 | cd ../.. 27 | java -jar ./bin/swagger-codegen-cli.jar generate -t ./template -l python -i ./res/fingerprint-server-api.yaml -o ./ -c config.json -DpackageVersion=$VERSION 28 | 29 | python ./fix_codegen_problems.py 30 | 31 | # Ugly fix for codegen problem that I couldn't fix editing template. 32 | # Platform check 33 | platform=$(uname) 34 | ( 35 | # Readme file fix 36 | replacement=$(printf 'The rawAttributes object follows this general shape: `{ value: any } | { error: { name: string; message: string; } }`\n') 37 | readme_filename="./docs/RawDeviceAttributes.md" 38 | if [ "$platform" = "Darwin" ]; then 39 | sed -i '' "s/^Name |.*/${replacement}/" "$readme_filename" 40 | sed -i '' "/^------------ |/c\\" "$readme_filename" 41 | else 42 | sed -i "s/^Name |.*/${replacement}/" "$readme_filename" 43 | sed -i "/^------------ |/c\\" "$readme_filename" 44 | fi 45 | ) 46 | 47 | # Replace version in other files 48 | ( 49 | if [ "$platform" = "Darwin" ]; then 50 | sed -i '' "s/^VERSION = '[^']*'/VERSION = '${VERSION}'/" "./test/test_fingerprint_api.py" 51 | sed -i '' "s/^version = [^']*/version = ${VERSION}/" "./setup.cfg" 52 | else 53 | sed -i "s/^VERSION = '[^']*'/VERSION = '${VERSION}'/" "./test/test_fingerprint_api.py" 54 | sed -i "s/^version = [^']*/version = ${VERSION}/" "./setup.cfg" 55 | fi 56 | ) 57 | -------------------------------------------------------------------------------- /generate_coverage_summary.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | with open('coverage.json', 'r') as f: 4 | json_report = json.load(f) 5 | 6 | json_summary = { 7 | 'total': { 8 | 'statements': { 9 | 'pct': round(json_report['totals']['percent_covered'], 2) 10 | } 11 | } 12 | } 13 | 14 | with open('coverage-summary.json', 'w') as json_file: 15 | json.dump(json_summary, json_file) 16 | -------------------------------------------------------------------------------- /install_hooks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Make .git_hooks folder as hooks source for git 4 | git config core.hooksPath .git_hooks/ 5 | 6 | # install commitlint and @commitlint/config-conventional globally 7 | npm install -g commitlint @commitlint/config-conventional 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fingerprint-pro-server-api-python-sdk", 3 | "version": "8.7.0", 4 | "private": true, 5 | "devDependencies": { 6 | "@changesets/cli": "^2.27.8", 7 | "@fingerprintjs/changesets-changelog-format": "^0.2.0", 8 | "@fingerprintjs/commit-lint-dx-team": "^0.1.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | certifi >= 2023.7.22 2 | python-dateutil >= 2.5.3 3 | setuptools >= 65.5.1 4 | urllib3>=1.23 5 | python-dotenv 6 | cryptography 7 | -------------------------------------------------------------------------------- /sealed_results_example.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import os 3 | 4 | from dotenv import load_dotenv 5 | 6 | from fingerprint_pro_server_api_sdk.sealed import unseal_event_response, DecryptionKey, DecryptionAlgorithm 7 | 8 | load_dotenv() 9 | 10 | sealed_result = base64.b64decode(os.environ["BASE64_SEALED_RESULT"]) 11 | key = base64.b64decode(os.environ["BASE64_KEY"]) 12 | 13 | try: 14 | event_response = unseal_event_response(sealed_result, [DecryptionKey(key, DecryptionAlgorithm['Aes256Gcm'])]) 15 | print("\n\n\nEvent response: \n", event_response.products) 16 | except Exception as e: 17 | print("Exception when calling unsealing events response: %s\n" % e) 18 | exit(1) 19 | 20 | print("Unseal successful!") 21 | 22 | exit(0) 23 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [metadata] 2 | version = 8.7.0 3 | -------------------------------------------------------------------------------- /sync.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | curl -o ./res/fingerprint-server-api.yaml https://fingerprintjs.github.io/fingerprint-pro-server-api-openapi/schemas/fingerprint-server-api-compact.yaml 4 | 5 | examplesList=( 6 | 'get_visits_200_limit_1.json' 7 | 'get_visits_200_limit_500.json' 8 | 'get_visits_403_error.json' 9 | 'get_visits_429_too_many_requests_error.json' 10 | 'webhook.json' 11 | 'get_event_200.json' 12 | 'get_event_200_all_errors.json' 13 | 'get_event_200_extra_fields.json' 14 | 'get_event_403_error.json' 15 | 'get_event_404_error.json' 16 | 'get_event_200_botd_failed_error.json' 17 | 'get_event_200_botd_too_many_requests_error.json' 18 | 'get_event_200_identification_failed_error.json' 19 | 'get_event_200_identification_too_many_requests_error.json' 20 | 'update_event_400_error.json' 21 | 'update_event_403_error.json' 22 | 'update_event_404_error.json' 23 | 'update_event_409_error.json' 24 | ) 25 | 26 | sharedExamplesList=( 27 | '400_error_empty_visitor_id.json' 28 | '400_error_incorrect_visitor_id.json' 29 | '403_error_feature_not_enabled.json' 30 | '403_error_token_not_found.json' 31 | '403_error_token_required.json' 32 | '403_error_wrong_region.json' 33 | '404_error_visitor_not_found.json' 34 | '429_error_too_many_requests.json' 35 | ) 36 | 37 | for example in ${examplesList[*]}; do 38 | curl -o ./test/mocks/"$example" https://fingerprintjs.github.io/fingerprint-pro-server-api-openapi/examples/"$example" 39 | done 40 | 41 | for example in ${sharedExamplesList[*]}; do 42 | curl -o ./test/mocks/"$example" https://fingerprintjs.github.io/fingerprint-pro-server-api-openapi/examples/shared/"$example" 43 | done 44 | 45 | ./generate.sh 46 | -------------------------------------------------------------------------------- /template/__init__api.mustache: -------------------------------------------------------------------------------- 1 | # flake8: noqa 2 | 3 | # import apis into api package 4 | {{#apiInfo}}{{#apis}}from {{packageName}}.{{apiPackage}}.{{classVarName}} import {{classname}} 5 | {{/apis}}{{/apiInfo}} 6 | -------------------------------------------------------------------------------- /template/__init__model.mustache: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | # flake8: noqa 4 | {{>partial_header}} 5 | 6 | # import models into model package 7 | {{#models}}{{#model}}from {{modelPackage}}.{{classFilename}} import {{classname}}{{/model}} 8 | {{/models}} 9 | -------------------------------------------------------------------------------- /template/__init__package.mustache: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | # flake8: noqa 4 | 5 | {{>partial_header}} 6 | 7 | # import apis into sdk package 8 | {{#apiInfo}}{{#apis}}from {{packageName}}.{{apiPackage}}.{{classVarName}} import {{classname}} 9 | {{/apis}}{{/apiInfo}} 10 | # import ApiClient 11 | from {{packageName}}.api_client import ApiClient 12 | from {{packageName}}.configuration import Configuration 13 | # import BaseModel 14 | from {{packageName}}.base_model import BaseModel 15 | # import models into sdk package 16 | {{#models}}{{#model}}from {{modelPackage}}.{{classFilename}} import {{classname}} 17 | {{/model}}{{/models}} 18 | # import custom methods into sdk package 19 | from {{packageName}}.webhook_validation import WebhookValidation 20 | from {{packageName}}.sealed import ApiClientDeserializer, DecryptionAlgorithm, DecryptionKey, \ 21 | UnsealError, UnsealAggregateError, unseal_event_response 22 | -------------------------------------------------------------------------------- /template/model_doc.mustache: -------------------------------------------------------------------------------- 1 | {{#models}}{{#model}}# {{classname}} 2 | {{#unescapedDescription}} 3 | {{{.}}} 4 | 5 | {{/unescapedDescription}} 6 | {{^emptyVars}} 7 | 8 | ## Properties 9 | Name | Type | Description | Notes 10 | ------------ | ------------- | ------------- | ------------- 11 | {{#vars}}**{{name}}** | {{#isPrimitiveType}}**{{datatype}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{datatype}}**]({{complexType}}.md){{/isPrimitiveType}} | {{{description}}} | {{^required}}[optional] {{/required}}{{#readOnly}}[readonly] {{/readOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}} 12 | {{/vars}} 13 | 14 | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) 15 | 16 | {{/emptyVars}}{{/model}}{{/models}} 17 | -------------------------------------------------------------------------------- /test-requirements.txt: -------------------------------------------------------------------------------- 1 | coverage>=4.0.3 2 | pytest 3 | pluggy>=0.3.1 4 | py>=1.4.31 5 | randomize>=0.13 6 | -------------------------------------------------------------------------------- /test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fingerprintjs/fingerprint-pro-server-api-python-sdk/9ace44fa0bd15138e662223b03dddefe9fe0d05f/test/__init__.py -------------------------------------------------------------------------------- /test/mocks/errors/400_bot_type_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "invalid bot type" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/400_end_time_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "invalid end time" 5 | } 6 | } -------------------------------------------------------------------------------- /test/mocks/errors/400_ip_address_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "invalid ip address" 5 | } 6 | } -------------------------------------------------------------------------------- /test/mocks/errors/400_limit_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "invalid limit" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/400_linked_id_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "linked_id can't be greater than 256 characters long" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/400_pagination_key_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "invalid pagination key" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/400_request_body_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "request body is not valid" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/400_reverse_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "invalid reverse param" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/400_start_time_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "invalid start time" 5 | } 6 | } -------------------------------------------------------------------------------- /test/mocks/errors/400_visitor_id_invalid.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "invalid visitor id" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/400_visitor_id_required.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestCannotBeParsed", 4 | "message": "visitor id is required" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/403_feature_not_enabled.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "FeatureNotEnabled", 4 | "message": "feature not enabled" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/403_subscription_not_active.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "SubscriptionNotActive", 4 | "message": "forbidden" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/403_token_not_found.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "TokenNotFound", 4 | "message": "secret key is not found" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/403_token_required.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "TokenRequired", 4 | "message": "secret key is required" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/403_wrong_region.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "WrongRegion", 4 | "message": "wrong region" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/404_request_not_found.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "RequestNotFound", 4 | "message": "request id is not found" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/404_visitor_not_found.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "VisitorNotFound", 4 | "message": "visitor not found" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/409_state_not_ready.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "StateNotReady", 4 | "message": "resource is not mutable yet, try again" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/errors/429_too_many_requests.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "code": "TooManyRequests", 4 | "message": "too many requests" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/mocks/get_event_200_botd_failed_error.json: -------------------------------------------------------------------------------- 1 | { 2 | "products": { 3 | "identification": { 4 | "data": { 5 | "visitorId": "Ibk1527CUFmcnjLwIs4A9", 6 | "requestId": "0KSh65EnVoB85JBmloQK", 7 | "incognito": true, 8 | "linkedId": "somelinkedId", 9 | "time": "2019-05-21T16:40:13Z", 10 | "tag": {}, 11 | "timestamp": 1582299576512, 12 | "url": "https://www.example.com/login", 13 | "ip": "61.127.217.15", 14 | "ipLocation": { 15 | "accuracyRadius": 10, 16 | "latitude": 49.982, 17 | "longitude": 36.2566, 18 | "postalCode": "61202", 19 | "timezone": "Europe/Dusseldorf", 20 | "city": { 21 | "name": "Dusseldorf" 22 | }, 23 | "continent": { 24 | "code": "EU", 25 | "name": "Europe" 26 | }, 27 | "country": { 28 | "code": "DE", 29 | "name": "Germany" 30 | }, 31 | "subdivisions": [ 32 | { 33 | "isoCode": "63", 34 | "name": "North Rhine-Westphalia" 35 | } 36 | ] 37 | }, 38 | "browserDetails": { 39 | "browserName": "Chrome", 40 | "browserMajorVersion": "74", 41 | "browserFullVersion": "74.0.3729", 42 | "os": "Windows", 43 | "osVersion": "7", 44 | "device": "Other", 45 | "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...." 46 | }, 47 | "confidence": { 48 | "score": 0.97 49 | }, 50 | "visitorFound": true, 51 | "firstSeenAt": { 52 | "global": "2022-03-16T11:26:45.362Z", 53 | "subscription": "2022-03-16T11:31:01.101Z" 54 | }, 55 | "lastSeenAt": { 56 | "global": "2022-03-16T11:28:34.023Z", 57 | "subscription": null 58 | } 59 | } 60 | }, 61 | "botd": { 62 | "error": { 63 | "code": "Failed", 64 | "message": "internal server error" 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /test/mocks/get_event_200_identification_failed_error.json: -------------------------------------------------------------------------------- 1 | { 2 | "products": { 3 | "identification": { 4 | "error": { 5 | "code": "Failed", 6 | "message": "internal server error" 7 | } 8 | }, 9 | "botd": { 10 | "data": { 11 | "bot": { 12 | "result": "bad", 13 | "type": "headlessChrome" 14 | }, 15 | "url": "https://example.com/login", 16 | "ip": "94.60.143.223", 17 | "time": "2024-02-23T10:20:25.287Z", 18 | "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/121.0.6167.57 Safari/537.36", 19 | "requestId": "1708683625245.tuJ4nD" 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /test/mocks/get_event_200_too_many_requests_error.json: -------------------------------------------------------------------------------- 1 | { 2 | "products": { 3 | "identification": { 4 | "error": { 5 | "code": "429 Too Many Requests", 6 | "message": "too many requests" 7 | } 8 | }, 9 | "botd": { 10 | "error": { 11 | "code": "TooManyRequests", 12 | "message": "too many requests" 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /test/mocks/get_visitors_200_limit_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "visitorId": "AcxioeQKffpXF8iGQK3P", 3 | "visits": [ 4 | { 5 | "requestId": "1655373953086.DDlfmP", 6 | "browserDetails": { 7 | "browserName": "Chrome", 8 | "browserMajorVersion": "102", 9 | "browserFullVersion": "102.0.5005", 10 | "os": "Mac OS X", 11 | "osVersion": "10.15.7", 12 | "device": "Other", 13 | "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" 14 | }, 15 | "incognito": false, 16 | "ip": "82.118.30.68", 17 | "ipLocation": { 18 | "accuracyRadius": 1000, 19 | "latitude": 50.0805, 20 | "longitude": 14.467, 21 | "postalCode": "130 00", 22 | "timezone": "Europe/Prague", 23 | "city": { 24 | "name": "Prague" 25 | }, 26 | "country": { 27 | "code": "CZ", 28 | "name": "Czechia" 29 | }, 30 | "continent": { 31 | "code": "EU", 32 | "name": "Europe" 33 | }, 34 | "subdivisions": [ 35 | { 36 | "isoCode": "10", 37 | "name": "Hlavni mesto Praha" 38 | } 39 | ] 40 | }, 41 | "timestamp": 1655373953094, 42 | "time": "2022-06-16T10:05:53Z", 43 | "url": "https://dashboard.fingerprint.com/", 44 | "tag": {}, 45 | "confidence": { 46 | "score": 1 47 | }, 48 | "visitorFound": true, 49 | "firstSeenAt": { 50 | "global": "2022-02-04T11:31:20Z", 51 | "subscription": "2022-02-04T11:31:20Z" 52 | }, 53 | "lastSeenAt": { 54 | "global": "2022-06-16T10:03:00.912Z", 55 | "subscription": "2022-06-16T10:03:00.912Z" 56 | } 57 | } 58 | ], 59 | "lastTimestamp": 1655373953086, 60 | "paginationKey": "1655373953086.DDlfmP" 61 | } 62 | -------------------------------------------------------------------------------- /test/mocks/get_visitors_400_bad_request.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "bad request" 3 | } 4 | -------------------------------------------------------------------------------- /test/mocks/get_visitors_403_forbidden.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "Forbidden (HTTP 403)" 3 | } 4 | -------------------------------------------------------------------------------- /test/mocks/get_visitors_429_too_many_requests.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": "too many requests" 3 | } 4 | -------------------------------------------------------------------------------- /test/mocks/related-visitors/get_related_visitors_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "relatedVisitors": [ 3 | { 4 | "visitorId": "NtCUJGceWX9RpvSbhvOm" 5 | }, 6 | { 7 | "visitorId": "25ee02iZwGxeyT0jMNkZ" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /test/mocks/related-visitors/get_related_visitors_200_empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "relatedVisitors": [] 3 | } 4 | -------------------------------------------------------------------------------- /test/mocks/update_event_multiple_fields_request.json: -------------------------------------------------------------------------------- 1 | { 2 | "linkedId": "myNewLinkedId", 3 | "tag": { 4 | "myTag": "myNewValue" 5 | }, 6 | "suspect": true 7 | } 8 | -------------------------------------------------------------------------------- /test/mocks/update_event_one_field_request.json: -------------------------------------------------------------------------------- 1 | { 2 | "linkedId": "myNewLinkedId" 3 | } 4 | -------------------------------------------------------------------------------- /test/test_webhook_validation.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | from fingerprint_pro_server_api_sdk import WebhookValidation 4 | 5 | 6 | class TestWebhookValidation(unittest.TestCase): 7 | valid_header = "v1=1b2c16b75bd2a870c114153ccda5bcfca63314bc722fa160d690de133ccbb9db" 8 | valid_header_v2 = "v2=1b2c16b75bd2a870c114153ccda5bcfca63314bc722fa160d690de133ccbb9db" 9 | secret = "secret" 10 | data = b"data" 11 | 12 | def test_valid_header(self): 13 | result = WebhookValidation.is_valid_webhook_signature(self.valid_header, self.data, self.secret) 14 | self.assertTrue(result) 15 | 16 | def test_invalid_header(self): 17 | result = WebhookValidation.is_valid_webhook_signature("v2=invalid", self.data, self.secret) 18 | self.assertFalse(result) 19 | 20 | def test_header_without_version(self): 21 | result = WebhookValidation.is_valid_webhook_signature("invalid", self.data, self.secret) 22 | self.assertFalse(result) 23 | 24 | def test_header_with_unsupported_version(self): 25 | result = WebhookValidation.is_valid_webhook_signature(self.valid_header_v2, self.data, self.secret) 26 | self.assertFalse(result) 27 | 28 | def test_empty_header(self): 29 | result = WebhookValidation.is_valid_webhook_signature("", self.data, self.secret) 30 | self.assertFalse(result) 31 | 32 | def test_empty_secret(self): 33 | result = WebhookValidation.is_valid_webhook_signature("invalid", self.data, "") 34 | self.assertFalse(result) 35 | 36 | def test_empty_data(self): 37 | result = WebhookValidation.is_valid_webhook_signature(self.valid_header, b"", self.secret) 38 | self.assertFalse(result) 39 | 40 | 41 | if __name__ == '__main__': 42 | unittest.main() 43 | -------------------------------------------------------------------------------- /update_event_example.py: -------------------------------------------------------------------------------- 1 | import os 2 | import argparse 3 | 4 | import fingerprint_pro_server_api_sdk 5 | from fingerprint_pro_server_api_sdk.rest import ApiException 6 | from fingerprint_pro_server_api_sdk.models import EventsUpdateRequest 7 | 8 | from dotenv import load_dotenv 9 | 10 | load_dotenv() 11 | parser = argparse.ArgumentParser(description='Update an event in the Fingerprint Server API') 12 | parser.add_argument('--linked_id', type=str) 13 | parser.add_argument('--tag', type=str) 14 | parser.add_argument('--suspect', type=bool) 15 | 16 | args = parser.parse_args() 17 | print(f'args: {args.linked_id}, {args.tag}, {args.suspect}') 18 | 19 | # configure 20 | configuration = fingerprint_pro_server_api_sdk.Configuration( 21 | api_key=os.environ["PRIVATE_KEY"], region=os.environ.get("REGION", "us")) 22 | 23 | # create an instance of the API class 24 | api_instance = fingerprint_pro_server_api_sdk.FingerprintApi(configuration) 25 | request_id = os.environ["REQUEST_ID_TO_UPDATE"] 26 | 27 | try: 28 | updateBody = EventsUpdateRequest(**vars(args)) 29 | print(f'updateBody: {updateBody}') 30 | api_instance.update_event(updateBody, request_id) 31 | except ApiException as e: 32 | print("Exception when calling DefaultApi->update_event: %s\n" % e) 33 | exit(1) 34 | 35 | print("Visitor data updated!") 36 | 37 | exit(0) 38 | -------------------------------------------------------------------------------- /webhook_signature_example.py: -------------------------------------------------------------------------------- 1 | from fingerprint_pro_server_api_sdk import WebhookValidation 2 | 3 | header = "v1=1b2c16b75bd2a870c114153ccda5bcfca63314bc722fa160d690de133ccbb9db" 4 | secret = "secret" 5 | data = b"data" 6 | 7 | is_valid = WebhookValidation.is_valid_webhook_signature(header, data, secret) 8 | 9 | print("Webhook signature is correct!" if is_valid else "Webhook signature is incorrect!") 10 | --------------------------------------------------------------------------------