"payload" argument must be of type object. Received null

hey guys im using nextjs and im facing the: "payload" argument must be of type object. Received null error what is the reason im getting this error i cant find anything
await prisma.patient.create({
data: {
firstName: "test",
lastName: "test",
phoneNumber: "0547194781",
patientId: "123426789",
firstVisit: new Date(),
gender: "test",
dateOfBirth: new Date(),
address: {
create: {
street: "test",
city: "test",
zipCode: "test",
},
},
},
});
await prisma.patient.create({
data: {
firstName: "test",
lastName: "test",
phoneNumber: "0547194781",
patientId: "123426789",
firstVisit: new Date(),
gender: "test",
dateOfBirth: new Date(),
address: {
create: {
street: "test",
city: "test",
zipCode: "test",
},
},
},
});
schemas:
model Patient {
id Int @id @default(autoincrement())
patientId String @unique @db.VarChar(10)
firstName String
lastName String
fullName String?
dateOfBirth DateTime
gender String
phoneNumber String
workPhoneNumber String?
homePhoneNumber String?
additionalPhoneNumber String?
firstVisit DateTime
email String? @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
address Patient_Address?
}

model Patient_Address {
id Int @id @default(autoincrement())
street String?
city String
zipCode String?
patientId Int @unique
patient Patient @relation(fields: [patientId], references: [id])
}
model Patient {
id Int @id @default(autoincrement())
patientId String @unique @db.VarChar(10)
firstName String
lastName String
fullName String?
dateOfBirth DateTime
gender String
phoneNumber String
workPhoneNumber String?
homePhoneNumber String?
additionalPhoneNumber String?
firstVisit DateTime
email String? @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
address Patient_Address?
}

model Patient_Address {
id Int @id @default(autoincrement())
street String?
city String
zipCode String?
patientId Int @unique
patient Patient @relation(fields: [patientId], references: [id])
}
7 Replies
Prisma AI Help
Prisma AI Help3mo ago
You selected to wait for the human sages. They'll share their wisdom soon. Grab some tea while you wait, or check out #ask-ai if you'd like a quick chat with the bot anyway!
Nurul
Nurul3mo ago
Hey @H₂O 👋 Are you using Prisma with Nextjs in an API route? If yes, can you share the code of the API route? The error "payload" argument must be of type object. Received null" typically occurs when you're trying to pass null as the data object to a create operation. However, in the code you've shared, it looks like you are providing a valid data object for the create operation. This suggests that the error might be occurring in a different part of your code or due to how the create operation is being called.
DaYroXy™
DaYroXy™OP3mo ago
Hey! thank you for the response im using nextjs 15 with actions here it is:
export const createPatient = async (
data: z.infer<typeof CreatePatientValidation>
): Promise<{ error: boolean; message: string }> => {
try {
const session = await auth.api.getSession({
headers: await headers(),
});

if (!session) {
return { error: true, message: "err" };
}

const safeData = CreatePatientValidation.parse(data);

const idExists = await prisma.patient.findFirst({ where: { patientId: safeData.patientId } });
console.log(idExists);
if (idExists) {
return {
error: true,
message: "err",
};
}

console.log({
data: {
...safeData,
dateOfBirth: new Date(safeData.dateOfBirth),
firstVisit: new Date(),
},
});
await prisma.patient.create({
data: {
...safeData,
dateOfBirth: new Date(safeData.dateOfBirth),
firstVisit: new Date(),
},
});

revalidatePath("/patients");
return {
error: false,
message: "err",
};
} catch (err) {
return {
error: true,
message: "err",
};
}
};
export const createPatient = async (
data: z.infer<typeof CreatePatientValidation>
): Promise<{ error: boolean; message: string }> => {
try {
const session = await auth.api.getSession({
headers: await headers(),
});

if (!session) {
return { error: true, message: "err" };
}

const safeData = CreatePatientValidation.parse(data);

const idExists = await prisma.patient.findFirst({ where: { patientId: safeData.patientId } });
console.log(idExists);
if (idExists) {
return {
error: true,
message: "err",
};
}

console.log({
data: {
...safeData,
dateOfBirth: new Date(safeData.dateOfBirth),
firstVisit: new Date(),
},
});
await prisma.patient.create({
data: {
...safeData,
dateOfBirth: new Date(safeData.dateOfBirth),
firstVisit: new Date(),
},
});

revalidatePath("/patients");
return {
error: false,
message: "err",
};
} catch (err) {
return {
error: true,
message: "err",
};
}
};
data being sent:
{
data: {
patientId: '123456789',
firstName: 'asddsa',
lastName: 'asddsa',
gender: 'male',
phoneNumber: '0547894123',
dateOfBirth: 2024-12-18T00:00:00.000Z,
city: 'akko',
firstVisit: 2025-01-08T17:59:55.054Z
}
}
{
data: {
patientId: '123456789',
firstName: 'asddsa',
lastName: 'asddsa',
gender: 'male',
phoneNumber: '0547894123',
dateOfBirth: 2024-12-18T00:00:00.000Z,
city: 'akko',
firstVisit: 2025-01-08T17:59:55.054Z
}
}
i tried some changes to the schema by removing the uniques:
model Patient {
id Int @id @default(autoincrement())
patientId String @db.VarChar(10)
firstName String
lastName String
fullName String?
dateOfBirth DateTime
gender String
phoneNumber String
workPhoneNumber String?
homePhoneNumber String?
additionalPhoneNumber String?
firstVisit DateTime
email String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
address PatientAddress? @relation("PatientToAddress")

@@map("patient")
}

model PatientAddress {
id Int @id @default(autoincrement())
street String?
city String
zipCode String?
patientId Int @unique
patient Patient @relation("PatientToAddress", fields: [patientId], references: [id], onDelete: Cascade)

@@map("patient_address")
}
model Patient {
id Int @id @default(autoincrement())
patientId String @db.VarChar(10)
firstName String
lastName String
fullName String?
dateOfBirth DateTime
gender String
phoneNumber String
workPhoneNumber String?
homePhoneNumber String?
additionalPhoneNumber String?
firstVisit DateTime
email String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
address PatientAddress? @relation("PatientToAddress")

@@map("patient")
}

model PatientAddress {
id Int @id @default(autoincrement())
street String?
city String
zipCode String?
patientId Int @unique
patient Patient @relation("PatientToAddress", fields: [patientId], references: [id], onDelete: Cascade)

@@map("patient_address")
}
Nurul
Nurul3mo ago
Can you try logging the error in catch block and see if you get more information?
console.error('Error creating patient:', err);
console.error('Error creating patient:', err);
DaYroXy™
DaYroXy™OP3mo ago
it will just point at the logging line:
TypeError: The "payload" argument must be of type object. Received null
at createPatient (file://C%3A/Users/DaYroXy/dev/smile/app/actions/patients.actions.ts:62:10)
60 | };
61 | } catch (err) {
> 62 | console.error("Error creating patient:", err);
| ^
63 | return {
64 | error: true,
65 | message: "err", {
code: 'ERR_INVALID_ARG_TYPE',
digest: '1928657120'
}
TypeError: The "payload" argument must be of type object. Received null
at createPatient (file://C%3A/Users/DaYroXy/dev/smile/app/actions/patients.actions.ts:62:10)
60 | };
61 | } catch (err) {
> 62 | console.error("Error creating patient:", err);
| ^
63 | return {
64 | error: true,
65 | message: "err", {
code: 'ERR_INVALID_ARG_TYPE',
digest: '1928657120'
}
Nurul
Nurul3mo ago
What is the value of safeData?
DaYroXy™
DaYroXy™OP2mo ago
{
patientId: '147894561',
firstName: 'testing',
lastName: 'testing',
gender: 'male,
phoneNumber: '1234567891',
dateOfBirth: '2024-12-10',
city: 'testing'
}
{
patientId: '147894561',
firstName: 'testing',
lastName: 'testing',
gender: 'male,
phoneNumber: '1234567891',
dateOfBirth: '2024-12-10',
city: 'testing'
}
even trying it manually like this:
await prisma.patient.create({
data: {
patientId: safeData.patientId,
firstName: safeData.firstName,
lastName: safeData.lastName,
fullName: safeData.firstName + " " + safeData.lastName,
dateOfBirth: new Date(safeData.dateOfBirth),
gender: safeData.gender,
phoneNumber: safeData.phoneNumber,
workPhoneNumber: safeData.workPhoneNumber ?? "",
homePhoneNumber: safeData.homePhoneNumber ?? "",
additionalPhoneNumber: safeData.additionalPhoneNumber ?? "",
firstVisit: new Date(),
email: safeData.email ?? "",
},
});
await prisma.patient.create({
data: {
patientId: safeData.patientId,
firstName: safeData.firstName,
lastName: safeData.lastName,
fullName: safeData.firstName + " " + safeData.lastName,
dateOfBirth: new Date(safeData.dateOfBirth),
gender: safeData.gender,
phoneNumber: safeData.phoneNumber,
workPhoneNumber: safeData.workPhoneNumber ?? "",
homePhoneNumber: safeData.homePhoneNumber ?? "",
additionalPhoneNumber: safeData.additionalPhoneNumber ?? "",
firstVisit: new Date(),
email: safeData.email ?? "",
},
});
doesnt work. i think its something with the address as when i removed it, its working but what the issue is? does anyone why this issue occurs when im trying to catch it? its really difficult to debug the issue without any console errors

Did you find this page helpful?