La mayoría de las organizaciones se unen al mapa de la manera fácil — al añadiendo tu organización a través de nuestro formulario, sin necesidad de código. Esta página es para las redes de permacultura y los desarrolladores que prefieren publicar y alojar sus propias Murmuraciones perfiles, y mantener sus datos completamente en sus propias manos.
Esta guía es para las redes y organizaciones regionales de permacultura que deseen que sus datos aparezcan en el mapa de Colaboración Internacional de Permacultura y, debido a su funcionamiento, en cualquier otro mapa construido sobre la Murmuraciones protocolo al mismo tiempo.
The idea behind it is a simple one. You publish your data once, in an open format, and you keep hold of it. We (and anyone else) gather it onto our maps. When you change your data, every map that lists you changes too. You never end up filling in someone else’s database.
Cómo funciona, en tres pasos
1. Describe each organisation as a Murmurations PROFILE (a small JSON document)
2. HOST that profile at a stable URL you control
3. SUBMIT the profile's URL to the Murmurations INDEX
│
▼
We query the index for the tags we trust → fetch your profile → it appears on our map
No hay ninguna cuenta que abrir con nosotros, ni clave API que administrar. Tú sigues siendo tu propia fuente de verdad, y el índice simplemente apunta de vuelta a ti.
Lo único que te une a nuestro mapa: una etiqueta
Nuestro mapa recopila los perfiles que llevan una etiqueta que hemos acordado contigo. Pregúntanos for your network’s tag — something along the lines of pc-network:permacultura-granbretaña — and add it to your profile’s etiquetas array. That tag is what tells our aggregator, “this profile belongs on the permaculture map.”
¿Tienen datos que aún no cubre ningún esquema, como el tipo de suelo o la lluvia promedio? Echa un vistazo a Ampliando con tus propios datos más abajo. Nuestro mapa renderiza automáticamente cualquier campo documentado, y estaremos encantados de ayudarte a estandarizarlo para que otras redes adopten el mismo enfoque.
¿Preferirías no escribir JSON a mano?
No tienes que escribir JSON ni ejecutar un servidor para participar. Hay varias formas más sencillas de hacerlo.
El más simple es el nuestro Añade tu organización formulario. Rellénalo y, una vez que uno de nuestros moderadores lo haya revisado, tu organización aparecerá en el mapa. Sin código, sin alojamiento y nada que mantener después.
Si prefieres usar la herramienta más amplia de Murmurations (parte de MurmurMaps), también hay opciones alojadas:
- Una organización: el Generador de perfiles. Rellena el formulario web en https://murmurmaps.murmurations.network/profile-generator, elige los esquemas y aloja el perfil y lo envía al índice por ti. Obtienes un perfil editable al que puedes volver y actualizar, sin necesidad de tu propio sitio web o servidor.
- Toda una red a la vez: el Importador por Lotes. Cargar un CSV en https://murmurmaps.murmurations.network/batch-importer y valida, aloja y envía cada fila. Se aplican algunas reglas:
- Hasta 1000 filas por lote.
- En la primera columna debe ser
oído— un identificador estable y único para cada organización que nunca se reasigna, ya que es la forma en que se comparan las actualizaciones posteriores. - Los encabezados de columna deben coincidir con los nombres de los campos del esquema exacto. Los campos anidados usan la notación de puntos (
geolocation.lat); los arreglos usan notación de corchetesetiquetas[0],urls[0].url). - Para actualizar más tarde, vuelva a cargar un CSV revisado con el mismo
oídos.
- ¿Ya tienes JSON alojado? — el Actualizador de Índices. Pega una URL de perfil en https://murmurmaps.murmurations.network/index-updater para enviarlo o actualizarlo.
These hosted tools are the easiest way to begin, though they do mean that someone else holds your data. Hosting the JSON on your own domain — which is what the rest of this guide covers — gives you the most control, and the strongest claim to your own organisation’s entry. Choose whichever fits your network’s capacity.
Los esquemas
Un perfil declara qué esquemas sigue en esquemas_vinculados. Una organización de permacultura debería enlazar ambos de estos:
| Esquema | Propósito | URL de la biblioteca |
|---|---|---|
organizaciones_esquema-v1.0.0 | La identidad base de cualquier grupo, proyecto u organización | https://library.murmurations.network/v2/schemas/organizations_schema-v1.0.0 |
permacultura_complemento_esquema-v1.0.0 | Campos específicos de permacultura | https://library.murmurations.network/v2/schemas/permaculture_addon_schema-v1.0.0 |
organizaciones_esquema-v1.0.0 campos
Requerido: esquemas_vinculados, nombre.
| Campo | Escribir | Notas |
|---|---|---|
esquemas_vinculados | matriz | Requerido. Enumere todos los esquemas que vincula, por ejemplo. ["organizations_schema-v1.0.0","permaculture_addon_schema-v1.0.0"] |
nombre | cadena | Requerido. The organisation’s name |
apodo | cadena | Nombre corto o alternativo |
url_primaria | cadena | Tu sitio web. Muy recomendado — lo usamos para reconocer la misma organización a través de redes (desduplicación) |
etiquetas | matriz | Palabras clave y tipos. Pon tu etiqueta de red acordada aquí para que te recojamos |
urls | matriz | Otros enlaces: { "name": "Facebook", "url": "https://…" } |
Descripción | cadena | La organización es una entidad compleja compuesta por individuos que trabajan juntos hacia objetivos comunes. Implica una estructura definida, roles y responsabilidades, y procesos para guiar las acciones y la toma de decisiones. El éxito de una organización depende de factores como la comunicación efectiva, el liderazgo, la colaboración, la adaptabilidad y la capacidad de asignar recursos de manera eficiente. Ya sea una empresa, una institución de caridad o un organismo gubernamental, las organizaciones desempeñan un papel crucial en la sociedad, abordando diversas necesidades e impulsando el progreso. |
misión | cadena | Misión o propósito |
estado | cadena (enumeración) | activo · Completado · cancelado · en espera · en_planificación |
dirección_completa | cadena | Dirección postal |
país_iso_3166 | cadena (enumeración) | Código de país de dos letras, por ejemplo. Reino Unido, KE, EN |
geolocalización | objeto | { "lat": <number>, "lon": <number> } — necesitaba aparecer en el mapa |
imagen | cadena | URL del logotipo |
imagen_encabezado | cadena | URL del banner |
imágenes | matriz | Más imágenes |
rss | cadena | URL del feed RSS |
relaciones | matriz | Enlaces a otros perfiles de Murmurations |
comienza_a / finaliza_en | número | Marcas de tiempo de Unix (para entidades con tiempo limitado) |
detalles de contacto | objeto | { "email": "hi@org.example", "contact_form": "https://org.example/contact" } |
teléfono | cadena | Número de teléfono |
alcance_geográfico | cadena (enumeración) | local · regional · nacional · internacional |
id_unico | cadena | Una ID estable que controlas. Si está presente, la usamos como la clave de deduplicación más sólida. |
permacultura_complemento_esquema-v1.0.0 campos
Requerido: esquemas_vinculados (ya cubierto arriba).
| Campo | Escribir | Notas / valores permitidos |
|---|---|---|
tipo_organización | matriz (enumeración) | Asociación · Red · Grupo · Proyecto · Escuela o academia de permacultura · Permaculture designers' organisation or cooperative · Otra organización |
Permacultura_dominios | matriz (enumeración) | Entorno construido · Cultura y Educación · Salud y Bienestar · Finanzas y Economía · Gestión de la Tierra y la Naturaleza · Tenencia de la tierra y gobernanza comunitaria · Herramientas y Tecnología |
formas de participar | matriz (enumeración) | Únete como miembro · Voluntario · Donar · Visítanos · Compre nuestros productos o servicios · Inscríbete en nuestras actividades · Otros - vea nuestro sitio web o redes sociales para más detalles |
Propósito | cadena | Texto libre |
número_de_miembros | número | |
número_de_beneficiarios | número | |
alcance geográfico | cadena | Texto libre describiendo tu alcance |
etiquetas_liderazgo | matriz | Liderazgo, dirección, impulso, guía, influencia, autoridad, iniciativa, toma de decisiones, visión, estrategia, inspiración, ejemplo, gestión, organización, coordinación, colaboración, equipo, motivación, responsabilidad, delegación. |
fecha_agregada | número | Marca de tiempo Unix |
Los valores del enumerado deben coincidir exactamente, incluyendo las mayúsculas y el apóstrofo en
designers'. Cualquier cosa fuera de la lista fallará la validación.
Un perfil completo de ejemplo
{
"linked_schemas": [
"organizations_schema-v1.0.0",
"permaculture_addon_schema-v1.0.0"
],
"name": "Permaculture Association Britain",
"nickname": "PAB",
"primary_url": "https://www.permaculture.org.uk",
"description": "The membership charity supporting permaculture across Britain.",
"tags": ["permaculture", "pc-network:permaculture-britain"],
"urls": [
{ "name": "Forum", "url": "https://www.permaculture.org.uk/forums" }
],
"country_iso_3166": "GB",
"geolocation": { "lat": 51.5074, "lon": -0.1278 },
"image": "https://www.permaculture.org.uk/logo.png",
"contact_details": { "email": "hello@permaculture.org.uk" },
"geographic_scope": "national",
"status": "active",
"unique_id": "pab-uk",
"org_type": ["Association", "Network"],
"permaculture_domains": ["Culture and Education", "Land and Nature Stewardship"],
"ways_to_get_involved": ["Join as a member", "Volunteer", "Donate"]
}
Los dos esquemas enlazados se fusionan en un único objeto plano, por lo que los campos de organización y los campos del complemento de permacultura se encuentran uno al lado del otro.
Alojamiento del perfil
Sirva ese JSON a URL estable y accesible públicamente que controles, con Content-Type: application/json. Cualquiera de estos servirá:
- Un archivo estático en tu sitio, como
https://your-org.example/murmurations.json - Un punto de conexión CMS o una función sin servidor que devuelve el JSON
- Un archivo generado en tu pipeline de CI/CD
Si publicas muchos organizaciones —una red con docenas de miembros— le da a cada una su propia URL, por ejemplo https://your-network.example/murmurations/{slug}.json.
Enviando al índice
Díganle al Índice de Murmuraciones dónde reside su perfil. Lo obtendrá, lo validará y comenzará a servirlo a los agregadores, incluidos nosotros.
POST https://index.murmurations.network/v2/nodes
Content-Type: application/json
{ "profile_url": "https://your-org.example/murmurations.json" }
Una respuesta exitosa devuelve una id_nodo tu SHA-256 url_perfil) y una estado. Puedes consultarlo en cualquier momento:
GET https://index.murmurations.network/v2/nodes/{node_id}
- Valida primero — te ahorra muchas molestias. Puedes revisar un perfil antes tú alojas o envías algo enviando la perfil completo JSON al validador:
POST https://index.murmurations.network/v2/validate
Content-Type: application/json
{ …your full profile JSON, including linked_schemas… }
Devuelve éxito o una lista de errores precisos a nivel de campo, cada uno con un Puntero JSON como /geolocalización/lat. No se requiere alojamiento.
- Actualizando. Edita tu JSON alojado, luego envía lo mismo
url_perfilotra vez — volver a enviar es lo que hace que el índice vuelva a obtener la información. Esto es importante: el índice no consulta los perfiles en buen estado de forma programada, por lo que un cambio en su archivo no se detecta hasta que lo vuelve a enviar. Volver a enviar contenido sin cambios no causa daño y no actualizará su marca de tiempo. - Eliminando. Pon el perfil sin conexión para que su URL deje de devolver el JSON
404es la forma habitual), entonces llamarELIMINAR https://index.murmurations.network/v2/nodes/{node_id}. El índice verifica la URL primero y se negará mientras el perfil todavía se esté sirviendo. Alternativamente, establezca unexpiracampo (una marca de tiempo de Unix) en el perfil, y el índice lo elimina automáticamente una vez que pasa ese tiempo. De cualquier manera, luego desaparece de los mapas que lo agregan, incluidos los nuestros.
Puedes ensayar todo esto de forma segura. Hay un entorno de prueba completo —
https://test-index.murmurations.network/v2para validar y enviar, yhttps://test-library.murmurations.network/v2para esquemas — así puedes probar cosas sin tocar producción. No se necesita cuenta ni clave de API en ninguna parte.
Fragmentos de código
Cada fragmento (a) crea un objeto de perfil y (b) envía su URL alojada al índice. Adapta perfil a tus propios datos, y aloja el JSON serializado en profileUrl.
TypeScript / Node
type Geo = { lat: number; lon: number };
interface PermacultureProfile {
linked_schemas: string[];
name: string;
primary_url?: string;
tags?: string[];
country_iso_3166?: string;
geolocation?: Geo;
org_type?: string[];
permaculture_domains?: string[];
ways_to_get_involved?: string[];
unique_id?: string;
}
const profile: PermacultureProfile = {
linked_schemas: ["organizations_schema-v1.0.0", "permaculture_addon_schema-v1.0.0"],
name: "Permaculture Association Britain",
primary_url: "https://www.permaculture.org.uk",
tags: ["permaculture", "pc-network:permaculture-britain"],
country_iso_3166: "GB",
geolocation: { lat: 51.5074, lon: -0.1278 },
org_type: ["Association", "Network"],
permaculture_domains: ["Culture and Education"],
ways_to_get_involved: ["Join as a member", "Volunteer"],
unique_id: "pab-uk",
};
// 1. Host JSON.stringify(profile) at this URL yourself, then:
const profileUrl = "https://www.permaculture.org.uk/murmurations.json";
// 2. Register it with the index.
const res = await fetch("https://index.murmurations.network/v2/nodes", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ profile_url: profileUrl }),
});
console.log(res.status, await res.json());
Python
import json
import requests
profile = {
"linked_schemas": [
"organizations_schema-v1.0.0",
"permaculture_addon_schema-v1.0.0",
],
"name": "Permaculture Association Britain",
"primary_url": "https://www.permaculture.org.uk",
"tags": ["permaculture", "pc-network:permaculture-britain"],
"country_iso_3166": "GB",
"geolocation": {"lat": 51.5074, "lon": -0.1278},
"org_type": ["Association", "Network"],
"permaculture_domains": ["Culture and Education"],
"ways_to_get_involved": ["Join as a member", "Volunteer"],
"unique_id": "pab-uk",
}
# 1. Host this JSON at a URL you control:
with open("murmurations.json", "w", encoding="utf-8") as f:
json.dump(profile, f, ensure_ascii=False, indent=2)
profile_url = "https://www.permaculture.org.uk/murmurations.json"
# 2. Submit it to the index:
res = requests.post(
"https://index.murmurations.network/v2/nodes",
json={"profile_url": profile_url},
timeout=15,
)
print(res.status_code, res.json())
PHP
<?php
$profile = [
'linked_schemas' => [
'organizations_schema-v1.0.0',
'permaculture_addon_schema-v1.0.0',
],
'name' => 'Permaculture Association Britain',
'primary_url' => 'https://www.permaculture.org.uk',
'tags' => ['permaculture', 'pc-network:permaculture-britain'],
'country_iso_3166' => 'GB',
'geolocation' => ['lat' => 51.5074, 'lon' => -0.1278],
'org_type' => ['Association', 'Network'],
'permaculture_domains' => ['Culture and Education'],
'ways_to_get_involved' => ['Join as a member', 'Volunteer'],
'unique_id' => 'pab-uk',
];
// 1. Host this JSON at a URL you control:
file_put_contents('murmurations.json', json_encode($profile, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
$profileUrl = 'https://www.permaculture.org.uk/murmurations.json';
// 2. Submit it to the index:
$ch = curl_init('https://index.murmurations.network/v2/nodes');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['profile_url' => $profileUrl]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE) . "n" . $response . "n";
curl_close($ch);
Deduplicación y traspasos
Si dos redes enumeran la misma organización, nuestro mapa las colapsa en una sola entrada y muestra la actualizado más recientemente perfil. Los empareja en un compartido url_primaria (normalizado) o uno compartido id_unico. Unas pocas cosas se derivan de eso:
- Siempre pon
url_primaria, y, idealmenteid_unicotambién. Es como sabemos que dos entradas son la misma organización. - Cuando una red regional se hace cargo de una organización que CoLab había estado listando como un marcador de posición, la red simplemente publica un perfil más actualizado, y este se convierte en la entrada canónica por sí sola.
- Si dos redes no están de acuerdo sobre quién debe listar una organización, no hay una autoridad central para resolverlo. CoLab puede ayudarle a discutirlo, pero no puede anular una red. En la práctica, el mecanismo anterior tiende a resolver las cosas: quienquiera que la organización misma reconozca mantiene su perfil actualizado, y el perfil más actualizado es el que se muestra. Si es necesario, un operador también puede fijar un perfil particular como el canónico en nuestro propio mapa.
Ampliando con tus propios datos
¿Almacena datos que ningún esquema existente cubre, como tipo de suelo, lluvia promedio, zona climática? Tiene tres opciones, en orden de preferencia.
A quick note: today’s
permacultura_complemento_esquema-v1.0.0no tiene campos ambientales ni cuantitativos en absoluto: ni suelo, ni lluvia ni clima. Para datos como ese, que genuinamente no tienen campo aún, se aplica la opción 2 o 3.
1. Reutilice un esquema compartido si ya existe uno. Navegar biblioteca primero. Si el campo ya está estandarizado, simplemente agregue ese esquema a su esquemas_vinculados. Nuestro mapa renderiza cualquier campo documentado automáticamente, por lo que nada cambia de nuestro lado.
2. Proponer un nuevo esquema compartido: el camino correcto a largo plazo. Así es precipitacion_anual_promedio_mm se convierte uno campo acordado en lugar de cinco incompatibles. En resumen: háblanos Primero, como supervisamos los esquemas de permacultura y ayudamos a que las redes converjan en nombres compartidos; luego bifurcar MurmuracionesBiblioteca, agrega un archivo de esquema draft-07 bajo /esquemas/, y abrir una solicitud de extracción en prueba rama. Se implementa en el entorno de pruebas cuando se fusiona, y los mantenedores luego promocionan prueba → principal para producción. Una cosa a saber: no puedes alojar tú mismo un esquema y apuntar esquemas_vinculados en tu propia URL. esquemas_vinculados contiene esquema vacío Nombres, el cual el índice resuelve solo contra la biblioteca central, por lo que un nuevo campo compartido siempre pasa por esa solicitud de extracción.
If you would like a worked example — taking a soil or rainfall field all the way from “no field exists” to “live on the map”, with the actual schema file and the steps to test it first — Ponerse en contacto y te guiaremos a través de él.
**3. Se necesita un campo en el mapa hoy, ¿antes de que exista algún esquema?** Como los esquemas no prohíben propiedades adicionales, puedes añadir tus propios campos a un perfil (usa nombres en minúsculas y separados por guiones bajos, por ejemplo. "average_annual_rainfall_mm": 850) y pasarán la validación y se almacenarán. Nuestras páginas de detalles ya muestran cualquier campo de este tipo con una etiqueta legible. Trate esto solo como una solución temporal: estos campos no están validados por esquema, otros agregadores que solo leen campos declarados los ignorarán y se basa en el comportamiento actual del índice que no es una característica garantizada. Indíquenos qué campos adicionales está utilizando y aceleraremos su estandarización en la opción 2.
La convergencia —todos buscando el mismo esquema compartido— es el propósito fundamental. Publica abiertamente, enlaza esquemas compartidos y tus datos se volverán útiles mucho más allá de nuestro único mapa.
Preguntas que las redes suelen hacer
¿Con qué rapidez aparece mi información y con qué rapidez aparecen las actualizaciones? Hay dos saltos, y ambos son de tipo pull. Primero, el índice solo se entera de un cambio cuando vuelves a enviar tu url_perfil, ya que no sondea perfiles saludables. Segundo, cada mapa vuelve a consultar el índice en su propio horario; el nuestro se sincroniza cada hora, por lo que una actualización llega a nuestro mapa aproximadamente una hora después de que vuelvas a enviarlo. No hay una difusión global; cada agregador extrae.
How do I remove someone, or honour a “delete my data” request? Pon el perfil sin conexión y llama ELIMINAR …/v2/nodos/{node_id} (ver Enviando al índice). Deletion stops nuevo agregación y borra el índice, pero no puede retirar copias que un mapa ya haya extraído; estas se borran cuando cada mapa se resincroniza. Tenga eso en cuenta antes de publicar personas.
¿Puedo publicar personas, proyectos o eventos, no solo organizaciones? Sí. Murmurations tiene otros esquemas, como esquema_personas, and our map is schema-agnostic: it will show any profile type, filterable. But personal data is sensitive. The index is fully public, so only publish a person’s name, contact details or address con su consentimiento explícito, and publish the minimum needed. Organisation data is unrestricted; member and people data is the publishing network’s legal responsibility.
¿Cómo maneja CoLab la privacidad y el GDPR para los datos? it ¿publica?** Mantenemos una política de GDPR y una casilla de verificación de consentimiento. CoLab solo publica los datos personales de los miembros de CoLab que han aceptado activamente, y solo los campos que acordaron. Retirar el consentimiento es el interruptor: cuando alguien se da de baja, dejamos de publicarlos, sacamos el perfil de línea y, dado que todo el proceso se actualiza cada hora, sus datos desaparecen de los mapas en aproximadamente una hora. Solo podemos hablar por la parte nosotros publicar; cada otra red que publique personas tiene que ejecutar su propio equivalente — una base legal para publicar, un paso de consentimiento claro y una forma rápida de retirar. Murmurations en sí mismo no te da nada de ese soporte, ya que el índice es simplemente público, por lo que tiene que convivir con la red de publicación.
¿Publicará el CoLab mi organización sin que yo lo pida? No. The CoLab only publishes an organisation’s profile when the organisation asks us to, and only when it is permaculture-related — the kind of thing this map is for. We do not scrape or list groups uninvited. (Your own network can of course publish its members under its own tag — that is between you and them.)
¿Qué datos míos aparecen realmente? En el mapa: un pasador (que necesita geolocalización) with the name, locality and links. In the directory and on the organisation’s detail page: every field from your linked schemas, plus any extra fields, each with a readable label.
¿Y si tu mapa —o el índice— desaparece? Your data is portable by design. You host it, and you own it. Any Murmurations-based map can aggregate the same profiles, so you are never locked into us. That is the main reason to publish in this open format rather than fill in someone’s private database.
Who decides my network’s tag? Nadie posee el espacio de nombres de etiquetas; las etiquetas de Murmurations son solo texto libre, y no podemos (ni querríamos) controlarlas. Lo que hace el CoLab es recomendar una convención, red de ordenadores: (por ejemplo pc-network:permacultura-granbretaña), y mantén un registro informal para que dos redes no escojan accidentalmente la misma. Pregúntanos which tag to use before you publish. The more networks that adopt the convention, the better everyone’s data lines up. It works by collaboration, not by enforcement.
¿Necesito una cuenta o una clave API? No — not with us, and not with the index. Control is proven by your control of the profile’s URL.
Lista de verificación
- ☐ Los enlaces del perfil ambos esquemas en
esquemas_vinculados - ☐
nombreestá configurado;url_primariaestá configurado (para deduplicación);geolocalizaciónestá configurado (para el mapa) - ☐ Tu etiqueta de red está en
etiquetas - ☐ Los valores de enumeración coinciden exactamente (
tipo_organización,Permacultura_dominios,formas de participar,país_iso_3166,estado,alcance_geográfico) - ☐ Validado mediante
POST /v2/validar, para detectar errores antes de salir en vivo - ☐ El perfil está alojado en una URL pública estable que devuelve
aplicación/json - ☐ El
url_perfilse envía ahttps://index.murmurations.network/v2/nodes - ☐ (Opcional) verificado mediante
GET /v2/nodos/{node_id}