본관은 은진(恩津). 자는 옥여(玉汝), 호는 옥오재(玉吾齋). 학유(學諭) 송희원(宋希遠)의 증손으로, 할아버지는 송국전(宋國銓)이고, 아버지는 예조판서 송규렴(宋奎濂)이다. 어머니는 동지(同知) 김광찬(金光燦)의 딸이다. 송시열(宋時烈)의 문인이다.
1684년(숙종 10) 정시 문과에 병과로 급제, 승문원에 등용되었다. 홍문관저작을 지내면서 문장에 능하고 학식이 풍부하여 홍문관에서 상주하는 글은 대개 송상기가 지었다. 박사·검열을 거쳐, 부수찬으로 있을 때 희빈 장씨(禧嬪張氏) 어머니가 가마를 탄 채 대궐에 출입하므로 가마를 불태워야 한다고 청했다가 파면되었다.
1689년 부교리로 복직되었으나 이 해에 기사환국이 일어나 송시열·김수항(金壽恒) 등이 사형당하고 남인이 집권하자 벼슬을 버리고 낙향하였다. 1694년 갑술옥사로 민비(閔妃)가 복위되고 남인이 제거된 뒤, 사헌부장령(司憲府掌令)에 임명되었고 홍문관부교리·사간원사간·충주목사를 거쳐 보덕·교리·사인을 지냈다.
1697년 세자 책봉에 대한 주청사(奏請使)의 서장관(書狀官)으로 청나라에 가서는 여러 번 정문(呈文)을 지었는데, 문장(文狀)의 사리가 명확하여 청나라 사람들을 놀라게 하였다. 돌아온 뒤에는 품계가 올라 승지가 되었다. 그 뒤 노론의 중신으로서 대사성에서 예조·이조의 참의가 되고 승문원부제조를 겸하였다. 충청도관찰사로 내려가서는 크게 치적을 올렸다.
대제학·대사헌·예조판서 등의 요직을 지내고 이조판서가 되었다. 그러나 1718년 민회빈(愍懷嬪: 昭顯世子妃)의 시호 개정을 반대하다가 한때 파직되었는데 곧 예조판서에 기용되었다. 다시 이조판서·판돈녕부사(判敦寧府事)를 지내다가 경종이 병이 있으므로 세제에게 청정(聽政)을 시키자고 여러 대신들과 더불어 상소하였다. 이 일로 1722년 신임사화를 입어 강진으로 유배되어 이듬해 배소에서 죽었다. 1725년(영조 1)에 관작이 복구되었다. 시호는 문정(文貞)이다.
저서로는 『옥오재집(玉吾齋集)』이 있다.