김헌창의 아버지는 이찬 김주원(金周元)이었다. 원래 김주원은 태종무열왕의 6세손으로서 37대 선덕왕이 사망한 이후 왕위계승 후보 1순위였다. 하지만 당시 정치 상황 변동으로 인해 왕위에 오르지 못했고, 김경신(金敬信)이 즉위하여 원성왕이 되었다. 이에 김주원은 명주(溟州)로 물러나게 되었다. 이러한 배경에서 성장한 김헌창은 애장왕대인 807년 시중으로 임명되었다가 물러났다. 헌덕왕대인 813년 무진주도독(武珍州都督)이 되었고, 다시 중앙으로 돌아와 814년 시중에 임명되어 재직하다가 퇴임하였다. 하지만 이후 816년 청주도독(菁州都督)이 되었고, 821년 웅주도독(熊州都督)이 되는 등 주로 외직으로 나가면서 인사상 홀대를 받았다. 외직을 도는 과정에서 자신을 지지하는 세력들을 규합하였고, 결국 822년 웅주에서 반란을 일으켰다.
822년 김헌창은 아버지 김주원이 왕이 되지 못한 것을 구실삼아 웅천주를 중심으로 반란을 일으켰다. 국호를 장안(長安), 연호를 경운(慶雲)이라 하여 신라 왕조 자체를 부정하고 새로운 국가를 지향하였다. 무진주, 완산주, 청주, 사벌주와 국원소경, 서원소경, 금관소경이 여기에 호응하였다. 신라의 9주 5소경 가운데 4주 3소경이 김헌창의 세력권으로 들어갔다. 그러나 반란은 채 한 달을 넘기지 못하고 신라의 진압군에 손쉽게 진압되었다.
신라는 선발대, 본대, 별동대로 진압군을 편성하여 운용하였다. 신라군의 본대가 경상북도 성주에서 반란군과 대치하는 사이 선발대가 후방의 보은산성을 점령하면서 전세는 신라쪽으로 기울었다. 이후 반란군의 최후 거점인 웅진성은 신라군에 포위되어 10일 만에 함락당했다. 성이 함락되기 직전 김헌창은 자살하였고, 성을 함락한 신라는 반란의 핵심 관련자 239명을 처형하였다.