{
	"info": {
		"name": "Proyexa API M2M",
		"description": "Colección oficial de peticiones para la integración Machine-to-Machine de Proyexa.",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "1. Autenticación",
			"item": [
				{
					"name": "Obtener Token de Acceso",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if(pm.response.code === 200) {",
									"    var jsonData = pm.response.json();",
									"    pm.collectionVariables.set(\"access_token\", jsonData.access_token);",
									"    console.log(\"Token guardado automáticamente en las variables de colección\");",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json",
								"type": "text"
							}
						],
						"body": {
							"mode": "urlencoded",
							"urlencoded": [
								{
									"key": "grant_type",
									"value": "client_credentials",
									"type": "text"
								},
								{
									"key": "client_id",
									"value": "{{client_id}}",
									"type": "text"
								},
								{
									"key": "client_secret",
									"value": "{{client_secret}}",
									"type": "text"
								}
							]
						},
						"url": {
							"raw": "{{base_url}}/oauth/token",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"oauth",
								"token"
							]
						},
                        "description": "Genera el token de acceso. Al ejecutarse con éxito, Postman guardará automáticamente el `access_token` en las variables de la colección.\n\n⚠️ **Nota:** Los tokens M2M tienen una duración estricta de 60 minutos (1 hora). Es una buena práctica almacenar este token y reutilizarlo para todas tus peticiones, solicitando uno nuevo únicamente cuando la API devuelva un error `401 Unauthorized`."
					}
				}
			]
		},
		{
			"name": "2. Facturación",
			"item": [
				{
					"name": "Consultar Monedas y Tasas",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{access_token}}",
								"type": "text"
							},
							{
								"key": "Accept",
								"value": "application/json",
								"type": "text"
							}
						],
						"url": {
							"raw": "{{base_url}}/m2m/billing/currencies",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"m2m",
								"billing",
								"currencies"
							]
						},
                        "description": "Devuelve las monedas configuradas en el tenant y su tasa de cambio."
					}
				},
				{
					"name": "Listar Facturas Pendientes",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{access_token}}",
								"type": "text"
							},
							{
								"key": "Accept",
								"value": "application/json",
								"type": "text"
							}
						],
						"url": {
							"raw": "{{base_url}}/m2m/billing/invoices?page=1&customer_id=&rtn=&per_page=15",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"m2m",
								"billing",
								"invoices"
							],
							"query": [
								{
									"key": "page",
									"value": "1",
									"description": "Número de página de resultados a consultar (Opcional)"
								},
								{
									"key": "customer_id",
									"value": "",
									"description": "Filtrar por ID de cliente en Proyexa (Opcional)"
								},
								{
									"key": "rtn",
									"value": "",
									"description": "Filtrar por el RTN / NIT del cliente (Opcional)"
								},
								{
									"key": "per_page",
									"value": "15",
									"description": "Resultados por página (Opcional)"
								}
							]
						},
                        "description": "Devuelve una lista paginada de facturas con saldo pendiente (estado 'active' o 'partially_paid')."
					}
				},
				{
					"name": "Detalle de Factura",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{access_token}}",
								"type": "text"
							},
							{
								"key": "Accept",
								"value": "application/json",
								"type": "text"
							}
						],
						"url": {
							"raw": "{{base_url}}/m2m/billing/invoices/{{invoice_id_or_code}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"m2m",
								"billing",
								"invoices",
								"{{invoice_id_or_code}}"
							]
						},
                        "description": "Consulta el saldo actualizado y el desglose total de una factura antes de aplicar un pago."
					}
				},
				{
					"name": "Registrar Pago",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{access_token}}",
								"type": "text"
							},
							{
								"key": "Accept",
								"value": "application/json",
								"type": "text"
							},
							{
								"key": "Content-Type",
								"value": "application/json",
								"type": "text"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"amount\": \"1500.00\",\n  \"reference_number\": \"TRX-889922\",\n  \"currency_code\": \"HNL\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/m2m/billing/invoices/{{invoice_id_or_code}}/payments",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"m2m",
								"billing",
								"invoices",
								"{{invoice_id_or_code}}",
								"payments"
							]
						},
                        "description": "Aplica un abono a la factura especificada y genera el recibo contable."
					}
				}
			]
		}
	],
	"variable": [
		{
			"key": "base_url",
			"value": "https://tu-tenant.proyexa.app",
			"type": "string"
		},
		{
			"key": "client_id",
			"value": "UUID_DEL_CLIENTE",
			"type": "string"
		},
		{
			"key": "client_secret",
			"value": "SECRETO_DEL_CLIENTE",
			"type": "string"
		},
		{
			"key": "access_token",
			"value": "",
			"type": "string"
		},
		{
			"key": "invoice_id_or_code",
			"value": "601",
			"type": "string"
		}
	]
}
