{"id":19167195,"url":"https://github.com/fingerprintjs/fingerprint-pro-server-api-dotnet-sdk","last_synced_at":"2025-05-07T13:40:49.347Z","repository":{"id":66219946,"uuid":"586801208","full_name":"fingerprintjs/fingerprint-pro-server-api-dotnet-sdk","owner":"fingerprintjs","description":"C#/Dotnet SDK for Fingerprint Pro Server API","archived":false,"fork":false,"pushed_at":"2025-05-06T10:04:22.000Z","size":21850,"stargazers_count":11,"open_issues_count":1,"forks_count":4,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-05-06T10:45:20.076Z","etag":null,"topics":["audio-fingerprinting","browser","browser-fingerprinting","csharp","detection","dotnet","fingerprint","fingerprinting","fingerprintjs","fraud","fraud-detection","identification","visitor-identifier"],"latest_commit_sha":null,"homepage":"https://fingerprint.com","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fingerprintjs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-01-09T09:07:05.000Z","updated_at":"2025-05-06T09:29:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"9092ce02-2403-4ac6-972d-fa73d6700557","html_url":"https://github.com/fingerprintjs/fingerprint-pro-server-api-dotnet-sdk","commit_stats":null,"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fingerprintjs%2Ffingerprint-pro-server-api-dotnet-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fingerprintjs%2Ffingerprint-pro-server-api-dotnet-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fingerprintjs%2Ffingerprint-pro-server-api-dotnet-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fingerprintjs%2Ffingerprint-pro-server-api-dotnet-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fingerprintjs","download_url":"https://codeload.github.com/fingerprintjs/fingerprint-pro-server-api-dotnet-sdk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252888872,"owners_count":21820080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-fingerprinting","browser","browser-fingerprinting","csharp","detection","dotnet","fingerprint","fingerprinting","fingerprintjs","fraud","fraud-detection","identification","visitor-identifier"],"created_at":"2024-11-09T09:36:15.452Z","updated_at":"2025-05-07T13:40:49.337Z","avatar_url":"https://github.com/fingerprintjs.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://fingerprint.com\"\u003e\n        \u003cpicture\u003e\n            \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://fingerprintjs.github.io/home/resources/logo_light.svg\" /\u003e\n            \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://fingerprintjs.github.io/home/resources/logo_dark.svg\" /\u003e\n            \u003cimg src=\"https://fingerprintjs.github.io/home/resources/logo_dark.svg\" alt=\"Fingerprint logo\" width=\"312px\" /\u003e\n        \u003c/picture\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/fingerprintjs/fingerprint-pro-server-api-dotnet-sdk/actions/workflows/release.yml\"\u003e\u003cimg src=\"https://github.com/fingerprintjs/fingerprint-pro-server-api-dotnet-sdk/actions/workflows/release.yml/badge.svg\" alt=\"CI badge\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/fingerprintjs/fingerprint-pro-server-api-dotnet-sdk/actions/workflows/tests.yml\"\u003e\u003cimg src=\"https://github.com/fingerprintjs/fingerprint-pro-server-api-dotnet-sdk/actions/workflows/tests.yml/badge.svg\" alt=\"CI badge\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src=\"https://img.shields.io/:license-mit-blue.svg?style=flat\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/39EpE2neBg\"\u003e\u003cimg src=\"https://img.shields.io/discord/852099967190433792?style=logo\u0026label=Discord\u0026logo=Discord\u0026logoColor=white\" alt=\"Discord server\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Fingerprint Server API Dotnet SDK\n\n[Fingerprint](https://fingerprint.com) is a device intelligence platform offering 99.5% accurate visitor identification.\nFingerprint Pro 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. \n\nThis C# SDK is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:\n\n- API version: 3\n- SDK version: 7.4.0\n- Build package: io.swagger.codegen.v3.generators.dotnet.CSharpClientCodegen\n\n\u003ca name=\"requirements\"\u003e\u003c/a\u003e\n## Requirements\n- .NET 8.0 or later (we keep the [Microsoft support policy](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core))\n\n\u003ca name=\"how-to-install\"\u003e\u003c/a\u003e\n## How to install\n\nWe recommend installing the package from [NuGet](https://docs.nuget.org/consume/installing-nuget):\n```shell\ndotnet add package FingerprintPro.ServerSdk\n```\n\n\u003ca name=\"getting-started\"\u003e\u003c/a\u003e\n## Getting Started\n\n```csharp\n// See https://aka.ms/new-console-template for more information\n// Example usage of our SDK\n\n// Import namespaces\nusing FingerprintPro.ServerSdk.Api;\nusing FingerprintPro.ServerSdk.Client;\n\n// Initialize configuration and add your api key\nvar configuration = new Configuration(Environment.GetEnvironmentVariable(\"SECRET_API_KEY\")!);\n\nvar api = new FingerprintApi(\n    configuration\n);\n\nvar requestId = Environment.GetEnvironmentVariable(\"REQUEST_ID\")!;\nvar visitorId = Environment.GetEnvironmentVariable(\"VISITOR_ID\")!;\n\nvar visits = api.GetVisits(visitorId);\nvar events = api.GetEvent(requestId);\nvar eventsFound = api.SearchEvents(20, paginationKey: \"1740815825085\", bot: \"bad\");\n\nConsole.WriteLine(visits);\nConsole.WriteLine(events);\nConsole.WriteLine(eventsFound);\n\nvar tag = new Tag\n{\n    [\"key\"] = \"value\"\n};\nvar body = new EventsUpdateRequest()\n{\n    Suspect = false,\n    Tag = tag,\n    LinkedId = \"\u003clinked_id\u003e\"\n};\napi.UpdateEvent(body, requestId);\n```\n\nYou can also access the raw HTTP response by using the `WithHttpInfo` methods:\n\n```csharp\n// See https://aka.ms/new-console-template for more information\n// Example usage of our SDK\n\n// Import namespaces\nusing FingerprintPro.ServerSdk.Api;\nusing FingerprintPro.ServerSdk.Client;\n\n// Initialize configuration and add your api key\nvar configuration = new Configuration(Environment.GetEnvironmentVariable(\"SECRET_API_KEY\")!);\n\nvar api = new FingerprintApi(\n    configuration\n);\n\nvar requestId = Environment.GetEnvironmentVariable(\"REQUEST_ID\")!;\nvar visitorId = Environment.GetEnvironmentVariable(\"VISITOR_ID\")!;\n\nvar visits = api.GetVisitsWithHttpInfo(visitorId);\n\n// HttpResponseMessage\nConsole.WriteLine(visits.Response);\n\n// Response data\nConsole.WriteLine(visits.Data);\n```\n\nYou can view more examples in [src/FingerprintPro.ServerSdk.Examples/Program.cs](src/FingerprintPro.ServerSdk.Examples/Program.cs).\n\n### Region\n\nIf your subscription is in region other than US, you need to change the region in the configuration:\n\n```csharp\nusing FingerprintPro.ServerSdk.Client;\n\nvar configuration = new Configuration(Environment.GetEnvironmentVariable(\"SECRET_API_KEY\")!)\n{\n    Region = Region.Eu // or Region.Asia\n};\n```\n\n## Sealed results\n\nThis SDK provides utility methods for decoding [sealed results](https://dev.fingerprint.com/docs/sealed-client-results).\n```csharp\nusing FingerprintPro.ServerSdk;\n\nvar sealedResult = Environment.GetEnvironmentVariable(\"BASE64_SEALED_RESULT\")!;\nvar sealedKey = Environment.GetEnvironmentVariable(\"BASE64_KEY\")!;\n\nvar events = Sealed.UnsealEventResponse(Convert.FromBase64String(sealedResult), new[]\n{\n    new Sealed.DecryptionKey(Convert.FromBase64String(sealedKey), Sealed.DecryptionAlgorithm.Aes256Gcm)\n});\n\nConsole.WriteLine(events.ToJson());\n```\nTo learn more, refer to example located in [src/FingerprintPro.ServerSdk.SealedResultExample/Program.cs](src/FingerprintPro.ServerSdk.SealedResultExample/Program.cs).\n\n## Webhook signature validation\n\nThis SDK provides utility method for verifying the HMAC signature of the incoming webhook request.\n```csharp\nnamespace FingerprintAspNetCore.Areas.Identity.Pages;\n\nusing FingerprintPro.ServerSdk;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\n\n[Route(\"api/[controller]\")]\n[ApiController]\npublic class WebhookController : ControllerBase\n{\n    [HttpPost]\n    public async Task\u003cIActionResult\u003e Post()\n    {\n        try\n        {\n            var secret = Environment.GetEnvironmentVariable(\"WEBHOOK_SIGNATURE_SECRET\");\n            if (string.IsNullOrEmpty(secret))\n            {\n                return BadRequest(new { message = \"Secret key is not configured.\" });\n            }\n\n            var header = Request.Headers[\"fpjs-event-signature\"].ToString();\n            if (string.IsNullOrEmpty(header))\n            {\n                return BadRequest(new { message = \"Missing fpjs-event-signature header.\" });\n            }\n\n            using var memoryStream = new MemoryStream();\n            await Request.Body.CopyToAsync(memoryStream);\n            var data = memoryStream.ToArray();\n\n            // Validate webhook signature\n            var isValid = WebhookValidation.IsValidSignature(\n                header,\n                data,\n                secret);\n\n            if (!isValid)\n            {\n                return Forbid(new { message = \"Webhook signature is invalid.\" });\n            }\n\n            // Process the webhook data here\n            return Ok(new { message = \"Webhook received.\" });\n        }\n        catch (Exception e)\n        {\n            return StatusCode(500, new { error = e.Message });\n        }\n    }\n}\n\n```\nTo learn more, refer to example located in [src/FingerprintPro.ServerSdk.WebhookExample/Program.cs](src/FingerprintPro.ServerSdk.WebhookExample/Program.cs).\n\n\u003ca name=\"documentation-for-api-endpoints\"\u003e\u003c/a\u003e\n## Documentation for API Endpoints\n\nAll URIs are relative to *https://api.fpjs.io*\n\nClass | Method | HTTP request | Description\n------------ | ------------- | ------------- | -------------\n*FingerprintApi* | [**DeleteVisitorData**](docs/FingerprintApi.md#deletevisitordata) | **DELETE** /visitors/{visitor_id} | Delete data by visitor ID\n*FingerprintApi* | [**GetEvent**](docs/FingerprintApi.md#getevent) | **GET** /events/{request_id} | Get event by request ID\n*FingerprintApi* | [**GetRelatedVisitors**](docs/FingerprintApi.md#getrelatedvisitors) | **GET** /related-visitors | Get Related Visitors\n*FingerprintApi* | [**GetVisits**](docs/FingerprintApi.md#getvisits) | **GET** /visitors/{visitor_id} | Get visits by visitor ID\n*FingerprintApi* | [**SearchEvents**](docs/FingerprintApi.md#searchevents) | **GET** /events/search | Get events via search\n*FingerprintApi* | [**UpdateEvent**](docs/FingerprintApi.md#updateevent) | **PUT** /events/{request_id} | Update an event with a given request ID\n\n\u003ca name=\"documentation-for-models\"\u003e\u003c/a\u003e\n## Documentation for Models\n\n - [Model.Botd](docs/Botd.md)\n - [Model.BotdBot](docs/BotdBot.md)\n - [Model.BotdBotResult](docs/BotdBotResult.md)\n - [Model.BrowserDetails](docs/BrowserDetails.md)\n - [Model.ClonedApp](docs/ClonedApp.md)\n - [Model.DeprecatedGeolocation](docs/DeprecatedGeolocation.md)\n - [Model.DeveloperTools](docs/DeveloperTools.md)\n - [Model.Emulator](docs/Emulator.md)\n - [Model.Error](docs/Error.md)\n - [Model.ErrorCode](docs/ErrorCode.md)\n - [Model.ErrorPlainResponse](docs/ErrorPlainResponse.md)\n - [Model.ErrorResponse](docs/ErrorResponse.md)\n - [Model.EventsGetResponse](docs/EventsGetResponse.md)\n - [Model.EventsUpdateRequest](docs/EventsUpdateRequest.md)\n - [Model.FactoryReset](docs/FactoryReset.md)\n - [Model.Frida](docs/Frida.md)\n - [Model.Geolocation](docs/Geolocation.md)\n - [Model.GeolocationCity](docs/GeolocationCity.md)\n - [Model.GeolocationContinent](docs/GeolocationContinent.md)\n - [Model.GeolocationCountry](docs/GeolocationCountry.md)\n - [Model.GeolocationSubdivision](docs/GeolocationSubdivision.md)\n - [Model.GeolocationSubdivisions](docs/GeolocationSubdivisions.md)\n - [Model.HighActivity](docs/HighActivity.md)\n - [Model.IPBlocklist](docs/IPBlocklist.md)\n - [Model.IPBlocklistDetails](docs/IPBlocklistDetails.md)\n - [Model.IPInfo](docs/IPInfo.md)\n - [Model.IPInfoASN](docs/IPInfoASN.md)\n - [Model.IPInfoDataCenter](docs/IPInfoDataCenter.md)\n - [Model.IPInfoV4](docs/IPInfoV4.md)\n - [Model.IPInfoV6](docs/IPInfoV6.md)\n - [Model.Identification](docs/Identification.md)\n - [Model.IdentificationConfidence](docs/IdentificationConfidence.md)\n - [Model.IdentificationSeenAt](docs/IdentificationSeenAt.md)\n - [Model.Incognito](docs/Incognito.md)\n - [Model.Jailbroken](docs/Jailbroken.md)\n - [Model.LocationSpoofing](docs/LocationSpoofing.md)\n - [Model.MitMAttack](docs/MitMAttack.md)\n - [Model.PrivacySettings](docs/PrivacySettings.md)\n - [Model.ProductBotd](docs/ProductBotd.md)\n - [Model.ProductClonedApp](docs/ProductClonedApp.md)\n - [Model.ProductDeveloperTools](docs/ProductDeveloperTools.md)\n - [Model.ProductEmulator](docs/ProductEmulator.md)\n - [Model.ProductFactoryReset](docs/ProductFactoryReset.md)\n - [Model.ProductFrida](docs/ProductFrida.md)\n - [Model.ProductHighActivity](docs/ProductHighActivity.md)\n - [Model.ProductIPBlocklist](docs/ProductIPBlocklist.md)\n - [Model.ProductIPInfo](docs/ProductIPInfo.md)\n - [Model.ProductIdentification](docs/ProductIdentification.md)\n - [Model.ProductIncognito](docs/ProductIncognito.md)\n - [Model.ProductJailbroken](docs/ProductJailbroken.md)\n - [Model.ProductLocationSpoofing](docs/ProductLocationSpoofing.md)\n - [Model.ProductMitMAttack](docs/ProductMitMAttack.md)\n - [Model.ProductPrivacySettings](docs/ProductPrivacySettings.md)\n - [Model.ProductProxy](docs/ProductProxy.md)\n - [Model.ProductRawDeviceAttributes](docs/ProductRawDeviceAttributes.md)\n - [Model.ProductRemoteControl](docs/ProductRemoteControl.md)\n - [Model.ProductRootApps](docs/ProductRootApps.md)\n - [Model.ProductSuspectScore](docs/ProductSuspectScore.md)\n - [Model.ProductTampering](docs/ProductTampering.md)\n - [Model.ProductTor](docs/ProductTor.md)\n - [Model.ProductVPN](docs/ProductVPN.md)\n - [Model.ProductVelocity](docs/ProductVelocity.md)\n - [Model.ProductVirtualMachine](docs/ProductVirtualMachine.md)\n - [Model.Products](docs/Products.md)\n - [Model.Proxy](docs/Proxy.md)\n - [Model.RawDeviceAttribute](docs/RawDeviceAttribute.md)\n - [Model.RawDeviceAttributeError](docs/RawDeviceAttributeError.md)\n - [Model.RawDeviceAttributes](docs/RawDeviceAttributes.md)\n - [Model.RelatedVisitor](docs/RelatedVisitor.md)\n - [Model.RelatedVisitorsResponse](docs/RelatedVisitorsResponse.md)\n - [Model.RemoteControl](docs/RemoteControl.md)\n - [Model.RootApps](docs/RootApps.md)\n - [Model.SearchEventsResponse](docs/SearchEventsResponse.md)\n - [Model.SearchEventsResponseEvents](docs/SearchEventsResponseEvents.md)\n - [Model.SuspectScore](docs/SuspectScore.md)\n - [Model.Tag](docs/Tag.md)\n - [Model.Tampering](docs/Tampering.md)\n - [Model.Tor](docs/Tor.md)\n - [Model.VPN](docs/VPN.md)\n - [Model.VPNConfidence](docs/VPNConfidence.md)\n - [Model.VPNMethods](docs/VPNMethods.md)\n - [Model.Velocity](docs/Velocity.md)\n - [Model.VelocityData](docs/VelocityData.md)\n - [Model.VelocityIntervals](docs/VelocityIntervals.md)\n - [Model.VirtualMachine](docs/VirtualMachine.md)\n - [Model.Visit](docs/Visit.md)\n - [Model.VisitorsGetResponse](docs/VisitorsGetResponse.md)\n - [Model.Webhook](docs/Webhook.md)\n - [Model.WebhookClonedApp](docs/WebhookClonedApp.md)\n - [Model.WebhookDeveloperTools](docs/WebhookDeveloperTools.md)\n - [Model.WebhookEmulator](docs/WebhookEmulator.md)\n - [Model.WebhookFactoryReset](docs/WebhookFactoryReset.md)\n - [Model.WebhookFrida](docs/WebhookFrida.md)\n - [Model.WebhookHighActivity](docs/WebhookHighActivity.md)\n - [Model.WebhookIPBlocklist](docs/WebhookIPBlocklist.md)\n - [Model.WebhookIPInfo](docs/WebhookIPInfo.md)\n - [Model.WebhookJailbroken](docs/WebhookJailbroken.md)\n - [Model.WebhookLocationSpoofing](docs/WebhookLocationSpoofing.md)\n - [Model.WebhookMitMAttack](docs/WebhookMitMAttack.md)\n - [Model.WebhookPrivacySettings](docs/WebhookPrivacySettings.md)\n - [Model.WebhookProxy](docs/WebhookProxy.md)\n - [Model.WebhookRawDeviceAttributes](docs/WebhookRawDeviceAttributes.md)\n - [Model.WebhookRemoteControl](docs/WebhookRemoteControl.md)\n - [Model.WebhookRootApps](docs/WebhookRootApps.md)\n - [Model.WebhookSuspectScore](docs/WebhookSuspectScore.md)\n - [Model.WebhookTampering](docs/WebhookTampering.md)\n - [Model.WebhookTor](docs/WebhookTor.md)\n - [Model.WebhookVPN](docs/WebhookVPN.md)\n - [Model.WebhookVelocity](docs/WebhookVelocity.md)\n - [Model.WebhookVirtualMachine](docs/WebhookVirtualMachine.md)\n\n\u003ca name=\"documentation-for-authorization\"\u003e\u003c/a\u003e\n## Documentation for Authorization\n\n\u003ca name=\"ApiKeyHeader\"\u003e\u003c/a\u003e\n### ApiKeyHeader\n\n- **Type**: API key\n- **API key parameter name**: Auth-API-Key\n- **Location**: HTTP header\n        \n\u003ca name=\"ApiKeyQuery\"\u003e\u003c/a\u003e\n### ApiKeyQuery\n\n- **Type**: API key\n- **API key parameter name**: api_key\n- **Location**: URL query string\n        \n\n## Documentation for sealed results\n\n- [Sealed](docs/Sealed.md)\n- [DecryptionKey](docs/DecryptionKey.md)\n\n## Documentation for webhooks\n\n- [WebhookValidation](docs/WebhookValidation.md)\n\n## Support and feedback\n\nTo report problems, ask questions or provide feedback, please use [Issues](https://github.com/fingerprintjs/fingerprintjs-pro-server-api-node-sdk/issues). If you need private support, you can email us at [oss-support@fingerprint.com](mailto:oss-support@fingerprint.com).\n\n\u003ca name=\"license\"\u003e\u003c/a\u003e\n## License\nThis project is licensed under the [MIT license](https://github.com/fingerprintjs/fingerprint-pro-server-api-dotnet-sdk/blob/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffingerprintjs%2Ffingerprint-pro-server-api-dotnet-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffingerprintjs%2Ffingerprint-pro-server-api-dotnet-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffingerprintjs%2Ffingerprint-pro-server-api-dotnet-sdk/lists"}