张仁愿原名仁亶,因与唐睿宗李旦名字的发音相似,故改名仁愿。张仁愿年轻时文武全才,武则天在位时官至殿中侍御史。当时,御史郭霸上表称武则天是弥勒佛转世,凤阁舍人张嘉福、王庆之也上表请求立武承嗣为皇太子,都邀请张仁愿在表章上署名。张仁愿严辞拒绝,因此受到有识之士的器重。不久,夏官尚书王孝杰担任吐刺军总管,率军抵御吐蕃。张仁愿时为监军,因与王孝杰关系不睦,便派人去向皇帝告状。因此,王孝杰被削官为民,张仁愿则升为侍御史。
697年(万岁通天二年),监察御史孙承景出任清边军监军,战后虚报战功,称自己每战必身先士卒,亲临矢石。武则天闻讯后,对孙承景非常赞赏,将他擢升为右肃政台中丞,并令张仁愿为其部下记功。张仁愿先向孙承景询问作战经过,孙承景本是虚报战功,支支吾吾无法回答。张仁愿知道其中必有隐情,便上书弹劾孙承景欺君犯上。武则天将孙承景贬为崇仁县令,任命张仁愿为肃政台中丞,检校幽州都督。698年(圣历元年),突厥默啜可汗入侵唐朝,先后攻陷赵州(今河北赵县)、定州(今河北定州),进犯幽州。张仁愿出城迎击,激战中被冷箭射中手臂,突厥军见不能取胜,也自行退去。武则天派出使者慰劳军队,并赐给张仁愿药品,命他兼任并州大都督府长史。702年(长安二年),突厥攻破石岭关(今山西阳曲北),攻打并州。武则天任命雍州长史薛季昶代理右台大夫,充任山东防御军大使,又命张仁愿负责幽州、平州(今河北卢龙)、妫州(今河北怀来东南)、檀州(今北京密云)四州防御,与薛季昶互为犄角,共拒突厥。706年(神龙二年),唐中宗任命张仁愿为左屯卫大将军、检校洛州长史。当时,洛州粮价飞涨、盗贼横行。张仁愿到任后,将抓捕的盗贼全部乱棍打死,尸体陈列在府衙前。远近百姓无不惊骇,从此无人再敢偷抢。唐高宗时的洛州刺史贾敦颐也是政绩突出,所以时人都称赞道:“洛州有前贾后张,可敌京兆三王。”同年十二月,突厥入侵鸣沙(今宁夏青铜峡西南黄河东岸丰安故城),击败朔方军大总管沙吒忠义,进掠原州(今宁夏固原)、会州(今甘肃靖远)等地,夺走陇右牧马一万多匹。707年(景龙元年),张仁愿被任命为朔方军大总管、御史大夫,屯边防御突厥。张仁愿到达朔方后,突厥已退兵而去,便乘胜追击,夜袭敌营,大破突厥。
当时,朔方军与突厥以黄河为界,而在黄河北岸有一拂云祠。突厥每次出兵,都要在祠中祈祷,然后再发兵南下。708年(景龙二年),默啜统帅全军西攻突骑施(西突厥部落),后方兵力空虚。张仁愿便上奏朝廷,请求乘机夺取漠南之地,并沿黄河北岸修筑三座首尾相应的受降城,以断绝突厥南侵之路。奏疏送至京城后,唐中宗召集大臣商议对策。太子少师唐休璟表示反对,并道:“两汉以来,朝廷都是北守黄河,如今在敌虏腹地筑城,兴师动众,劳民伤财,最终只怕还是要被敌虏占据。”张仁愿执意请求,最终得到中宗同意。张仁愿又上表请求留下戍边岁满的兵士,以加快工程进度。当时有二百多咸阳籍士兵不愿筑城,集体逃走,结果被张仁愿抓回,全部斩于城下。从此,筑城军民无不尽心尽力,只用了两个月的时间便将三城全部筑成。三座城池中,拂云祠为中受降城(在今内蒙古包头西),南对朔方,而西城南对灵武,东城南对榆林,三城相距各有四百多里,北面都是沙漠。张仁愿又向北拓地三百多里,并在牛头朝那山(今内蒙古固阳东)北设置烽火台一千八百所。从此,突厥不敢度山放牧,朔方不再受其攻掠,每年节省军费上亿,裁减镇兵数万人。后突厥汗国非常强大之时,唐朝张仁愿在漠南突厥之地建立三受降城体系,三受降城体系是唐朝建立的进攻型军事重镇体系,使突厥汗国的根据地、政治军事经济的中心地区成为唐朝北疆内的军事地区,被唐朝控制。后突厥默啜可汗无力返回漠南,不得不返回漠北。唐朝张仁愿建立三受降城体系,严重削弱了后突厥汗国。自唐朝张仁愿建立三受降城体系取漠南后,后突厥汗国的国力大为削弱,最后被唐朝与回纥联合攻灭。后突厥汗国的衰弱与灭亡,唐朝张仁愿建立三受降城是其重要原因
不久,张仁愿回朝任职,担任同中书门下三品,成为宰相,并拜左卫大将军,封韩国公。同年秋,张仁愿再次返回边地,唐中宗还亲自赋诗饯行,后又加镇军大将军。710年(景云元年),唐睿宗即位,张仁愿因年老致仕退休。不久,朝廷又加张仁愿为兵部尚书、光禄大夫,但依旧让他退休在家。 714年(开元二年),张仁愿去世,追赠太子少傅。