Awesome-omni-skill apideck-dotnet
Apideck Unified API integration patterns for C# and .NET. Use when building integrations with accounting software (QuickBooks, Xero, NetSuite), CRMs (Salesforce, HubSpot, Pipedrive), HRIS platforms (Workday, BambooHR), file storage (Google Drive, Dropbox, Box), ATS systems (Greenhouse, Lever), e-commerce, or any of Apideck's 200+ connectors using .NET. Covers the ApideckUnifySdk NuGet package, authentication, CRUD operations, pagination, error handling, and Vault connection management.
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/backend/apideck-dotnet" ~/.claude/skills/diegosouzapw-awesome-omni-skill-apideck-dotnet && rm -rf "$T"
manifest:
skills/backend/apideck-dotnet/SKILL.mdsafety · automated scan (low risk)
This is a pattern-based risk scan, not a security review. Our crawler flagged:
- references API keys
Always read a skill's source content before installing. Patterns alone don't mean the skill is malicious — but they warrant attention.
source content
Apideck .NET SDK Skill
Overview
The Apideck Unified API provides a single integration layer to connect with 200+ third-party services across accounting, CRM, HRIS, file storage, ATS, e-commerce, and more. The official .NET SDK (
ApideckUnifySdk) provides typed clients for all unified APIs.
Installation
dotnet add package ApideckUnifySdk
IMPORTANT RULES
- ALWAYS use the
NuGet package. DO NOT make rawApideckUnifySdk
calls to the Apideck API.HttpClient - ALWAYS pass
,apiKey
, andappId
when initializing the client.consumerId - USE
to specify which downstream connector to use (e.g.,ServiceId
,"salesforce"
)."quickbooks" - USE async/await for all API calls — all operations return
.Task<T> - ALWAYS handle errors with try/catch using
as the base class.BaseException - DO NOT store API keys in source code. Use environment variables or a secrets manager.
Quick Start
using ApideckUnifySdk; using ApideckUnifySdk.Models.Requests; var sdk = new Apideck( consumerId: "your-consumer-id", appId: "your-app-id", apiKey: Environment.GetEnvironmentVariable("APIDECK_API_KEY") ?? "" ); var res = await sdk.Crm.Contacts.ListAsync(new CrmContactsAllRequest { ServiceId = "salesforce", Limit = 20, }); while (res != null) { foreach (var contact in res.GetContactsResponse?.Data ?? []) { Console.WriteLine($"{contact.Name} - {contact.Emails?.FirstOrDefault()?.Email}"); } res = await res.Next!(); }
SDK Patterns
Client Setup
using ApideckUnifySdk; var sdk = new Apideck( consumerId: "your-consumer-id", appId: "your-app-id", apiKey: Environment.GetEnvironmentVariable("APIDECK_API_KEY") ?? "" );
CRUD Operations
All resources follow the pattern:
sdk.{Api}.{Resource}.{Operation}Async(request).
using ApideckUnifySdk; using ApideckUnifySdk.Models.Requests; using ApideckUnifySdk.Models.Components; // LIST var listRes = await sdk.Crm.Contacts.ListAsync(new CrmContactsAllRequest { ServiceId = "salesforce", Limit = 20, Filter = new ContactsFilter { Email = "john@example.com" }, Sort = new ContactsSort { By = ContactsSortBy.UpdatedAt, Direction = SortDirection.Desc, }, }); // CREATE var createRes = await sdk.Crm.Contacts.CreateAsync(new CrmContactsAddRequest { ServiceId = "salesforce", Contact = new ContactInput { FirstName = "John", LastName = "Doe", Emails = new List<Email> { new Email { EmailAddress = "john@example.com", Type = EmailType.Primary }, }, PhoneNumbers = new List<PhoneNumber> { new PhoneNumber { Number = "+1234567890", Type = PhoneNumberType.Mobile }, }, }, }); Console.WriteLine(createRes.CreateContactResponse?.Data?.Id); // GET var getRes = await sdk.Crm.Contacts.GetAsync(new CrmContactsOneRequest { Id = "contact_123", ServiceId = "salesforce", }); // UPDATE var updateRes = await sdk.Crm.Contacts.UpdateAsync(new CrmContactsUpdateRequest { Id = "contact_123", ServiceId = "salesforce", Contact = new ContactInput { FirstName = "Jane" }, }); // DELETE await sdk.Crm.Contacts.DeleteAsync(new CrmContactsDeleteRequest { Id = "contact_123", ServiceId = "salesforce", });
Pagination
Use the
Next method on the response. Returns null when no more pages:
var res = await sdk.Accounting.Invoices.ListAsync(new AccountingInvoicesAllRequest { ServiceId = "quickbooks", Limit = 50, }); while (res != null) { foreach (var invoice in res.GetInvoicesResponse?.Data ?? []) { Console.WriteLine($"{invoice.Number}: {invoice.Total}"); } res = await res.Next!(); }
Error Handling
using ApideckUnifySdk.Models.Errors; try { var res = await sdk.Crm.Contacts.GetAsync(new CrmContactsOneRequest { Id = "invalid" }); } catch (BadRequestResponse e) { Console.Error.WriteLine($"Bad request: {e.Message}"); } catch (UnauthorizedResponse e) { Console.Error.WriteLine("Invalid API key or missing credentials"); } catch (NotFoundResponse e) { Console.Error.WriteLine("Record not found"); } catch (PaymentRequiredResponse e) { Console.Error.WriteLine("API limit reached"); } catch (UnprocessableResponse e) { Console.Error.WriteLine($"Validation error: {e.Message}"); } catch (BaseException e) { Console.Error.WriteLine($"API error: {e.Message}"); Console.Error.WriteLine($"Status: {e.Response.StatusCode}"); }
Retry Configuration
var sdk = new Apideck( retryConfig: new RetryConfig( strategy: RetryConfig.RetryStrategy.BACKOFF, backoff: new BackoffStrategy( initialIntervalMs: 1L, maxIntervalMs: 50L, maxElapsedTimeMs: 100L, exponent: 1.1 ), retryConnectionErrors: false ), consumerId: "your-consumer-id", appId: "your-app-id", apiKey: Environment.GetEnvironmentVariable("APIDECK_API_KEY") ?? "" );
API Namespaces
| Namespace | Resources |
|---|---|
| Invoices, Bills, Payments, Customers, Suppliers, LedgerAccounts, JournalEntries, TaxRates, CreditNotes, PurchaseOrders, BalanceSheet, ProfitAndLoss, and more |
| Contacts, Companies, Leads, Opportunities, Activities, Notes, Pipelines, Users |
| Employees, Companies, Departments, Payrolls, TimeOffRequests |
| Files, Folders, Drives, DriveGroups, SharedLinks, UploadSessions |
| Applicants, Applications, Jobs |
| Connections, Consumers, Sessions, CustomMappings, Logs |
| Webhooks, EventLogs |