unauthorized error on next js api routes

I'm getting this error on my api route
2 Replies
Lipe
LipeOP5mo ago
[Error [APIError]: ] {
status: 'UNAUTHORIZED',
body: undefined,
headers: {},
statusCode: 401
}
[Error [APIError]: ] {
status: 'UNAUTHORIZED',
body: undefined,
headers: {},
statusCode: 401
}
my code is here /app/api/v1/organization/create/route.ts
import { auth } from '@/lib/auth';
import { z } from 'zod';
import { headers } from 'next/headers';

export async function POST(req: Request) {
try {
const body = await req.json();

const createOrgSchema = z.object({
name: z.string().min(1),
slug: z.string().min(1),
logo: z.string().optional(),
});

const result = createOrgSchema.safeParse(body);

if (!result.success) {
return Response.json(
{ error: 'invalid data', details: result.error.issues },
{ status: 400 }
);
}
const { name, slug, logo } = result.data;

const organizationSlug = slug
.toLowerCase()
.trim()
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '')
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-+|-+$/g, '');

const isSlugAvaliable = await auth.api.checkOrganizationSlug({
body: {
slug: organizationSlug,
},
});

if (!isSlugAvaliable) {
return Response.json({ error: 'Slug is taken.' }, { status: 400 });
}

await auth.api.createOrganization({
headers: await headers(),
body: {
name: name,
slug: organizationSlug,
},
});

return new Response(null, { status: 201 });
} catch (error: any) {
console.log(error);
if (error.statusCode) {
return Response.json(error, { status: error.statusCode });
}
return Response.json(error, { status: 400 });
}
}
import { auth } from '@/lib/auth';
import { z } from 'zod';
import { headers } from 'next/headers';

export async function POST(req: Request) {
try {
const body = await req.json();

const createOrgSchema = z.object({
name: z.string().min(1),
slug: z.string().min(1),
logo: z.string().optional(),
});

const result = createOrgSchema.safeParse(body);

if (!result.success) {
return Response.json(
{ error: 'invalid data', details: result.error.issues },
{ status: 400 }
);
}
const { name, slug, logo } = result.data;

const organizationSlug = slug
.toLowerCase()
.trim()
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '')
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-+|-+$/g, '');

const isSlugAvaliable = await auth.api.checkOrganizationSlug({
body: {
slug: organizationSlug,
},
});

if (!isSlugAvaliable) {
return Response.json({ error: 'Slug is taken.' }, { status: 400 });
}

await auth.api.createOrganization({
headers: await headers(),
body: {
name: name,
slug: organizationSlug,
},
});

return new Response(null, { status: 201 });
} catch (error: any) {
console.log(error);
if (error.statusCode) {
return Response.json(error, { status: error.statusCode });
}
return Response.json(error, { status: 400 });
}
}
Ping
Ping5mo ago
pass headers to your auth.api.checkOrganizationSlug fn It may be under fetchOptions.headers if you can't find it.

Did you find this page helpful?