1 What is Stilus API?

Stilus API is Stilus' developer platform designed to customize and integrate the Spanish proofreading service into any publishing environment (either proprietary or third-party).

Easy to use. Stilus API requires an Internet connection to enable user authentication and account service consumption. Requests to the API's endpoints are made through GET o POST, according to the linguistic configuration set for the proofreading.

Register at Stilus to start a free trial and try the demo. To integrate the API, read the following instructions or request a quote if you want to purchase the service. In any case, contact MeaningCloud to agree upon the proofreading volume you need.

2 Endpoint

The API's endpoint is:

  • http://«server»/«root path»/api/stilus.php

3 Request

Requests are made using GET or POST data submissions to the API entry point. Typically, a POST method is recommended in order to overcome the parameter maximum length limit associated to the GET method. The parameters are the following:

keyThe access key is required for making requests to any of our web services. You can get a valid access key for free just by creating an account at MeaningCloud.StringYes
txtInput text that's going to be analyzed.StringYes
urlURL with the content to check. Currently only non-authenticated HTTP and FTP are supported. The content types supported for URL contents can be found here.StringNo
ilangIt specifies the interface language, that is, the language in which the messages in the response will appear.EN: english
ES: spanish
Default: ES
modeThis field will determine how the issues are detected in the text.all: Returns all errors found in the text.
next: Returns only the first error found. In combination with the offset parameter, you can obtain, one by one, all the text errors.
Default: all
versionVersion of the APIStringNo
ifInput formatStringNo
Default: html
ofOutput formatxml, jsonNo
Default: json
offsetOffset in which to start the revision. This functionality together with the mode=next are used when the application that calls the API needs to receive the issues in a text one by one.Positive number from 0 to text length.No
Default: 0
dicThis parameter will specify the list of active dictionaries that will be used in the review. Each dictionary will be represented with a letter (detailed below). There are two types of dictionaries, thematic dictionaries, with domain specific terms, and language varieties, with terms specific to the language variety in question.See the dictionaries section.No
Default: chetsdpqr
ppSmart detection of prefixed words.y: enabled n: disabledNo
Default: y
aqoiSmart handling of words written in italics or with quotation marks.y: enabled n: disabledNo
Default: y
tlsWarn of too-long sentences.y: enabled n: disabledNo
Default: y
dpnSmart detection of proper nouns.y: enabled n: disabledNo
Default: n
stmeDescribes how it will behave when it finds sentences with many errors.0: Check for all
1: Group and ignore
2: Group and warn
Default: 2
redCheck tautology and language misuse.y: enabled n: disabledNo
Default: y
spaCheck spacing.y: enabled n: disabledNo
Default: y
comppuncVerify the opening and closing of pairs of signs.y: enabled n: disabledNo
Default: y
corrpuncCheck punctuation marks.y: enabled n: disabledNo
Default: y
alwWarn of foreign words to be avoided.y: enabled n: disabledNo
Default: n
wctWarn of confusion between terms.y: enabled n: disabledNo
Default: n
wpsWarn of percentage signs (%) not spaced.y: enabled n: disabledNo
Default: n
psrWarn of possible reduction of the consonant clusters ps-.y: enabled n: disabledNo
Default: n
nsrWarn of possible reduction of the consonant clusters -ns-.y: enabled n: disabledNo
Default: n
bsrWarn of possible reduction of the consonant clusters -bs-..y: enabled n: disabledNo
Default: n
strWarn of possible reduction of the consonant clusters -st-..y: enabled n: disabledNo
Default: n
vrWarn of possible vowel reductions.y: enabled n: disabledNo
Default: n
sdmWarn of removing the accent mark from «sólo».y: enabled n: disabledNo
Default: n
ddmWarn of removing the accent mark from demonstratives.y: enabled n: disabledNo
Default: n
confField that indicates the minimum confidence required in the responses.Positive number from 0 to 100No
Default: 60

3.1 Dictionaries

LanguageThematic dictionariesLanguage varietiesDefault value
  • c: Science and Technology
  • h: Humanities
  • e: Economy
  • t: Natural Sciences
  • s: Social Sciences
  • d: Sport
  • p: Politics
  • q: Colloquial word
  • r: Archaic words
  • 0: Latin American Spanish
  • 1: Northern Latin American Spanish
  • 2: Central American Spanish
  • 3: Southern Latin American Spanish
  • 4: Caribbean Spanish
  • M: Mexican Spanish
  • chetsdpqr

4 Response

The response contains the information associated with the result of the request. You can find a description of each of its fields in the following table.

statusContains information about the revision process and whether it has finished successfully. It is formed by a status code code, a natural number that identifies the result, and a message (msg), a string describing the result. In addition, the field credits contains a natural number that indicates the credits consumed in the request and remaining_credits shows the number of credits left to the user to get to the credit limit.

These are the possible status codes and the associated messages:

100Operation denied
101License expired
102Credits per subscription exceeded
103Request too large
104Request rate limit exceeded
200Missing required parameter(s) - [name of the parameter]
201Language not supported
202Engine internal error
203Cannot connect to service
The limit referred to in status code 103 is set to 50 000 words per request.

A request is any HTTP request done to the API to analyze less than 500 words. If the text sent is longer than that, then it will be considered that more than a request is made, more specifically, as many requests as we would need if the text were divided in chunks of 500 words. For instance, an HTTP request with 1013 words, will count as three requests, so 3 credits will be consumed; an HTTP request with a text 25648 words long would count as 25648/500 = 51.296 => 52 credits, and so on.
result_listList of issues (errors, warnings or recommendations) found in the text. Each one of these issues is represented in a result element that contains the following fields:
textText in which the error or warning is located.
typeType of issue. There are five types or errors defined:

SSpelling error or warning
GGrammar error or warning
YStyle error or warning
TTypography error or warning
MSemantic-related error or warning
inipInitial position of the result, starting on 0
endpEnd position of the result
levelCEFR level of the error.
ruleID of the rule associated to the issue
msgMessage that explains the issue
refBibliographical reference(s) for the issue. These are the different possibilities:

RAE 2010:Ortografía de la lengua española (Real Academia Española, 2010).
RAE 2009:Nueva gramática de la lengua española (Real Academia Española, 2009).
DPD:Diccionario panhispánico de dudas. (Real Academia Española, 2005).
De_Sousa:Diccionario de usos y dudas del español actual (J. Martínez de Sousa, 2003). Ortografía y ortotipografía del español actual. (J. Martínez de Sousa, 2004).
Seco:Diccionario de dudas y dificultades de la lengua española. (M. Seco, 2002).
Fundéu: Recomendaciones y dudas [on line] (Fundéu BBVA).
El País: Libro de estilo EL PAÍS. (VV. AA., 2014).
sug_listList of possible suggestions to correct the issue. Each suggestion will have two fields:

formText of the suggestion.
confidenceLevel of confidence for the suggestion given.
stadisticsThis field contains statistics of the text sent. The values included are the following:

wordsNumber of words in the text sent.
non-repeated_wordsNumber of unique words in the text sent.
characters_without_spacesCharacter count without taking spaces into account.
total_charactersTotal character count.
sentencesNumber of sentences in the text sent.
paragraphNumber of paragraphs in the text sent.

5 Example

Given the following text:

No vengas hacernos creer que todos vemos los mismos reality shows en television.

The output would be:

  "status": {
    "code": "0",
    "msg": "OK"
  "result_list": [
      "text": "vengas hacernos",
      "type": "G",
      "inip": "3",
      "endp": "17",
      "level": "B1",
      "rule": "ReglaVenir+INF",
      "msg": "Posiblemente sea necesario incluir la preposición a.",
      "sug_list": [
          "form": "vengas a hacernos",
          "confidence": "70"
      "text": "reality shows",
      "type": "T",
      "inip": "52",
      "endp": "64",
      "level": "A1",
      "rule": "ReglaRevisionPalabras-V",
      "msg": "Voz inglesa (debería ir en cursiva).",
      "ref": "Fundéu / El_País",
      "sug_list": [
          "form": "programa de telerrealidad",
          "confidence": "99"
          "form": "telerrealidades",
          "confidence": "99"
          "form": "programa de sucesos",
          "confidence": "99"
      "text": "television",
      "type": "S",
      "inip": "69",
      "endp": "78",
      "level": "A1",
      "rule": "ReglaRevisionPalabras-1",
      "msg": "Posible error ortográfico.",
      "sug_list": [
          "form": "televisión",
          "confidence": "99"
  "statistics": {
    "words": "13",
    "non-repeated_words": "13",
    "characters_without_spaces": "68",
    "total_characters": "80",
    "sentences": "1",
    "paragraphs": "1"

6 Use the API

Please contact us to obtain your demo key.


You can now use the best spelling and grammar checker for Spanish for free.