diff --git a/docs/sdks/languages/csharp.mdx b/docs/sdks/languages/csharp.mdx
new file mode 100644
index 000000000..70c583a86
--- /dev/null
+++ b/docs/sdks/languages/csharp.mdx
@@ -0,0 +1,391 @@
+---
+title: "C#"
+icon: "C#"
+---
+
+If you're working with C#, the official [Infisical C# SDK](https://github.com/Infisical/sdk/tree/main/languages/csharp) package is the easiest way to fetch and work with secrets for your application.
+
+## Basic Usage
+
+```cs
+using Infisical.Sdk;
+
+namespace Example
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+
+ var settings = new ClientSettings
+ {
+ ClientId = "CLIENT_ID",
+ ClientSecret = "CLIENT_SECRET",
+ // SiteUrl = "http://localhost:8080", <-- This line can be omitted if you're using Infisical Cloud.
+ };
+ var infisical = new InfisicalClient(settings);
+
+ var options = new GetSecretOptions
+ {
+ SecretName = "TEST",
+ ProjectId = "PROJECT_ID",
+ Environment = "dev",
+ };
+ var secret = infisical.GetSecret(options);
+
+
+ Console.WriteLine($"The value of secret '{secret.SecretKey}', is: {secret.SecretValue}");
+ }
+ }
+}
+```
+
+This example demonstrates how to use the Infisical C# SDK in a C# application. The application retrieves a secret named `TEST` from the `dev` environment of the `PROJECT_ID` project.
+
+
+ We do not recommend hardcoding your [Machine Identity Tokens](/platform/identities/overview). Setting it as an environment variable would be best.
+
+
+# Installation
+
+Run `npm` to add `@infisical/sdk` to your project.
+
+```console
+$ dotnet add package Infisical.Sdk
+```
+# Configuration
+
+Import the SDK and create a client instance with your [Machine Identity](/platform/identities/universal-auth).
+
+```cs
+using Infisical.Sdk;
+
+namespace Example
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+
+ var settings = new ClientSettings
+ {
+ ClientId = "CLIENT_ID",
+ ClientSecret = "CLIENT_SECRET",
+ };
+
+ var infisical = new InfisicalClient(settings); // <-- Your SDK instance!
+ }
+ }
+}
+```
+
+### ClientSettings methods
+
+
+
+
+ Your machine identity client ID.
+
+
+ Your machine identity client secret.
+
+
+
+ An access token obtained from the machine identity login endpoint.
+
+
+
+ Time-to-live (in seconds) for refreshing cached secrets.
+ If manually set to 0, caching will be disabled, this is not recommended.
+
+
+
+ Your self-hosted absolute site URL including the protocol (e.g. `https://app.infisical.com`)
+
+
+
+
+
+### Caching
+
+To reduce the number of API requests, the SDK temporarily stores secrets it retrieves. By default, a secret remains cached for 5 minutes after it's first fetched. Each time it's fetched again, this 5-minute timer resets. You can adjust this caching duration by setting the "cacheTTL" option when creating the client.
+
+## Working with Secrets
+
+### client.ListSecrets(options)
+
+```cs
+var options = new ListSecretsOptions
+{
+ ProjectId = "PROJECT_ID",
+ Environment = "dev",
+ Path = "/foo/bar",
+ AttachToProcessEnv = false,
+};
+
+var secrets = infisical.ListSecrets(options);
+```
+
+Retrieve all secrets within the Infisical project and environment that client is connected to
+
+#### Parameters
+
+
+
+
+ The slug name (dev, prod, etc) of the environment from where secrets should be fetched from.
+
+
+
+ The project ID where the secret lives in.
+
+
+
+ The path from where secrets should be fetched from.
+
+
+
+ Whether or not to set the fetched secrets to the process environment. If true, you can access the secrets like so `System.getenv("SECRET_NAME")`.
+
+
+
+ Whether or not to include imported secrets from the current path. Read about [secret import](/documentation/platform/secret-reference)
+
+
+
+
+
+### client.GetSecret(options)
+
+```cs
+var options = new GetSecretOptions
+ {
+ SecretName = "AAAA",
+ ProjectId = "659c781eb2d4fe3e307b77bd",
+ Environment = "dev",
+ };
+var secret = infisical.GetSecret(options);
+```
+
+Retrieve a secret from Infisical.
+
+By default, `GetSecret()` fetches and returns a shared secret.
+
+#### Parameters
+
+
+
+
+ The key of the secret to retrieve.
+
+
+ The project ID where the secret lives in.
+
+
+ The slug name (dev, prod, etc) of the environment from where secrets should be fetched from.
+
+
+ The path from where secret should be fetched from.
+
+
+ The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared".
+
+
+
+
+### client.CreateSecret(options)
+
+```cs
+var options = new CreateSecretOptions {
+ Environment = "dev",
+ ProjectId = "PROJECT_ID",
+
+ SecretName = "NEW_SECRET",
+ SecretValue = "NEW_SECRET_VALUE",
+ SecretComment = "This is a new secret",
+};
+
+var newSecret = infisical.CreateSecret(options);
+```
+
+Create a new secret in Infisical.
+
+#### Parameters
+
+
+
+
+ The key of the secret to create.
+
+
+ The value of the secret.
+
+
+ The project ID where the secret lives in.
+
+
+ The slug name (dev, prod, etc) of the environment from where secrets should be fetched from.
+
+
+ The path from where secret should be created.
+
+
+ The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared".
+
+
+
+
+### client.UpdateSecret(options)
+
+```cs
+var options = new UpdateSecretOptions {
+ Environment = "dev",
+ ProjectId = "PROJECT_ID",
+
+ SecretName = "SECRET_TO_UPDATE",
+ SecretValue = "NEW VALUE"
+};
+
+var updatedSecret = infisical.UpdateSecret(options);
+```
+
+Update an existing secret in Infisical.
+
+#### Parameters
+
+
+
+
+ The key of the secret to update.
+
+
+ The new value of the secret.
+
+
+ The project ID where the secret lives in.
+
+
+ The slug name (dev, prod, etc) of the environment from where secrets should be fetched from.
+
+
+ The path from where secret should be updated.
+
+
+ The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared".
+
+
+
+
+### client.DeleteSecret(options)
+
+```cs
+var options = new DeleteSecretOptions
+{
+ Environment = "dev",
+ ProjectId = "PROJECT_ID",
+ SecretName = "NEW_SECRET",
+};
+
+var deletedSecret = infisical.DeleteSecret(options);
+```
+
+Delete a secret in Infisical.
+
+#### Parameters
+
+
+
+
+ The key of the secret to update.
+
+
+ The project ID where the secret lives in.
+
+
+ The slug name (dev, prod, etc) of the environment from where secrets should be fetched from.
+
+
+ The path from where secret should be deleted.
+
+
+ The type of the secret. Valid options are "shared" or "personal". If not specified, the default value is "shared".
+
+
+
+
+## Cryptography
+
+### Create a symmetric key
+
+Create a base64-encoded, 256-bit symmetric key to be used for encryption/decryption.
+
+```cs
+var key = infisical.CreateSymmetricKey();
+```
+
+#### Returns (string)
+`key` (string): A base64-encoded, 256-bit symmetric key, that can be used for encryption/decryption purposes.
+
+### Encrypt symmetric
+```cs
+var options = new EncryptSymmetricOptions
+{
+ Plaintext = "Infisical is awesome!",
+ Key = key,
+};
+
+var encryptedData = infisical.EncryptSymmetric(options);
+```
+
+#### Parameters
+
+
+
+
+ The plaintext you want to encrypt.
+
+
+ The symmetric key to use for encryption.
+
+
+
+
+#### Returns (object)
+`Tag` (string): A base64-encoded, 128-bit authentication tag.
+`Iv` (string): A base64-encoded, 96-bit initialization vector.
+`CipherText` (string): A base64-encoded, encrypted ciphertext.
+
+### Decrypt symmetric
+```cs
+var decryptOptions = new DecryptSymmetricOptions
+{
+ Key = key,
+ Ciphertext = encryptedData.Ciphertext,
+ Iv = encryptedData.Iv,
+ Tag = encryptedData.Tag,
+};
+
+var decryptedPlaintext = infisical.DecryptSymmetric(decryptOptions);
+```
+
+#### Parameters
+
+
+
+ The ciphertext you want to decrypt.
+
+
+ The symmetric key to use for encryption.
+
+
+ The initialization vector to use for decryption.
+
+
+ The authentication tag to use for decryption.
+
+
+
+
+#### Returns (string)
+`Plaintext` (string): The decrypted plaintext.
+