{"id":231,"date":"2024-05-22T15:26:59","date_gmt":"2024-05-22T15:26:59","guid":{"rendered":"https:\/\/www.buddyupgo.com\/?page_id=231"},"modified":"2024-05-22T15:26:59","modified_gmt":"2024-05-22T15:26:59","slug":"login","status":"publish","type":"page","link":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/login\/","title":{"rendered":"Login"},"content":{"rendered":"<div class=\"buddyUpPjaxContainer\" data-buddyup-pjax-container=\"1\"><style>.hidden, .error-message {\n    display: none;\n}\n\ninput {\n    width: 100%;\n    display: block;\n}\n\nbody .buddyUpLoginTheme {\n    max-width: 550px;\n    margin: 0 auto;\n    padding: 2rem;\n    min-height: 430px;\n}\n\n.buddyUp form {\n    margin-bottom: 0;\n    position: relative;\n}\n\nh2 {\n    padding-top: 0;\n}\n\n.loginFormButtonGroup {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    gap: .5rem;\n}\n\n.loginFormButtonGroup > * {\n    width: auto;\n    margin: .5rem 0 0;\n}\n\n.registerLink {\n    font-weight: bold;\n    color: var(--primary-color);\n}\n\n.registerLink:hover {\n    color: var(--primary-color);\n    opacity: .8;\n}\n\n.passwordInputWrapper {\n    position: relative;\n}\n\n#showPasswordButton {\n    position: absolute;\n    top: -50%;\n    transform: translateY(50%);\n    right: 5px;\n    margin: 0;\n    border: none;\n    padding: 0 10px;\n    display: flex;\n    align-items: center;\n    font-size: .8rem;\n}\n\n#showPasswordButton i {\n    padding-top: 2px;\n}\n\n@media (max-width: 400px){\n    .registerLink {\n        display: block;\n    }\n}\n\n\n\/* Email Verify Message - Post Register *\/\n.buddyUpVerifyEmailModal {\n    max-width: 600px !important;\n}\n\n.buddyUpVerifyEmailModal .buddyUpModalIcon {\n    font-size: 4rem;\n    color: var(--primary-color);\n    margin-bottom: 1rem;\n}\n\n.buddyUpVerifyEmailModal button {\n    margin: .5rem 0;\n}\n\n.buddyUpVerifyEmailModal button[disabled=\"disabled\"] {\n    border: 2px solid #c4c4c4 !important;\n    background: #c4c4c4 !important;\n    color: #2E2E2E !important;\n}\n\n.buddyUpVerifyEmailModal #buddyUpEmailResendCountdown {\n    font-size: .9rem;\n    font-style: italic;\n}\n\n.buddyUpVerifyEmailModalVerifying {\n    max-width: 500px !important;\n}\n\n.buddyUpVerifyEmailModalVerifying .textHeading {\n    margin-bottom: .5rem;\n}\n\n.buddyUpVerifyEmailModalVerifying .buddyUpLoadingEl i,\n.buddyUpVerifyEmailModalVerifying .buddyUpModalIcon {\n    font-size: 2rem;\n    margin-bottom: 1rem;\n    color: var(--primary-color);\n}\n\n.buddyUpVerifyEmailModalVerifying p {\n    padding: 0;\n}<\/style>\n<div id=\"buddyUpLoginWrapper\" class=\"buddyUpLoginTheme hidden buddyUp\">\n    <div class=\"buddyUpPagesWrapper\">\n        <!-- Login Form -->\n        <img decoding=\"async\" src=\"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/wp-content\/plugins\/buddyup\/img\/trailer-image.webp\" alt=\"BuddyUp illustration\" class=\"buddyUpErrorPageImage\" style=\"margin: 0 auto 2rem;\">\n        <form id=\"buddyUpLoginTab\" class=\" mainLoginContainer buddyUpPage form \">\n            <h2>Login<\/h2>\n            <div class=\"buddyUpLoginFormWrapper\">\n                <div class=\"loginForm\">\n                    <div class=\"buddyup-input-group\">\n                        <label id=\"buddyup-emailLabel\" for=\"formEmail\" >Email<\/label>\n                        <input tabindex=\"0\" autocomplete=\"off\" type=\"text\"  id=\"formEmail\" placeholder=\" \" required \/>\n                        <div id=\"formEmailError\" class=\"error-message\">Please enter a valid email<\/div>\n                    <\/div>\n\n                    <div class=\"buddyup-input-group\">\n                        <label id=\"buddyup-pwLabel\" for=\"formPWD\" >Password<\/label>\n                        <div class=\"passwordInputWrapper\"><input tabindex=\"0\" autocomplete=\"off\" type=\"password\"  id=\"formPWD\" placeholder=\" \" required \/><button id=\"showPasswordButton\" aria-label=\"Show Password\" type=\"button\"><i class=\"fa fa-solid fa-eye fa-fw\"><\/i><\/button><\/div>\n                        <div id=\"formPWDError\" class=\"error-message\">Please enter a password<\/div>\n                    <\/div>\n\n                    <div id=\"formIncorrectInfo\" class=\"buddyUpErrorMessage hidden\">The information you entered is incorrect. Please try again.<\/div>\n                    \n                    <div style=\"text-align: right;\">\n                        <div style=\"margin-top: .5rem;\"><a role=\"button\" aria-label=\"Forgot your password?\" tabindex=\"0\" class=\"buddyUpGoToNextPage buddyUpLink\" data-next-page=\"buddyUpPwdTab\">Forgot your password?<\/a><\/div>\n                    <\/div>\n                    <div class=\"submitButtonWrapper\">\n                        <input type=\"submit\" value=\"Sign In\" role=\"button\" id=\"buddyUpLogMeIn\" aria-label=\"Login\" tabindex=\"0\" class=\"buddyUpButton1\">\n                    <\/div>\n                    \n                    <div style=\"text-align: center;\">\n                        <div>Don't have an account? <a aria-label=\"Create an account\" tabindex=\"0\" href=\"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/register\/\" class=\"registerLink\">Create an account<\/a><\/div>\n                        <!-- <div>Don't have an account? <a aria-label=\"Create an account\" tabindex=\"0\" href=\"#\" class=\"registerLink buddyUpGoToNextPage\" data-next-page=\"buddyUpRegTab\">Create an account<\/a><\/div> -->\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/form>\n        \n        <!-- Password Reset Form -->\n        <form id=\"buddyUpPwdTab\" class=\"buddyUpPage pwdWrapper form hidden\">\n            <div class=\"contentFormRegister buddyUpLoginFormWrapper\">\n                <div id=\"forgotPwdSuccess\" class=\"successBackground\"><\/div>\n                <h2>Reset your password<\/h2>\n                <p>Enter the email address associated with your account and we'll send you an email with a link to reset your password.<\/p>\n                <div class=\"buddyup-input-group\">\n                    <label id=\"resetEmail\" for=\"forgotPWDEmail\" ><span class=\"bold\">Email<\/span><\/label>\n                    <input tabindex=\"0\" required autocomplete=\"off\" type=\"text\"  id=\"forgotPWDEmail\" placeholder=\" \"\/>\n                    \n                    <div id=\"forgotPWDEmailError\"class=\"error-message\">Please enter a valid email<\/div>\n                <\/div>\n                <div class=\"loginFormButtonGroup\">\n                    <a role=\"button\" aria-label=\"Login to your account\" tabindex=\"0\" class=\"buddyUpGoToNextPage buddyUpGoBack\" data-next-page=\"buddyUpLoginTab\">Back to Sign in<\/a>\n                    <input type=\"submit\" value=\"Send\" role=\"button\" id=\"buddyUpSendForgotPwd\" aria-label=\"Reset password\" tabindex=\"0\" class=\"submit_button_1 buddyUpButton1\">\n                <\/div>\n            <\/div>\n        <\/form>\n    <\/div>\n<\/div><script>\/***\n * Redirect if already logged in\n *\/\nconst HYFIN_ENV = (window.buddyUpVariables && buddyUpVariables.hyfin_env) ? buddyUpVariables.hyfin_env : 'production';\nconst buddyUpVerifyParams = new URLSearchParams(window.location.search || '');\nconst buddyUpHasEmailVerificationParams = buddyUpVerifyParams.has('user_id') && buddyUpVerifyParams.has('verification_id') && buddyUpVerifyParams.has('validation_token');\n\nfunction buddyUpPostLoginDestination() {\n    if (window.buddyUpVariables && buddyUpVariables.for_me_link) return buddyUpVariables.for_me_link;\n    if (window.buddyUpVariables && buddyUpVariables.home_link) return buddyUpVariables.home_link;\n    if (window.buddyUpVariables && buddyUpVariables.account_link) return buddyUpVariables.account_link;\n    return '\/';\n}\n\nasync function buddyUpEnsureHyfinCustomerForUser(user) {\n    try {\n        const userId = user && (user.id || user.user_id) ? String(user.id || user.user_id) : '';\n        if (!userId) return;\n\n        const ensureKey = `buddyup_hyfin_customer_ensured_${userId}_${HYFIN_ENV}`;\n        const alreadyEnsuredThisSession = (() => {\n            try { return sessionStorage.getItem(ensureKey) === '1'; } catch (e) { return false; }\n        })();\n        if (alreadyEnsuredThisSession) return;\n\n        \/\/ Pull a full user record so we have name\/email\/phone (+ subscription tier).\n        const account = await BUDDYUP.apiRequest('account-get', {\n            id: userId,\n            fields: 'id,username,full_name,first_name,last_name,email_address,mobile_phone,user_subscription,subscription,subscription_tier,tier'\n        });\n        if (!account || account.status !== 'success') return;\n\n        \/\/ Persist subscription tier onto cached user so other pages can hide\/show upgrade UI reliably.\n        try {\n            let tier = (typeof account.user_subscription !== 'undefined' ? account.user_subscription : null);\n            tier = tier === null && typeof account.subscription !== 'undefined' ? account.subscription : tier;\n            tier = tier === null && typeof account.subscription_tier !== 'undefined' ? account.subscription_tier : tier;\n            tier = tier === null && typeof account.tier !== 'undefined' ? account.tier : tier;\n\n            tier = (window.BUDDYUP && typeof BUDDYUP.normalizeSubscriptionTier === 'function')\n                ? BUDDYUP.normalizeSubscriptionTier(tier)\n                : (function(t){ t = parseInt(t); if (isNaN(t)) t = 0; if (![0,1,2].includes(t)) t = 0; return t; })(tier);\n\n            if (user && typeof user === 'object') {\n                user.user_subscription = tier;\n            }\n\n            \/\/ Keep localStorage in sync\n            if (window.BUDDYUP && typeof BUDDYUP.setUser === 'function' && user && typeof user === 'object') {\n                BUDDYUP.setUser(user);\n            } else {\n                try {\n                    const raw = window.localStorage ? localStorage.getItem('buddyup_user') : null;\n                    const cached = raw ? JSON.parse(raw) : (user && typeof user === 'object' ? user : {});\n                    cached.user_subscription = tier;\n                    localStorage.setItem('buddyup_user', JSON.stringify(cached));\n                } catch (e) {}\n            }\n        } catch (e) {\n            \/\/ no-op\n        }\n\n        const firstName = (account.first_name || '').trim();\n        const lastName = (account.last_name || '').trim();\n        const username = (account.username || '').trim();\n        const fullName = (account.full_name || '').trim();\n        const email = (account.email_address || account.email || '').trim();\n        const mobilePhone = (account.mobile_phone || account.phone || account.mobile || '').trim();\n\n        \/\/ Deterministic check: ask backend to look up this exact external_id.\n        const customersResp = await BUDDYUP.apiRequest('hyfin-fetch-customers', { env: HYFIN_ENV, external_id: userId });\n        const fetchOk = (customersResp && customersResp.status === 'success' && Array.isArray(customersResp.records));\n        const records = fetchOk ? customersResp.records : [];\n\n        const matchByExternalId = records.find(c => c && String(c.external_id || '') === userId);\n        if (!matchByExternalId) {\n            const nameGuess = username !== '' ? username : (fullName !== '' ? fullName : `${firstName} ${lastName}`.trim());\n            const custPayload = {\n                external_id: userId,\n                first_name: username || firstName || (nameGuess.split(' ')[0] || ''),\n                last_name: username ? '' : (lastName || (nameGuess.split(' ').slice(1).join(' ') || '')),\n                account_name: nameGuess !== '' ? nameGuess : `BuddyUp User ${userId}`,\n                email: email,\n                mobile_phone: mobilePhone || undefined,\n                active: true\n            };\n\n            await BUDDYUP.apiRequest('hyfin-add-customer', { env: HYFIN_ENV, ...custPayload });\n        }\n\n        \/\/ Set the guard regardless of match\/create to avoid repeated calls in one session.\n        try { sessionStorage.setItem(ensureKey, '1'); } catch (e) {}\n    } catch (e) {\n        \/\/ Intentionally no console logging.\n    }\n}\n\nfunction buddyUpLooksLikeAuthSessionError(message) {\n    const msg = String(message || '').toLowerCase();\n    if (!msg) return false;\n\n    return (\n        msg.includes('invalid user or token') ||\n        msg.includes('invalid user token') ||\n        msg.includes('authentication failed') ||\n        msg.includes('authentication required') ||\n        msg.includes('session expired') ||\n        msg.includes('user not found')\n    );\n}\n\n(async function(){\n    const cachedUser = BUDDYUP.getCurrentUser();\n    const hasLocalSession = !!(BUDDYUP && typeof BUDDYUP.hasAuthenticatedUser === 'function'\n        ? BUDDYUP.hasAuthenticatedUser(cachedUser)\n        : (cachedUser && cachedUser.id && cachedUser.user_token));\n\n    if (hasLocalSession && !buddyUpHasEmailVerificationParams) {\n        const authProbe = await BUDDYUP.apiRequest('account-get', {\n            id: cachedUser.id,\n            fields: 'id',\n            _force: true,\n            _cb: Date.now()\n        });\n\n        if (authProbe && authProbe.status === 'success') {\n            try { await buddyUpEnsureHyfinCustomerForUser(cachedUser); } catch (e) {}\n            BUDDYUP.pjaxNavigate(buddyUpPostLoginDestination());\n            return;\n        }\n\n        if (buddyUpLooksLikeAuthSessionError(authProbe && authProbe.message)) {\n            try { await BUDDYUP.logUserOut(); } catch (e) {}\n        }\n    }\n\n    document.getElementById('buddyUpLoginWrapper').classList.remove('hidden');\n})();\n\n\n\/***\n * Login Request\n *\/\nasync function buddyUpLogUserIn(){\n    var userLoginData = {};\n    userLoginData.email_address = document.getElementById('formEmail').value;\n    userLoginData.password = document.getElementById('formPWD').value;\n\n    const receivedUserData = await BUDDYUP.apiRequest('login', userLoginData);\n    \n    if (receivedUserData && typeof receivedUserData === 'object' && receivedUserData.user_token && receivedUserData.status !== 'error'){ \/\/ If user is received with a user_token\n        if (window.BUDDYUP && typeof BUDDYUP.setUser === 'function') {\n            await BUDDYUP.setUser(receivedUserData);\n        } else {\n            localStorage.setItem('buddyup_user', JSON.stringify(receivedUserData));\n        }\n        try { await buddyUpEnsureHyfinCustomerForUser(receivedUserData); } catch (e) {}\n        BUDDYUP.pjaxNavigate(buddyUpPostLoginDestination());\n    } else { \/\/ If user info is incorrect, error handling\n        let errMessage = '';\n        const responseMessage = receivedUserData && (receivedUserData.message || receivedUserData.data) ? (receivedUserData.message || receivedUserData.data) : '';\n        \n        if (responseMessage && responseMessage !== ''){\n            if (responseMessage.includes('verify your email')){\n                const emailVerifyModal = `<div class=\"textHeading\"><\/div>\n                    <p>Please verify your email before logging in.<\/p>\n                    <p>If you do not see a verification email in your inbox, <strong>please check the spam folder.<\/strong> or click below to send a new one.<\/p>\n                    <button id=\"buddyUpResendEmail\" class=\"buddyUpButton1\">Resend Email<\/button>`;\n                BUDDYUP.openModal(emailVerifyModal, 'Verify your email address', 'buddyUpVerifyEmailModal', { icon: 'fas fa-envelope-open-text' });\n\n                document.getElementById('buddyUpResendEmail').addEventListener('click', () => {\n                    buddyUpLoginResendEmailSetup(userLoginData.email_address);\n                });\n            } else {\n                errMessage = responseMessage;\n            }\n        } else {\n            errMessage = 'The information you entered is incorrect. Please try again.';\n        }\n\n        if (errMessage !== ''){ \/\/ Show the err message if one is available\n            document.getElementById('formIncorrectInfo').innerHTML = errMessage;\n            document.getElementById('formIncorrectInfo').classList.remove('hidden');\n        }\n\n        document.getElementById('buddyUpLogMeIn').removeAttribute('disabled');\n    }\n}\n\n\n\/***\n * Login Form Submit\n *\/\nvar loginSubmitButton = document.getElementById('buddyUpLoginTab');\nloginSubmitButton.addEventListener('submit', e => {\n    e.preventDefault();\n    \n    document.getElementById('buddyUpLogMeIn').setAttribute('disabled', 'disabled');\n    document.getElementById('formIncorrectInfo').classList.add('hidden');\n    buddyUpLogUserIn();\n});\n\n\n\/***\n * Password Reset Submit\n *\/\nasync function buddyUpForgotPassword(){\n    document.getElementById('buddyUpSendForgotPwd').setAttribute('disabled', 'disabled');\n    document.getElementById('formIncorrectInfo').classList.add('hidden');\n\n    var forgotPasswordData = {};\n    forgotPasswordData.email_address = document.getElementById('forgotPWDEmail').value;\n\n    const forgotPasswordRequest = await BUDDYUP.apiRequest('forgot-password', forgotPasswordData);\n    \n    document.getElementById('buddyUpSendForgotPwd').removeAttribute('disabled');\n\n    if (forgotPasswordRequest && forgotPasswordRequest.status === 'success'){\n        BUDDYUP.openModal('Please check your email for instructions on how to reset your password.', 'Password Reset Request', 'passwordResetModal');   \n    } else {\n        BUDDYUP.openModal('An error occurred trying to reset your password.<br\/>Please try again later.', 'An error occurred', 'passwordResetModal');   \n    }\n}\n\nvar passResetSubmit = document.getElementById('buddyUpPwdTab');\nif (passResetSubmit){\n    passResetSubmit.addEventListener('submit', e => {\n        e.preventDefault();\n        buddyUpForgotPassword();\n    });\n}\n\nvar showPasswordButton = document.getElementById('showPasswordButton');\nif (showPasswordButton){\n    showPasswordButton.addEventListener('click', e => {\n        e.preventDefault();\n        var icon = e.target.parentNode.querySelector('i');\n        var passwordInput = document.getElementById('formPWD');\n\n        if (passwordInput.getAttribute('type') === 'password'){\n            passwordInput.setAttribute('type', 'text');\n            icon.classList.remove('fa-eye');\n            icon.classList.add('fa-eye-slash');\n        } else {\n            passwordInput.setAttribute('type', 'password');\n            icon.classList.remove('fa-eye-slash');\n            icon.classList.add('fa-eye');\n        }\n    });\n}\n\n\n\/***\n * Email Verify\n *\/\nfunction buddyUpLoginResendEmailSetup(email){\n    const resendEmailVerifyEl = `<div id=\"buddyUpVerifyEmailWrapper\">Sending a new email verification...<\/div>`;\n\n    BUDDYUP.openModal(resendEmailVerifyEl, '', 'buddyUpVerifyEmailModal');\n    buddyUpLoginResendEmailVerify(email);\n}\n\n\nasync function buddyUpLoginResendEmailVerify(email){\n    const emailResendResponse = await BUDDYUP.apiRequest('resend-verification-email', {email: email});\n\n    if (emailResendResponse.status === 'success'){\n        const resendEmailVerifyEl = `<p>We have sent a verification link to your email.<br\/>Click on the link to complete the verification process.<\/p>\n            <p>If you do not see the email, <strong>please check the spam folder.<\/strong><\/p>\n            <button id=\"buddyUpCloseModal\" class=\"buddyUpButton1\" style=\"margin: 0;\">Okay<\/button>`;\n\n        BUDDYUP.openModal(resendEmailVerifyEl, 'Verify your email address', 'buddyUpVerifyEmailModal', { icon: 'fas fa-envelope-open-text' });\n        document.getElementById('buddyUpCloseModal').addEventListener('click', () => { BUDDYUP.closeModal(); });\n    } else {\n        const message = emailResendResponse.message && emailResendResponse.message !== '' && !emailResendResponse.message.includes('route') ? `<br>${emailResendResponse.message}` : '';\n        const resendEmailVerifyEl = `<div id=\"buddyUpVerifyEmailWrapper\">\n            <p>We were unable to send a new email verification. Please try again.${message}<\/p>\n            <button id=\"buddyUpResentEmailAgain\" class=\"buddyUpButton1\">Resend Email<\/button>\n        <\/div>`;\n        \n        BUDDYUP.openModal(resendEmailVerifyEl, \"We're having some trouble\", 'buddyUpVerifyEmailModal');\n        document.getElementById('buddyUpResentEmailAgain').addEventListener('click', () => { buddyUpLoginResendEmailSetup(email); });\n    }\n}\n\n\n\/***\n * Email Verify Check\n *\/\nif (buddyUpHasEmailVerificationParams){\n    const resendEmailVerifyEl = `<div id=\"buddyUpVerifyEmailWrapper\">${BUDDYUP.loading()}<\/div><div class=\"textHeading\">Please Wait<\/div><p>Verifying your email<\/div>`;\n\n    BUDDYUP.openModal(resendEmailVerifyEl, '', 'buddyUpVerifyEmailModalVerifying');\n    BUDDYUP.clearAllElements('#buddyUpCloseModalButton'); \/\/ Remove the close button\n\n    buddyUpSendEmailVerification(\n        buddyUpVerifyParams.get('user_id'),\n        buddyUpVerifyParams.get('verification_id'),\n        buddyUpVerifyParams.get('validation_token')\n    );\n\n    async function buddyUpSendEmailVerification(userID, verifyID, validationToken){\n        const emailVerifyRequest = {\n            user_id: userID,\n            verification_id: verifyID,\n            validation_token: validationToken,\n        };\n\n        let sendVerifyResponse = await BUDDYUP.apiRequest('verify-email', emailVerifyRequest);\n        \n        if (sendVerifyResponse.status === 'success'){\n            var sendVerifyModalContent = `<p>Your email is verified.<br\/>Please log in to continue your adventure!<\/p>`;\n            BUDDYUP.openModal(sendVerifyModalContent, 'Verification Complete', 'buddyUpVerifyEmailModalVerifying', { icon: 'fas fa-envelope-open-text' });\n            \n            localStorage.setItem('buddyup_new_user', true);\n            try {\n                if (window.history && typeof window.history.replaceState === 'function') {\n                    window.history.replaceState({}, document.title, window.location.pathname);\n                }\n            } catch (e) {}\n        } else {\n            var sendVerifyModalContent = `<p>We seem to have hit a snag trying to verify your email. Please click the link in the verify email again to try again.<\/p>`;\n            BUDDYUP.openModal(sendVerifyModalContent, 'Something went wrong', 'buddyUpVerifyEmailModal', { icon: 'fas fa-exclamation-triangle' });\n        }\n    }\n}<\/script><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/full-width-no-header.php","meta":{"footnotes":""},"class_list":["post-231","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/api\/wp\/v2\/pages\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/api\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/api\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/api\/wp\/v2\/comments?post=231"}],"version-history":[{"count":0,"href":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/api\/wp\/v2\/pages\/231\/revisions"}],"wp:attachment":[{"href":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/api\/wp\/v2\/media?parent=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}