openapi: 3.0.3
info:
title: 'Pet Management API'
description: 'API para la gestión de mascotas con sus dueños(En este caso Gatos). Esta es una API RESTful robusta, desarrollada conLaravel 8.x+ y PHP, cuyo objetivo es gestionar personas y sus mascotas. La API utiliza JWT (JSON Web Tokens) para la autenticación de usuarios, garantizando la seguridad de las rutas privadas. El proyecto sigue una arquitectura sugerida que incluye el uso de controladores, servicios, repositorios, recursos y validadores (Form Requests) para mantener una estructura de código limpia y escalable.'
version: 1.0.0
servers:
-
url: 'https://pet-management-api.lorenzorojo.com'
tags:
-
name: Auth
description: 'Autenticación de un usuario en el API'
-
name: Person
description: 'Person owner pets management'
-
name: Pet
description: 'Pet Management'
-
name: Reports
description: 'API Reports'
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'You can retrieve your token by visiting your dashboard and clicking Generate API token.'
security:
-
default: []
paths:
/api/v1/auth/login:
post:
summary: 'Get a JWT via given credentials.'
operationId: getAJWTViaGivenCredentials
description: ''
parameters: []
responses: { }
tags:
- Auth
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: qkunze@example.com
nullable: false
password:
type: string
description: 'Must be at least 6 characters.'
example: 'Z5ij-e/dl4m{o,'
nullable: false
required:
- email
- password
security: []
/api/v1/auth/logout:
post:
summary: 'Log the user out (Invalidate the token).'
operationId: logTheUserOutInvalidateTheToken
description: ''
parameters: []
responses: { }
tags:
- Auth
/api/v1/auth/me:
get:
summary: 'Get the authenticated User.'
operationId: getTheAuthenticatedUser
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
error: 'Invalid tokenWrong number of segments'
properties:
error:
type: string
example: 'Invalid tokenWrong number of segments'
tags:
- Auth
/api/v1/auth/refresh:
post:
summary: 'Refresh a token.'
operationId: refreshAToken
description: ''
parameters: []
responses: { }
tags:
- Auth
/api/v1/auth/register:
post:
summary: 'Store new User'
operationId: storeNewUser
description: ''
parameters: []
responses: { }
tags:
- Auth
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: kunde.eloisa@example.com
nullable: false
password:
type: string
description: 'Must be at least 6 characters.'
example: '4[*UyPJ"}6'
nullable: false
required:
- name
- email
- password
security: []
/api/v1/person:
get:
summary: 'Display a listing of the resource.'
operationId: displayAListingOfTheResource
description: ''
parameters:
-
in: query
name: page
description: 'Must be at least 1.'
example: 73
required: true
schema:
type: integer
description: 'Must be at least 1.'
example: 73
nullable: false
-
in: query
name: perPage
description: 'Must be at least 1. Must not be greater than 100.'
example: 13
required: true
schema:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 13
nullable: false
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
error: 'Invalid tokenWrong number of segments'
properties:
error:
type: string
example: 'Invalid tokenWrong number of segments'
tags:
- Person
post:
summary: 'Store a newly created resource in storage.'
operationId: storeANewlyCreatedResourceInStorage
description: ''
parameters: []
responses: { }
tags:
- Person
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: kunde.eloisa@example.com
nullable: false
birthdate:
type: string
description: 'Must be a valid date in the format Y-m-d
.'
example: '2025-08-19'
nullable: false
required:
- name
- email
- birthdate
'/api/v1/person/{id}':
get:
summary: 'Display the specified resource.'
operationId: displayTheSpecifiedResource
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
error: 'Invalid tokenWrong number of segments'
properties:
error:
type: string
example: 'Invalid tokenWrong number of segments'
tags:
- Person
put:
summary: 'Update the specified resource in storage.'
operationId: updateTheSpecifiedResourceInStorage
description: ''
parameters: []
responses: { }
tags:
- Person
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: kunde.eloisa@example.com
nullable: false
birthdate:
type: string
description: 'Must be a valid date in the format Y-m-d
.'
example: '2025-08-19'
nullable: false
delete:
summary: 'Remove the specified resource from storage.'
operationId: removeTheSpecifiedResourceFromStorage
description: ''
parameters: []
responses: { }
tags:
- Person
parameters:
-
in: path
name: id
description: 'The ID of the person.'
example: 1
required: true
schema:
type: integer
/api/v1/pet:
get:
summary: 'Display a listing of the resource.'
operationId: displayAListingOfTheResource
description: ''
parameters:
-
in: query
name: page
description: 'Must be at least 1.'
example: 73
required: true
schema:
type: integer
description: 'Must be at least 1.'
example: 73
nullable: false
-
in: query
name: perPage
description: 'Must be at least 1. Must not be greater than 100.'
example: 13
required: true
schema:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 13
nullable: false
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
error: 'Invalid tokenWrong number of segments'
properties:
error:
type: string
example: 'Invalid tokenWrong number of segments'
tags:
- Pet
post:
summary: 'Store a newly created resource in storage.'
operationId: storeANewlyCreatedResourceInStorage
description: ''
parameters: []
responses: { }
tags:
- Pet
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 60 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
species:
type: string
description: 'Must not be greater than 60 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
breed:
type: string
description: 'Must not be greater than 60 characters.'
example: qxbajwbpilpmufinllwlo
nullable: false
age:
type: integer
description: ''
example: 17
nullable: false
person_id:
type: integer
description: 'The id
of an existing record in the people table.'
example: 17
nullable: false
required:
- name
- species
- breed
- age
- person_id
'/api/v1/pet/{id}':
get:
summary: 'Display the specified resource.'
operationId: displayTheSpecifiedResource
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
error: 'Invalid tokenWrong number of segments'
properties:
error:
type: string
example: 'Invalid tokenWrong number of segments'
tags:
- Pet
put:
summary: 'Update the specified resource in storage.'
operationId: updateTheSpecifiedResourceInStorage
description: ''
parameters: []
responses: { }
tags:
- Pet
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 60 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
species:
type: string
description: 'Must not be greater than 60 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
breed:
type: string
description: 'Must not be greater than 60 characters.'
example: qxbajwbpilpmufinllwlo
nullable: false
age:
type: integer
description: ''
example: 17
nullable: false
person_id:
type: integer
description: 'The id
of an existing record in the people table.'
example: 17
nullable: false
required:
- name
- species
- breed
- age
- person_id
delete:
summary: 'Remove the specified resource from storage.'
operationId: removeTheSpecifiedResourceFromStorage
description: ''
parameters: []
responses: { }
tags:
- Pet
parameters:
-
in: path
name: id
description: 'The ID of the pet.'
example: 1
required: true
schema:
type: integer
/api/v1/pet/cat/breeds:
get:
summary: "Get available breeds 'The CAT API'"
operationId: getAvailableBreedsTheCATAPI
description: ''
parameters:
-
in: query
name: page
description: 'Current page number.'
example: 0
required: true
schema:
type: integer
description: 'Current page number.'
example: 0
nullable: false
-
in: query
name: perPage
description: 'Registers by page.'
example: 10
required: true
schema:
type: integer
description: 'Registers by page.'
example: 10
nullable: false
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
error: 'Invalid tokenWrong number of segments'
properties:
error:
type: string
example: 'Invalid tokenWrong number of segments'
tags:
- Pet
'/api/v1/person/{person_id}/with-pets':
get:
summary: 'Devuelve una persona con sus mascotas'
operationId: devuelveUnaPersonaConSusMascotas
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
id: 111
name: Pepito
email: pepito123@gmail.com
birthdate: 13-08-1995
pets:
-
id: 11
name: Michilina
species: cat
breed: angora
age: '10.00'
image_url: null
life_span: null
adaptability: null
reference_image_id: null
created_at: '2025-05-18'
-
id: 12
name: Minina
species: cat
breed: Criolla
age: '8.00'
image_url: null
life_span: null
adaptability: null
reference_image_id: null
created_at: '2025-05-18'
-
id: 13
name: Minina
species: cat
breed: Criolla
age: '8.00'
image_url: null
life_span: null
adaptability: null
reference_image_id: null
created_at: '2025-05-18'
-
id: 14
name: 'Minina Acur'
species: cat
breed: Abyssinian
age: '8.00'
image_url: 'https://cdn2.thecatapi.com/images/0XYvRd7oD.jpg'
life_span: '14 - 15'
adaptability: 5
reference_image_id: 0XYvRd7oD
created_at: '2025-05-18'
-
id: 15
name: 'Minina Acur sdsdsdsd'
species: Gato
breed: Abyssinian
age: '5.00'
image_url: 'https://cdn2.thecatapi.com/images/0XYvRd7oD.jpg'
life_span: '14 - 15'
adaptability: 5
reference_image_id: 0XYvRd7oD
created_at: '2025-05-18'
properties:
id:
type: integer
example: 111
name:
type: string
example: Pepito
email:
type: string
example: pepito123@gmail.com
birthdate:
type: string
example: 13-08-1995
pets:
type: array
example:
-
id: 11
name: Michilina
species: cat
breed: angora
age: '10.00'
image_url: null
life_span: null
adaptability: null
reference_image_id: null
created_at: '2025-05-18'
-
id: 12
name: Minina
species: cat
breed: Criolla
age: '8.00'
image_url: null
life_span: null
adaptability: null
reference_image_id: null
created_at: '2025-05-18'
-
id: 13
name: Minina
species: cat
breed: Criolla
age: '8.00'
image_url: null
life_span: null
adaptability: null
reference_image_id: null
created_at: '2025-05-18'
-
id: 14
name: 'Minina Acur'
species: cat
breed: Abyssinian
age: '8.00'
image_url: 'https://cdn2.thecatapi.com/images/0XYvRd7oD.jpg'
life_span: '14 - 15'
adaptability: 5
reference_image_id: 0XYvRd7oD
created_at: '2025-05-18'
-
id: 15
name: 'Minina Acur sdsdsdsd'
species: Gato
breed: Abyssinian
age: '5.00'
image_url: 'https://cdn2.thecatapi.com/images/0XYvRd7oD.jpg'
life_span: '14 - 15'
adaptability: 5
reference_image_id: 0XYvRd7oD
created_at: '2025-05-18'
items:
type: object
properties:
id:
type: integer
example: 11
name:
type: string
example: Michilina
species:
type: string
example: cat
breed:
type: string
example: angora
age:
type: string
example: '10.00'
image_url:
type: string
example: null
life_span:
type: string
example: null
adaptability:
type: string
example: null
reference_image_id:
type: string
example: null
created_at:
type: string
example: '2025-05-18'
tags:
- Reports
parameters:
-
in: path
name: person_id
description: 'The ID of the person.'
example: 1
required: true
schema:
type: integer