Convert

Find the extensions of a content type

POST/v1/convert/string/content_type/to/extension

View as Markdown

Returns every known extension of a content type, most common first, and the primary one. Parameters such as charset are ignored and case does not matter. An unknown content type is not an error: known is false. Text that is not shaped like type/subtype is refused.

Request body

Name Type Required Description
content_type string yes A content type, parameters allowed: text/csv; charset=utf-8

Example request

A request body that works, as JSON.

{
  "content_type": "application/pdf"
}

Code samples

Replace YOUR_TOKEN with your access token.

curl

curl -X POST 'https://api.skillfulsardine.com/v1/convert/string/content_type/to/extension' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "content_type": "application/pdf"
}'

PowerShell

$body = @'
{
  "content_type": "application/pdf"
}
'@
$response = Invoke-RestMethod -Method Post -Uri 'https://api.skillfulsardine.com/v1/convert/string/content_type/to/extension' `
  -Headers @{ Authorization = 'Bearer YOUR_TOKEN' } `
  -ContentType 'application/json; charset=utf-8' `
  -Body ([System.Text.Encoding]::UTF8.GetBytes($body))
$response | ConvertTo-Json -Depth 10

Python

import requests

payload = {
    "content_type": "application/pdf",
}

response = requests.post(
    "https://api.skillfulsardine.com/v1/convert/string/content_type/to/extension",
    headers={"Authorization": "Bearer YOUR_TOKEN"},
    json=payload,
    timeout=30,
)
print(response.json())

JavaScript

const response = await fetch("https://api.skillfulsardine.com/v1/convert/string/content_type/to/extension", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "content_type": "application/pdf"
}),
});
const result = await response.json();
console.log(result);

Node

// Node 18 or later. Save as call.mjs and run: API_TOKEN=... node call.mjs
const token = process.env.API_TOKEN;

const response = await fetch("https://api.skillfulsardine.com/v1/convert/string/content_type/to/extension", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${token}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "content_type": "application/pdf"
}),
});
const result = await response.json();
console.log(result);

Rust

// Cargo.toml: reqwest = { version = "0.12", features = ["blocking", "json"] }, serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let body: serde_json::Value = serde_json::from_str(r#"{
  "content_type": "application/pdf"
}"#)?;
    let response = reqwest::blocking::Client::new()
        .post("https://api.skillfulsardine.com/v1/convert/string/content_type/to/extension")
        .bearer_auth("YOUR_TOKEN")
        .json(&body)
        .send()?;
    println!("{}", response.text()?);
    Ok(())
}

Swift

import Foundation

var request = URLRequest(url: URL(string: "https://api.skillfulsardine.com/v1/convert/string/content_type/to/extension")!)
request.httpMethod = "POST"
request.setValue("Bearer YOUR_TOKEN", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = Data(#"""
{
  "content_type": "application/pdf"
}
"""#.utf8)

let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))

Response

The fields inside data of a successful response.

Name Type Required Description
content_type string yes The content type without parameters, lower case
extensions array of string yes Every known extension, most common first. Empty when unknown
primary string yes The first extension, null when unknown
known boolean yes False when the content type is not in the reference data
data_source string yes Where the reference data comes from
data_compiled string yes When the reference data was compiled

Example response

A real answer from the operation, as JSON. The fields in the table above are inside data.

{
  "data": {
    "content_type": "application/pdf",
    "extensions": [
      "pdf"
    ],
    "primary": "pdf",
    "known": true,
    "data_source": "Curated subset of the IANA media types registry (https://www.iana.org/assignments/media-types/) plus the de-facto types used by Microsoft 365 and common web tools",
    "data_compiled": "2026-10-16"
  },
  "errors": null,
  "meta": {
    "request_id": "25129002-ddae-4bfe-9868-417b485df4b2",
    "timestamp": "2026-10-27T07:19:42.028006Z",
    "version": "2026-03-26"
  },
  "pagination": null
}

Responses

Status When it happens
200 Successful Response
400 The body respects the operation schema, but the use case rejected it. Each problem is one ApiError entry
413 The request is larger than the request size limit of the API allows
422 The body does not respect the operation schema. Each problem is one ApiError entry with the code validation_error
500 Something failed inside the server and was not an input problem. The same envelope, errors may be empty