---
seo_title: File Conversion SDKs for 10 Languages | EnConvert
meta_desc: Official EnConvert SDKs for Node.js, Python, Go, Java, PHP, Ruby, C#, Rust, Kotlin, and Swift. Typed clients for file conversion and V2 web intelligence.
keywords: file conversion sdk, api client library, enconvert sdk, python file conversion sdk, node js convert files api, go pdf api client, java document conversion library, php file converter sdk, ruby conversion gem, url to pdf sdk, web scraping sdk, document conversion client library
---

# File Conversion SDKs

Official client libraries for the EnConvert API, published for ten languages: Node.js, Python, Go, Java, PHP, Ruby, C#, Rust, Kotlin, and Swift. Every SDK covers the same two surfaces behind one API key. The conversion surface turns files and URLs into other formats, and the V2 web intelligence surface perceives, discovers, looks up, distills, ingests, and watches live web pages. Each client exposes those endpoints as typed methods, handles authentication, and returns pre-signed download URLs.

<div class="alert alert-info">
<strong>Same wire format everywhere.</strong> Each SDK calls the same public REST endpoints documented across this site, so you can mix SDK calls and raw HTTP calls against the same project and the same key.
</div>

---

## Available SDKs

| Language | Package | Install | Source |
|----------|---------|---------|--------|
| Node.js / TypeScript | `@enconvert/node-sdk` | `npm install @enconvert/node-sdk` | [enconvert/node-sdk](https://github.com/enconvert/node-sdk) |
| Python | `enconvert` | `pip install enconvert` | [conversionapi/python-sdk](https://github.com/conversionapi/python-sdk) |
| Go | `github.com/conversionapi/go-sdk` | `go get github.com/conversionapi/go-sdk` | [conversionapi/go-sdk](https://github.com/conversionapi/go-sdk) |
| Java | `com.enconvert:enconvert-sdk` | Maven Central dependency | [conversionapi/java-sdk](https://github.com/conversionapi/java-sdk) |
| PHP | `enconvert/enconvert-php` | `composer require enconvert/enconvert-php` | [conversionapi/php-sdk](https://github.com/conversionapi/php-sdk) |
| Ruby | `enconvert` | `gem install enconvert` | [conversionapi/ruby-sdk](https://github.com/conversionapi/ruby-sdk) |
| C# / .NET | `Enconvert` | `dotnet add package Enconvert` | [conversionapi/csharp-sdk](https://github.com/conversionapi/csharp-sdk) |
| Rust | `enconvert` | `cargo add enconvert` | [conversionapi/rust-sdk](https://github.com/conversionapi/rust-sdk) |
| Kotlin | `com.enconvert:enconvert-kotlin` | Maven Central dependency | [conversionapi/kotlin-sdk](https://github.com/conversionapi/kotlin-sdk) |
| Swift | `Enconvert` | Swift Package Manager | [conversionapi/swift-sdk](https://github.com/conversionapi/swift-sdk) |

All ten are MIT licensed.

---

## Pick your language

- **[Node.js / TypeScript](/docs/guides/integrations/sdks/nodejs.md)**: Node 18+, zero runtime dependencies, dual ESM and CJS builds, full type definitions.
- **[Python](/docs/guides/integrations/sdks/python.md)**: Python 3.9+, typed dataclasses, `py.typed` shipped for mypy.
- **[Go](/docs/guides/integrations/sdks/go.md)**: Go 1.21+, standard library only, no third-party dependencies.
- **[Java](/docs/guides/integrations/sdks/java.md)**: Java 17+, one dependency (Gson), HTTP through the JDK's own `HttpClient`.
- **[PHP](/docs/guides/integrations/sdks/php.md)**: PHP 8.1+, installed with Composer, PSR-4 autoloaded.
- **[Ruby](/docs/guides/integrations/sdks/ruby.md)**: Ruby 3.0+, packaged as the `enconvert` gem.
- **[C# / .NET](/docs/guides/integrations/sdks/csharp.md)**: .NET 8+, async methods throughout, nullable reference types enabled.
- **[Rust](/docs/guides/integrations/sdks/rust.md)**: a blocking client built on `reqwest`, so no async runtime is required.
- **[Kotlin](/docs/guides/integrations/sdks/kotlin.md)**: JDK 17+, idiomatic data classes and `kotlinx.serialization`.
- **[Swift](/docs/guides/integrations/sdks/swift.md)**: macOS 12+, iOS 15+, tvOS 15+, and watchOS 8+, with async await methods.

Not writing code? The [CLI](/docs/guides/integrations/cli.md) covers the same API from a terminal, the [MCP server](/docs/guides/integrations/mcp-setup.md) wires it into Claude, Cursor, and Windsurf, and the [n8n node](/docs/guides/integrations/n8n.md) drops it into a workflow.

---

## Why use an SDK?

Calling the REST API directly works, and the SDKs add four things on top:

- **Type-safe options.** Editor autocomplete for every parameter on every endpoint, so a typo in a field name fails at compile time or import time instead of coming back as a `422`.
- **Automatic timeout recovery.** Heavy URL-to-PDF renders and large documents sometimes outlast the reverse-proxy timeout even when the conversion succeeds on the server. The SDKs generate a client-side `job_id`, send it with the request, and quietly fall back to polling `GET /v1/convert/status/{job_id}` if the original call returns 5xx. You write no extra code.
- **Streaming downloads.** Point a method at a local path and the SDK streams the response straight to disk with backpressure, so memory use stays flat no matter how large the output is.
- **Consistent errors.** A small exception hierarchy lets you catch by class instead of parsing status codes by hand.

---

## The two surfaces

Every SDK splits its methods the same way.

| Surface | What it does | REST reference |
|---------|--------------|----------------|
| Conversion | Documents, images, data formats, URLs, and whole websites converted into other formats | [Endpoints overview](/docs/endpoints.md) |
| Web intelligence (V2) | Perceive, discover, lookup, distill, ingest, and watch live web pages | [V1 and V2](/docs/concepts/v1-and-v2.md) |

Every V2 render also carries a `render_quality` score from 0.0 to 1.0. A blocked page, a bot-challenge interstitial, or an empty single-page-app shell comes back flagged with a low score and warnings rather than passing silently as real content, so a bad read never quietly enters an agent's context.

---

## Get an API key

Each SDK needs a private API key (`sk_...`). Generate one from the [dashboard](/dashboard) and pass it to the constructor, reading it from an environment variable or your secret manager. Never hardcode a private key or ship one in client-side code. Browser code should use a public key (`pk_`) with a JWT instead, as described in [Public keys and JWT](/docs/authentication.md#public-keys-and-jwt).

---

## Frequently asked questions

### Which languages have an official file conversion SDK?

Ten: Node.js and TypeScript, Python, Go, Java, PHP, Ruby, C# and .NET, Rust, Kotlin, and Swift. All ten are official, MIT licensed, and track the same REST API, so a feature that lands in the API is reachable from any of them.

### Why use an SDK instead of calling the file conversion REST API directly?

The SDKs add type-safe options with editor autocomplete, automatic timeout recovery for long conversions, streaming downloads straight to disk, and a consistent error hierarchy so you can catch by exception class without parsing status codes.

### How does the SDK handle conversions that exceed the reverse-proxy timeout?

The SDK generates a client-side `job_id`, sends it with the request, and falls back to polling `GET /v1/convert/status/{job_id}` if the original request returns 5xx. It returns the result as soon as the job is recorded as successful, and raises if the job is recorded as failed.

### Can I mix SDK calls with raw HTTP requests?

Yes. Every SDK calls the same public REST endpoints documented on this site, so SDK calls and hand-rolled HTTP calls can share one project and one key.

### Do the SDKs cover the V2 web intelligence endpoints?

Yes. All ten expose a V2 namespace covering perceive, discover, lookup, distill, ingest, and watch, alongside the file conversion methods. See the [V1 and V2](/docs/concepts/v1-and-v2.md) for what each endpoint does.

### What API key does an SDK need?

A private API key (`sk_...`), generated from the dashboard and passed to the constructor. Read it from an environment variable rather than hardcoding it, and never bundle it into client-side code. Browser code should use a public key with a JWT instead.

### Is there an SDK for my language if it is not on the list?

Not yet, and you do not need one. The API is plain REST with JSON and multipart bodies, so any HTTP client works. Start from the [endpoints overview](/docs/endpoints.md) and the [authentication guide](/docs/authentication.md).
