Browse Docs
Archives (14)
Audio (38)
Documents (26)
Ebooks (7)
Fonts (13)
Images (62)
Video (10)
On This Page

Models Reference

This page lists the main public response models used by the API.

ErrorResponse

All error responses share this envelope. Some errors include additional context fields.

FieldTypeRequiredDescription
errorstringyesMachine-readable error code (e.g. "request.empty_file")
detailstring|nullyesHuman-readable explanation

Additional fields may appear depending on the error code (e.g. sourceFormat, supportedTargets on convert.unsupported_format_pair). See Errors for full examples.

Example:

{
  "error": "convert.unsupported_format_pair",
  "detail": "Conversion from 'jpg' to 'mp3' is not supported.",
  "sourceFormat": "jpg",
  "targetFormat": "mp3",
  "supportedTargets": ["avif", "ico", "pdf", "png", "webp"]
}

JobAcceptedResponse (POST /convert)

FieldTypeRequiredDescription
idstringyesUnique job identifier (GUIDv7)
statusstringyesInitial status ("Queued")
creditCostnumberyesCredits charged for this conversion

Example — HEIC-to-JPG conversion accepted:

{
  "id": "0195e2a0-1234-7000-8000-000000000001",
  "status": "Queued",
  "creditCost": 1
}

JobStatusResponse (GET /convert/job/{id})

FieldTypeRequiredConditionDescription
idstringyesJob identifier
statusstringyes"Queued", "Running", "Succeeded", "Failed", or "Canceled"
progress.percentnumberyesCompletion percentage (0–100)
progress.phasestring|nullnoCurrent processing phase
metrics.inputBytesnumberyesInput file size in bytes
metrics.outputBytesnumberyesOutput file size in bytes
metrics.creditCostnumberyesCredits charged for this job. This is the actual cost (not an estimate), determined at submission time. Same value as creditCost in the 202 response
error.codestringnoFailed jobs onlyMachine-readable failure code
error.detailstringnoFailed jobs onlyHuman-readable failure detail
outputJobOutputSummary|nullnoSucceeded, non-expired onlyOutput file summary

For jobs that are still Queued or Running, progress.percent is 0 and metrics.inputBytes / metrics.outputBytes are 0. The metrics.creditCost is always populated (cost is determined at submission time). The error object is only populated for Failed jobs. The output object is only populated for Succeeded jobs whose artifacts haven't expired.

Example — Succeeded HEIC-to-JPG job (single output):

{
  "id": "0195e2a0-1234-7000-8000-000000000001",
  "status": "Succeeded",
  "progress": {
    "percent": 100,
    "phase": null
  },
  "metrics": {
    "inputBytes": 2458624,
    "outputBytes": 1024000,
    "creditCost": 1
  },
  "error": null,
  "output": {
    "fileName": "vacation-photo.jpg",
    "contentType": "image/jpeg",
    "fileCount": 1
  }
}

Example — Running job (processing in progress):

{
  "id": "0195e2a0-1234-7000-8000-000000000001",
  "status": "Running",
  "progress": {
    "percent": 0,
    "phase": null
  },
  "metrics": {
    "inputBytes": 0,
    "outputBytes": 0,
    "creditCost": 1
  },
  "error": null,
  "output": null
}

Example — Succeeded PDF-to-JPG job (multi-output, downloaded as ZIP):

{
  "id": "0195e2a0-1234-7000-8000-000000000002",
  "status": "Succeeded",
  "progress": {
    "percent": 100,
    "phase": null
  },
  "metrics": {
    "inputBytes": 5242880,
    "outputBytes": 12582912,
    "creditCost": 5
  },
  "error": null,
  "output": {
    "fileName": "convert.fast-pdf-to-jpg-annual-report-50-outputs.zip",
    "contentType": "application/zip",
    "fileCount": 50
  }
}

JobOutputSummary

Describes the output file(s) of a succeeded job. For single-output jobs, shows the actual file's name and content type. For multi-output jobs (e.g. PDF-to-JPG pages), shows the computed ZIP filename and application/zip.

FieldTypeRequiredDescription
fileNamestringyesOutput filename — matches what the download endpoint returns in Content-Disposition
contentTypestringyesMIME type of the download (application/zip for multi-output jobs)
fileCountnumberyesNumber of output files (1 for single-output, >1 for multi-output)

Use fileName to set the -o argument in cURL or the OutFile parameter in PowerShell when downloading.

CostingInfo

Describes the credit cost strategy for a converter. Appears inside ConversionItem and ConversionEdge.

FieldTypeRequiredDescription
strategystringyes"Fixed", "PerMegabyte", "PerPage", or "PerMinute"
baseCostnumberyesBase credit cost per unit
incrementnumber|nullnoSize/page/minute increment for variable strategies (e.g. 5 means per 5 MB, 5 means per 5 pages)
incrementUnitstring|nullnoUnit label for the increment (e.g. "pages", "mb", "minutes", "slides", "frames")
displaySuffixstringyesHuman-readable label (e.g. "each", "per 5 MB", "per 5 pages", "per 5 minutes")
costVariantsobject|nullnoCost variant tiers for converters with multiple pricing modes (e.g. transcription). null for most converters

Calculating credits

All variable strategies use the same formula:

credits = ceil(quantity / increment) × baseCost
StrategyQuantityExampleResult
FixedbaseCost: 11 credit
PerPagepage count50 pages, increment: 5, baseCost: 1ceil(50/5) × 1 = 10 credits
PerMegabytefile size in MB25 MB, increment: 5, baseCost: 1ceil(25/5) × 1 = 5 credits
PerMinuteduration in minutes12 min, increment: 5, baseCost: 1ceil(12/5) × 1 = 3 credits

Fractional increments always round up — a 1-page PDF with increment: 5 still costs 1× baseCost. Use GET /convert/estimate/{from}/{to} for server-side calculation.

Examples:

Fixed
{
  "strategy": "Fixed",
  "baseCost": 1,
  "increment": null,
  "incrementUnit": null,
  "displaySuffix": "each",
  "costVariants": null
}
PerMegabyte
{
  "strategy": "PerMegabyte",
  "baseCost": 1,
  "increment": 5,
  "incrementUnit": "mb",
  "displaySuffix": "per 5 MB",
  "costVariants": null
}
PerPage
{
  "strategy": "PerPage",
  "baseCost": 1,
  "increment": 5,
  "incrementUnit": "pages",
  "displaySuffix": "per 5 pages",
  "costVariants": null
}
PerMinute
{
  "strategy": "PerMinute",
  "baseCost": 1,
  "increment": 5,
  "incrementUnit": "minutes",
  "displaySuffix": "per 5 minutes",
  "costVariants": null
}

GetConversionsResponse (GET /convert/conversions)

Top-level fields:

FieldTypeRequiredDescription
conversionsConversionItem[]yesList of all available conversions
sourceFormatToobjectyesMap of source format to target edges
maxFileSizeBytesnumberyesGlobal file size limit in bytes
maxConcurrentJobsnumberyesGlobal max concurrent jobs
maxBatchFilesnumberyesMaximum files per batch upload

ConversionItem

Appears in the top-level conversions array. Groups a converter's full capabilities including all accepted input/output formats.

FieldTypeRequiredDescription
jobstringyesJob type identifier (e.g. "image.heic-to-jpg")
categorystringyesCategory ("images", "documents", "audio")
costingCostingInfoyesCost strategy and credit amounts
endpointstring|nullnoConverter endpoint path
inputFormatsstring[]yesAccepted input format aliases
outputFormatsstring[]yesOutput format aliases
maxFileSizeBytesnumberyesPer-converter file size limit in bytes
maxConcurrentJobsnumberyesMax concurrent jobs for this converter
maxPagesnumber|nullnoMax page count (document converters with PerPage costing)
maxDurationMinutesnumber|nullnoMax duration in minutes (audio/video converters with PerMinute costing)
maxBatchSizeBytesnumberyesMaximum total batch input size in bytes

ConversionEdge

A single source→target pair for direct lookup. Appears inside sourceFormatTo values — use this when you already know the source format and want to find available targets.

FieldTypeRequiredDescription
sourceFormatstringyesSource format key
targetFormatstringyesTarget format key
jobstringyesJob type identifier
endpointstring|nullnoAPI endpoint path
categorystringyesCategory
costingCostingInfoyesCost strategy and credit amounts
maxFileSizeBytesnumberyesPer-converter file size limit in bytes
maxConcurrentJobsnumberyesMax concurrent jobs for this converter
maxPagesnumber|nullnoMax page count (document converters with PerPage costing)
maxDurationMinutesnumber|nullnoMax duration in minutes (audio/video converters with PerMinute costing)

Example — Truncated response showing one converter and one sourceFormatTo edge:

{
  "conversions": [
    {
      "job": "image.heic-to-jpg",
      "category": "images",
      "costing": {
        "strategy": "PerMegabyte",
        "baseCost": 1,
        "increment": 5,
        "incrementUnit": "mb",
        "displaySuffix": "per 5 MB",
        "costVariants": null
      },
      "endpoint": "/api/convert",
      "inputFormats": ["heic", "heif"],
      "outputFormats": ["jpg"],
      "maxFileSizeBytes": 1073741824,
      "maxConcurrentJobs": 6,
      "maxPages": null,
      "maxDurationMinutes": null,
      "maxBatchSizeBytes": 10737418240
    }
  ],
  "sourceFormatTo": {
    "heic": [
      {
        "sourceFormat": "heic",
        "targetFormat": "jpg",
        "job": "image.heic-to-jpg",
        "endpoint": "/api/convert",
        "category": "images",
        "costing": {
          "strategy": "PerMegabyte",
          "baseCost": 1,
          "increment": 5,
          "incrementUnit": "mb",
          "displaySuffix": "per 5 MB",
          "costVariants": null
        },
        "maxFileSizeBytes": 1073741824,
        "maxConcurrentJobs": 6,
        "maxPages": null,
        "maxDurationMinutes": null
      }
    ]
  },
  "maxFileSizeBytes": 2147483648,
  "maxConcurrentJobs": 6,
  "maxBatchFiles": 200
}

For a multi-converter example showing all four costing strategies, see List Conversions.

ConvertFastEntitlementsResponse (GET /convert/entitlements/me)

FieldTypeRequiredDescription
userIdstring|nullnoUser ID
organizationIdstring|nullnoOrganization GUID
planIdstringyesPlan identifier ("pro" for API users)
planNamestringyesDisplay name of the plan
accessDisplayNamestring|nullnoShort display label (e.g. "Pro")
totalCreditsnumberyesTotal available credits
tierstringyes"pro" for API users
dailyLimitnumber|nullnoDaily credit limit (null for pro)
dailyUsednumber|nullnoCredits used today (null for pro)
resetDatestring|nullnoDaily reset date (null for pro)

Example:

{
  "userId": "0195e2a0-1234-7000-8000-000000000099",
  "organizationId": "0195e2a0-1234-7000-8000-000000000050",
  "planId": "pro",
  "planName": "Pro",
  "accessDisplayName": "Pro",
  "totalCredits": 4850,
  "tier": "pro",
  "dailyLimit": null,
  "dailyUsed": null,
  "resetDate": null
}
Copied.