Scribe JSON:API Attribute Reference 
This document provides comprehensive documentation for all Scribe attribute classes used in the Laravel Doctrine JSON:API package. These attributes enable automatic, detailed, and accurate API documentation generation with Scribe. Each section includes a description, usage guidelines, property details, and direct links to the class source files.
Table of Contents 
Overview 
Scribe attributes are PHP 8+ attributes that you add to your controller methods or classes. They provide metadata about your JSON:API endpoints, such as resource type, grouping, expected request/response structure, and relationships. Scribe strategies scan for these attributes to generate accurate OpenAPI/Swagger documentation and beautiful docs UIs.
Common Usage 
- Place attributes directly above controller methods or classes.
- You can combine multiple attributes on a single method for full endpoint description.
- All attributes are in the Sowl\JsonApi\Scribe\Attributesnamespace.
Example:
use Sowl\JsonApi\Scribe\Attributes\ResourceRequest;
use Sowl\JsonApi\Scribe\Attributes\ResourceResponse;
use Sowl\JsonApi\Scribe\Attributes\ResourceMetadata;
#[ResourceMetadata(groupName: 'Users', groupDescription: 'Operations related to user resources.')]
class UserController
{
    #[ResourceRequest(resourceType: 'users', idType: 'string', idExample: 'abc123')]
    #[ResourceResponse(resourceType: 'users', status: 200, description: 'Get a user by ID')]
    public function show($id) { /* ... */ }
}Attributes 
ResourceMetadata 
Purpose: Provides grouping and descriptive metadata for endpoints or resource classes. Used for grouping endpoints, customizing group names, descriptions, and authentication flags in documentation.
Usage:
- Place on controller classes or methods.
Properties:
- groupName: string|null— The group name for the endpoint or resource.
- groupDescription: string|null— Description for the group.
- subgroup: string|null— Subgroup name for further grouping.
- subgroupDescription: string|null— Description for the subgroup.
- title: string|null— Title of the endpoint or resource.
- description: string|null— Description of the endpoint or resource.
- authenticated: bool— Whether the endpoint requires authentication.
Example:
#[ResourceMetadata(groupName: 'Users', groupDescription: 'Operations related to user resources.')]
class UserController {}ResourceRequest 
Purpose: Marks a controller method as handling a single resource request (show, update, delete) for JSON:API.
Usage:
- Place on methods handling single-resource endpoints.
Properties:
- resourceType: string|null— JSON:API resource type.
- idType: string|null— Type of the resource identifier (e.g., string, int).
- idExample: mixed— Example value for the resource ID.
- idParam: string— Name of the route parameter for the resource ID (default: 'id').
- acceptHeaders: array— List of accepted content types (default: ['application/vnd.api+json']).
Example:
#[ResourceRequest(resourceType: 'users', idType: 'string', idExample: 'abc123')]
public function show($id) {}ResourceRequestList 
Purpose: Marks a controller method as handling a resource collection (list) request for JSON:API.
Usage:
- Place on methods that return lists of resources.
Properties:
- resourceType: string|null— JSON:API resource type.
- acceptHeaders: array— List of accepted content types (default: ['application/vnd.api+json']).
Example:
#[ResourceRequestList(resourceType: 'users')]
public function index() {}ResourceRequestCreate 
Purpose: Marks a controller method as handling resource creation for JSON:API.
Usage:
- Place on methods that create new resources.
Properties:
- resourceType: string|null— JSON:API resource type.
- acceptHeaders: array— List of accepted content types (default: ['application/vnd.api+json']).
Example:
#[ResourceRequestCreate(resourceType: 'users')]
public function store($request) {}ResourceRequestRelationships 
Purpose: Marks a controller method as handling relationship requests for a resource (e.g., /users/{id}/relationships/{relation}) in JSON:API.
Usage:
- Place on methods that manage relationships endpoints.
Properties:
- resourceType: string|null— JSON:API resource type.
- idType: string|null— Type of the resource identifier.
- idExample: mixed— Example value for the resource ID.
- idParam: string— Name of the route parameter for the resource ID (default: 'id').
- acceptHeaders: array— List of accepted content types (default: ['application/vnd.api+json']).
Example:
#[ResourceRequestRelationships(resourceType: 'users', idType: 'string', idExample: 'abc123', idParam: 'id')]
public function relationships($id, $relationship) {}ResourceResponse 
Purpose: Describes the response for a resource endpoint in JSON:API.
Usage:
- Place on methods to specify response details for a resource.
Properties:
- resourceType: string|null— JSON:API resource type.
- status: int— HTTP status code (default: 200).
- description: string|null— Description of the response.
- fractalOptions: array— Options for Fractal transformation.
- collection: bool— Whether the response is a collection.
- pageNumber: int— Example page number for paginated responses.
- pageSize: int— Example page size for paginated responses.
- contentTypeHeaders: array— List of content-type headers (default: ['application/vnd.api+json']).
Example:
#[ResourceResponse(resourceType: 'users', status: 200, description: 'Get a user by ID')]
public function show($id) {}ResourceResponseRelated 
Purpose: Describes the response for a related resource endpoint (e.g., /users/{id}/roles) in JSON:API.
Usage:
- Place on methods returning related resources.
Properties:
- resourceType: string|null— JSON:API resource type.
- relationshipName: string|null— Name of the relationship.
- status: int— HTTP status code.
- description: string|null— Description of the response.
- fractalOptions: array— Options for Fractal transformation.
- collection: bool— Whether the response is a collection.
- pageNumber: int— Example page number.
- pageSize: int— Example page size.
- contentTypeHeaders: array— List of content-type headers (default: ['application/vnd.api+json']).
Example:
#[ResourceResponseRelated(resourceType: 'users', relationshipName: 'roles', collection: true, description: 'Get related roles for a user')]
public function related($id, $relationship) {}ResourceResponseRelationships 
Purpose: Describes the response for a relationships endpoint (e.g., /users/{id}/relationships/roles) in JSON:API.
Usage:
- Place on methods returning relationship data.
Properties:
- resourceType: string|null— JSON:API resource type.
- relationshipName: string|null— Name of the relationship.
- status: int— HTTP status code.
- description: string|null— Description of the response.
- fractalOptions: array— Options for Fractal transformation.
- collection: bool— Whether the response is a collection.
- pageNumber: int— Example page number.
- pageSize: int— Example page size.
- contentTypeHeaders: array— List of content-type headers (default: ['application/vnd.api+json']).
Example:
#[ResourceResponseRelationships(resourceType: 'users', relationshipName: 'roles', collection: true, description: 'Get user roles relationship')]
public function relationships($id, $relationship) {}Best Practices 
- Always annotate your endpoints with the most specific attribute(s) for best documentation results.
- Use ResourceMetadatafor grouping and descriptions to improve docs navigation.
- Use real resource types and relationship names for clarity and accuracy.
- Keep attribute property values up-to-date with your actual API implementation.
- Combine request and response attributes on the same method for complete endpoint documentation.
See Also 
- Scribe Documentation
- JSON:API Specification
- Laravel Doctrine JSON:API Scribe Strategies
- Main Scribe Documentation
For further details and advanced usage, see the PHP docblocks in each attribute class and refer to this file from the main Scribe documentation.