{
  "openapi": "3.1.1",
  "info": {
    "title": "Emisoras de Colombia",
    "version": "1",
    "description": "Catalogo publico de 380 emisoras de radio colombianas en vivo. Solo lectura, sin autenticacion. Para reproducir una emisora use siempre listen_url: la senal de origen puede caducar.",
    "termsOfService": "https://emisorasdecolombia.com/terminos"
  },
  "servers": [
    {
      "url": "https://emisorasdecolombia.com"
    }
  ],
  "paths": {
    "/datos/v1/emisoras.json": {
      "get": {
        "summary": "Catalogo completo",
        "responses": {
          "200": {
            "description": "Todas las emisoras",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "terms",
                    "count",
                    "stations"
                  ],
                  "properties": {
                    "version": {
                      "type": "string"
                    },
                    "terms": {
                      "type": "string",
                      "format": "uri"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "stations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "slug",
                          "city",
                          "city_slug",
                          "genre",
                          "listen_url",
                          "page_url",
                          "markdown_url"
                        ],
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "slug": {
                            "type": "string"
                          },
                          "city": {
                            "type": "string"
                          },
                          "city_slug": {
                            "type": "string"
                          },
                          "genre": {
                            "type": "string"
                          },
                          "listen_url": {
                            "type": "string",
                            "format": "uri",
                            "description": "Direccion estable de escucha. Redirige a la senal vigente."
                          },
                          "page_url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "markdown_url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "frequency": {
                            "type": "string",
                            "description": "Ausente si la emisora es solo online."
                          },
                          "network": {
                            "type": "string"
                          },
                          "website": {
                            "type": "string",
                            "format": "uri"
                          },
                          "description": {
                            "type": "string"
                          },
                          "logo_url": {
                            "type": "string",
                            "format": "uri"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/datos/v1/emisoras/{slug}.json": {
      "get": {
        "summary": "Ficha de una emisora",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Identificador de la emisora, tal como aparece en /datos/v1/emisoras.json",
            "schema": {
              "type": "string"
            },
            "example": "radio-policia-medellin-nacional-964-fm"
          }
        ],
        "responses": {
          "200": {
            "description": "La emisora",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "terms",
                    "station"
                  ],
                  "properties": {
                    "version": {
                      "type": "string"
                    },
                    "terms": {
                      "type": "string",
                      "format": "uri"
                    },
                    "station": {
                      "type": "object",
                      "required": [
                        "name",
                        "slug",
                        "city",
                        "city_slug",
                        "genre",
                        "listen_url",
                        "page_url",
                        "markdown_url"
                      ],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "slug": {
                          "type": "string"
                        },
                        "city": {
                          "type": "string"
                        },
                        "city_slug": {
                          "type": "string"
                        },
                        "genre": {
                          "type": "string"
                        },
                        "listen_url": {
                          "type": "string",
                          "format": "uri",
                          "description": "Direccion estable de escucha. Redirige a la senal vigente."
                        },
                        "page_url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "markdown_url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "frequency": {
                          "type": "string",
                          "description": "Ausente si la emisora es solo online."
                        },
                        "network": {
                          "type": "string"
                        },
                        "website": {
                          "type": "string",
                          "format": "uri"
                        },
                        "description": {
                          "type": "string"
                        },
                        "logo_url": {
                          "type": "string",
                          "format": "uri"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No existe una emisora con ese slug"
          }
        }
      }
    },
    "/datos/v1/ciudades.json": {
      "get": {
        "summary": "Ciudades con emisoras",
        "responses": {
          "200": {
            "description": "Ciudades",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "terms",
                    "count",
                    "items"
                  ],
                  "properties": {
                    "version": {
                      "type": "string"
                    },
                    "terms": {
                      "type": "string",
                      "format": "uri"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "slug",
                          "count",
                          "page_url",
                          "markdown_url"
                        ],
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "slug": {
                            "type": "string"
                          },
                          "count": {
                            "type": "integer"
                          },
                          "page_url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "markdown_url": {
                            "type": "string",
                            "format": "uri"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/datos/v1/generos.json": {
      "get": {
        "summary": "Generos disponibles",
        "responses": {
          "200": {
            "description": "Generos",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "terms",
                    "count",
                    "items"
                  ],
                  "properties": {
                    "version": {
                      "type": "string"
                    },
                    "terms": {
                      "type": "string",
                      "format": "uri"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "slug",
                          "count",
                          "page_url",
                          "markdown_url"
                        ],
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "slug": {
                            "type": "string"
                          },
                          "count": {
                            "type": "integer"
                          },
                          "page_url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "markdown_url": {
                            "type": "string",
                            "format": "uri"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/escuchar/{slug}": {
      "get": {
        "summary": "Direccion estable de escucha",
        "description": "No devuelve audio: redirige a la senal vigente de la emisora. Siga la redireccion. No cachee la respuesta.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Identificador de la emisora, tal como aparece en /datos/v1/emisoras.json",
            "schema": {
              "type": "string"
            },
            "example": "radio-policia-medellin-nacional-964-fm"
          }
        ],
        "responses": {
          "302": {
            "description": "Redireccion a la senal vigente",
            "headers": {
              "Location": {
                "description": "URL de la senal",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "404": {
            "description": "No existe una emisora con ese slug",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "catalogue": {
                      "type": "string",
                      "format": "uri"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
