Compense maintains one official SDK per language. All five are at version 1.1.0, cover the 115 operations in the v1 contract and share the same rules, verified with parity tests against the pinned contract (gateway develop 9cf78da): the same verb, route and idempotency per operation, and —in JS, PHP, .NET and Go— the exact same body the Python SDK sends.

What they all do #

CapabilityDetails
AuthenticationX-API-Key header on every call; production, sandbox and dev environments, or your own base URL.
IdempotencyIdempotency-Key on every keyed write: yours or a generated UUIDv4.
Retries429/502/503/504 with exponential backoff, jitter and Retry-After; writes only with retryWrites.
ErrorsTyped exceptions per code carrying the RFC 9457 Problem and its trace_id.
AmountsExact decimal text (MoneyCOP) from integers, decimals or text.
PaginationIterable Page and OffsetPage, with automatic traversal in JS, .NET and Go.
DeprecationsOne warning per operation when the gateway sends Deprecation/Sunset.
WebhooksStateless HMAC-SHA256 verification, with multiple secrets (rotation), time tolerance and test-event detection; a catalog of 52 events.
ParityTests that fail if a contract operation isn’t covered or differs in verb, route or idempotency.

What things are called in each one #

Names follow the contract’s operationIds, grouped by module, in each language’s convention. The API reference shows the exact method for each operation in all five.

OperationPythonJavaScript / TSPHP.NETGo
payBillclient.wallet.bills.pay(...)client.wallet.bills.pay({...})$client->wallet->bills->pay(...)client.Wallet.Bills.PayAsync(...)client.Wallet.Bills.Pay(ctx, &BillPayParams{...})
registerLoanPaymentclient.loans.register_payment(...)client.loans.registerPayment(id, {...})$client->loans->registerPayment(...)client.Loans.RegisterPaymentAsync(...)client.Loans.RegisterPayment(ctx, id, &LoanPaymentParams{...})
sendWebhookTestEventclient.webhooks.endpoints.send_test(...)client.webhooks.endpoints.sendTest(...)$client->webhooks->endpoints->sendTest(...)client.Webhooks.Endpoints.SendTestAsync(...)client.Webhooks.Endpoints.SendTest(ctx, ...)
Verify a webhookverify_webhook(body, headers, secret)verifyWebhook(body, headers, secret)Webhook::verify($body, $headers, $secret)CompenseWebhooks.Verify(body, headers, secret)webhook.Verify(body, header, secrets)
ConventionPythonJavaScript / TSPHP.NETGo
Namessnake_casecamelCasecamelCasePascalCase + AsyncPascalCase
Parametersnamed argumentsoptions objectnamed arguments (PHP 8)named/optional parameters*Params struct (or nil) + ...CallOption
AsyncCompenseClient and AsyncCompenseClienteverything is a Promisesynchronouseverything is a Task with CancellationTokensynchronous with context.Context
Free-form fieldsextra= / **fieldsextra / fieldsextra: / extra named argumentsIReadOnlyDictionary<string, object?>Extra / Fields map[string]any
compense CLIyesyes (npx compense)nonono

How to choose #

  • Use the SDK for your system’s language. They all have the same coverage; there are no exclusive features except the CLI (Python and JS) and Python’s explicit async client.
  • No SDK for your language? The contract is OpenAPI 3.1: call it over HTTP following the reference and apply the rules in Concepts (idempotency, retries and webhook verification are the ones people forget most).
  • Several languages in your entity (organization)? Mixing them is safe: they speak the same contract and verify webhook signatures identically (the tests use vectors generated by the Python SDK).

Source code #

The repositories are private Appiasoft repositories; Compense grants read access during onboarding. Each one includes its README (in English), a Spanish guide per module and runnable examples.

SDKRepositorySpanish guidesExamples
PythonAppiasoft/compense-saas-sdk-pythonDocs/features/README
JavaScript / TSAppiasoft/compense-saas-sdk-jsdocs/examples/
PHPAppiasoft/compense-saas-sdk-phpdocs/examples/
.NETAppiasoft/compense-saas-sdk-dotnetdocs/modulos/examples/
GoAppiasoft/compense-saas-sdk-godocs/examples/