Skavio SDK 1.1.0 — Python and Node.js
Server-side clients for the production Skavio Processing API 1.9.0. Keep API keys in your company's backend, never in a public browser/mobile bundle. These clients do not grant administrator-only session permissions.
Installation from this repository
python3 -m pip install ./sdk/python
npm install ./sdk/javascript
Python 3.10+ / Node.js 22+. These packages are supplied here; they are not yet published to PyPI or npm. JavaScript includes TypeScript declarations and has no runtime dependencies.
Python: submit once, resume by job ID
import os
from skavio import SkavioClient
with SkavioClient(os.environ['SKAVIO_API_KEY']) as api:
source = api.upload(['invoice.pdf'])['uploads'][0]['id']
payload = {'operation': 'flow-extract', 'upload_ids': [source],
'fields': ['supplier', 'invoice_number', 'total', 'currency']}
payload['max_credits'] = api.estimate(payload)['estimated_credits']
job = api.submit_job(payload, idempotency_key='erp-invoice-2026-1001')
# Store job['id'] durably against this ERP invoice before polling.
result = api.wait('job', job['id'])
if result['status'] == 'completed':
file = result['result']['files'][0]
content = api.download(file['download_path'])
JavaScript
import {SkavioClient} from '@skavio-llc/sdk';
const api = new SkavioClient(process.env.SKAVIO_API_KEY);
const source = (await api.upload(['invoice.pdf'])).uploads[0].id;
const payload = {operation: 'flow-extract', upload_ids: [source], fields: ['supplier', 'total']};
payload.max_credits = (await api.estimate(payload)).estimated_credits;
const job = await api.submitJob(payload, 'erp-invoice-2026-1001');
// Persist job.id in your ERP before waiting.
const result = await api.wait('job', job.id);
if (result.status === 'completed') {
const content = await api.download(result.result.files[0].download_path);
}
Durable integration rules
Persist a business idempotency key and the original payload BEFORE submitting a job/batch/bulk/workflow. If submission times out, reuse the same key and unchanged payload to resolve whether it was accepted; do not generate a new key. Uploads are not automatically retried because they do not have this guarantee. Read requests retry connection failures and HTTP 429/502/503/504 up to twice; mutation requests are never automatically retried. Keep IDs in your database so a restarted process can continue polling.
wait() returns on completed/failed/cancelled/partial, and on paused/waiting_review/draft when human action is required. A polling timeout leaves the server workload running. Inspect status yourself; return from wait() is not necessarily success. Pause/cancel stops future workflow steps; already accepted work keeps its normal processing/billing.
Downloads follow a bounded chain of HTTPS redirects and strip the API key when leaving the API origin. They return bounded bytes in memory (500 MiB default); use direct signed object links with your own streaming transport for larger results. Node uploads read files into memory; large-source integrations should use the direct-upload/cloud-import API. Regular upload has the platform's current 500 MiB limit.
Workflows, batches and bulk manifests
Python: submit_batch, create_bulk, append_manifest, seal_bulk, get_bulk, resume_bulk, start_workflow, get_workflow, control_workflow.
JavaScript: submitBatch, createBulk, appendManifest, sealBulk, getBulk, resumeBulk, startWorkflow, getWorkflow, controlWorkflow.
See bulk guide and workflow guide for payloads, limits and administrator review rules. Individual operations require the appropriate company/key permissions; SDK convenience methods do not bypass them.
All 92 OpenAPI operations
call() covers every /v1/ operation from the current published OpenAPI specification. Use the exact operationId from OpenAPI, pass path parameters separately, and supply a persisted idempotency key where the contract requires it.
usage = api.call('usage_v1_usage_get', query={'month': '2026-10'})
const usage = await api.call('usage_v1_usage_get', {query: {month: '2026-10'}});
For CSV/ZIP responses use request(..., raw=True) in Python or {raw: true} in JavaScript; use download() for result endpoints that redirect. SkavioError exposes HTTP status, API error code, request ID and Retry-After. Error messages deliberately omit signed URLs and credentials.
Webhook receiver
Verify signatures on the exact received bytes BEFORE JSON parsing. Python exports verify_webhook; JavaScript exports verifyWebhook. Supply X-Skavio-Timestamp and X-Skavio-Signature; signatures are HMAC-SHA256 with a five-minute window. Store/deduplicate X-Skavio-Event-Id, acknowledge only after durable receipt, then process asynchronously. Verification does not perform business actions or deduplication itself.
Tests
python3 sdk/tests/test_python.py
node --test sdk/tests/test_javascript.mjs
Offline tests cover retries, ambiguous submissions, request IDs, resumable polling, webhook integrity/freshness and credential stripping on result redirects. Public production capabilities are checked separately without submitting paid processing work.
API 1.9.0 / SDK 1.1.0
The operation registry contains all 92 operations from OpenAPI 1.9.0. Use call(operationId, ...) for every endpoint, including tenant administration operations. Authorization remains enforced by the server.
Python: pause_bulk(id, idempotency_key=key), cancel_bulk(id, idempotency_key=key), notifications(), notification_settings(), update_notification_settings(settings, admin_session=session).
JavaScript: pauseBulk(id, key), cancelBulk(id, key), notifications(), notificationSettings(), updateNotificationSettings(settings, adminSession).
Pause stops new admission while accepted work finishes. Cancel stops new work permanently; accepted work settles once. A cancelled bulk cannot resume. Persist separate idempotency keys for each action. Notification settings updates require a company administrator web session (skavio_web_account), not an API bearer key. The SDK sends the explicit admin session only for that request and omits bearer authorization. Notifications are disabled by default; email activation requires a configured production transport.
Use these SDKs on trusted servers only. Never embed API keys or administrator session tokens in browser or mobile public bundles. GET retries honor numeric or HTTP-date Retry-After; mutations are never automatically retried.
Metadata
Release files for skavio-sdk 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| skavio_sdk-1.1.0.tar.gz | 13.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| skavio_sdk-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.8 kB
Release files / skavio_sdk-1.1.0.tar.gz
| Download URL | skavio_sdk-1.1.0.tar.gz |
|---|---|
| Size | 13.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
41fb8d95d833750f56655578935e16326cc68ac6e979a497d937ddc955d08db0
|
|
BLAKE2b-256 checksum How to use checksums |
eb62b9609c0775479c77f3de04f5a53476a3c02fbb662edc6e4b557a4b70c743
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / skavio_sdk-1.1.0-py3-none-any.whl
| Download URL | skavio_sdk-1.1.0-py3-none-any.whl |
|---|---|
| Size | 11.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a3f32bd08e17df9e737f04bd9dbae1539341fb87662bb1396053fa1e584cfc3e
|
|
BLAKE2b-256 checksum How to use checksums |
115471fe94fef71a99152159fc993561710f2664640a8127e9dc2ca10104b2bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency log