SDKs
TypeScript, Python and Rust clients for the API.
Official SDKs cover every endpoint, with typed request and response models, bearer authentication and retries.
| Language | Install |
|---|---|
| TypeScript | npm install ptyktos |
| Python | pip install ptyktos |
| Rust | cargo add ptyktos |
TypeScript
import { Ptyktos } from "ptyktos";
const client = new Ptyktos({
apiKey: process.env.WEBFOLD_API_KEY!,
baseUrl: "https://api.webfold.ai",
});
const markdown = await client.web.scrape({ url: "https://example.com" });
const papers = await client.arxiv.search({ q: "attention is all you need", n: 10 });
const paper = await client.arxiv.retrieve({ paperId: "1706.03762" });
const transcript = await client.youtube.transcript({ url: "https://youtu.be/dQw4w9WgXcQ" });
Python
import os
from ptyktos import Ptyktos
client = Ptyktos(api_key=os.environ["WEBFOLD_API_KEY"], base_url="https://api.webfold.ai")
markdown = client.web.scrape(url="https://example.com")
papers = client.arxiv.search(q="attention is all you need", n=10)
bookmark = client.bookmarks.create(url="https://example.com", tags=["demo"])
Rust
use ptyktos::Ptyktos;
let client = Ptyktos::builder(std::env::var("WEBFOLD_API_KEY")?)
.base_url("https://api.webfold.ai".parse()?)
.build()?;
let markdown = client.web().scrape("https://example.com").await?;
let papers = client.arxiv().search("attention is all you need", 10).await?;
Namespaces
Each client exposes web, arxiv, youtube, bookmarks, collections, usage, health, documents, ocr, pii, corpus, localization and computers. Methods map one-to-one onto the endpoints in this reference.
const { markdown } = await client.documents.convert({ contentBase64, filename: "report.docx" });
const { method } = await client.ocr.pdf({ contentBase64: pdf, languages: "eng" });
const scan = await client.pii.scan(markdown);
const rows = await client.corpus.build({ records: [{ id: "a", text: markdown }], chunkChars: 2000, redact: true });
const checks = await client.localization.check({ items: [{ source: "Hi {name}", translation: "Hola {name}" }] });
const computer = await client.computers.create({ width: 1280, height: 800 });
TypeScript has typed requests and responses for these. The Python and Rust clients return the JSON as dictionaries and serde_json::Value. Computer calls that need a gateway capability token take it as token (Python, Rust) or { token } (TypeScript).
Errors and retries
A failed request raises a typed error carrying the HTTP status code and the raw response body. 429 and 5xx responses are retried up to 3 times with exponential backoff. 4xx errors are not retried because they indicate a problem with the request.
import { PtyktosError } from "ptyktos";
try {
await client.arxiv.search({ q: "test" });
} catch (error) {
if (error instanceof PtyktosError) {
console.error(error.statusCode, error.message, error.responseBody);
}
}