SDKs & language support

Choose a server-side integration approach. Six Imazeo SDKs are prepared for release; use the HTTP examples while package publication is pending.

On this page

SDK availability

LanguageRuntimeProposed package
TypeScript / JavaScriptNode.js 20+@imazeo/sdk
PythonPython 3.10+imazeo
PHPPHP 8.2+ with cURL and JSONimazeo/sdk
GoGo 1.22+github.com/imazeo/imazeo-go
.NET.NET 8+Imazeo
JavaJava 17+com.imazeo:imazeo

The HTTP quickstart works without an SDK. It includes cURL and a complete Node.js script using built-in fetch. Other server languages can use their HTTP client with the same request fields, multipart uploads and response handling.

Download an integration guide

What the clients cover

The prepared clients use a secret project X-API-Key for image upload/list/download/delete, transformations, QR codes, barcodes, PDF inspection/render/merge/extract and API-key context. They target API v1. SDK package versions and API versions are separate.

Account login, project/key administration, subscriptions and Admin APIs are outside this SDK scope. Optional saved artifacts and unified output listing currently use the HTTP persistence routes; no SDK methods for those routes are promised.

Language examples: QR and multi-page PDF

These examples use the local source SDKs. Set a server-side key and your supplied API origin. Download delivery-note.pdf into the working directory: it has two pages. The event URL is fictional. Successful QR generation writes SVG bytes; multi-page PDF rendering decodes each base64 page into PNG bytes.

TypeScript / JavaScript media example
import { readFile, writeFile } from 'node:fs/promises';
import { Imazeo } from '@imazeo/sdk';
const { IMAZEO_API_KEY: apiKey, IMAZEO_API_ORIGIN: baseUrl } = process.env;
if (!apiKey || !baseUrl) throw new Error('Set key and API origin');
const client = new Imazeo({ apiKey, baseUrl,
  fetch: (url, init) => fetch(url, { ...init, redirect: 'error' })
});
const qr = await client.qr.generate({
  content: 'https://example.com/events/studio-open-day', format: 'svg', size: 384
});
await writeFile('event-check-in.svg', qr.data);
const result = await client.pdf.render(await readFile('delivery-note.pdf'), {
  pages: '1,2', format: 'png'
});
if ('pages' in result) {
  for (const page of result.pages) {
    await writeFile('delivery-page-' + page.pageNumber + '.png', Buffer.from(page.data, 'base64'));
  }
} else {
  await writeFile('delivery-page.png', result.data);
}

PDF result: BinaryResult or { pages, requestId }.

The examples intentionally fail on an unhandled request error. Add your application’s sanitized error reporting and bounded recovery rather than treating a failed response as media.

Types, pagination and recovery

OperationResult
Image upload/getImage record; REST _id maps to the language’s documented ID field.
Image/transform listsPage wrapper: items and page/limit/total/pages; request ID. Fetch subsequent pages explicitly.
Transform / QR / barcode / single PDF pageBinary result: bytes, content type, request ID and headers; transform downloads can return notModified.
PDF infoParsed info data with page count and metadata.
Multi-page PDF renderPage collection: one-based pageNumber, width, height, contentType and base64 data; language-specific wrapper above.
API errorsTyped errors expose HTTP status, code, request ID and details. Network failures have no guaranteed HTTP response.

SDK methods unwrap the HTTP success envelope; do not access result.data._id on an SDK image record. Only binary result data is file bytes. Keep barcode content as a string and optional false/zero values as their native types.

Downloads with an unchanged ETag return a not-modified result with no replacement body. Keep the cached bytes. SDKs do not silently auto-paginate or automatically replay mutations. Buffered media and multi-page base64 responses require a bounded memory budget. Read production practices.

Integrate with HTTP today

  1. Use the quickstart to create a project and issue a key.
  2. Choose the operation reference and verify your assigned limits.
  3. Send JSON or multipart data as documented. Let your client set the multipart boundary.
  4. Check HTTP status before decoding a body: successful media responses can be binary; failures use a JSON envelope.
  5. Use request IDs and bounded retries for temporary failures. Do not blindly replay uploads or generation calls.

For integration questions, contact Imazeoor use account support. Include the operation, language and sanitized error; never send your key or private source files.

Documentation reviewed 2026-10-03 against development backend e298ec7. Verify your deployment’s API origin and limits before integrating.