HTTP Status 400 – Bad Request

I'm making a POST function but I'm getting an error. I am getting "HTTP Status 400 – Bad Request" error in console. In the simulator, it says "Something went wrong. Please try again later" on the screen. I don't understand where I am making the mistake. I need to fix this error urgently. Could you help?

JSON Model:

struct TaniTalep: Encodable {

    let photo: Data?

    let xray: Data?

    let talep: String


    init(photo: UIImage?, xray: UIImage?, talep: Talep) throws { = photo?.pngData()

        self.xray = xray?.pngData()

        let jsonData = try JSONEncoder().encode(talep)

        self.talep = String(data: jsonData, encoding: .utf8)!



struct Talep: Codable {

    let tanitalepid: Int

    let hastaid: Int

    let cevap: String

    let anamnezList: [Anamnez]

    let sikayetanaList: [SikayetAna]

    let sorucevapList: [SoruCevap]

    struct SoruCevap: Codable {

        let sikayetsoruid: Int

        let soru: String

        let sorucevap: String



    struct SikayetAna: Codable {

        let sikayet: String

        let sikayetanaid: Int



    struct Anamnez: Codable {

        let aciklama: String

        let anamnezid: Int

        let cevap: String

        let nitelik: String

        let sonaltiay: String



Web Service:

func postTaniTalep(token: String, email: String, tanitalepid: Int, taniTalep: TaniTalep) async throws -> Bool {

        guard let url = URL(string: "") else {

            throw NetworkError.invalidURL


        var request = URLRequest(url: url)

        request.httpMethod = "POST"

        request.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type")

//        request.addValue("application/json", forHTTPHeaderField: "Accept")

        request.addValue("\(token)", forHTTPHeaderField: "credentialtoken")

        request.addValue("\(email)", forHTTPHeaderField: "username")

        request.addValue("IOS", forHTTPHeaderField: "platform")

        request.addValue("TR", forHTTPHeaderField: "langcode")



        let formData = try JSONEncoder().encode(taniTalep)


        print("\(Date())-\(#line)--\(#function)--formData: \(String(data: formData, encoding: .utf8))-")


        request.httpBody = formData


        let (data, response) = try await request)



        print(String(data: data, encoding: .utf8))


        return (response as? HTTPURLResponse)?.statusCode == 200



final class TaniTalepViewModel: ObservableObject {

    static let shared = TaniTalepViewModel()

    init() {}


    var hastaID: Int?

    var cevap: String?

    var soruCevapList = [Talep.SoruCevap]()

    var sikayetAnaList = [Talep.SikayetAna]()

    var anamnezList = [Talep.Anamnez]()

    var photo: UIImage?

    var xray: UIImage?

    @Published var message: String?



    func postTaniTalep() async {


            let hastaID = hastaID,

            let cevap = cevap

        else {

            assertionFailure("Insufficient data")




        let defaults = UserDefaults.standard

        guard let token = defaults.string(forKey: "jsonwebtoken") else {



        guard let email = defaults.string(forKey: "email") else {




        do {

            let tanitalepid = try await Webservice().getSequenceNextval(token: token, email: email)

            let success = try await Webservice().postTaniTalep(token: token, email: email, tanitalepid: tanitalepid, taniTalep: TaniTalep(photo: photo, xray: xray, talep: .init(tanitalepid: tanitalepid, hastaid: hastaID, cevap: cevap, anamnezList: anamnezList, sikayetanaList: sikayetAnaList, sorucevapList: soruCevapList)))

            if success {

                message = "Your registration number \(tanitalepid) has been completed successfully.\n \(tanitalepid) numaralı kaydınız başarıyla tamamlanmıştır."

            } else {

                message = "Something went wrong. Please try again later."



        } catch {

            print("\(Date())-\(#line)--\(#function)--error: \(error)-")

            message = "Error while posting tani talep: \(error)"





struct TaniTalepView: View {

    @ObservedObject private var viewModel = TaniTalepViewModel.shared


    var body: some View {

        ZStack {




            if let message = viewModel.message {



            } else {




        .task {

            await viewModel.postTaniTalep()




Try the same request with CURL and see what it sends, compare with your body with what CURL sends and then adapt. Also this is stack overflow material.