superglue allows you to connect to any API/data source and get the data you want in the format you need. It’s an open source proxy server which sits between you and your target APIs. Thus, you can easily deploy it into your own infra.
Here’s how it works: You define your desired data schema and provide basic instructions about an API endpoint (like “get all issues from jira”). Superglue then does the following:
- Automatically generates the API configuration by analyzing API docs.
- Handles pagination, authentication, and error retries.
- Transforms response data into the exact schema you want using JSONata expressions.
- Validates that all data coming through follows that schema, and fixes transformations when they break.
If you’re spending a lot of time writing code connecting to weird APIs, fumbling with custom fields in foreign language ERPs, mapping JSONs, extracting data from compressed CSVs sitting on FTP servers, and making sure your integrations don’t break when something unexpected comes through, superglue might be for you.
subgraph Input[data sources]
A1[APIs]
A2[files]
A3[legacy systems]
end
subgraph Process[data transformation]
T1[superglue engine]
end
subgraph Output[destination]
D1[your system]
end
Input –> Process
Process –> Output
%% Styling
classDef sourceStyle fill:#f9f,stroke:#333,stroke-width:2px
classDef processStyle fill:#bbf,stroke:#333,stroke-width:2px
classDef outputStyle fill:#bfb,stroke:#333,stroke-width:2px
class Input sourceStyle
class Process processStyle
class Output outputStyle
” dir=”auto”>
flowchart LR
subgraph Input[data sources]
A1[APIs]
A2[files]
A3[legacy systems]
end
subgraph Process[data transformation]
T1[superglue engine]
end
subgraph Output[destination]
D1[your system]
end
Input --> Process
Process --> Output
%% Styling
classDef sourceStyle fill:#f9f,stroke:#333,stroke-width:2px
classDef processStyle fill:#bbf,stroke:#333,stroke-width:2px
classDef outputStyle fill:#bfb,stroke:#333,stroke-width:2px
class Input sourceStyle
class Process processStyle
class Output outputStyle
Loading
-
Sign up for early access to the hosted version of superglue at superglue.cloud
-
Install the superglue js/ts client:
npm install @superglue/client
- Configure your first api call:
import { SuperglueClient } from "@superglue/client"; const superglue = new SuperglueClient({ apiKey: "************" }); const config = { urlHost: "https://futuramaapi.com", urlPath: "/graphql", instruction: "get all characters from the show", responseSchema: { type: "object", properties: { characters: { type: "array", items: { type: "object", properties: { name: { type: "string" }, species: { type: "string", description: "lowercased" } } } } } } }; const result = await superglue.call({endpoint: config}); console.log(JSON.stringify(result.data, null, 2)); /* output: { "characters": [ { "name": "Phillip J. Fry", "species": "human" }, ... ] } */
Run your own instance of superglue using Docker:
- Pull the Docker image:
docker pull superglueai/superglue
-
Create a
.env
by copying the.env.example
file at the root -
Start the server:
docker run -d --name superglue --env-file .env -p 3000:3000 -p 3001:3001 superglueai/superglue
- Verify the installation:
- run your first call:
npm install @superglue/client
import { SuperglueClient } from "@superglue/client"; const superglue = new SuperglueClient({ endpoint: "http://localhost:3000", apiKey: "your-auth-token" }); // either via config object const config = { urlHost: "https://futuramaapi.com", urlPath: "/graphql", instruction: "get all characters from the show", }; const result = await superglue.call({endpoint: config}); // or via the api id if you have already created the endpoint const result2 = await superglue.call({id: "futurama-api"}); console.log(JSON.stringify(result.data, null, 2));
- LLM-Powered Data Mapping: Automatically generate data transformations using large language models
- API Proxy: Intercept and transform API responses in real-time with minimal added latency
- File Processing: Handle various file formats (CSV, JSON, XML) with automatic decompression
- Schema Validation: Ensure data compliance with your specified schemas
- Flexible Authentication: Support for various auth methods including header auth, api keys, oauth, and more
- Smart Pagination: Handle different pagination styles automatically
- Caching & Retry Logic: Built-in caching and
10 Comments
hoerzu
Love it, is there also a possibility for alarms if schema changes?
a-dub
this is VERY cool!
m0rde
Great idea, congrats. Can you speak a bit about the the validation piece? Were LLM hallucinations an issue and required this? Are you using some kind of structured output feature?
DaiPlusPlus
> Automatically generates the API configuration by analyzing API docs.
The problem with a lot (most?) integration work is that often there simply aren't any API docs – or the docs are outdated/obsolete (because they were written by-hand in an MS Word doc and never kept up-to-date) – or sometimes there isn't an API in the first place (c.f. screen-scraping, but also exfiltration via other means). Are these scenarios you expect or hope to accommodate?
npollock
something like this that runs as a browser agent, allowing me to extract structured data from websites (whitelisted) using natural language queries
promocha
Really nice idea and product. Does it update and cache changed schema for the target API? For ex. an app makes frequent get calls to retrieve list of houses but API changed with new schema, would Superglue figure it out at runtime or is it updating schema regularly for target API based on their API docs (assuming they have it)?
asdev
why would use this when I can just add API docs to my LLM context and have it generate the integration code?
dboreham
Doesn't someone own a trademark in that general area?
tayloramurphy
Does this have any connection to the previous "Supaglue" startup [0]? Similar problem space, slightly different/pre-llm solution.
[0] https://docs.supaglue.com/
AvImd
Access to XMLHttpRequest at 'https://graphql.superglue.cloud/' from origin 'https://app.superglue.cloud' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.