{"id":63,"date":"2026-06-29T19:20:19","date_gmt":"2026-06-29T19:20:19","guid":{"rendered":"http:\/\/francerezy.cluster015.ovh.net\/?page_id=63"},"modified":"2026-09-01T23:19:12","modified_gmt":"2026-09-01T23:19:12","slug":"expeditions-nationales","status":"publish","type":"page","link":"https:\/\/antsound.net\/index.php\/expeditions-nationales\/","title":{"rendered":"Exp\u00e9ditions Nationales"},"content":{"rendered":"\n<style data-wp-block-html=\"css\">\n.ml-form {\n  max-width: 700px;\n  margin: auto;\n}\n\n\n.ml-input {\n  width: 100%;\n  padding: 12px;\n  margin-bottom: 12px;\n  font-size: 16px;\n  border: 1px solid #ccc;\n  border-radius: 6px;\n}\n\n.ml-row {\n  display: flex;\n  gap: 10px;\n}\n\n.ml-row .ml-input {\n  flex: 1;\n}\n\nbutton#submitBoxtal {\n  width: 100%;\n  padding: 14px;\n  background: #0073aa;\n  color: white;\n  border: none;\n  border-radius: 6px;\n  font-size: 18px;\n  cursor: pointer;\n}\n\nbutton#submitBoxtal:hover {\n  background: #005f8d;\n}\n\n.ml-suggestions {\n  position: absolute;\n  background: #fff;\n  border: 1px solid #ccc;\n  max-height: 180px;\n  overflow-y: auto;\n  width: 100%;\n  z-index: 9999;\n}\n\n#boxtal_offers button {\n  display: block;\n  width: 100%;\n  margin-top: 8px;\n  padding: 10px 12px;\n  cursor: pointer;\n}\n.ml-suggestions {\n  \n  left: 0;\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\n<script>\n\/\/ -------- 1. AUTOCOMPL\u00c9TION DES ADRESSES (API officielle data.gouv.fr) --------\nasync function autocompleteAddress(inputId, suggestionsId, zipId, cityId) {\n  const input = document.getElementById(inputId);\n  const container = document.getElementById(suggestionsId);\n\n  if (!input || !container) return;\n\n  input.addEventListener(\"input\", async () => {\n    const q = input.value.trim();\n    container.innerHTML = \"\";\n    if (q.length < 3) return;\n\n    try {\n      const res = await fetch(\"https:\/\/data.gouv.fr\" + encodeURIComponent(q) + \"&#038;limit=5\");\n      const data = await res.json();\n\n      data.features.forEach(f => {\n        const s = document.createElement(\"div\");\n        s.textContent = f.properties.label;\n\n        s.onclick = () => {\n          input.value = f.properties.name || f.properties.label;\n          document.getElementById(zipId).value = f.properties.postcode || \"\";\n          document.getElementById(cityId).value = f.properties.city || \"\";\n          container.innerHTML = \"\";\n        };\n\n        container.appendChild(s);\n      });\n\n    } catch (e) {\n      console.error(\"Erreur autocompl\u00e9tion\", e);\n    }\n  });\n\n  \/\/ Fermer les suggestions si on clique ailleurs sur l'\u00e9cran\n  document.addEventListener(\"click\", (e) => {\n    if (!container.contains(e.target) && e.target !== input) {\n      container.innerHTML = \"\";\n    }\n  });\n}\n\n\/\/ Activer l'autocompl\u00e9tion pour l'Exp\u00e9diteur et le Destinataire\nautocompleteAddress(\"senderAddress\", \"senderAddress_suggestions\", \"senderZip\", \"senderCity\");\nautocompleteAddress(\"recipientAddress\", \"recipientAddress_suggestions\", \"recipientZip\", \"recipientCity\");\n\n\n\/\/ -------- 2. VALIDATION DES CHAMPS OBLIGATOIRES --------\nfunction validateNationalForm() {\n  const required = [\n    \"senderFirstName\",\"senderLastName\",\"senderEmail\",\"senderPhone\",\n    \"senderAddress\",\"senderZip\",\"senderCity\",\n    \"recipientFirstName\",\"recipientLastName\",\"recipientEmail\",\"recipientPhone\",\n    \"recipientAddress\",\"recipientZip\",\"recipientCity\",\n    \"parcelWeight\",\"parcelLength\",\"parcelWidth\",\"parcelHeight\",\n    \"shippingMode\"\n  ];\n\n  for (const id of required) {\n    const el = document.getElementById(id);\n    if (!el || !el.value.trim()) {\n      alert(\"Veuillez remplir tous les champs obligatoires.\");\n      return false;\n    }\n  }\n  return true;\n}\n\n\n\/\/ -------- 3. CONTR\u00d4LE S\u00c9CURIT\u00c9 POIDS + DIMENSIONS DE VOS COLIS --------\nfunction checkParcelFields() {\n  const w = parseFloat(document.getElementById(\"parcelWeight\").value || \"0\");\n  const L = parseFloat(document.getElementById(\"parcelLength\").value || \"0\");\n  const W = parseFloat(document.getElementById(\"parcelWidth\").value || \"0\");\n  const H = parseFloat(document.getElementById(\"parcelHeight\").value || \"0\");\n\n  const errors = [];\n\n  if (w <= 0) errors.push(\"Poids invalide.\");\n  if (w > 30) errors.push(\"Poids maximum d\u00e9pass\u00e9 (30 kg).\");\n\n  if (L <= 0 || W <= 0 || H <= 0) errors.push(\"Veuillez remplir toutes les dimensions du colis.\");\n\n  if (L > 120) errors.push(\"Longueur maximale d\u00e9pass\u00e9e (120 cm).\");\n  if (W > 60) errors.push(\"Largeur maximale d\u00e9pass\u00e9e (60 cm).\");\n  if (H > 60) errors.push(\"Hauteur maximale d\u00e9pass\u00e9e (60 cm).\");\n\n  if (L + W + H > 300) errors.push(\"La somme des dimensions ne doit pas d\u00e9passer 300 cm.\");\n\n  if (errors.length) {\n    alert(errors.join(\"\\n\"));\n    return false;\n  }\n\n  return true;\n}\n\n\n\/\/ -------- 4. D\u00c9CLENCHEMENT DE L'API & LIAISON TUNNEL DE PAIEMENT WOOCOMMERCE --------\ndocument.getElementById(\"submitBoxtal\").onclick = () => {\n\n  if (!validateNationalForm()) return;\n  if (!checkParcelFields()) return;\n\n  const mode = document.getElementById(\"shippingMode\").value;\n  const offersDiv = document.getElementById(\"boxtal_offers\");\n  const mapDiv = document.getElementById(\"boxtal_map_container\");\n\n  offersDiv.innerHTML = \"\";\n  mapDiv.style.display = \"none\";\n\n  \/\/ Si l'utilisateur choisit la livraison en point relais\n  if (mode === \"relay\") {\n    mapDiv.style.display = \"block\";\n    mapDiv.innerHTML = \"<p style='padding:10px; background:#fffbe6; border-left:4px solid #fffb8f;'>La carte des points relais Boxtal sera activ\u00e9e apr\u00e8s la validation technique de vos identifiants d'API Boxtal.<\/p>\";\n    return;\n  }\n\n  \/\/ Simulation des offres renvoy\u00e9es par l'API Boxtal (\u00c0 connecter \u00e0 votre token r\u00e9el ensuite)\n  const offers = [\n    { carrier: \"Colissimo\", product: \"Standard (Domicile)\", price: 8.60 },\n    { carrier: \"Chronopost\", product: \"Express 13h\", price: 13.50 },\n    { carrier: \"Mondial Relay\", product: \"Home (Domicile)\", price: 4.90 }\n  ];\n\n   \/\/ Boucle corrig\u00e9e pour forcer l'ajout et la redirection vers Stripe\n  offers.forEach(rate => {\n    const btn = document.createElement(\"button\");\n    btn.className = \"ml-btn-carrier\";\n    btn.style = \"display:block; width:100%; margin-top:8px; padding:10px 12px; cursor:pointer;\";\n    btn.innerText = `${rate.carrier} \u2013 ${rate.product} \u2013 ${rate.price.toFixed(2)}\u20ac`;\n    \n    btn.onclick = async () => {\n      btn.innerText = \"Redirection vers le paiement s\u00e9curis\u00e9...\";\n      btn.disabled = true;\n\n      try {\n        \/\/ 1. On vide d'abord le panier existant pour \u00e9viter les cumuls de colis\n        await fetch('\/index.php\/panier\/?clear-cart=true');\n\n        \/\/ 2. Utilisation de l'URL d'achat direct native de WooCommerce\n        \/\/ Elle ajoute le produit 409 et envoie la variable boxtal_price \u00e0 notre snippet PHP\n        const urlAchatDirect = `https:\/\/antsound.net{rate.price}`;\n        \n        \/\/ 3. Redirection instantan\u00e9e forc\u00e9e vers la page Stripe\n        window.location.href = urlAchatDirect;\n\n      } catch (error) {\n        console.error(\"Erreur de redirection :\", error);\n        alert(\"Le serveur de paiement n'a pas r\u00e9pondu.\");\n        btn.innerText = `${rate.carrier} \u2013 ${rate.product} \u2013 ${rate.price.toFixed(2)}\u20ac`;\n        btn.disabled = false;\n      }\n    };\n    offersDiv.appendChild(btn);\n  });\n\n\n      \/\/ Pr\u00e9paration de l'envoi des donn\u00e9es vers le panier WooCommerce\n      const formData = new FormData();\n      formData.append('action', 'woocommerce_add_to_cart');\n      formData.append('product_id', '409'); \/\/ Inject\u00e9 de fa\u00e7on s\u00e9curis\u00e9e sur votre produit 409\n      formData.append('quantity', '1');\n      formData.append('boxtal_price', rate.price); \/\/ Transmission du montant calcul\u00e9\n\n      try {\n        \/\/ Vider d'abord le panier existant pour \u00e9viter les cumuls de colis\n        await fetch('\/index.php\/panier\/?clear-cart=true');\n\n        \/\/ Ajouter le produit 409 avec son prix mis \u00e0 jour\n        const response = await fetch('\/?wc-ajax=add_to_cart', {\n          method: 'POST',\n          body: formData\n        });\n\n        if (response.ok) {\n          \/\/ Redirection directe vers votre page de paiement unifi\u00e9e (sans www)\n          window.location.href = \"https:\/\/antsound.net\";\n        } else {\n          alert(\"Erreur technique lors de la liaison au panier WooCommerce.\");\n          btn.innerText = `${rate.carrier} \u2013 ${rate.product} \u2013 ${rate.price.toFixed(2)}\u20ac`;\n          btn.disabled = false;\n        }\n      } catch (error) {\n        console.error(\"Erreur de tunnel de paiement :\", error);\n        alert(\"Le serveur de paiement n'a pas r\u00e9pondu.\");\n        btn.disabled = false;\n      }\n    };\n    offersDiv.appendChild(btn);\n  });\n};\n<\/script>\n\n<div class=\"ml-form\">\n\n  <h2>Exp\u00e9diteur<\/h2>\n\n  <div class=\"ml-row\">\n    <input id=\"senderFirstName\" class=\"ml-input\" placeholder=\"Pr\u00e9nom\">\n    <input id=\"senderLastName\" class=\"ml-input\" placeholder=\"Nom\">\n  <\/div>\n\n  <div class=\"ml-row\">\n    <input id=\"senderEmail\" class=\"ml-input\" placeholder=\"Email\">\n    <input id=\"senderPhone\" class=\"ml-input\" placeholder=\"T\u00e9l\u00e9phone\">\n  <\/div>\n<div class=\"ml-address-group\">\n  <input id=\"senderAddress\" class=\"ml-input\" placeholder=\"Adresse\">\n  <input id=\"senderAddress2\" class=\"ml-input\" placeholder=\"Compl\u00e9ment d'adresse (optionnel)\">\n<\/div>\n  <div id=\"senderAddress_suggestions\" class=\"ml-suggestions\"><\/div>\n\n  <div class=\"ml-row\">\n    <input id=\"senderZip\" class=\"ml-input\" placeholder=\"Code postal\">\n    <input id=\"senderCity\" class=\"ml-input\" placeholder=\"Ville\">\n    <input id=\"senderCountry\" class=\"ml-input\" placeholder=\"Pays\" value=\"FR\">\n  <\/div>\n\n\n  <h2>Destinataire<\/h2>\n\n  <div class=\"ml-row\">\n    <input id=\"recipientFirstName\" class=\"ml-input\" placeholder=\"Pr\u00e9nom\">\n    <input id=\"recipientLastName\" class=\"ml-input\" placeholder=\"Nom\">\n  <\/div>\n\n  <div class=\"ml-row\">\n    <input id=\"recipientEmail\" class=\"ml-input\" placeholder=\"Email\">\n    <input id=\"recipientPhone\" class=\"ml-input\" placeholder=\"T\u00e9l\u00e9phone\">\n  <\/div>\n  <div class=\"ml-address-group\">\n  <input id=\"recipientAddress\" class=\"ml-input\" placeholder=\"Adresse\">\n  <input id=\"recipientAddress2\" class=\"ml-input\" placeholder=\"Compl\u00e9ment d'adresse (optionnel)\">\n<\/div>\n  <div id=\"recipientAddress_suggestions\" class=\"ml-suggestions\"><\/div>\n\n  <div class=\"ml-row\">\n    <input id=\"recipientZip\" class=\"ml-input\" placeholder=\"Code postal\">\n    <input id=\"recipientCity\" class=\"ml-input\" placeholder=\"Ville\">\n    <input id=\"recipientCountry\" class=\"ml-input\" placeholder=\"Pays\" value=\"FR\">\n  <\/div>\n\n\n  <h2>Colis<\/h2>\n\n  <div class=\"ml-row\">\n    <input id=\"parcelWeight\" class=\"ml-input\" type=\"number\" step=\"0.1\" placeholder=\"Poids (kg)\">\n    <input id=\"parcelLength\" class=\"ml-input\" type=\"number\" placeholder=\"Longueur (cm)\">\n    <input id=\"parcelWidth\" class=\"ml-input\" type=\"number\" placeholder=\"Largeur (cm)\">\n    <input id=\"parcelHeight\" class=\"ml-input\" type=\"number\" placeholder=\"Hauteur (cm)\">\n  <\/div>\n\n  <h3>Mode d'exp\u00e9dition<\/h3>\n  <select id=\"shippingMode\" class=\"ml-input\">\n    <option value=\"\">S\u00e9lectionnez...<\/option>\n    <option value=\"home\">Transporteur (livraison \u00e0 domicile)<\/option>\n    <option value=\"relay\">Point relais<\/option>\n  <\/select>\n\n  <button id=\"submitBoxtal\" type=\"button\">Voir les transporteurs<\/button>\n\n  <div id=\"boxtal_map_container\" style=\"margin-top:20px; display:none;\"><\/div>\n\n  <div id=\"boxtal_offers\" style=\"margin-top:20px;\"><\/div>\n\n<\/div>\n<style>\n  .ml-form { max-width: 900px; margin: 0 auto; }\n\n  .ml-row { \n    display: flex; \n    flex-wrap: wrap; \n    gap: 10px; \n    margin-bottom: 10px; \n  }\n\n  .ml-row input { \n    flex: 1 1 200px; \n    padding: 8px; \n  }\n\n  #submitBoxtal { \n    margin-top: 15px; \n    padding: 10px 20px; \n    cursor: pointer; \n  }\n\n  #boxtal_offers button { \n    display: block; \n    width: 100%;\n    margin-top: 8px; \n    padding: 10px 12px; \n    cursor: pointer; \n  }\n\n  .ml-suggestions {\n    position: absolute;\n    background: #fff;\n    border: 1px solid #ccc;\n    max-height: 180px;\n    overflow-y: auto;\n    width: 100%;\n    z-index: 9999;\n  }\n\n  .ml-suggestions div { \n    padding: 6px 8px; \n    cursor: pointer; \n  }\n\n  .ml-suggestions div:hover { \n    background: #f0f0f0; \n  }\n<\/style>\n\n\n<script>\n\/\/ -------- AUTOCOMPL\u00c9TION --------\nasync function autocompleteAddress(inputId, suggestionsId, zipId, cityId) {\n  const input = document.getElementById(inputId);\n  const container = document.getElementById(suggestionsId);\n\n  input.addEventListener(\"input\", async () => {\n    const q = input.value.trim();\n    container.innerHTML = \"\";\n    if (q.length < 3) return;\n\n    try {\n      const res = await fetch(\"https:\/\/api-adresse.data.gouv.fr\/search\/?q=\" + encodeURIComponent(q) + \"&#038;limit=5\");\n      const data = await res.json();\n\n      data.features.forEach(f => {\n        const s = document.createElement(\"div\");\n        s.textContent = f.properties.label;\n\n        s.onclick = () => {\n          input.value = f.properties.name || f.properties.label;\n          document.getElementById(zipId).value = f.properties.postcode || \"\";\n          document.getElementById(cityId).value = f.properties.city || \"\";\n          container.innerHTML = \"\";\n        };\n\n        container.appendChild(s);\n      });\n\n    } catch (e) {\n      console.error(\"autocomplete error\", e);\n    }\n  });\n\n  document.addEventListener(\"click\", (e) => {\n    if (!container.contains(e.target) && e.target !== input) {\n      container.innerHTML = \"\";\n    }\n  });\n}\n\n\/\/ Exp\u00e9diteur\nautocompleteAddress(\"senderAddress\", \"senderAddress_suggestions\", \"senderZip\", \"senderCity\");\n\/\/ Destinataire\nautocompleteAddress(\"recipientAddress\", \"recipientAddress_suggestions\", \"recipientZip\", \"recipientCity\");\n\n\n\/\/ -------- VALIDATION COMPLETE --------\nfunction validateNationalForm() {\n  const required = [\n    \"senderFirstName\",\"senderLastName\",\"senderEmail\",\"senderPhone\",\n    \"senderAddress\",\"senderZip\",\"senderCity\",\n    \"recipientFirstName\",\"recipientLastName\",\"recipientEmail\",\"recipientPhone\",\n    \"recipientAddress\",\"recipientZip\",\"recipientCity\",\n    \"parcelWeight\",\"parcelLength\",\"parcelWidth\",\"parcelHeight\",\n    \"shippingMode\"\n  ];\n\n  for (const id of required) {\n    const el = document.getElementById(id);\n    if (!el || !el.value.trim()) {\n      alert(\"Veuillez remplir tous les champs obligatoires.\");\n      return false;\n    }\n  }\n  return true;\n}\n\n\n\/\/ -------- CONTR\u00d4LE POIDS + DIMENSIONS --------\nfunction checkParcelFields() {\n  const w = parseFloat(parcelWeight.value || \"0\");\n  const L = parseFloat(parcelLength.value || \"0\");\n  const W = parseFloat(parcelWidth.value || \"0\");\n  const H = parseFloat(parcelHeight.value || \"0\");\n\n  const errors = [];\n\n  if (w <= 0) errors.push(\"Poids invalide.\");\n  if (w > 30) errors.push(\"Poids maximum d\u00e9pass\u00e9 (30 kg).\");\n\n  if (L <= 0 || W <= 0 || H <= 0) errors.push(\"Veuillez remplir toutes les dimensions.\");\n\n  if (L > 120) errors.push(\"Longueur maximale d\u00e9pass\u00e9e (120 cm).\");\n  if (W > 60) errors.push(\"Largeur maximale d\u00e9pass\u00e9e (60 cm).\");\n  if (H > 60) errors.push(\"Hauteur maximale d\u00e9pass\u00e9e (60 cm).\");\n\n  if (L + W + H > 300) errors.push(\"Somme des dimensions > 300 cm.\");\n\n  if (errors.length) {\n    alert(errors.join(\"\\n\"));\n    return false;\n  }\n\n  return true;\n}\n\n\n\/\/ -------- 4. D\u00c9CLENCHEMENT DE L'API & LIAISON TUNNEL DE PAIEMENT WOOCOMMERCE --------\ndocument.getElementById(\"submitBoxtal\").onclick = () => {\n\n  if (!validateNationalForm()) return;\n  if (!checkParcelFields()) return;\n\n  const mode = document.getElementById(\"shippingMode\").value;\n  const offersDiv = document.getElementById(\"boxtal_offers\");\n  const mapDiv = document.getElementById(\"boxtal_map_container\");\n\n  offersDiv.innerHTML = \"\";\n  mapDiv.style.display = \"none\";\n\n  \/\/ Si l'utilisateur choisit la livraison en point relais\n  if (mode === \"relay\") {\n    mapDiv.style.display = \"block\";\n    mapDiv.innerHTML = \"<p style='padding:10px; background:#fffbe6; border-left:4px solid #fffb8f;'>La carte des points relais Boxtal sera activ\u00e9e apr\u00e8s la validation technique de vos identifiants d'API Boxtal.<\/p>\";\n    return;\n  }\n\n  \/\/ Simulation des offres renvoy\u00e9es par l'API Boxtal (\u00c0 connecter \u00e0 votre token r\u00e9el ensuite)\n  const offers = [\n    { carrier: \"Colissimo\", product: \"Standard (Domicile)\", price: 8.60 },\n    { carrier: \"Chronopost\", product: \"Express 13h\", price: 13.50 },\n    { carrier: \"Mondial Relay\", product: \"Home (Domicile)\", price: 4.90 }\n  ];\n\n  \/\/ Boucle pour g\u00e9n\u00e9rer les boutons et lier le produit technique ID 409\n  offers.forEach(rate => {\n    const btn = document.createElement(\"button\");\n    btn.className = \"ml-btn-carrier\";\n    btn.style = \"display:block; width:100%; margin-top:8px; padding:10px 12px; cursor:pointer;\";\n    btn.innerText = `${rate.carrier} \u2013 ${rate.product} \u2013 ${rate.price.toFixed(2)}\u20ac`;\n    \n    btn.onclick = async () => {\n      btn.innerText = \"Pr\u00e9paration de votre commande...\";\n      btn.disabled = true;\n\n      \/\/ Pr\u00e9paration de l'envoi des donn\u00e9es vers le panier WooCommerce\n      const formData = new FormData();\n      formData.append('action', 'woocommerce_add_to_cart');\n      formData.append('product_id', '409'); \/\/ Inject\u00e9 de fa\u00e7on s\u00e9curis\u00e9e sur votre produit 409\n      formData.append('quantity', '1');\n      formData.append('boxtal_price', rate.price); \/\/ Transmission du montant calcul\u00e9\n\n      try {\n        \/\/ Vider d'abord le panier existant pour \u00e9viter les cumuls de colis\n        await fetch('\/index.php\/panier\/?clear-cart=true');\n\n        \/\/ Ajouter le produit 409 avec son prix mis \u00e0 jour\n        const response = await fetch('\/?wc-ajax=add_to_cart', {\n          method: 'POST',\n          body: formData\n        });\n\n        if (response.ok) {\n          \/\/ Redirection directe vers votre page de paiement unifi\u00e9e (sans www)\n          window.location.href = \"https:\/\/antsound.net\/index.php\/panier\/\";\n        } else {\n          alert(\"Erreur technique lors de la liaison au panier WooCommerce.\");\n          btn.innerText = `${rate.carrier} \u2013 ${rate.product} \u2013 ${rate.price.toFixed(2)}\u20ac`;\n          btn.disabled = false;\n        }\n      } catch (error) {\n        console.error(\"Erreur de tunnel de paiement :\", error);\n        alert(\"Le serveur de paiement n'a pas r\u00e9pondu.\");\n        btn.disabled = false;\n      }\n    };\n    offersDiv.appendChild(btn);\n  });\n};\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Exp\u00e9diteur Destinataire Colis Mode d&rsquo;exp\u00e9dition S\u00e9lectionnez&#8230;Transporteur (livraison \u00e0 domicile)Point relais Voir les transporteurs<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-63","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/antsound.net\/index.php\/wp-json\/wp\/v2\/pages\/63","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/antsound.net\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/antsound.net\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/antsound.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/antsound.net\/index.php\/wp-json\/wp\/v2\/comments?post=63"}],"version-history":[{"count":76,"href":"https:\/\/antsound.net\/index.php\/wp-json\/wp\/v2\/pages\/63\/revisions"}],"predecessor-version":[{"id":625,"href":"https:\/\/antsound.net\/index.php\/wp-json\/wp\/v2\/pages\/63\/revisions\/625"}],"wp:attachment":[{"href":"https:\/\/antsound.net\/index.php\/wp-json\/wp\/v2\/media?parent=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}