127

If I return an object:

return Response::json([
    'hello' => $value
]);

the status code will be 200. How can I change it to 201, with a message and send it with the json object?.

I don't know if there is a way to just set the status code in Laravel.

9 Answers 9

155

You can use http_response_code() to set HTTP response code.

If you pass no parameters then http_response_code will get the current status code. If you pass a parameter it will set the response code.

http_response_code(201); // Set response status code to 201

For Laravel(Reference from: https://stackoverflow.com/a/14717895/2025923):

return Response::json([
    'hello' => $value
], 201); // Status code here
Sign up to request clarification or add additional context in comments.

4 Comments

Keep in mind that Symfony\Component\HttpFoundation\Response has its own predefined constants for http status codes, and if you use other than that it will change your status into something close to it... i.e. if you want to set status 449, you will always get status 500
@Tushar what if I don't want to send any data back, just a 200 response? Is response()->json([], 200); fit for purpose in this situation? Or is 200 implicit?
+ (201) this answer safes my evening :)
use Illuminate\Http\Response; and return new Response(['message' => 'test'], 422); worked for me
95

This is how I do it in Laravel 5

return Response::json(['hello' => $value],201);

Or using a helper function:

return response()->json(['hello' => $value], 201); 

2 Comments

@timeNomad What are the pros and cons of these two methods - which is recommended?
@DJC on first method you will be able to use Response:: several times loading only once. On second method you will call that class to each time you use response()-> (no problem if you'll use only one).
48

I think it is better practice to keep your response under single control and for this reason I found out the most official solution.

response()->json([...])
    ->setStatusCode(Response::HTTP_OK, Response::$statusTexts[Response::HTTP_OK]);

add this after namespace declaration:

use Illuminate\Http\Response;

2 Comments

Thanks, I was looking for a reference to this. Do you happen to have a link to the other available response names such as 201, 400 etc and not just the 200 (HTTP_OK)? I've tried googling it but haven't been able to find it quite yet!
Nevermind... found it. Here is a complete list for anyone else who may be looking for it: gist.github.com/jeffochoa/a162fc4381d69a2d862dafa61cda0798
17

There are multiple ways

return \Response::json(['hello' => $value], STATUS_CODE);

return response()->json(['hello' => $value], STATUS_CODE);

where STATUS_CODE is your HTTP status code you want to send. Both are identical.

if you are using Eloquent model, then simple return will also be auto converted in JSON by default like,

return User::all();

1 Comment

And how to set the Status Code if returning Eloquent Models or Resources?
7

laravel 7.* You don't have to speicify JSON RESPONSE cause it's automatically converted it to JSON

return response(['Message'=>'Wrong Credintals'], 400);

Comments

3
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity

Hope my answer was helpful.

Comments

3

I always use this type of json response format, this will help you...

return response()->json(['success'=>'true','message' => 'Successfully Done.'], 200);

Comments

1

It's better to do it with helper functions rather than Facades. This solution will work well from Laravel 5.7 onwards

//import dependency
use Illuminate\Http\Response;

//snippet
return \response()->json([
   'status' => '403',//sample entry
   'message' => 'ACCOUNT ACTION HAS BEEN DISABLED',//sample message
], Response::HTTP_FORBIDDEN);//Illuminate\Http\Response sets appropriate headers

Comments

0

I prefer the response helper myself:

    return response()->json(['message' => 'Yup. This request succeeded.'], 200);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.