> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://api.herramientas.lat/api-reference/herramientas-lat-api/qr/crear-qr-con-seguimiento/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api.herramientas.lat/_mcp/server. # Crear QR con seguimiento POST https://www.herramientas.lat/api/v1/qr Content-Type: application/json Requiere `qr:write`. Acepta todas las opciones del generador web. El QR encodea el link corto `/r/{code}`; el destino real queda en `payload`. Reference: https://api.herramientas.lat/api-reference/herramientas-lat-api/qr/crear-qr-con-seguimiento ## Authentication - `Authorization` header (bearer token, required) — Creá keys en /cuenta/api con scopes qr:read y/o qr:write ## Request ### Body (application/json) This endpoint expects a CreateQrRequest. - `title` (string, required) - `tracking` (boolean, optional, default: true) — Equivale a “Activar seguimiento” del generador. En este endpoint debe ser true (o omitirse): crea link corto `/r/{code}` y métricas. - `contentType` (enum, optional, default: url) - Allowed values: `url`, `wifi`, `vcard`, `whatsapp`, `text`, `email` - `payload` (string, optional) — Opcional. Si falta, se calcula desde contentType + campos tipados. - `url` (string, optional) - `wifiSsid` (string, optional) - `wifiPass` (string, optional) - `wifiEnc` (enum, optional) - Allowed values: `WPA`, `WEP`, `nopass` - `vcardFirstName` (string, optional) - `vcardLastName` (string, optional) - `vcardPhone` (string, optional) - `vcardEmail` (string, optional) - `vcardOrg` (string, optional) - `vcardWeb` (string, optional) - `waNumber` (string, optional) - `waMessage` (string, optional) - `text` (string, optional) - `emailTo` (string, optional) - `emailSubject` (string, optional) - `emailBody` (string, optional) - `design` (QrDesign, optional) — Opciones visuales (mismas que el generador web). - `dotsStyle` (string, optional) - `cornerSquare` (string, optional) - `cornerDot` (string, optional) - `isGradient` (boolean, optional) - `gradientType` (string, optional) - `gradientRotation` (double, optional) - `color1` (string, optional) - `color2` (string, optional) - `bgColor` (string, optional) - `bgTransparent` (boolean, optional) - `customEyeColors` (boolean, optional) - `eyeColor` (string, optional) - `presetLogo` (string, optional) - `customLogoUrl` (string, optional, nullable) - `logoSize` (double, optional) - `logoMargin` (double, optional) - `hideDotsBehindLogo` (boolean, optional) - `frameStyle` (string, optional) - `frameText` (string, optional) - `frameColor` (string, optional) - `frameTextColor` (string, optional) - `errorCorrectionLevel` (string, optional) - `resolution` (integer, optional) ## Response ### 201 Creado - `item` (QrItem, optional) ## Errors ### 403 Forbidden Error Scope insuficiente - `error` (string, optional) ## Types ### QrDesign Opciones visuales (mismas que el generador web). - `dotsStyle` (enum, optional) - Allowed values: `square`, `dots`, `rounded`, `extra-rounded`, `classy`, `classy-rounded` - `cornerSquare` (enum, optional) - Allowed values: `square`, `dot`, `extra-rounded`, `classy`, `classy-rounded` - `cornerDot` (enum, optional) - Allowed values: `square`, `dot`, `extra-rounded`, `classy`, `classy-rounded` - `isGradient` (boolean, optional) - `gradientType` (enum, optional) - Allowed values: `linear`, `radial` - `gradientRotation` (double, optional) - `color1` (string, optional) - `color2` (string, optional) - `bgColor` (string, optional) - `bgTransparent` (boolean, optional) - `customEyeColors` (boolean, optional) - `eyeColor` (string, optional) - `presetLogo` (string, optional) - `customLogoUrl` (string, optional, nullable) — Data URL de imagen o null - `logoSize` (double, optional) - `logoMargin` (double, optional) - `hideDotsBehindLogo` (boolean, optional) - `frameStyle` (enum, optional) - Allowed values: `none`, `bottom-banner`, `phone`, `badge` - `frameText` (string, optional) - `frameColor` (string, optional) - `frameTextColor` (string, optional) - `errorCorrectionLevel` (enum, optional) - Allowed values: `L`, `M`, `Q`, `H` - `resolution` (integer, optional) ### QrItem - `id` (string, optional) - `title` (string, optional) - `code` (string, optional) - `contentType` (enum, optional) - Allowed values: `url`, `wifi`, `vcard`, `whatsapp`, `text`, `email` - `payload` (string, optional) - `active` (boolean, optional) - `design` (QrDesign, optional) — Opciones visuales (mismas que el generador web). - `shortUrl` (string, optional) - `scanCount` (integer, optional) - `createdAt` (datetime, optional) - `updatedAt` (datetime, optional) ## Examples **Request** ```json { "title": "Menú del local", "tracking": true, "contentType": "url", "url": "https://ejemplo.com/menu", "dotsStyle": "rounded", "cornerSquare": "extra-rounded", "cornerDot": "dot", "isGradient": true, "gradientType": "linear", "gradientRotation": 45, "color1": "#1d4ed8", "color2": "#7c3aed", "bgColor": "#ffffff", "bgTransparent": false, "customEyeColors": false, "eyeColor": "#000000", "presetLogo": "none", "customLogoUrl": null, "logoSize": 0.3, "logoMargin": 4, "hideDotsBehindLogo": true, "frameStyle": "bottom-banner", "frameText": "ESCANÉAME", "frameColor": "#1d4ed8", "frameTextColor": "#ffffff", "errorCorrectionLevel": "H", "resolution": 1000 } ``` **Response** ```json { "item": { "id": "string", "title": "string", "code": "string", "contentType": "url", "payload": "string", "active": true, "design": { "dotsStyle": "square", "cornerSquare": "square", "cornerDot": "square", "isGradient": true, "gradientType": "linear", "gradientRotation": 1.1, "color1": "string", "color2": "string", "bgColor": "string", "bgTransparent": true, "customEyeColors": true, "eyeColor": "string", "presetLogo": "string", "customLogoUrl": "string", "logoSize": 0.3, "logoMargin": 1.1, "hideDotsBehindLogo": true, "frameStyle": "none", "frameText": "string", "frameColor": "string", "frameTextColor": "string", "errorCorrectionLevel": "L", "resolution": 1 }, "shortUrl": "string", "scanCount": 1, "createdAt": "2024-01-15T09:30:00Z", "updatedAt": "2024-01-15T09:30:00Z" } } ``` **SDK Code** ```python QR_crearQrConSeguimiento_example import requests url = "https://www.herramientas.lat/api/v1/qr" payload = { "title": "Menú del local", "tracking": True, "contentType": "url", "url": "https://ejemplo.com/menu", "dotsStyle": "rounded", "cornerSquare": "extra-rounded", "cornerDot": "dot", "isGradient": True, "gradientType": "linear", "gradientRotation": 45, "color1": "#1d4ed8", "color2": "#7c3aed", "bgColor": "#ffffff", "bgTransparent": False, "customEyeColors": False, "eyeColor": "#000000", "presetLogo": "none", "customLogoUrl": None, "logoSize": 0.3, "logoMargin": 4, "hideDotsBehindLogo": True, "frameStyle": "bottom-banner", "frameText": "ESCANÉAME", "frameColor": "#1d4ed8", "frameTextColor": "#ffffff", "errorCorrectionLevel": "H", "resolution": 1000 } headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript QR_crearQrConSeguimiento_example const url = 'https://www.herramientas.lat/api/v1/qr'; const options = { method: 'POST', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{"title":"Menú del local","tracking":true,"contentType":"url","url":"https://ejemplo.com/menu","dotsStyle":"rounded","cornerSquare":"extra-rounded","cornerDot":"dot","isGradient":true,"gradientType":"linear","gradientRotation":45,"color1":"#1d4ed8","color2":"#7c3aed","bgColor":"#ffffff","bgTransparent":false,"customEyeColors":false,"eyeColor":"#000000","presetLogo":"none","customLogoUrl":null,"logoSize":0.3,"logoMargin":4,"hideDotsBehindLogo":true,"frameStyle":"bottom-banner","frameText":"ESCANÉAME","frameColor":"#1d4ed8","frameTextColor":"#ffffff","errorCorrectionLevel":"H","resolution":1000}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go QR_crearQrConSeguimiento_example package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://www.herramientas.lat/api/v1/qr" payload := strings.NewReader("{\n \"title\": \"Menú del local\",\n \"tracking\": true,\n \"contentType\": \"url\",\n \"url\": \"https://ejemplo.com/menu\",\n \"dotsStyle\": \"rounded\",\n \"cornerSquare\": \"extra-rounded\",\n \"cornerDot\": \"dot\",\n \"isGradient\": true,\n \"gradientType\": \"linear\",\n \"gradientRotation\": 45,\n \"color1\": \"#1d4ed8\",\n \"color2\": \"#7c3aed\",\n \"bgColor\": \"#ffffff\",\n \"bgTransparent\": false,\n \"customEyeColors\": false,\n \"eyeColor\": \"#000000\",\n \"presetLogo\": \"none\",\n \"customLogoUrl\": null,\n \"logoSize\": 0.3,\n \"logoMargin\": 4,\n \"hideDotsBehindLogo\": true,\n \"frameStyle\": \"bottom-banner\",\n \"frameText\": \"ESCANÉAME\",\n \"frameColor\": \"#1d4ed8\",\n \"frameTextColor\": \"#ffffff\",\n \"errorCorrectionLevel\": \"H\",\n \"resolution\": 1000\n}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "Bearer ") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby QR_crearQrConSeguimiento_example require 'uri' require 'net/http' url = URI("https://www.herramientas.lat/api/v1/qr") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{\n \"title\": \"Menú del local\",\n \"tracking\": true,\n \"contentType\": \"url\",\n \"url\": \"https://ejemplo.com/menu\",\n \"dotsStyle\": \"rounded\",\n \"cornerSquare\": \"extra-rounded\",\n \"cornerDot\": \"dot\",\n \"isGradient\": true,\n \"gradientType\": \"linear\",\n \"gradientRotation\": 45,\n \"color1\": \"#1d4ed8\",\n \"color2\": \"#7c3aed\",\n \"bgColor\": \"#ffffff\",\n \"bgTransparent\": false,\n \"customEyeColors\": false,\n \"eyeColor\": \"#000000\",\n \"presetLogo\": \"none\",\n \"customLogoUrl\": null,\n \"logoSize\": 0.3,\n \"logoMargin\": 4,\n \"hideDotsBehindLogo\": true,\n \"frameStyle\": \"bottom-banner\",\n \"frameText\": \"ESCANÉAME\",\n \"frameColor\": \"#1d4ed8\",\n \"frameTextColor\": \"#ffffff\",\n \"errorCorrectionLevel\": \"H\",\n \"resolution\": 1000\n}" response = http.request(request) puts response.read_body ``` ```java QR_crearQrConSeguimiento_example import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://www.herramientas.lat/api/v1/qr") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{\n \"title\": \"Menú del local\",\n \"tracking\": true,\n \"contentType\": \"url\",\n \"url\": \"https://ejemplo.com/menu\",\n \"dotsStyle\": \"rounded\",\n \"cornerSquare\": \"extra-rounded\",\n \"cornerDot\": \"dot\",\n \"isGradient\": true,\n \"gradientType\": \"linear\",\n \"gradientRotation\": 45,\n \"color1\": \"#1d4ed8\",\n \"color2\": \"#7c3aed\",\n \"bgColor\": \"#ffffff\",\n \"bgTransparent\": false,\n \"customEyeColors\": false,\n \"eyeColor\": \"#000000\",\n \"presetLogo\": \"none\",\n \"customLogoUrl\": null,\n \"logoSize\": 0.3,\n \"logoMargin\": 4,\n \"hideDotsBehindLogo\": true,\n \"frameStyle\": \"bottom-banner\",\n \"frameText\": \"ESCANÉAME\",\n \"frameColor\": \"#1d4ed8\",\n \"frameTextColor\": \"#ffffff\",\n \"errorCorrectionLevel\": \"H\",\n \"resolution\": 1000\n}") .asString(); ``` ```php QR_crearQrConSeguimiento_example request('POST', 'https://www.herramientas.lat/api/v1/qr', [ 'body' => '{ "title": "Menú del local", "tracking": true, "contentType": "url", "url": "https://ejemplo.com/menu", "dotsStyle": "rounded", "cornerSquare": "extra-rounded", "cornerDot": "dot", "isGradient": true, "gradientType": "linear", "gradientRotation": 45, "color1": "#1d4ed8", "color2": "#7c3aed", "bgColor": "#ffffff", "bgTransparent": false, "customEyeColors": false, "eyeColor": "#000000", "presetLogo": "none", "customLogoUrl": null, "logoSize": 0.3, "logoMargin": 4, "hideDotsBehindLogo": true, "frameStyle": "bottom-banner", "frameText": "ESCANÉAME", "frameColor": "#1d4ed8", "frameTextColor": "#ffffff", "errorCorrectionLevel": "H", "resolution": 1000 }', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp QR_crearQrConSeguimiento_example using RestSharp; var client = new RestClient("https://www.herramientas.lat/api/v1/qr"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"title\": \"Menú del local\",\n \"tracking\": true,\n \"contentType\": \"url\",\n \"url\": \"https://ejemplo.com/menu\",\n \"dotsStyle\": \"rounded\",\n \"cornerSquare\": \"extra-rounded\",\n \"cornerDot\": \"dot\",\n \"isGradient\": true,\n \"gradientType\": \"linear\",\n \"gradientRotation\": 45,\n \"color1\": \"#1d4ed8\",\n \"color2\": \"#7c3aed\",\n \"bgColor\": \"#ffffff\",\n \"bgTransparent\": false,\n \"customEyeColors\": false,\n \"eyeColor\": \"#000000\",\n \"presetLogo\": \"none\",\n \"customLogoUrl\": null,\n \"logoSize\": 0.3,\n \"logoMargin\": 4,\n \"hideDotsBehindLogo\": true,\n \"frameStyle\": \"bottom-banner\",\n \"frameText\": \"ESCANÉAME\",\n \"frameColor\": \"#1d4ed8\",\n \"frameTextColor\": \"#ffffff\",\n \"errorCorrectionLevel\": \"H\",\n \"resolution\": 1000\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift QR_crearQrConSeguimiento_example import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = [ "title": "Menú del local", "tracking": true, "contentType": "url", "url": "https://ejemplo.com/menu", "dotsStyle": "rounded", "cornerSquare": "extra-rounded", "cornerDot": "dot", "isGradient": true, "gradientType": "linear", "gradientRotation": 45, "color1": "#1d4ed8", "color2": "#7c3aed", "bgColor": "#ffffff", "bgTransparent": false, "customEyeColors": false, "eyeColor": "#000000", "presetLogo": "none", "customLogoUrl": , "logoSize": 0.3, "logoMargin": 4, "hideDotsBehindLogo": true, "frameStyle": "bottom-banner", "frameText": "ESCANÉAME", "frameColor": "#1d4ed8", "frameTextColor": "#ffffff", "errorCorrectionLevel": "H", "resolution": 1000 ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://www.herramientas.lat/api/v1/qr")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```