Feathery.Unofficial.Client
1.0.1
dotnet add package Feathery.Unofficial.Client --version 1.0.1
NuGet\Install-Package Feathery.Unofficial.Client -Version 1.0.1
<PackageReference Include="Feathery.Unofficial.Client" Version="1.0.1" />
<PackageVersion Include="Feathery.Unofficial.Client" Version="1.0.1" />
<PackageReference Include="Feathery.Unofficial.Client" />
paket add Feathery.Unofficial.Client --version 1.0.1
#r "nuget: Feathery.Unofficial.Client, 1.0.1"
#:package Feathery.Unofficial.Client@1.0.1
#addin nuget:?package=Feathery.Unofficial.Client&version=1.0.1
#tool nuget:?package=Feathery.Unofficial.Client&version=1.0.1
FeatherySharp (Unofficial)
An unofficial, lightweight .NET client for Feathery REST APIs.
Not affiliated with Feathery. API behavior may change without notice.
Features
- Friendly, typed client over
HttpClient - Covers Accounts, Forms (CRUD), Submissions, Hidden Fields, Users, Logs, Workspaces, Documents, and AI runs
- Minimal dependencies
Microsoft.Extensions.HttpMicrosoft.Extensions.Hosting.AbstractionsMicrosoft.Extensions.DependencyInjection.AbstractionsMicrosoft.Extensions.Options.ConfigurationExtensions
- DI extension for one-liner setup
- Optional polling helper for “export PDF” flows
Install
dotnet add package Feathery.Unofficial.Client
Quick start
using Feathery.Unofficial.Client;
using Feathery.Unofficial.Client.Models;
var builder = WebApplication.CreateBuilder(args);
// Reads configuration from "Feathery" section and/or FEATHERY_API_KEY env var
builder.AddFeathery();
var app = builder.Build();
// Example endpoint: list forms
app.MapGet("/forms", async (IFeatheryClient client) =>
{
var forms = await client.ListFormsAsync();
return Results.Ok(forms);
});
app.Run();
Configuration
Add to appsettings.json (or set FEATHERY_API_KEY):
{
"Feathery": {
"ApiKey": "YOUR_ADMIN_API_KEY",
"BaseUri": "https://api.feathery.io/",
"PdfPollAttempts": 5,
"PdfPollDelay": "00:00:01"
}
}
The DI extension validates ApiKey on startup.
Usage examples
// Resolve via DI
public sealed class MyService(IFeatheryClient feathery)
{
public async Task DemoAsync()
{
// Accounts
var account = await feathery.GetAccountAsync();
// Forms
var forms = await feathery.ListFormsAsync();
var schema = await feathery.GetFormSchemaAsync("my_form_name_or_id");
// Submissions
var upsert = await feathery.CreateOrUpdateSubmissionAsync(new CreateOrUpdateSubmissionRequest {
UserId = "user@example.com",
Forms = ["My Form"],
Fields = new() { ["age"] = 42 },
Complete = true
});
// Export PDF (waits until ready via HEAD polling)
var pdf = await feathery.ExportSubmissionPdfAsync("<FORM_ID>", "user@example.com");
}
}
Supported endpoints (high level)
- Accounts: get, edit, invite/uninvite, rotate key
- Forms: list, get schema, create, update, delete (with confirm), copy
- Submissions: create/update, batch list, export PDF
- Hidden Fields: create
- Users: list, get fields, get session, create/update, delete
- Logs: API connector errors, recent emails, email issues, Quik requests
- Workspaces: list, create, get, update, delete, auth token, create template form
- Documents: fill/sign, list envelopes, delete envelope
- AI: run extraction (multipart), list runs
For endpoint semantics, see Feathery’s official docs: https://api-docs.feathery.io/
Exceptions & diagnostics
API errors throw FeatheryApiException with:
StatusCodeResponseBody(string; useful for debugging)Request(theHttpRequestMessagethat failed)
Add standard ASP.NET Core logging for request/response tracing if needed.
Compatibility
- Targets:
net8.0,net9.0 - Dependencies:
Microsoft.Extensions.Http,Microsoft.Extensions.DependencyInjection.Abstractions,Microsoft.Extensions.Hosting.Abstractions,Microsoft.Extensions.Http,Microsoft.Extensions.Options.ConfigurationExtensions,Microsoft.SourceLink.GitHub
Contributing
PRs welcome! Please:
- Create an issue describing the change.
- Run unit tests locally (
dotnet test). - For integration tests, set
FEATHERY_API_KEY(these are skipped by default).
Release & versioning
- SemVer (0.x while we stabilize)
- Create a Git tag
vX.Y.Zonmasterto publish to NuGet via GitHub Actions.
Security
Do not include real API keys in issues or PRs. Report sensitive bugs privately if needed.
License
MIT © 2025 David Heale
Disclaimer: This is an unofficial SDK and not endorsed by Feathery.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Hosting.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Http (>= 9.0.8)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.8)
-
net9.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Hosting.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Http (>= 9.0.8)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.8)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.