Skip to content

Developers

Framework data, straight into your systems

Published models, the specification and the search index are available through a public, read-only API. There is no account and no key: send an HTTP request and get JSON back.

Base URL

https://www.publicframework.com
Authentication
Not required
Format
JSON, UTF-8
CORS
Allowed from any origin
Freshness
Within 5 minutes

Quick start

Start from the list of published models. Each entry carries an export URL that returns the full model: elements, relationships and views.

  1. 1Request the model list from /api/repository.
  2. 2Pick a model by slug and follow links.export.
  3. 3Read elements and relationships using the documented exchange format.

Endpoints

List published models

Method: GET/api/repositoryOpen in browser

Every model published in the repository, newest first. Includes element, relationship and view counts, plus the export and site URLs.

curl -s "https://www.publicframework.com/api/repository"
Example response
{
  "format": "public-framework-exchange",
  "formatVersion": 1,
  "count": 0,
  "models": []
}
  • name and description carry ro and en variants; a language is missing when the model has not been translated.

Export a model

Method: GET/api/repository/{slug}/export

The complete model in the Public Framework exchange format: metadata, elements, relationships and views with node positions.

Parameters

Parameters: Export a model
NameInDescription
slugrequiredpathThe model identifier, from the slug field of the list.
curl -s "https://www.publicframework.com/api/repository/certificat-urbanism-demo/export"
Example response
{
  "format": "public-framework-exchange",
  "formatVersion": 1,
  "model": {
    "id": "certificat-urbanism-demo",
    "language": "ro",
    "name": {
      "ro": "Certificatul de urbanism (model demonstrativ)",
      "en": "Urban planning certificate (demo model)"
    },
    "description": {
      "ro": "Model demonstrativ al serviciului de eliberare a certificatului de urbanism într-o primărie de municipiu, de la temeiul legal până la sistemele informatice. Conține intenționat câteva erori de modelare pentru a ilustra validarea.",
      "en": "Demo model of the urban planning certificate service in a city hall, from the legal basis to the information systems. It deliberately contains a few modelling errors to illustrate validation."
    },
    "scope": "Primăria Municipiului Exemplu",
    "owner": "Echipa Public Framework",
    "version": "0.3.0"
  },
  "elements": [
    {
      "id": "act-l50",
      "type": "LegalAct",
      "status": "approved",
      "name": {
        "ro": "Legea nr. 50/1991 privind autorizarea executării lucrărilor de construcții",
        "en": "Law no. 50/1991 on authorising construction works"
      },
      "description": {
        "ro": "Actul normativ care reglementează certificatul de urbanism și autorizația de construire.",
        "en": "The legal act governing the urban planning certificate and the building permit."
      },
      "properties": {
        "kind": "lege",
        "number": "50",
        "year": 1991,
        "issuer": "Parlamentul României"
      },
      "sources": [
        {
          "kind": "legalAct",
          "reference": "Legea nr. 50/1991, republicată",
          "url": "https://legislatie.just.ro/"
        }
      ]
    }
  ],
  "relationships": [
    {
      "id": "r1",
      "type": "contains",
      "source": "act-l50",
      "target": "prov-l50-art6"
    }
  ],
  "views": [
    {
      "id": "v-service",
      "name": {
        "ro": "Serviciul pe scurt",
        "en": "The service at a glance"
      },
      "viewpoint": "service",
      "description": {
        "ro": "De la evenimentul de viață la actul emis.",
        "en": "From the life event to the issued act."
      },
      "nodes": [
        "le-build",
        "svc-cu"
      ]
    }
  ]
}
  • The response sends Content-Disposition: attachment, so browsers download it. HTTP clients read it as usual.
  • Empty fields are omitted rather than sent as null.

Specification versions

Method: GET/api/specificationOpen in browser

Every published edition of the specification, with a summary of changes and the files available in each language.

curl -s "https://www.publicframework.com/api/specification"
Live response, shortened
{
  "latest": "1.0",
  "count": 2,
  "versions": [
    {
      "version": "1.0",
      "title": {
        "ro": "Specificația Public Framework Modelling Language 1.0",
        "en": "Public Framework Modelling Language 1.0 specification"
      },
      "changes": {
        "ro": "Metamodelul pe 12 straturi: 152 de tipuri de elemente, 21 de tipuri de relații, reguli de validitate și notația grafică. Înlocuiește metamodelul pe șase straturi din versiunea 0.1-alpha.",
        "en": "The 12-layer metamodel: 152 element types, 21 relationship types, validity rules and the graphical notation. Replaces the six-layer metamodel of version 0.1-alpha."
      },
      "releasedAt": "2026-10-17T09:13:22.845Z",
      "files": [
        {
          "locale": "ro",
          "url": "https://www.publicframework.com/api/specification/1.0/ro",
          "contentType": "application/pdf",
          "sizeBytes": 6165765,
          "sha256": "38c3775be82be0e8d48eb40d63b52e11d40f56eaaeb098fba28ceea6053f5e20"
        }
      ]
    }
  ]
}
  • latest points to the newest published version. Scheduled editions appear only after their release date.
  • sha256 lets you verify the downloaded file.

Specification file

Method: GET/api/specification/{version}/{locale}Open in browser

The document for one edition in one language. Use latest to always receive the current edition.

Parameters

Parameters: Specification file
NameInDescription
versionrequiredpathThe version number, for example 1.0, or latest.
localerequiredpathDocument language: ro or en.
viewoptionalquerySet to 1 to open the file in the browser instead of downloading it.
# -J keeps the file name sent by the server
curl -fLOJ "https://www.publicframework.com/api/specification/latest/en"
Example response
HTTP/2 200
content-type: application/pdf
content-disposition: attachment; filename="public-framework-specification-v1.0-en.pdf"
etag: "…"
cache-control: private, no-cache
x-specification-version: 1.0
  • The X-Specification-Version header tells you which version you received, useful when requesting latest.
  • Send If-None-Match with a previously received ETag: if the file has not changed, the response is a 304 with no body.
  • An unknown version or language redirects (302) to the specification page.

Model format

Exports use the public-framework-exchange format. Its dedicated page describes every field, the validation rules and the accepted element types, with a sample file.

See the exchange format

RSS feeds

To be notified about new content, subscribe to the RSS feeds. Each one exists in both languages.

Caching and errors

JSON responses are cached for up to 5 minutes. New data shows up after that interval without any action on your side.

Caching and errors
CodeMeaning
200The request succeeded.
302No specification file exists for the requested version or language.
304The file has not changed since the ETag you sent.
404The model does not exist or is not published, or the language is not supported.
502 / 503The data source is temporarily unavailable. Try again later.

There are no hard rate limits, but please cache responses on your side and avoid polling more than once a minute.

Versioning

Every export includes format and formatVersion. New fields can appear at any time without a version change, so ignore fields you do not recognise. An incompatible change increments formatVersion and is announced in the specification feed.

Licence and attribution

Models, the specification and the documentation are published under the framework’s open licences. You can use them, including in commercial products, as long as you credit Public Framework as the source and do not present modified data as official.

Questions, or need a new endpoint? Write to us on the contact page.