API design principles:

Resources are nouns

GET    /users           # List users
POST   /users           # Create user
GET    /users/{id}      # Get user
PUT    /users/{id}      # Update user
DELETE /users/{id}      # Delete user

Actions use verbs in URLs

POST   /users/{id}/activate
POST   /users/{id}/reset-password

Consistent response format

{
  "data": { ... },
  "meta": { ... },
  "errors": [ ... ]
}

Status codes

  • 200: Success (GET, PUT, PATCH)
  • 201: Created (POST)
  • 204: No content (DELETE)
  • 400: Bad request
  • 401: Unauthorized
  • 403: Forbidden
  • 404: Not found
  • 500: Server error

Documentation: OpenAPI/Swagger isn't optional—it's expected.