Synoppy v1.0 is here— start free
DocsSDKs
Tooling

SDKs

Official SDKs wrap the API with typed methods, retries, and sensible defaults, and cover every live endpoint. Clients are available for Node.js/TypeScript, Python, Ruby, and Go. Use the language client instead of raw HTTP when you can.

Methods

Every client exposes all nine endpoints. Method names are idiomatic per language (camelCase in TypeScript/Go, snake_case in Python; option keys follow the same convention):

  • read(url) → /api/scrape — any URL to clean markdown, HTML, or text
  • search(query) → /api/search — ranked live-web results, optionally read to markdown
  • crawl(url) → /api/crawl — clean markdown for every page on a site
  • map(url) → /api/map — every URL on a domain
  • extract(url) → /api/extract — structured JSON from a page (prompt or JSON Schema)
  • classify(url) → /api/classify — NAICS/SIC industry codes, or your own labels
  • enrich(input) → /api/brand — brand profile from a domain, URL, or work email
  • images(url) → /api/images — every image on a page with alt text
  • screenshot(url) → /api/screenshot — capture a URL as a PNG data URL

Install

# Node.js / TypeScript
npm install @synoppy/sdk

# Python
pip install synoppy

# Ruby
gem install synoppy

# Go
go get github.com/Synoppy/synoppy-go

TypeScript

import { Synoppy } from "@synoppy/sdk";

const client = new Synoppy({ apiKey: process.env.SYNOPPY_API_KEY });

const result = await client.read("https://example.com", {
  formats: ["markdown"],
  onlyMainContent: true,
});

console.log(result.markdown);

Python

import os
from synoppy import Synoppy

client = Synoppy(api_key=os.environ["SYNOPPY_API_KEY"])

result = client.read(
    "https://example.com",
    formats=["markdown"],
    only_main_content=True,
)

print(result["markdown"])

Ruby

require "synoppy"

client = Synoppy::Client.new(api_key: ENV["SYNOPPY_API_KEY"])

result = client.read("https://example.com", formats: ["markdown"])

puts result["markdown"]

Go

package main

import (
	"context"
	"fmt"

	"github.com/Synoppy/synoppy-go"
)

func main() {
	client := synoppy.New("YOUR_API_KEY")

	result, err := client.Read(context.Background(), "https://example.com", synoppy.ReadOptions{
		Formats: []string{"markdown"},
	})
	if err != nil {
		panic(err)
	}

	fmt.Println(result.Markdown)
}

Authentication works the same as the HTTP API; read Authentication for key handling.

Error handling

A non-2xx response raises a typed SynoppyErrorcarrying the API's code and status:

// TypeScript
import { Synoppy, SynoppyError } from "@synoppy/sdk";

const client = new Synoppy({ apiKey: process.env.SYNOPPY_API_KEY });

try {
  const page = await client.read("https://example.com");
  console.log(page.markdown, page.creditsUsed);
} catch (err) {
  if (err instanceof SynoppyError) console.error(err.code, err.status, err.message);
}
# Python
from synoppy import Synoppy, SynoppyError

client = Synoppy(api_key="syn_live_...")

try:
    page = client.read("https://example.com")
    print(page["markdown"], page["creditsUsed"])
except SynoppyError as err:
    print(err.code, err.status, err)

Every successful response carries creditsUsed and creditsRemaining — see Credits. Building an agent? Skip the glue code and use the framework integrations or the MCP server.