REST API
Programmatic access to the AAS Studio extraction pipeline. Send a PDF datasheet, get back a structured Asset Administration Shell extraction result. Useful for integrating AAS file generation into ERP, PLM, or PIM workflows.
Open interactive API explorer — try it out →Authentication
Every request needs a Bearer API key in the Authorization header. Generate one in Studio → Settings → API Keys. Keys are prefixed sk_aas_ and are shown ONCE at creation — store them in a secret manager.
Authorization: Bearer sk_aas_a1b2c3d4...
Each call counts against your monthly extraction quota — same limits as the web app (Free 3 / Individual 50 / Team 300 / Enterprise unlimited).
Quickstart — extract from a PDF
Use the official SDK for production work — typed, zero-deps, error classes for every status code. Or stay with curl for quick tests.
import { AasStudioClient } from '@aas-studio/sdk'
import { readFileSync } from 'node:fs'
const aas = new AasStudioClient({ apiKey: process.env.AAS_STUDIO_KEY! })
const { result, provider } = await aas.extract({
file: readFileSync('./datasheet.pdf'),
idPrefix: 'urn:acme:aas',
})
console.log(result.assetIdShort, '·', result.submodels.length, 'submodels via', provider)from aas_studio import AasStudioClient
aas = AasStudioClient(api_key=os.environ["AAS_STUDIO_KEY"])
with open("./datasheet.pdf", "rb") as f:
response = aas.extract(f.read(), id_prefix="urn:acme:aas")
print(response["result"]["assetIdShort"])curl (raw HTTP)
curl -X POST https://aas-studio.eu/api/v1/extract \ -H "Authorization: Bearer $AAS_STUDIO_KEY" \ -F "file=@datasheet.pdf" \ -F "idPrefix=urn:acme:aas"
Response (truncated):
{
"result": {
"assetIdShort": "UR10e",
"assetId": "urn:acme:aas:UR10e",
"assetDescription": "Universal Robots UR10e collaborative robot",
"submodels": [
{
"idShort": "Nameplate",
"elements": [
{ "idShort": "ManufacturerName", "value": "Universal Robots A/S",
"semanticIdIrdi": "0173-1#02-AAO677#002",
"confidence": 95, "tier": "high", "needsReview": false }
]
}
]
},
"provider": "gemini",
"warnings": []
}Endpoints
/api/v1/extract200Extraction succeeded — returns ExtractionResult401Missing or invalid Bearer key402Monthly quota exceeded (returns plan / used / limit)413File exceeds 20 MB422PDF could not be parsed (scanned image, malformed)502LLM provider failed/api/v1/health200Service is up — returns { ok: true, version }Errors
All non-2xx responses use a stable JSON envelope with an error machine code and a human-readable message. Many errors include an (id=…) correlation tag — quote it when contacting support.
{
"error": "extraction_failed",
"message": "AI extraction failed (id=ab12-3c4d-...). Please retry."
}Rate limits & quota
Extractions are currently free and unlimited — billing is disabled on this deployment, so there is no per-call quota. The API and the web app share one counter that is not enforced while billing is off.
If a deployment re-enables billing, plan caps apply (Free 3 / Individual 50 / Team 300 / Enterprise unlimited, monthly) and hitting the cap returns HTTP 402 with the current usage in the body.
OpenAPI schema
Full OpenAPI 3.0 schema lives at /api/v1/openapi.json. Drop it into Postman, Stoplight, openapi-generator-cli, or any AI agent framework that consumes OpenAPI to scaffold a typed client in seconds.