API

ETSO provides a public API to query catalogue works and authors and reuse their identifiers, titles, attributions, stylometric results, and links.

The information is returned as JSON and can be used to integrate ETSO data into catalogues, visualizations, search engines, or research tools.

Endpoints

GET /api/obras

Returns the complete work catalogue with its public metadata.

GET /api/obras/{id-publicId-o-slug}

Returns a single work using its identifier or public slug.

GET /api/autores

Returns the complete author list with metadata and the five categories of related works.

GET /api/autores/{id-o-key}

Returns one author’s metadata and five work categories using their numeric id or textual key.

Selecting response fields

All four endpoints accept the optional fields parameter with comma-separated public top-level field names. The tables below describe the fields for each resource. Selecting an object, such as resources, returns that entire public object.

Without fields, all public fields are returned. Selection preserves the authors, author, works, or work wrapper and any applicable meta information. Empty selections, unknown or private fields, and nested paths such as resources.work return HTTP 400.

https://etso.es/api/obras/690677?fields=publicId,displayTitle
{
  "meta": {
    "contentPolicy": {
      "includesFullText": false,
      "includesSummaries": false,
      "excludedFields": [
        "fullText",
        "text",
        "shortSummary",
        "summaryText",
        "resumen_breve",
        "resumen_largo"
      ]
    }
  },
  "work": {
    "publicId": 690677,
    "displayTitle": "La francesa Laura"
  }
}

Work metadata

FieldDescription
idStable work identifier.
publicIdStable numeric public identifier for the work.
slugReadable identifier used in public URLs.
titleTitle as stored in the database, including the final article when present.
displayTitleTitle transformed with the same process used by the ETSO website.
titleVariantsOther work titles as stored in the database.
displayTitleVariantsOther titles transformed with the same process used by the website.
genreWork genre.
originSource or provenance of the text used by ETSO.
textStateText state in the catalogue.
addedOnDate added to the catalogue, when available.
bitesoPublishedOnBITESO publication date; null when unavailable.
summaryPublishedOnSummary publication date; null when unavailable.
resultado1Stylometric result for the work as a sentence.
flagsBoolean indicators for report, summary, authorship exam, and text access.
traditionalAttributionTextTraditional attribution ready for display.
traditionalAttributionPhraseTraditional attribution sentence with text, Markdown, HTML, and linkable parts.
stylometryAttributionTextStylometric attribution ready for display.
traditionalAttributionNormalized traditional attribution.
stylometryAttributionNormalized stylometric attribution.
resourcesRelated public links within ETSO.

Within attribution objects, authorId is the public numeric author identifier and authorKey is the textual key used in ETSO URLs. These are attribution properties, not top-level fields.

Complete response example

Query for a specific work and complete response:

https://etso.es/api/obras/690677
{
  "meta": {
    "contentPolicy": {
      "includesFullText": false,
      "includesSummaries": false,
      "excludedFields": [
        "fullText",
        "text",
        "shortSummary",
        "summaryText",
        "resumen_breve",
        "resumen_largo"
      ]
    }
  },
  "work": {
    "id": "DESCONOCIDO_FrancesaLaura",
    "publicId": 690677,
    "slug": "la-francesa-laura",
    "title": "Francesa Laura, La",
    "displayTitle": "La francesa Laura",
    "titleVariants": [],
    "displayTitleVariants": [],
    "genre": "Comedia",
    "origin": "El texto procede de la edición crítica de Álvaro Cuéllar y Germán Vega García-Luengos (Gredos, 2023).",
    "textState": "Bueno",
    "addedOn": "2021/03",
    "bitesoPublishedOn": "2026-06-18",
    "summaryPublishedOn": "2026-06-18",
    "resultado1": "Los analisis de estilometria permiten asociar esta obra de forma clara con el perfil autorial de Lope de Vega Carpio.",
    "flags": {
      "inAuthorshipExam": true,
      "hasSummary": true,
      "hasReport": true,
      "hasTextAccess": true
    },
    "traditionalAttributionText": "Lope de Vega Carpio",
    "traditionalAttributionPhrase": {
      "text": "Obra atribuida a Lope de Vega Carpio.",
      "markdown": "Obra atribuida a [Lope de Vega Carpio](https://etso.es/autores/vega_carpio_lope_de).",
      "html": "Obra atribuida a <a href=\"/autores/vega_carpio_lope_de\">Lope de Vega Carpio</a>.",
      "parts": [
        {
          "kind": "text",
          "value": "Obra atribuida a "
        },
        {
          "kind": "author",
          "value": "Lope de Vega Carpio",
          "authorId": 364,
          "authorKey": "vega_carpio_lope_de",
          "href": "/autores/vega_carpio_lope_de",
          "url": "https://etso.es/autores/vega_carpio_lope_de"
        },
        {
          "kind": "text",
          "value": "."
        }
      ]
    },
    "stylometryAttributionText": "Lope de Vega Carpio [Segura]",
    "traditionalAttribution": {
      "groups": [
        {
          "members": [
            {
              "authorId": 364,
              "authorKey": "vega_carpio_lope_de",
              "authorName": "Lope de Vega Carpio"
            }
          ]
        }
      ],
      "connector": "and",
      "rawExpression": "vega_carpio_lope_de"
    },
    "stylometryAttribution": {
      "groups": [
        {
          "members": [
            {
              "authorId": 364,
              "authorKey": "vega_carpio_lope_de",
              "authorName": "Lope de Vega Carpio",
              "confidence": "segura"
            }
          ]
        }
      ],
      "connector": "and",
      "rawExpression": "vega_carpio_lope_de[segura]"
    },
    "resources": {
      "work": "/obras/la-francesa-laura",
      "summary": "/obras/la-francesa-laura/resumen",
      "report": "/informes/analisis-estilometrico-la-francesa-laura",
      "textAccess": [
        {
          "label": "Texto BITESO",
          "href": "/biteso/la-francesa-laura",
          "kind": "biteso"
        }
      ]
    }
  }
}

Authors and related works

The numeric author id is the ETSO identifier and matches authorId in work attributions. The textual key identifies the author in ETSO URLs.

FieldDescription
idPublic numeric author identifier; matches authorId in work attributions.
keyTextual key used in author URLs.
nameAuthor name.
nameVariantsVariants of the author’s name.
resourcesLinks to the public author profile: author is the path and url is the absolute URL.

Works by author

Each author includes five arrays of numeric work publicId values (number[]), matching the five categories on their profile in the authorship examination. Only works in that examination are included, using the same criteria as the website: probable or possible attributions and collaborations are included; unresolved traditional or stylometric attributions are excluded from their respective side. Inclusion does not imply certain or exclusive authorship.

Each category with no works returns []. Categories are evaluated for the queried author. Each work publicId can be queried at /api/obras/{publicId} or linked as https://etso.es/obras/{publicId}, which redirects to the canonical work page.

FieldDescription
relatedWorkPublicIdsWorks related to the author: traditional or stylometric attribution.
traditionalWorkPublicIdsWorks supported by tradition.
stylometryWorkPublicIdsWorks supported by stylometry.
traditionalOnlyWorkPublicIdsWorks supported only by tradition: no stylometric support for this author.
newStylometrySupportedWorkPublicIdsNew attributions supported by stylometry: no traditional attribution to this author.

All authors and their five work lists

https://etso.es/api/autores

One author and their five work lists

https://etso.es/api/autores/374

Only the works related to one author

https://etso.es/api/autores/374?fields=id,relatedWorkPublicIds

Recommended Use

Responses are served with public cache: public, max-age=3600, s-maxage=86400, stale-while-revalidate=604800. For external integrations, cache the response locally and avoid calling the API on every render.

Selecting fields reduces response size and data transfer. By itself, it does not reduce the number of requests or eliminate all database queries.