Packages and access
Download version 0.1.0 packages and checksums from the AEGVEN developer portal. Choose your language for installation commands and examples. Organization access and your API environment are arranged during onboarding. These are direct downloads; installation from public package registries is not currently supported.
| Language | Runtime | Package identity |
|---|---|---|
| TypeScript / JavaScript | Node.js 22+ | @aegven/sdk |
| Python | Python 3.11+ | aegven |
| C# / .NET | .NET 8+ | Aegven.Sdk |
| Go | Go 1.22+ | aegven.com/sdk/go |
Verify the downloaded files against their SHA256SUMS before installation and pin the agreed version. The examples below install those files; they do not fetch a public package release. Review the setup guide before making your first request.
Configure your integration server
AEGVEN_API_URL: your assigned HTTPS API base URL, including/api/v1.AEGVEN_API_KEY: the machine credential provisioned through your organization’s individual console access.AEGVEN_IDEMPOTENCY_KEY: a durable key for this specific registration. Keep it with the exact input and reuse both on a retry.
All examples use the same fictional invoice and exact minor-unit amount. Replace the source identity with your real system’s stable record identity when adapting the example. A new business operation needs its own key; a retry keeps the original one. Keep API credentials on your server. Share hosted URLs only with their intended recipients and exclude them from logs and analytics.
TypeScript / JavaScript
Node.js 22+ · Version 0.1.0
npm install ./aegven-sdk-0.1.0.tgz// Run on your integration server with the supplied SDK.
import { Aegven } from '@aegven/sdk';
function required(name: string): string {
const value = process.env[name];
if (!value) throw new Error('Missing server configuration: ' + name);
return value;
}
const aegven = new Aegven({
baseURL: required('AEGVEN_API_URL'), // Includes /api/v1
apiKey: required('AEGVEN_API_KEY'),
});
const obligationInput = {
"obligation_type": "invoice",
"external_reference": {
"namespace": "your-system",
"id": "invoice-1042"
},
"debtor": {
"name": "Example Business",
"email": "accounts@example.com"
},
"amount_minor": "125000",
"currency": "USD",
"deadline": "2027-01-15",
"business_context": {
"invoice_number": "INV-1042",
"description": "Business services"
}
} as const;
// Store this key with the input before the first attempt; reuse both on retries.
const result = await aegven.obligations.register(
obligationInput,
required('AEGVEN_IDEMPOTENCY_KEY'),
);
// Older accepted replays can contain only the invoice projection.
const obligationId = result.obligation?.id ?? result.invoice.id;
const request = result.payment_request
?? await aegven.paymentRequests.getForObligation(obligationId);
const hostedUrl = request.hosted_url;
// Save the source mapping securely.
// Add hostedUrl to your existing customer communication.
// Treat the URL as confidential; never put it in logs or analytics.The supplied package includes ESM JavaScript and TypeScript declarations. JavaScript integrations use the same client; remove the TypeScript annotations and “as const” in this example.
Store the returned obligation ID and hosted URL securely, then insert the URL into your existing outgoing communication. Replaying registration does not renew expired or revoked access.
Python
Python 3.11+ · Version 0.1.0
python3 -m venv .venv
.venv/bin/python -m pip install ./aegven_sdk-0.1.0-py3-none-any.whlimport os
from aegven import Aegven, models
client = Aegven(os.environ['AEGVEN_API_URL'], os.environ['AEGVEN_API_KEY'])
request: models.RegisterObligation = {
'obligation_type': 'invoice',
'external_reference': {'namespace': 'your-system', 'id': 'invoice-1042'},
'debtor': {'name': 'Example Business', 'email': 'accounts@example.com'},
'amount_minor': '125000',
'currency': 'USD',
'deadline': '2027-01-15',
'business_context': {'invoice_number': 'INV-1042', 'description': 'Business services'},
}
# Persist the input and key before the first call. Reuse both on retries.
created = client.register_obligation(request, os.environ['AEGVEN_IDEMPOTENCY_KEY'])
obligation = created.get('obligation')
obligation_id = obligation['id'] if obligation else created['invoice']['id']
payment_request = created.get('payment_request') or client.get_payment_request(obligation_id)
hosted_url = payment_request['hosted_url']
# Save the source mapping and add hosted_url to your existing communication.
# Do not log the link or credential.The Python client is synchronous. Its configurable timeout defaults to 15 seconds per blocking socket operation. Use an execution deadline in your worker; this version has no async client or in-flight cancellation API.
Store the returned obligation ID and hosted URL securely, then insert the URL into your existing outgoing communication. Replaying registration does not renew expired or revoked access.
C# / .NET
.NET 8+ · Version 0.1.0
dotnet add package Aegven.Sdk --version 0.1.0 --source /path/to/supplied-artifactsusing System;
using Aegven;
static string Required(string name) =>
Environment.GetEnvironmentVariable(name)
?? throw new InvalidOperationException("Missing server configuration: " + name);
using var client = new AegvenClient(Required("AEGVEN_API_URL"), Required("AEGVEN_API_KEY"));
var request = new RegisterObligation
{
ObligationType = "invoice",
ExternalReference = new() { Namespace = "your-system", Id = "invoice-1042" },
Debtor = new() { Name = "Example Business", Email = "accounts@example.com" },
AmountMinor = "125000", Currency = "USD", Deadline = "2027-01-15",
BusinessContext = new() { InvoiceNumber = "INV-1042", Description = "Business services" },
};
// Persist the input and key before the first call. Reuse both on retries.
var created = await client.RegisterObligationAsync(request, Required("AEGVEN_IDEMPOTENCY_KEY"));
var obligationId = created.Obligation?.Id ?? created.Invoice.Id;
var paymentRequest = created.PaymentRequest ?? await client.GetPaymentRequestAsync(obligationId);
var hostedUrl = paymentRequest.HostedUrl;
// Save the source mapping and add hostedUrl to your existing communication.
// Do not log the link or credential.Reuse one client for your service’s lifetime and dispose it at shutdown. Operations accept a CancellationToken. The default HTTP timeout is 15 seconds per attempt; cancellation does not prove a mutation was rejected.
Store the returned obligation ID and hosted URL securely, then insert the URL into your existing outgoing communication. Replaying registration does not renew expired or revoked access.
Go
Go 1.22+ · Version 0.1.0
mkdir -p vendor-src
tar -xzf aegven-go-0.1.0.tar.gz -C vendor-src
go mod edit -require=aegven.com/sdk/go@v0.1.0
go mod edit -replace=aegven.com/sdk/go=./vendor-src/aegven-go-0.1.0
go mod tidypackage main
import (
aegven "aegven.com/sdk/go"
"context"
"os"
"time"
)
func main() {
client, err := aegven.New(aegven.Options{
BaseURL: os.Getenv("AEGVEN_API_URL"), APIKey: os.Getenv("AEGVEN_API_KEY"),
})
if err != nil {
panic(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
description := "Business services"
// Persist the input and key before the first call. Reuse both on retries.
created, err := client.RegisterObligation(ctx, aegven.RegisterObligation{
ObligationType: "invoice",
ExternalReference: aegven.ExternalReference{Namespace: "your-system", Id: "invoice-1042"},
Debtor: aegven.RegisterObligationDebtor{Name: "Example Business", Email: "accounts@example.com"},
AmountMinor: "125000", Currency: "USD", Deadline: "2027-01-15",
BusinessContext: aegven.BusinessContext{InvoiceNumber: "INV-1042", Description: &description},
}, os.Getenv("AEGVEN_IDEMPOTENCY_KEY"))
if err != nil {
panic(err)
}
obligationID := created.Invoice.Id
if created.Obligation != nil {
obligationID = created.Obligation.Id
}
paymentRequest, err := client.GetPaymentRequest(ctx, obligationID)
if err != nil {
panic(err)
}
_ = paymentRequest // Save HostedUrl securely on the original source record.
// Do not log the link or credential.
}The module currently uses the supplied source archive and a local replacement; public Go module discovery is not available. Share clients across goroutines and pass a context on every call. Deadline expiry does not prove a mutation was rejected.
Store the returned obligation ID and hosted URL securely, then insert the URL into your existing outgoing communication. Replaying registration does not renew expired or revoked access.
More than registration
Each SDK provides access to the same supported business workflows. Use the supplied API reference for complete signatures and response types.
- Register, retrieve, and list financial obligations.
- Retrieve active hosted requests and apply versioned actions.
- Upload and download authorized supporting documents.
- Look up accepted operations after an uncertain result.
- Configure and test webhooks, inspect deliveries, and retry failed deliveries.
- Inspect setup readiness and operational activity.
- Preview and accept CSV imports, and export accepted results.
SDKs do not perform financial decisions or infer settlement from a customer report. Amounts and accepted remaining balances come from the API as exact strings. See status meanings and retry recovery.
Human login, member roles, and API-key management use individual console access. A machine credential is not a human login.
Verify events in your language
Use the exact incoming body bytes and the Aegven-Signature header. Verification includes a timestamp check; parsing and re-serializing JSON changes the signed content.
// TypeScript / JavaScript
import { verifyWebhook } from '@aegven/sdk/webhooks';
const valid = await verifyWebhook(rawBody, signatureHeader, signingSecret);
# Python
from aegven import verify_webhook
valid = verify_webhook(raw_body, signature_header, signing_secret)
// C# / .NET
var valid = Webhooks.Verify(rawBody, signatureHeader, signingSecret);
// Go
valid := aegven.VerifyWebhook(rawBody, signatureHeader, signingSecret, time.Now(), 5*time.Minute)These are separate language excerpts, not one executable file. Reject invalid signatures, persist event IDs to prevent duplicate work, and acknowledge only after durable acceptance. Test events have no obligation; handle them separately. See endpoint setup and testing.