Skip to Main Content
Enhanced security in MyChart

Two-factor authentication is now required, making your personal information even more secure. When you log in to MyChart, you may need to set up two-step verification by confirming your email and mobile phone number on file and then choosing where to receive your 6-digit verification code. This will ensure an extra layer of protection for your account. For more information, visit the MyChart Two-Step Verification Support page.


Download on the App Store Get it on Google Play
  • Express Care: on-demand virtual visits

    If you're an established UCSF primary care patient with a new condition that's urgent but non-life-threatening, you can request an on-demand video appointment through MyChart.

  • Messaging in MyChart

    When you exchange messages with your health care provider through MyChart, your insurance may be billed if the response requires medical expertise and more than a few minutes of your provider's time.

  • Test results & clinical notes

    You can see most of your test results and clinical notes in MyChart as soon as they become available. We’ll contact you about any concerning results. Notifications of new test results are automatically sent between 8 and 9 a.m. PT each weekday (excluding holidays). If you’d prefer to receive notifications as soon as test results are available, you can update your preferences in MyChart.

For the parents/guardians of pediatric patients

To obtain proxy access, parents/guardians can sign up for their own MyChart account, and then fill out a digital request form. (Log in to MyChart, then go to the main menu and select "Proxy Center.") Proxy access can also be requested directly from the patient's clinic.

MyChart customer service

(415) 514-6000
")}}})}catch(a){kr("window.connect.ChatInterface.init"),kr(a)}var e=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";xr("Inside getNameAndPhoneNumber");var r=_e.NAME,i=_e.PHONE_NUMBER;return 0!==Object.keys(e).length&&(xr("formData",e),t&&t.includes(_e.REFER_INDICATOR)&&(r=k(t,e)),n&&n.includes(_e.REFER_INDICATOR)&&(i=k(n,e))),0===Object.keys(e).length&&(r=t||_e.NAME,i=n||_e.USER_NAME),r.includes(_e.REFER_INDICATOR)&&(kr("name field has value ".concat(t," which is not referenced correct in your initial invocation of this library")),r=_e.NAME),i.includes(_e.REFER_INDICATOR)&&(kr("phone_number field has value ".concat(n," which is not referenced correct in your initial invocation of this library")),i=_e.USER_NAME),{name:r,phone_number:i}}(r,b.name,b.phone_number),t=e.name,n=e.phone_number;xr("Name and phone_number to initiate a chat connection: ",{name:t,phone_number:n});var i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0,o=arguments.length>5?arguments[5]:void 0;xr(">>> Inside getContactAttrsForContactFlow");var a={};return a.customerName=i.includes(_e.REFER_INDICATOR)?_e.CUSTOMER_NAME:e,o.includes(_e.REFER_INDICATOR)||(a.phone_number=t),n&&(xr("Appending ".concat(n," to contact attributes")),a=gr(gr({},a),n)),r&&(xr("Appending ".concat(r," to contact attributes")),a=gr(gr({},a),r)),a}(t,n,r,b.contactAttr,b.name,b.phone_number);xr("contactAttrs for contact flow: ",i);var o={name:t,phone_number:n,region:m,apiGatewayEndpoint:g,contactAttributes:JSON.stringify(i),contactFlowId:v,instanceId:y,featurePermissions:{ATTACHMENTS:b.enableAttachments}};xr("Params to initiate chat connection: ",o);try{window.connect.ChatInterface.initiateChat(o,w,x)}catch(a){kr("window.connect.ChatInterface.initiateChat"),kr(a)}}),[]),e.createElement(hr,{id:"chat-container",device:de},e.createElement(pr,{id:"chat-wrapper",primaryColor:p,device:de},e.createElement("div",{id:"chat-widget"})),c&&e.createElement(ur,{primaryColor:p}))};function Cr(){return Cr=Object.assign||function(e){for(var t=1;t=0||(i[n]=e[n]);return i}var Tr=n(721);n(581);function Pr(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}const jr=!1,Ar=e.createContext(null);var Nr="unmounted",Ir="exited",Mr="entering",zr="entered",Rr="exiting",Fr=function(n){function r(e,t){var r;r=n.call(this,e,t)||this;var i,o=t&&!t.isMounting?e.enter:e.appear;return r.appearStatus=null,e.in?o?(i=Ir,r.appearStatus=Mr):i=zr:i=e.unmountOnExit||e.mountOnEnter?Nr:Ir,r.state={status:i},r.nextCallback=null,r}(0,Tr.Z)(r,n),r.getDerivedStateFromProps=function(e,t){return e.in&&t.status===Nr?{status:Ir}:null};var i=r.prototype;return i.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},i.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==Mr&&n!==zr&&(t=Mr):n!==Mr&&n!==zr||(t=Rr)}this.updateStatus(!1,t)},i.componentWillUnmount=function(){this.cancelNextCallback()},i.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!==typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},i.updateStatus=function(e,t){void 0===e&&(e=!1),null!==t?(this.cancelNextCallback(),t===Mr?this.performEnter(e):this.performExit()):this.props.unmountOnExit&&this.state.status===Ir&&this.setState({status:Nr})},i.performEnter=function(e){var n=this,r=this.props.enter,i=this.context?this.context.isMounting:e,o=this.props.nodeRef?[i]:[t.findDOMNode(this),i],a=o[0],l=o[1],s=this.getTimeouts(),u=i?s.appear:s.enter;!e&&!r||jr?this.safeSetState({status:zr},(function(){n.props.onEntered(a)})):(this.props.onEnter(a,l),this.safeSetState({status:Mr},(function(){n.props.onEntering(a,l),n.onTransitionEnd(u,(function(){n.safeSetState({status:zr},(function(){n.props.onEntered(a,l)}))}))})))},i.performExit=function(){var e=this,n=this.props.exit,r=this.getTimeouts(),i=this.props.nodeRef?void 0:t.findDOMNode(this);n&&!jr?(this.props.onExit(i),this.safeSetState({status:Rr},(function(){e.props.onExiting(i),e.onTransitionEnd(r.exit,(function(){e.safeSetState({status:Ir},(function(){e.props.onExited(i)}))}))}))):this.safeSetState({status:Ir},(function(){e.props.onExited(i)}))},i.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},i.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},i.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},i.onTransitionEnd=function(e,n){this.setNextCallback(n);var r=this.props.nodeRef?this.props.nodeRef.current:t.findDOMNode(this),i=null==e&&!this.props.addEndListener;if(r&&!i){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[r,this.nextCallback],a=o[0],l=o[1];this.props.addEndListener(a,l)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},i.render=function(){var t=this.state.status;if(t===Nr)return null;var n=this.props,r=n.children,i=(n.in,n.mountOnEnter,n.unmountOnExit,n.appear,n.enter,n.exit,n.timeout,n.addEndListener,n.onEnter,n.onEntering,n.onEntered,n.onExit,n.onExiting,n.onExited,n.nodeRef,Or(n,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return e.createElement(Ar.Provider,{value:null},"function"===typeof r?r(t,i):e.cloneElement(e.Children.only(r),i))},r}(e.Component);function Dr(){}Fr.contextType=Ar,Fr.propTypes={},Fr.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:Dr,onEntering:Dr,onEntered:Dr,onExit:Dr,onExiting:Dr,onExited:Dr},Fr.UNMOUNTED=Nr,Fr.EXITED=Ir,Fr.ENTERING=Mr,Fr.ENTERED=zr,Fr.EXITING=Rr;const Lr=Fr;var Ur=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"===typeof n.className?n.className=Pr(n.className,r):n.setAttribute("class",Pr(n.className&&n.className.baseVal||"",r)));var n,r}))},Wr=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n> Init");var t=Hr((0,e.useState)(!1),2),n=t[0],r=t[1],i=Hr((0,e.useState)(we),2),o=i[0],a=i[1],l=Hr((0,e.useState)(!1),2),s=l[0],u=l[1],c=Hr((0,e.useState)(!1),2),f=c[0],d=c[1],p=Hr((0,e.useState)({}),2),h=p[0],m=p[1],g=Pe().initiationIcon;return e.createElement(Br,{device:de},g.toLowerCase()===Ee?e.createElement(jn,{showWidget:n,hideWidget:s,setHideWidget:u,setShowWidget:r,toggleIcon:f}):e.createElement(bn,{showWidget:n,hideWidget:s,setHideWidget:u,setShowWidget:r,toggleIcon:f}),e.createElement("div",{style:{display:s?"none":null}},e.createElement(Vr,{in:n,timeout:400,classNames:"widget-transition",mountOnEnter:!0,appear:!0,onExited:function(){return u(!0)}},o===we?e.createElement(rr,{setData:m,setCurrentState:a}):e.createElement(Sr,{dataFromInputForm:h,setCurrentState:a,setHideWidget:u,setShowWidget:r,setToggleIcon:d}))))};var Qr;var Gr=ln.div(Qr||(Qr=function(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n /* This fires as soon as the element enters the dorm */\n .widget-transition-enter,\n .widget-transition-appear {\n /*We give the list the initial dimension of the list button*/\n @media ","{\n bottom: 95px;\n }\n bottom: 70px;\n max-height: 0px;\n width: 0px;\n color: transparent;\n background-color: linear-gradient(rgb(255, 255, 255), rgb(255, 255, 255) 80%, rgb(255, 255, 255));\n opacity:0\n }\n /* This is where we can add the transition*/\n .widget-transition-enter-active,\n .widget-transition-appear-active {\n @media ","{\n bottom: 95px;\n width: 420px;\n }\n bottom: 70px;\n width: 320px;\n max-height: 555px;\n background-color: linear-gradient(rgb(255, 255, 255), rgb(255, 255, 255) 80%, rgb(255, 255, 255));\n transition: all 400ms;\n opacity:1;\n }\n\n /* This fires as soon as the this.state.showList is false */\n .widget-transition-exit {\n @media ","{\n bottom: 95px;\n }\n bottom: 70px;\n width: 200px;\n max-height: 200px;\n background-color: linear-gradient(rgb(255, 255, 255), rgb(255, 255, 255) 80%, rgb(255, 255, 255))\n }\n /* fires as element leaves the DOM*/\n .widget-transition-exit-active {\n @media ","{\n bottom: 95px;\n }\n bottom: 70px;\n width: 0px;\n max-height: 0px;\n color: transparent;\n background-color: linear-gradient(rgb(255, 255, 255), rgb(255, 255, 255) 80%, rgb(255, 255, 255));\n transition: all 400ms;\n }\n"])),(function(e){return e.device.laptop}),(function(e){return e.device.laptop}),(function(e){return e.device.laptop}),(function(e){return e.device.laptop}));function Kr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,l=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(s){l=!0,i=s}finally{try{a||null==n.return||n.return()}finally{if(l)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"===typeof e)return Zr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zr(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n> Init");var t=Kr((0,e.useState)(!1),2),n=t[0],r=t[1],i=Kr((0,e.useState)(!1),2),o=i[0],a=i[1],l=Kr((0,e.useState)(!1),2),s=l[0],u=l[1],c=Kr((0,e.useState)(!1),2),f=c[0],d=c[1],p=Pe().initiationIcon;return ti("showWidget",n),ti("hideWidget",o),ti("toggleIcon",s),ti("forceUnmountChatWidget",f),e.createElement(Gr,{device:de},p.toLowerCase()===Ee?e.createElement(jn,{showWidget:n,hideWidget:o,setHideWidget:a,setShowWidget:r,toggleIcon:s,forceUnmountChatWidget:f,chatWithoutForm:!0,setForceUnmountChatWidget:d}):e.createElement(bn,{showWidget:n,hideWidget:o,setHideWidget:a,setShowWidget:r,toggleIcon:s,f:!0,forceUnmountChatWidget:f,chatWithoutForm:!0,setForceUnmountChatWidget:d}),e.createElement("div",{style:{display:o?"none":null}},e.createElement(Vr,{in:n,timeout:400,classNames:"widget-transition",mountOnEnter:!0,appear:!0,onExited:function(){return a(!0)}},f?e.createElement("div",null):e.createElement(Sr,{setHideWidget:a,setShowWidget:r,setToggleIcon:u}))))};var ri=["preChatForm"];function ii(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function oi(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var si=mn(be).log;const ui=function(t){var n=t.preChatForm,r=void 0===n?{}:n,i=li(t,ri);si("Init"),si("preChatForm: ",r);var o=oi(oi({},i),{},{preChatForm:r});return si("propsWithPreForm: ",o),e.createElement("div",null,e.createElement(je,{config:oi({},o)},0===Object.keys(r).length||!1===r.visible?e.createElement(ni,null):e.createElement(qr,null)))};var ci=["containerId"];function fi(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var di,pi=mn(ye).log;(di=window.AmazonCustomChatWidget||{}).ChatInterface=di.ChatInterface||{},di.ChatInterface.init=function(n){var r=n.containerId,i=fi(n,ci);pi(">>> Init"),pi("props ".concat(JSON.stringify(i))),t.render(e.createElement(ui,i),document.getElementById(r))},window.AmazonCustomChatWidget=di})()})();

Share