화평부(化平府: 지금의 光州) 출신. 참지정사(參知政事) 김련(金鍊)의 아들이다. 김인근(金仁瑾) · 김인연(金仁沇)의 두 아들과 두 딸이 있었는데, 가세가 어려워 두 딸이 혼인하지 못하고 여승이 되었다.
원종 때 장군이 되어 강화도에서 난을 일으킨 삼별초를 토벌하다가 포위되어 탈출할 방법이 없자 바다로 뛰어들어 파도를 따라 표류하다가 끝내 붙들려 진도로 압송되었다. 마침 승화후(承化侯) 왕온(王溫)의 주선으로 겨우 죽음을 면하고 적의 정세를 관군에게 알림으로써 결국 삼별초를 토벌하게 되었다.
이후 1287년(충렬왕 13) 부지밀직사사(副知密直司事)에 올랐으며, 1290년(충렬왕 16)에 전라도도지휘사(全羅道都指揮使)를 거쳐 판밀직사사(判密直司事)가 되었다. 그 뒤 판삼사사(判三司事)가 되었고, 1295년에는 성절사(聖節使)가 되어 원나라에 갔다. 당시 교지국 사신이 먼저 들어가서 알현하려 하자, 고려국의 위상을 설명하여 제후국의 반열에 놓고 순서를 바꾸도록 하였다.
1296년 지도첨의사사(知都僉議司事), 1298년 동지광정원사 참지기무(同知光政院事參知機務), 1300년 도첨의찬성사 판감찰사사(都僉議贊成事判監察司事)가 되었다.
이때 원나라의 활리길사(闊里吉思)가 행성평장(行省平章)으로 와서 모든 노비 중 그 어버이의 한쪽이 양인인 자는 양민으로 하려 하자, 옛 법을 변경할 수 없다고 하여 이를 중지하게 하였다. 첨의중찬(僉議中贊)으로 치사한 이후, 1310년에 사망하였다. 시호는 광정(匡正)이다.