{"openapi":"3.1.0","info":{"title":"API de licitaciones de Sondeva","version":"1","description":"Todas las licitaciones publicas de España para cargarlas en su base: la foto completa por ficheros y despues los cambios. Documentacion: https://sondeva.es/api-de-licitaciones/"},"servers":[{"url":"https://api.sondeva.es"}],"components":{"securitySchemes":{"llave":{"type":"http","scheme":"bearer","description":"Authorization: Bearer sdl_..."}},"schemas":{"Registro":{"type":"object","properties":{"id":{"type":["string","null"],"description":"Identificador estable: el mismo de la ficha en sondeva.es. Es la clave para aplicar cambios."},"enlace":{"type":["string","null"],"format":"uri","description":"La ficha en la plataforma que la publica."},"expediente":{"type":["string","null"]},"titulo":{"type":["string","null"]},"organo":{"type":["string","null"],"description":"El organo de contratacion, como se publica."},"tipo_de_administracion":{"type":["string","null"]},"estado":{"type":["string","null"],"description":"Codigo de estado (PUB, EV, ADJ, RES, ANUL...)."},"estado_texto":{"type":["string","null"]},"procedimiento":{"type":["string","null"],"description":"Codigo del procedimiento."},"sistema":{"type":["string","null"],"description":"Codigo del sistema de contratacion."},"cpvs":{"type":"array","items":{"type":"string"},"description":"Codigos CPV, sin repetir el nombre."},"nuts":{"type":"array","items":{"type":"string"},"description":"Lugar de ejecucion (NUTS 2021)."},"presupuesto":{"type":["number","null"],"description":"Presupuesto base, exacto, con sus centimos."},"moneda":{"type":["string","null"]},"importes_lotes":{"type":"array","items":{"type":"number"}},"duracion_anios":{"type":["number","null"]},"exige_clasificacion":{"type":["boolean","null"]},"fecha_limite":{"type":["string","null"],"format":"date","description":"Fin del plazo de presentacion."},"hora_limite":{"type":["string","null"]},"criterios":{"type":"array","items":{"$ref":"#/components/schemas/Criterio"}},"pliegos":{"type":"array","items":{"$ref":"#/components/schemas/Pliego"}},"documentos":{"type":"array","items":{"$ref":"#/components/schemas/Documento"},"description":"Actas e informes de la mesa, por enlace."},"adjudicatarios":{"type":"array","items":{"$ref":"#/components/schemas/Adjudicatario"}},"ofertas_recibidas":{"type":["integer","null"]},"fecha_adjudicacion":{"type":["string","null"],"format":"date"},"fecha_formalizacion":{"type":["string","null"],"format":"date"},"resultado":{"type":["string","null"],"description":"Codigo del resultado."},"publicada_en":{"type":["string","null"],"format":"date-time","description":"Ultima actualizacion en la fuente."},"vista_por_primera_vez_en":{"type":["string","null"],"format":"date-time"},"cambiada_en":{"type":["string","null"],"format":"date-time","description":"Ultima vez que cambio en Sondeva. Para aplicar cambios: gana el mas reciente."},"organo_clave":{"type":["string","null"],"description":"El organo normalizado, para agrupar grafias."},"cpvs_detalle":{"type":"array","items":{"$ref":"#/components/schemas/Cpv"},"description":"Cada CPV con su nombre oficial."},"nuts_detalle":{"type":"array","items":{"$ref":"#/components/schemas/Nuts"},"description":"Cada NUTS con su nombre."},"organo_dir3":{"type":["string","null"],"description":"Codigo DIR3 del organo, como lo publica el anuncio. Nulo si no lo trae (las plataformas autonomicas agregadas casi nunca lo publican)."}},"required":["id","enlace","expediente","titulo","organo","tipo_de_administracion","estado","estado_texto","procedimiento","sistema","cpvs","nuts","presupuesto","moneda","importes_lotes","duracion_anios","exige_clasificacion","fecha_limite","hora_limite","criterios","pliegos","documentos","adjudicatarios","ofertas_recibidas","fecha_adjudicacion","fecha_formalizacion","resultado","publicada_en","vista_por_primera_vez_en","cambiada_en","organo_clave","cpvs_detalle","nuts_detalle","organo_dir3"],"additionalProperties":false},"Adjudicatario":{"type":"object","properties":{"nombre":{"type":["string","null"],"description":"Tal como se publica. Vacio si pidio no aparecer."},"clave":{"type":["string","null"],"description":"El nombre normalizado para agrupar grafias de una misma empresa («ELECNOR, S.A.» y «Elecnor SA» dan «ELECNOR SA»)."},"nif":{"type":["string","null"],"description":"El NIF de una sociedad. Nunca el de una persona fisica."},"importe":{"type":["number","null"]},"lotes":{"type":"array","items":{"$ref":"#/components/schemas/Lote"}}},"required":["nombre","clave","nif","importe","lotes"],"additionalProperties":false},"Lote":{"type":"object","properties":{"lote":{"type":["string","null"],"description":"Numero o nombre del lote, si lo hay."},"titulo":{"type":["string","null"]},"importe":{"type":["number","null"],"description":"Importe adjudicado del lote, en la moneda de la licitacion."},"presupuesto":{"type":["number","null"]},"adjudicada":{"type":["string","null"],"format":"date"},"formalizada":{"type":["string","null"],"format":"date"},"empresas":{"type":["integer","null"],"description":"Ofertas recibidas en el lote."}},"required":["lote","titulo","importe","presupuesto","adjudicada","formalizada","empresas"],"additionalProperties":false},"Criterio":{"type":"object","properties":{"criterio":{"type":["string","null"]},"tipo":{"type":["string","null"],"description":"OBJ (automatico) o SUBJ (juicio de valor)."},"subtipo":{"type":["string","null"]},"peso":{"type":["number","null"],"description":"Puntos o porcentaje, como lo publique el organo."},"nota":{"type":["string","null"]}},"required":["criterio","tipo","subtipo","peso","nota"],"additionalProperties":false},"Pliego":{"type":"object","properties":{"tipo":{"type":["string","null"],"description":"PCAP, PPT, ..."},"url":{"type":"string","format":"uri"}},"required":["tipo","url"],"additionalProperties":false},"Documento":{"type":"object","properties":{"tipo":{"type":["string","null"]},"codigo":{"type":["string","null"]},"url":{"type":"string","format":"uri"}},"required":["tipo","codigo","url"],"additionalProperties":false},"Cpv":{"type":"object","properties":{"codigo":{"type":"string"},"nombre":{"type":["string","null"],"description":"Del catalogo CPV 2008."}},"required":["codigo","nombre"],"additionalProperties":false},"Nuts":{"type":"object","properties":{"codigo":{"type":"string"},"nombre":{"type":["string","null"]},"ambito":{"type":["string","null"],"enum":["pais","nuts1","nuts2","nuts3","extra",null]}},"required":["codigo","nombre","ambito"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"string"},"documentacion":{"type":"string","format":"uri"}},"required":["error","documentacion"],"additionalProperties":false}}},"paths":{"/v1/licitaciones":{"get":{"summary":"Lo cambiado desde un instante, en orden; pagina a pagina con el cursor.","security":[{"llave":[]}],"parameters":[{"name":"desde","in":"query","schema":{"type":"string"},"description":"Un dia (2026-10-28) o un instante ISO CON zona. O esto o `cursor`."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"El `siguiente` de la pagina anterior."},{"name":"limite","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000,"default":500}},{"name":"cpv","in":"query","schema":{"type":"string","pattern":"^[0-9]{2,8}$"},"description":"Solo las que tienen un CPV que empieza asi. Solo para los ultimos 31 dias."}],"responses":{"200":{"description":"Una pagina.","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer"},"filas":{"type":"integer"},"datos":{"type":"array","items":{"$ref":"#/components/schemas/Registro"}},"siguiente":{"type":["string","null"],"description":"Cursor de la pagina siguiente; null al final."}},"required":["version","filas","datos","siguiente"],"additionalProperties":false}}},"headers":{"X-Cupo-Filas-Dia":{"description":"Filas al dia de la llave.","schema":{"type":"integer"}},"X-Cupo-Filas-Restantes":{"description":"Filas que le quedan hoy (dia UTC).","schema":{"type":"integer"}},"X-Cupo-Peticiones-Minuto":{"description":"Peticiones por minuto de la llave.","schema":{"type":"integer"}}}},"400":{"description":"Parametros que no se entienden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Falta la llave o no vale (la misma respuesta para una invalida, revocada, caducada o inventada).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La llave no permite esto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite alcanzado. Mire Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"No se puede servir ahora. Mire Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/licitacion":{"get":{"summary":"Una licitacion, por su enlace.","security":[{"llave":[]}],"parameters":[{"name":"enlace","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"La licitacion.","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer"},"dato":{"$ref":"#/components/schemas/Registro"}},"required":["version","dato"],"additionalProperties":false}}},"headers":{"X-Cupo-Filas-Dia":{"description":"Filas al dia de la llave.","schema":{"type":"integer"}},"X-Cupo-Filas-Restantes":{"description":"Filas que le quedan hoy (dia UTC).","schema":{"type":"integer"}},"X-Cupo-Peticiones-Minuto":{"description":"Peticiones por minuto de la llave.","schema":{"type":"integer"}}}},"400":{"description":"Parametros que no se entienden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Falta la llave o no vale (la misma respuesta para una invalida, revocada, caducada o inventada).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La llave no permite esto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite alcanzado. Mire Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"No se puede servir ahora. Mire Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ficheros":{"get":{"summary":"La foto completa y los cambios que van detras, con enlaces firmados de una hora.","security":[{"llave":[]}],"responses":{"200":{"description":"Los manifiestos con sus enlaces.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Falta la llave o no vale (la misma respuesta para una invalida, revocada, caducada o inventada).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La llave no permite esto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"No se puede servir ahora. Mire Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/uso":{"get":{"summary":"Lo que lleva gastado hoy la llave, sus limites y la IP desde la que llega.","security":[{"llave":[]}],"responses":{"200":{"description":"El uso.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Falta la llave o no vale (la misma respuesta para una invalida, revocada, caducada o inventada).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La llave no permite esto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/estado":{"get":{"summary":"Si la API esta viva y a que fecha estan los datos. Sin llave.","responses":{"200":{"description":"El estado.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/openapi.json":{"get":{"summary":"Esta descripcion. Sin llave.","responses":{"200":{"description":"OpenAPI 3.1."}}}}}}