[Preview] Crear contrato
POST
/admin/configuration/contractsCrea contrato mediante un DTO nominal cerrado, valida referencias dentro del alcance firmado y conserva el resultado para reintentos idempotentes sin publicar metadata generica.
curl --request POST \
--url "${BASE_URL}/admin/configuration/contracts" \
--header 'Authorization: Bearer ${ACCESS_TOKEN}' \
--header 'X-Correlation-Id: 10000000-0000-4000-8000-000000000100' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: synthetic-operation-0001' \
--data '{
"code": "CTR-DEMO",
"name": "Contrato Sintetico",
"payerId": "b1000000-0000-4000-8000-000000000004",
"validFrom": "2026-01-01",
"validTo": "2026-12-31",
"active": true
}'Request
Headers y parametros
| Nombre | Ubicacion | Requerido | Descripcion |
|---|---|---|---|
X-Correlation-Id | header | No | UUID generado por el consumidor para trazabilidad; el servidor genera uno si se omite. |
Idempotency-Key | header | Si | Clave unica por service principal y operacion; reutilizarla con otro payload produce 409. |
Payload
Atributos administrables y sinteticos de contrato.
Content-Type: application/json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
active | boolean | Si | - |
code | string | Si | - |
name | string | Si | - |
payerId | string (uuid) | Si | - |
validFrom | string (date) | Si | - |
validTo | string (date) | Si | - |
Ejemplo
{
"active": true,
"code": "CTR-DEMO",
"name": "Contrato Sintetico",
"payerId": "b1000000-0000-4000-8000-000000000004",
"validFrom": "2026-01-01",
"validTo": "2026-12-31"
}Responses
201Contract creado con version inicial o replay confirmado.
Content-Type: application/json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
active | boolean | Si | - |
code | string | Si | - |
createdAt | string (date-time) | No | - |
id | string (uuid) | Si | - |
name | string | Si | - |
payerId | string (uuid) | Si | - |
updatedAt | string (date-time) | No | - |
validFrom | string (date) | Si | - |
validTo | string (date) | Si | - |
version | integer | Si | - |
Ejemplo
{
"active": true,
"code": "CTR-DEMO",
"createdAt": "2026-07-26T14:00:00-05:00",
"id": "b2000007-0000-4000-8000-000000000001",
"name": "Contrato Sintetico",
"payerId": "b1000000-0000-4000-8000-000000000004",
"updatedAt": "2026-07-26T14:00:00-05:00",
"validFrom": "2026-01-01",
"validTo": "2026-12-31",
"version": 1
}400Solicitud mal formada o parametro invalido.
Content-Type: application/problem+json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
code | string | Si | - |
correlationId | string (uuid) | Si | - |
detail | string | No | Explicacion segura sin PII ni secretos. |
errors | object[] | No | - |
instance | string (uri-reference) | No | - |
status | integer | Si | - |
title | string | Si | - |
type | string (uri) | Si | URI estable que identifica la clase de problema. |
Ejemplo
{
"code": "INVALID_REQUEST",
"correlationId": "10000000-0000-4000-8000-000000000001",
"detail": "Revise los parametros enviados.",
"status": 400,
"title": "Solicitud invalida",
"type": "https://magnosoft.com.co/problems/invalid-request"
}401Token ausente, invalido, vencido o con audience incorrecta.
Content-Type: application/problem+json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
code | string | Si | - |
correlationId | string (uuid) | Si | - |
detail | string | No | Explicacion segura sin PII ni secretos. |
errors | object[] | No | - |
instance | string (uri-reference) | No | - |
status | integer | Si | - |
title | string | Si | - |
type | string (uri) | Si | URI estable que identifica la clase de problema. |
Ejemplo
{
"code": "INVALID_ACCESS_TOKEN",
"correlationId": "10000000-0000-4000-8000-000000000001",
"status": 401,
"title": "Autenticacion requerida",
"type": "https://magnosoft.com.co/problems/unauthorized"
}403Service principal autenticado sin el scope requerido.
Content-Type: application/problem+json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
code | string | Si | - |
correlationId | string (uuid) | Si | - |
detail | string | No | Explicacion segura sin PII ni secretos. |
errors | object[] | No | - |
instance | string (uri-reference) | No | - |
status | integer | Si | - |
title | string | Si | - |
type | string (uri) | Si | URI estable que identifica la clase de problema. |
Ejemplo
{
"code": "INSUFFICIENT_SCOPE",
"correlationId": "10000000-0000-4000-8000-000000000001",
"status": 403,
"title": "Permiso insuficiente",
"type": "https://magnosoft.com.co/problems/forbidden"
}404Recurso inexistente o no visible dentro del tenant autenticado.
Content-Type: application/problem+json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
code | string | Si | - |
correlationId | string (uuid) | Si | - |
detail | string | No | Explicacion segura sin PII ni secretos. |
errors | object[] | No | - |
instance | string (uri-reference) | No | - |
status | integer | Si | - |
title | string | Si | - |
type | string (uri) | Si | URI estable que identifica la clase de problema. |
Ejemplo
{
"code": "RESOURCE_NOT_FOUND",
"correlationId": "10000000-0000-4000-8000-000000000001",
"status": 404,
"title": "Recurso no encontrado",
"type": "https://magnosoft.com.co/problems/not-found"
}409Conflicto de concurrencia, capacidad o reutilizacion de idempotencia.
Content-Type: application/problem+json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
code | string | Si | - |
correlationId | string (uuid) | Si | - |
detail | string | No | Explicacion segura sin PII ni secretos. |
errors | object[] | No | - |
instance | string (uri-reference) | No | - |
status | integer | Si | - |
title | string | Si | - |
type | string (uri) | Si | URI estable que identifica la clase de problema. |
Ejemplo
{
"code": "CONCURRENT_MODIFICATION",
"correlationId": "10000000-0000-4000-8000-000000000001",
"detail": "El recurso cambio; consulte su estado antes de reintentar.",
"status": 409,
"title": "Conflicto de estado",
"type": "https://magnosoft.com.co/problems/conflict"
}422JSON valido que incumple una regla de validacion del contrato.
Content-Type: application/problem+json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
code | string | Si | - |
correlationId | string (uuid) | Si | - |
detail | string | No | Explicacion segura sin PII ni secretos. |
errors | object[] | No | - |
instance | string (uri-reference) | No | - |
status | integer | Si | - |
title | string | Si | - |
type | string (uri) | Si | URI estable que identifica la clase de problema. |
Ejemplo
{
"code": "VALIDATION_FAILED",
"correlationId": "10000000-0000-4000-8000-000000000001",
"errors": [
{
"code": "INVALID_DATE",
"field": "serviceDate",
"message": "Debe ser una fecha ISO 8601 valida."
}
],
"status": 422,
"title": "Validacion fallida",
"type": "https://magnosoft.com.co/problems/validation"
}429Limite de solicitudes excedido para el service principal.
Content-Type: application/problem+json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
code | string | Si | - |
correlationId | string (uuid) | Si | - |
detail | string | No | Explicacion segura sin PII ni secretos. |
errors | object[] | No | - |
instance | string (uri-reference) | No | - |
status | integer | Si | - |
title | string | Si | - |
type | string (uri) | Si | URI estable que identifica la clase de problema. |
Ejemplo
{
"code": "RATE_LIMIT_EXCEEDED",
"correlationId": "10000000-0000-4000-8000-000000000001",
"status": 429,
"title": "Demasiadas solicitudes",
"type": "https://magnosoft.com.co/problems/rate-limit"
}500Falla interna segura sin detalles de implementacion.
Content-Type: application/problem+json
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
code | string | Si | - |
correlationId | string (uuid) | Si | - |
detail | string | No | Explicacion segura sin PII ni secretos. |
errors | object[] | No | - |
instance | string (uri-reference) | No | - |
status | integer | Si | - |
title | string | Si | - |
type | string (uri) | Si | URI estable que identifica la clase de problema. |
Ejemplo
{
"code": "INTERNAL_ERROR",
"correlationId": "10000000-0000-4000-8000-000000000001",
"status": 500,
"title": "Error interno",
"type": "https://magnosoft.com.co/problems/internal-error"
}