Saltar al contenido

Referencia de la API

API pública de Axiospec

Versión 1.0.0

Contenido

Descripción general

La API pública de Axiospec te permite leer y escribir tu programa de calibración desde tus propios sistemas: listar y crear instrumentos, registrar calibraciones en el libro de registros con detección de manipulaciones, y leer tus sedes y las normas de cumplimiento que has seleccionado.

URL base: https://axiospec.com/api/public/v1

Autenticación. Crea una clave en la aplicación, en Configuración y luego Claves de API (solo administradores del espacio de trabajo). Envíala en cada petición como Authorization: Bearer <key> o como X-API-Key: <key>. Las claves llevan el prefijo ctk_.

Acceso. La API está disponible en los planes Professional y Scale. Las claves de los planes Free o Starter reciben 403 API_ACCESS_TIER_REQUIRED. Una clave actúa como la persona que la creó. Si esa persona es un auditor cuya fecha de fin del acceso ya pasó, la clave recibe 403 ACCESS_ENDED.

Ámbitos. Una clave tiene el ámbito read o el ámbito write (que implica read). Una clave de solo lectura que intenta escribir recibe 403 INSUFFICIENT_SCOPE.

Idempotencia. Registrar una calibración (POST /instruments/{id}/calibrations) exige una cabecera Idempotency-Key. El libro de registros es de solo anexado, así que una petición reintentada con la misma clave devuelve el registro original en vez de escribir un duplicado. Crear un instrumento (POST /instruments) acepta la misma cabecera de forma opcional.

Paginación. Los endpoints de listado devuelven {data: [...], pagination: {limit, offset, total, has_more}}. Pagina con limit y offset.

Errores. Los errores son JSON con un code legible por máquina, un message legible por personas y un details opcional (por ejemplo, la lista missing_fields en 422 FIELD_REQUIREMENTS_UNMET, o el field en 422 PASS_OVER_TOLERANCE_REASON_REQUIRED).

Aprobar fuera de tolerancia. Registrar un PASS o un PASS_WITH_ADJUSTMENT cuya lectura final queda fuera de nominal_value +/- tolerance exige un breve motivo escrito en out_of_tolerance_impact. La lectura final es as_left_reading, o as_found_reading cuando no se envió la lectura como se dejó, así que un instrumento encontrado fuera de tolerancia y ajustado de nuevo dentro de la banda no necesita nada más. Sin el motivo, la escritura se rechaza con 422 PASS_OVER_TOLERANCE_REASON_REQUIRED y details.field = out_of_tolerance_impact. Se acepta todo lo que el servidor no puede comparar: sin valor nominal, sin tolerancia, sin lectura numérica, o lecturas cuyas unidades no coinciden.

Producción
https://axiospec.com

Autenticación

Cada petición necesita una clave de API. Envíala de una de estas dos formas.

Token Bearer en la cabecera Authorization

Una clave de API por espacio de trabajo (con el prefijo ctk_) que se crea en Configuración y luego Claves de API. Envíala como Authorization: Bearer <key>.

curl "https://axiospec.com/api/public/v1/instruments" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Clave de API en la cabecera X-API-Key

La misma clave de API, enviada en la cabecera X-API-Key en lugar de Authorization: Bearer.

curl "https://axiospec.com/api/public/v1/instruments" \
  -H "X-API-Key: $AXIOSPEC_API_KEY"

Instrumentos

Listar instrumentos (paginado) #

GET /api/public/v1/instruments

Parámetros de consulta

  • limitinteger
    • Valor por defecto: 50
    • Mínimo: 1
    • Máximo: 100
  • offsetinteger
    • Valor por defecto: 0
    • Mínimo: 0
  • statusstring | null

    Filtra por estado del activo (sin distinguir mayúsculas y minúsculas), por ejemplo in_service, out_of_service, OUT_FOR_CALIBRATION o REFERENCE_ONLY. Un instrumento REFERENCE_ONLY se mantiene en el inventario pero nunca se calibra: devuelve next_due_at null, queda fuera de la lista de vencimientos y nunca coincide con un filtro compliance_status.

    • Como máximo 64 caracteres
  • site_idstring | null

    Filtra por una sola sede (UUID).

  • location_idstring | null

    Filtra por una sola ubicación (UUID).

  • updated_sincestring | null

    Sincronización incremental: solo los instrumentos modificados en esta marca de tiempo ISO-8601 o después.

  • sortstring | null

    Orden: uno de created_at, -created_at, updated_at, -updated_at.

  • asset_tagstring | null

    Búsqueda exacta por etiqueta de activo (para resolver tu propio identificador en nuestro registro).

    • Como máximo 255 caracteres
  • serial_numberstring | null

    Búsqueda exacta por número de serie.

    • Como máximo 255 caracteres
  • compliance_statusstring | null

    Filtra por valor de cumplimiento: NOT_CALIBRATED, COMPLIANT, WARNING, NON_COMPLIANT o OUT_FOR_CALIBRATION. Un valor desconocido devuelve 422. Los instrumentos REFERENCE_ONLY nunca coinciden (no tienen estado de cumplimiento). El servidor calcula este filtro para cada instrumento, así que, si los demás filtros todavía dejan un conjunto muy grande, la petición devuelve 422. Acota primero con status, location_id, site_id o updated_since.

    • Como máximo 32 caracteres
  • next_due_beforestring | null

    Solo los instrumentos cuya próxima calibración vence antes de esta fecha ISO. Igual que compliance_status, este filtro se calcula para cada instrumento, así que un conjunto muy grande devuelve 422. Acota primero con status, location_id, site_id o updated_since.

  • includestring | null

    Marcas de baja opcionales para la sincronización delta. include=retired también devuelve los instrumentos dados de baja (fuera de servicio), marcados con deleted=true y una marca de tiempo retired_at. Así una réplica sabe que un instrumento se dio de baja en vez de verlo desaparecer sin aviso de la lista de activos. Si se omite, solo se devuelven los instrumentos activos.

Respuestas

  • 200 Respuesta correcta

    application/json Page_InstrumentSummary_

    Ejemplo de respuesta
    {
      "data": [
        {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "asset_tag": "string",
          "name": "string",
          "manufacturer": "string",
          "model": "string",
          "serial_number": "string",
          "status": "string",
          "is_quarantined": false,
          "site_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "location_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "compliance_status": "string",
          "last_calibration_at": "string",
          "next_due_at": "string",
          "retired_at": "string",
          "deleted": false,
          "due_extension": {
            "until": "string",
            "reason": "string",
            "extended_at": "string",
            "extended_by_user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          }
        }
      ],
      "pagination": {
        "limit": 0,
        "offset": 0,
        "total": 0,
        "has_more": true
      }
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/instruments" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Crear un instrumento #

POST /api/public/v1/instruments

Parámetros de cabecera

  • Idempotency-Keystring | null

    Opcional. Un valor único que eliges para esta petición, como un UUID, de hasta 128 caracteres. Una petición reintentada con la misma clave devuelve el instrumento que creó la primera petición en vez de crear un duplicado. Mientras la primera petición se sigue procesando, un reintento devuelve 503; vuelve a intentarlo en unos instantes.

Cuerpo de la petición Obligatorio

application/json InstrumentCreate

  • asset_tagstringObligatorio
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • namestringObligatorio
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • manufacturerstring | null
    • Como máximo 255 caracteres
  • modelstring | null
    • Como máximo 255 caracteres
  • serial_numberstring | null
    • Como máximo 255 caracteres
  • categorystring | null
    • Como máximo 255 caracteres
  • departmentstring | null
    • Como máximo 255 caracteres
  • locationstring | null
    • Como máximo 255 caracteres
  • tolerance_specstring | null
    • Como máximo 255 caracteres
  • notesstring | null
    • Como máximo 10000 caracteres
  • unit_of_measurestring | null
    • Como máximo 64 caracteres
  • is_reference_standardboolean
    • Valor por defecto: false
  • calibration_interval_valueintegerObligatorio
    • Mínimo: 1
    • Máximo: 100000
  • calibration_interval_unitstring

    Uno de days, months, years.

    • Valor por defecto: months
    • Valores permitidos: days, months, years
  • last_calibration_datestring (date-time) | null

    Referencia inicial opcional: cuándo se calibró el instrumento por última vez. Si se indica, se crea un registro de referencia aprobado y el cumplimiento se calcula a partir de él. Si se omite, el instrumento devuelve NOT_CALIBRATED hasta que se registre su primera calibración.

  • customFieldsmap<string, string>

    Campos personalizados opcionales definidos por el espacio de trabajo, como un mapa plano de etiqueta -> valor. Las etiquetas se guardan exactamente como se envían. Un valor en blanco se descarta en lugar de guardarse.

Se rechazan los campos que no figuran aquí.

Ejemplo de cuerpo de la petición
{
  "asset_tag": "string",
  "name": "string",
  "manufacturer": "string",
  "model": "string",
  "serial_number": "string",
  "category": "string",
  "department": "string",
  "location": "string",
  "tolerance_spec": "string",
  "notes": "string",
  "unit_of_measure": "string",
  "is_reference_standard": false,
  "calibration_interval_value": 1,
  "calibration_interval_unit": "days",
  "last_calibration_date": "2026-01-15T14:30:00Z",
  "customFields": {
    "key": "string"
  }
}

Respuestas

  • 201 Respuesta correcta

    application/json InstrumentDetail

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "asset_tag": "string",
      "name": "string",
      "manufacturer": "string",
      "model": "string",
      "serial_number": "string",
      "status": "string",
      "is_quarantined": false,
      "site_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "location_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "compliance_status": "string",
      "last_calibration_at": "string",
      "next_due_at": "string",
      "retired_at": "string",
      "deleted": false,
      "due_extension": {
        "until": "string",
        "reason": "string",
        "extended_at": "string",
        "extended_by_user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      },
      "category": "string",
      "department": "string",
      "location": "string",
      "tolerance_spec": "string",
      "notes": "string",
      "unit_of_measure": "string",
      "is_reference_standard": false,
      "requires_electronic_signature": false,
      "requires_electronic_signature_override": true,
      "calibration_interval_value": 0,
      "calibration_interval_unit": "string",
      "grace_days": 0,
      "customFields": {
        "key": "string"
      },
      "created_at": "string",
      "updated_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X POST "https://axiospec.com/api/public/v1/instruments" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"asset_tag":"string","name":"string","calibration_interval_value":1}'

Obtener un instrumento #

GET /api/public/v1/instruments/{instrument_id}

Parámetros de ruta

  • instrument_idstringObligatorio

Respuestas

  • 200 Respuesta correcta

    application/json InstrumentDetail

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "asset_tag": "string",
      "name": "string",
      "manufacturer": "string",
      "model": "string",
      "serial_number": "string",
      "status": "string",
      "is_quarantined": false,
      "site_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "location_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "compliance_status": "string",
      "last_calibration_at": "string",
      "next_due_at": "string",
      "retired_at": "string",
      "deleted": false,
      "due_extension": {
        "until": "string",
        "reason": "string",
        "extended_at": "string",
        "extended_by_user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      },
      "category": "string",
      "department": "string",
      "location": "string",
      "tolerance_spec": "string",
      "notes": "string",
      "unit_of_measure": "string",
      "is_reference_standard": false,
      "requires_electronic_signature": false,
      "requires_electronic_signature_override": true,
      "calibration_interval_value": 0,
      "calibration_interval_unit": "string",
      "grace_days": 0,
      "customFields": {
        "key": "string"
      },
      "created_at": "string",
      "updated_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Actualizar un instrumento (parcial) #

PATCH /api/public/v1/instruments/{instrument_id}

Parámetros de ruta

  • instrument_idstringObligatorio

Cuerpo de la petición Obligatorio

application/json InstrumentUpdate

  • namestring | null
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • manufacturerstring | null
    • Como máximo 255 caracteres
  • modelstring | null
    • Como máximo 255 caracteres
  • serial_numberstring | null
    • Como máximo 255 caracteres
  • categorystring | null
    • Como máximo 255 caracteres
  • departmentstring | null
    • Como máximo 255 caracteres
  • locationstring | null
    • Como máximo 255 caracteres
  • tolerance_specstring | null
    • Como máximo 255 caracteres
  • notesstring | null
    • Como máximo 10000 caracteres
  • unit_of_measurestring | null
    • Como máximo 64 caracteres
  • is_reference_standardboolean | null
  • calibration_interval_valueinteger | null
    • Mínimo: 1
    • Máximo: 100000
  • calibration_interval_unitstring | null
    • Valores permitidos: days, months, years
  • calibration_interval_change_reasonstring | null

    Por qué cambia el intervalo de calibración. Se aplica cuando el instrumento ya tiene un intervalo y el valor o la unidad que envías es distinto. El cambio siempre se escribe en el registro de actividad del espacio de trabajo con este motivo. Que el motivo sea obligatorio depende del ajuste CHANGE_REASON_RULES_ENFORCED de la instalación: si está activado, la petición falla con 422 y el código interval_change_reason_required cuando falta; si está desactivado, el cambio se acepta y se registra sin motivo. Envía un motivo desde ya y tu integración no se romperá cuando se active. No hace falta si el intervalo no cambia.

    • Como máximo 1000 caracteres
  • customFieldsmap<string, string> | null

    Campos personalizados definidos por el espacio de trabajo que se van a fijar, como un mapa plano de etiqueta -> valor. SE COMBINAN con los campos personalizados que ya tiene el instrumento: las etiquetas que no envías no se tocan, y enviar un valor en blanco elimina esa etiqueta. Omite la clave por completo, o envía null, para no cambiar nada.

Se rechazan los campos que no figuran aquí.

Ejemplo de cuerpo de la petición
{
  "name": "string",
  "manufacturer": "string",
  "model": "string",
  "serial_number": "string",
  "category": "string",
  "department": "string",
  "location": "string",
  "tolerance_spec": "string",
  "notes": "string",
  "unit_of_measure": "string",
  "is_reference_standard": true,
  "calibration_interval_value": 1,
  "calibration_interval_unit": "days",
  "calibration_interval_change_reason": "string",
  "customFields": {
    "key": "string"
  }
}

Respuestas

  • 200 Respuesta correcta

    application/json InstrumentDetail

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "asset_tag": "string",
      "name": "string",
      "manufacturer": "string",
      "model": "string",
      "serial_number": "string",
      "status": "string",
      "is_quarantined": false,
      "site_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "location_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "compliance_status": "string",
      "last_calibration_at": "string",
      "next_due_at": "string",
      "retired_at": "string",
      "deleted": false,
      "due_extension": {
        "until": "string",
        "reason": "string",
        "extended_at": "string",
        "extended_by_user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      },
      "category": "string",
      "department": "string",
      "location": "string",
      "tolerance_spec": "string",
      "notes": "string",
      "unit_of_measure": "string",
      "is_reference_standard": false,
      "requires_electronic_signature": false,
      "requires_electronic_signature_override": true,
      "calibration_interval_value": 0,
      "calibration_interval_unit": "string",
      "grace_days": 0,
      "customFields": {
        "key": "string"
      },
      "created_at": "string",
      "updated_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X PATCH "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'

Dar de baja un instrumento (retirarlo del servicio) #

POST /api/public/v1/instruments/{instrument_id}/retire

Registra que un instrumento ha salido del servicio activo.

El registro se conserva. status pasa a retired y se anota retired_at. El instrumento conserva su historial de calibración y se puede seguir leyendo con esta API. El libro de registros no se toca. No se borra nada, y esta API no tiene un DELETE definitivo para instrumentos.

Dar de baja detiene el trabajo nuevo sobre el instrumento. A partir de ese momento, los endpoints de escritura (actualizar un instrumento, registrar una calibración, subir un documento) devuelven 409 ASSET_RETIRED. Las lecturas siguen funcionando.

La clave necesita el ámbito write, y su propietario debe ser administrador o responsable del espacio de trabajo. Cualquier otra clave recibe 403. Un instrument_id mal formado devuelve 422. Un instrumento que no está en tu espacio de trabajo devuelve 404.

Dar de baja es idempotente. Dar de baja un instrumento que ya está de baja devuelve 200 con el mismo detalle, y se mantiene el retired_at original.

Parámetros de ruta

  • instrument_idstringObligatorio

Respuestas

  • 200 Respuesta correcta

    application/json InstrumentDetail

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "asset_tag": "string",
      "name": "string",
      "manufacturer": "string",
      "model": "string",
      "serial_number": "string",
      "status": "string",
      "is_quarantined": false,
      "site_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "location_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "compliance_status": "string",
      "last_calibration_at": "string",
      "next_due_at": "string",
      "retired_at": "string",
      "deleted": false,
      "due_extension": {
        "until": "string",
        "reason": "string",
        "extended_at": "string",
        "extended_by_user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      },
      "category": "string",
      "department": "string",
      "location": "string",
      "tolerance_spec": "string",
      "notes": "string",
      "unit_of_measure": "string",
      "is_reference_standard": false,
      "requires_electronic_signature": false,
      "requires_electronic_signature_override": true,
      "calibration_interval_value": 0,
      "calibration_interval_unit": "string",
      "grace_days": 0,
      "customFields": {
        "key": "string"
      },
      "created_at": "string",
      "updated_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X POST "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID/retire" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Calibraciones

Listar los registros de calibración de un instrumento (paginado) #

GET /api/public/v1/instruments/{instrument_id}/calibrations

Parámetros de ruta

  • instrument_idstringObligatorio

Parámetros de consulta

  • limitinteger
    • Valor por defecto: 50
    • Mínimo: 1
    • Máximo: 100
  • offsetinteger
    • Valor por defecto: 0
    • Mínimo: 0
  • updated_sincestring | null

    Sincronización incremental: solo los registros añadidos en esta marca de tiempo ISO-8601 o después.

  • performed_afterstring | null

    Solo los registros realizados en esta marca de tiempo ISO-8601 o después.

  • performed_beforestring | null

    Solo los registros realizados en esta marca de tiempo ISO-8601 o antes.

  • resultstring | null

    Limita a uno o varios resultados de calibración (separados por comas, sin distinguir mayúsculas y minúsculas): PASS, PASS_WITH_ADJUSTMENT, LIMITED_CALIBRATION, FAIL o DAMAGED. Un valor desconocido devuelve 422.

  • sortstring | null

    Orden: uno de performed_at, -performed_at, updated_at, -updated_at.

  • includestring | null

    Marcas de baja opcionales para la sincronización delta. include=voided también devuelve los registros de anulación (record_type='void', con voids_id apuntando a la calibración que invalidan), para que una réplica sepa que una calibración quedó invalidada. Si se omite, los registros de anulación no se incluyen.

Respuestas

  • 200 Respuesta correcta

    application/json Page_CalibrationRecord_

    Ejemplo de respuesta
    {
      "data": [
        {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "instrument_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "result": "string",
          "performed_at": "string",
          "performed_by": "string",
          "nominal_value": "string",
          "tolerance": "string",
          "as_found_reading": "string",
          "as_left_reading": "string",
          "reference_standard": "string",
          "certificate_number": "string",
          "traceability_reference": "string",
          "service_provider": "string",
          "measurement_uncertainty": "string",
          "coverage_factor": "string",
          "confidence_level": "string",
          "decision_rule": "string",
          "conformity_statement": "string",
          "notes": "string",
          "calibration_type": "in_house",
          "approval_status": "string",
          "status": "string",
          "superseded_by_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "record_type": "calibration",
          "voids_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "voided_by_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "created_at": "string"
        }
      ],
      "pagination": {
        "limit": 0,
        "offset": 0,
        "total": 0,
        "has_more": true
      }
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID/calibrations" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Registrar una calibración de un instrumento #

POST /api/public/v1/instruments/{instrument_id}/calibrations

Parámetros de ruta

  • instrument_idstringObligatorio

Parámetros de cabecera

  • Idempotency-Keystring | nullObligatorio

    Obligatorio. Un valor único que eliges para esta calibración, como un UUID, de hasta 128 caracteres. El libro de registros es de solo anexado, así que una petición reintentada con la misma clave devuelve el registro original en vez de escribir un duplicado. Usa una clave nueva para cada calibración nueva. Una petición sin la cabecera devuelve 400 IDEMPOTENCY_KEY_REQUIRED. Mientras la primera petición se sigue procesando, un reintento devuelve 503; vuelve a intentarlo en unos instantes.

Cuerpo de la petición Obligatorio

application/json CalibrationLogRequest

  • resultstringObligatorio

    Uno de PASS, PASS_WITH_ADJUSTMENT, LIMITED_CALIBRATION, FAIL, DAMAGED.

    • Valores permitidos: PASS, PASS_WITH_ADJUSTMENT, LIMITED_CALIBRATION, FAIL, DAMAGED
  • performed_atstring (date-time) | null

    Cuándo se realizó la calibración. Si se omite, se usa el momento actual (UTC).

  • nominal_valuestring | null
    • Como máximo 255 caracteres
  • tolerancestring | null
    • Como máximo 255 caracteres
  • as_found_readingstring | null
    • Como máximo 255 caracteres
  • as_left_readingstring | null
    • Como máximo 255 caracteres
  • temperaturestring | null
    • Como máximo 64 caracteres
  • humiditystring | null
    • Como máximo 64 caracteres
  • reference_standardstring | null
    • Como máximo 255 caracteres
  • reference_standard_asset_idstring (uuid) | null
  • certificate_numberstring | null
    • Como máximo 255 caracteres
  • traceability_referencestring | null
    • Como máximo 255 caracteres
  • service_providerstring | null
    • Como máximo 255 caracteres
  • calibration_typestring | null

    'in_house' cuando tu equipo midió el instrumento, 'external_certificate' cuando lo calibró un laboratorio o un proveedor y estás registrando su certificado. En la vía externa, lo mínimo es result, performed_at y certificate_number; los campos de lectura no son obligatorios.

    • Valores permitidos: in_house, external_certificate
  • measurement_uncertaintystring | null
    • Como máximo 120 caracteres
  • coverage_factorstring | null
    • Como máximo 40 caracteres
  • confidence_levelstring | null
    • Como máximo 40 caracteres
  • decision_rulestring | null
    • Como máximo 120 caracteres
  • conformity_statementstring | null
    • Como máximo 4000 caracteres
  • reference_standard_certificate_numberstring | null
    • Como máximo 120 caracteres
  • restriction_notesstring | null
    • Como máximo 4000 caracteres
  • out_of_tolerance_impactstring | null
    • Como máximo 4000 caracteres
  • notesstring | null
    • Como máximo 4000 caracteres

Se rechazan los campos que no figuran aquí.

Ejemplo de cuerpo de la petición
{
  "result": "PASS",
  "performed_at": "2026-01-15T14:30:00Z",
  "nominal_value": "string",
  "tolerance": "string",
  "as_found_reading": "string",
  "as_left_reading": "string",
  "temperature": "string",
  "humidity": "string",
  "reference_standard": "string",
  "reference_standard_asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "certificate_number": "string",
  "traceability_reference": "string",
  "service_provider": "string",
  "calibration_type": "in_house",
  "measurement_uncertainty": "string",
  "coverage_factor": "string",
  "confidence_level": "string",
  "decision_rule": "string",
  "conformity_statement": "string",
  "reference_standard_certificate_number": "string",
  "restriction_notes": "string",
  "out_of_tolerance_impact": "string",
  "notes": "string"
}

Respuestas

  • 201 Respuesta correcta

    application/json CalibrationRecord

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "instrument_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "result": "string",
      "performed_at": "string",
      "performed_by": "string",
      "nominal_value": "string",
      "tolerance": "string",
      "as_found_reading": "string",
      "as_left_reading": "string",
      "reference_standard": "string",
      "certificate_number": "string",
      "traceability_reference": "string",
      "service_provider": "string",
      "measurement_uncertainty": "string",
      "coverage_factor": "string",
      "confidence_level": "string",
      "decision_rule": "string",
      "conformity_statement": "string",
      "notes": "string",
      "calibration_type": "in_house",
      "approval_status": "string",
      "status": "string",
      "superseded_by_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "record_type": "calibration",
      "voids_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "voided_by_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "created_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X POST "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID/calibrations" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"result":"PASS"}'

Listar todos los registros de calibración del espacio de trabajo #

GET /api/public/v1/calibrations

Todos los registros de calibración de tu espacio de trabajo, de todos los instrumentos, en un único flujo paginado. Úsalo para un proceso de almacén de datos o de BI que extrae «todas las calibraciones desde X» sin hacer una llamada por instrumento.

Para la sincronización incremental, pasa updated_since con sort=updated_at y recorre las páginas con limit y offset. Añade include=voided para recibir también los registros de anulación, así una réplica puede descartar las calibraciones que se invalidaron.

Parámetros de consulta

  • limitinteger
    • Valor por defecto: 50
    • Mínimo: 1
    • Máximo: 100
  • offsetinteger
    • Valor por defecto: 0
    • Mínimo: 0
  • updated_sincestring | null

    Sincronización incremental: solo los registros añadidos en esta marca de tiempo ISO-8601 o después.

  • performed_afterstring | null

    Solo los registros realizados en esta marca de tiempo ISO-8601 o después.

  • performed_beforestring | null

    Solo los registros realizados en esta marca de tiempo ISO-8601 o antes.

  • instrument_idstring | null

    Limita el flujo a un solo instrumento (UUID).

  • resultstring | null

    Limita a uno o varios resultados de calibración (separados por comas, sin distinguir mayúsculas y minúsculas): PASS, PASS_WITH_ADJUSTMENT, LIMITED_CALIBRATION, FAIL o DAMAGED. Un valor desconocido devuelve 422.

  • sortstring | null

    Orden: uno de performed_at, -performed_at, updated_at, -updated_at.

  • includestring | null

    Marcas de baja opcionales para la sincronización delta. include=voided también devuelve los registros de anulación (record_type='void', con voids_id apuntando a la calibración que invalidan) de todo el espacio de trabajo. Así es como una réplica completa sabe que se invalidaron calibraciones. Si se omite, los registros de anulación no se incluyen.

Respuestas

  • 200 Respuesta correcta

    application/json Page_CalibrationRecord_

    Ejemplo de respuesta
    {
      "data": [
        {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "instrument_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "result": "string",
          "performed_at": "string",
          "performed_by": "string",
          "nominal_value": "string",
          "tolerance": "string",
          "as_found_reading": "string",
          "as_left_reading": "string",
          "reference_standard": "string",
          "certificate_number": "string",
          "traceability_reference": "string",
          "service_provider": "string",
          "measurement_uncertainty": "string",
          "coverage_factor": "string",
          "confidence_level": "string",
          "decision_rule": "string",
          "conformity_statement": "string",
          "notes": "string",
          "calibration_type": "in_house",
          "approval_status": "string",
          "status": "string",
          "superseded_by_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "record_type": "calibration",
          "voids_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "voided_by_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "created_at": "string"
        }
      ],
      "pagination": {
        "limit": 0,
        "offset": 0,
        "total": 0,
        "has_more": true
      }
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/calibrations" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Obtener un registro de calibración #

GET /api/public/v1/calibrations/{calibration_id}

Parámetros de ruta

  • calibration_idstringObligatorio

Respuestas

  • 200 Respuesta correcta

    application/json CalibrationRecord

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "instrument_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "result": "string",
      "performed_at": "string",
      "performed_by": "string",
      "nominal_value": "string",
      "tolerance": "string",
      "as_found_reading": "string",
      "as_left_reading": "string",
      "reference_standard": "string",
      "certificate_number": "string",
      "traceability_reference": "string",
      "service_provider": "string",
      "measurement_uncertainty": "string",
      "coverage_factor": "string",
      "confidence_level": "string",
      "decision_rule": "string",
      "conformity_statement": "string",
      "notes": "string",
      "calibration_type": "in_house",
      "approval_status": "string",
      "status": "string",
      "superseded_by_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "record_type": "calibration",
      "voids_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "voided_by_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "created_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/calibrations/CALIBRATION_ID" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Descargar en PDF el certificado de calibración de un registro de calibración #

GET /api/public/v1/calibrations/{calibration_id}/certificate

Descarga en PDF el certificado de un registro de calibración (application/pdf, enviado como archivo adjunto).

Es el mismo certificado que emite la aplicación para ese registro. Se guarda la primera vez que se genera, así que las descargas posteriores devuelven el mismo documento salvo que el certificado se vuelva a emitir en la aplicación. Un cambio del idioma de los documentos del espacio de trabajo también lo vuelve a emitir: la siguiente descarga lo devuelve en el nuevo idioma. Los certificados siguen disponibles después de dar de baja el instrumento.

Errores: 422 cuando calibration_id no es un UUID. 404 cuando el registro no está en tu espacio de trabajo o no es una calibración. 404 CERTIFICATE_UNAVAILABLE cuando el registro existe pero no se puede certificar porque se anuló, fue sustituido por una corrección o no está aprobado.

Parámetros de ruta

  • calibration_idstringObligatorio

Respuestas

  • 200 Certificado en PDF

    application/pdf

  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/calibrations/CALIBRATION_ID/certificate" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY" \
  -o certificate.pdf

Documentos

Obtener una URL prefirmada para subir un documento #

POST /api/public/v1/instruments/{instrument_id}/documents/upload-url

Parámetros de ruta

  • instrument_idstringObligatorio

Cuerpo de la petición Obligatorio

application/json DocumentUploadUrlRequest

  • file_namestringObligatorio
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • content_typestring

    Tipo MIME del archivo. Debe ser un tipo permitido (PDF o una imagen); se rechaza el contenido activo, como text/html o image/svg+xml.

    • Valor por defecto: application/octet-stream
    • Como máximo 255 caracteres
  • size_bytesinteger | null

    Tamaño de archivo declarado, opcional. Se rechaza (422) si supera el máximo; el POST prefirmado también limita la subida real en S3.

    • Mínimo: 1
    • Máximo: 26214400

Se rechazan los campos que no figuran aquí.

Ejemplo de cuerpo de la petición
{
  "file_name": "string",
  "content_type": "application/octet-stream",
  "size_bytes": 1
}

Respuestas

  • 200 Respuesta correcta

    application/json DocumentUploadUrlResponse

    Ejemplo de respuesta
    {
      "method": "POST",
      "upload_url": "string",
      "fields": {
        "key": "string"
      },
      "key": "string",
      "expires_in": 0,
      "max_size_bytes": 0
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X POST "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID/documents/upload-url" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_name":"string"}'

Listar los documentos de un instrumento #

GET /api/public/v1/instruments/{instrument_id}/documents

Parámetros de ruta

  • instrument_idstringObligatorio

Parámetros de consulta

  • limitinteger
    • Valor por defecto: 50
    • Mínimo: 1
    • Máximo: 100
  • offsetinteger
    • Valor por defecto: 0
    • Mínimo: 0
  • calibration_idstring | null

    Filtra por los documentos de una calibración (UUID).

  • document_typestring | null

    Filtra por un tipo de documento (uno de certificate, report, procedure, photo, other).

  • uploaded_sincestring | null

    Sincronización incremental: solo los documentos subidos en esta marca de tiempo ISO-8601 o después. Ten en cuenta que es un cursor de subidas NUEVAS basado en upload_date y no refleja cambios posteriores de archivado o de borrado lógico.

  • sortstring | null

    Orden: upload_date o -upload_date (por defecto: -upload_date).

  • include_archivedboolean

    Incluye los documentos archivados (por defecto: solo los activos).

    • Valor por defecto: false

Respuestas

  • 200 Respuesta correcta

    application/json Page_DocumentRecord_

    Ejemplo de respuesta
    {
      "data": [
        {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "instrument_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "file_name": "string",
          "document_type": "string",
          "calibration_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "uploaded_at": "string",
          "uploaded_by": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "is_archived": false
        }
      ],
      "pagination": {
        "limit": 0,
        "offset": 0,
        "total": 0,
        "has_more": true
      }
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID/documents" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Registrar un documento subido #

POST /api/public/v1/instruments/{instrument_id}/documents

Parámetros de ruta

  • instrument_idstringObligatorio

Cuerpo de la petición Obligatorio

application/json DocumentRegisterRequest

  • keystringObligatorio
    • Al menos 1 caracteres
    • Como máximo 512 caracteres
  • file_namestringObligatorio
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • document_typestring

    Uno de certificate, report, procedure, photo, other.

    • Valor por defecto: other
    • Valores permitidos: certificate, report, procedure, photo, other
  • calibration_idstring (uuid) | null

    Opcional: adjunta el documento a un registro de calibración concreto de ESTE instrumento. Debe ser un id de calibración que pertenezca a este instrumento.

Se rechazan los campos que no figuran aquí.

Ejemplo de cuerpo de la petición
{
  "key": "string",
  "file_name": "string",
  "document_type": "certificate",
  "calibration_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Respuestas

  • 201 Respuesta correcta

    application/json DocumentRecord

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "instrument_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "file_name": "string",
      "document_type": "string",
      "calibration_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "uploaded_at": "string",
      "uploaded_by": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "is_archived": false
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X POST "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID/documents" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key":"string","file_name":"string"}'

Obtener una URL de descarga de corta duración para un documento #

GET /api/public/v1/instruments/{instrument_id}/documents/{document_id}/download

Parámetros de ruta

  • instrument_idstringObligatorio
  • document_idstring (uuid)Obligatorio

Respuestas

  • 200 Respuesta correcta

    application/json DocumentDownloadResponse

    Ejemplo de respuesta
    {
      "download_url": "string",
      "expires_in": 0,
      "expires_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/instruments/INSTRUMENT_ID/documents/DOCUMENT_ID/download" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Lista de vencimientos

Listar instrumentos por vencer o vencidos (lista de trabajo) #

GET /api/public/v1/due

Parámetros de consulta

  • horizon_daysinteger

    Ventana futura en días (1-365). Se incluye todo lo que vence dentro de ese número de días; lo que ya está vencido se incluye SIEMPRE, sea cual sea este valor.

    • Valor por defecto: 30
    • Mínimo: 1
    • Máximo: 365
  • site_idstring | null

    Filtra por una sola sede (UUID). Se aplica dentro de las sedes a las que tienes acceso.

  • statusstring | null

    Filtra por valor de cumplimiento (sin distinguir mayúsculas y minúsculas): NOT_CALIBRATED, COMPLIANT, WARNING, NON_COMPLIANT o OUT_FOR_CALIBRATION.

    • Como máximo 32 caracteres
  • limitinteger
    • Valor por defecto: 50
    • Mínimo: 1
    • Máximo: 100
  • offsetinteger
    • Valor por defecto: 0
    • Mínimo: 0

Respuestas

  • 200 Respuesta correcta

    application/json Page_DueInstrument_

    Ejemplo de respuesta
    {
      "data": [
        {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "asset_tag": "string",
          "name": "string",
          "due_at": "string",
          "due_date": "string",
          "compliance_status": "string",
          "interval_label": "string",
          "site_name": "string",
          "location_name": "string"
        }
      ],
      "pagination": {
        "limit": 0,
        "offset": 0,
        "total": 0,
        "has_more": true
      }
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/due" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Webhooks

Listar el catálogo de eventos de webhook #

GET /api/public/v1/webhooks/events

El vocabulario de eventos v1, legible por máquina, al que se puede suscribir un endpoint.

Respuestas

  • 200 Respuesta correcta

    application/json EventCatalogResponse

    Ejemplo de respuesta
    {
      "events": [
        {
          "type": "string",
          "description": "string"
        }
      ]
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/webhooks/events" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Listar endpoints de webhook #

GET /api/public/v1/webhooks

Parámetros de consulta

  • limitinteger
    • Valor por defecto: 50
    • Mínimo: 1
    • Máximo: 100
  • offsetinteger
    • Valor por defecto: 0
    • Mínimo: 0

Respuestas

  • 200 Respuesta correcta

    application/json Page_WebhookRead_

    Ejemplo de respuesta
    {
      "data": [
        {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "url": "string",
          "events": [
            "string"
          ],
          "description": "string",
          "is_active": true,
          "secret_prefix": "string",
          "disabled_at": "string",
          "created_at": "string",
          "updated_at": "string"
        }
      ],
      "pagination": {
        "limit": 0,
        "offset": 0,
        "total": 0,
        "has_more": true
      }
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/webhooks" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Suscribir un endpoint de webhook #

POST /api/public/v1/webhooks

Cuerpo de la petición Obligatorio

application/json WebhookCreate

  • urlstringObligatorio

    URL de entrega HTTPS. Se valida contra SSRF (debe resolver a una dirección pública; se rechazan los destinos privados, de loopback, de enlace local o de metadatos).

    • Como máximo 2048 caracteres
  • eventsarray[string] | null

    Subconjunto del catálogo de eventos v1 que se quiere recibir. Omítelo o envía una lista vacía para suscribirte a TODOS los eventos. Se rechazan los tipos desconocidos (422).

  • descriptionstring | null

    Etiqueta opcional y legible para este endpoint.

    • Como máximo 500 caracteres

Se rechazan los campos que no figuran aquí.

Ejemplo de cuerpo de la petición
{
  "url": "string",
  "events": [
    "string"
  ],
  "description": "string"
}

Respuestas

  • 201 Respuesta correcta

    application/json WebhookCreatedResponse

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "url": "string",
      "events": [
        "string"
      ],
      "description": "string",
      "is_active": true,
      "secret_prefix": "string",
      "disabled_at": "string",
      "created_at": "string",
      "updated_at": "string",
      "secret": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X POST "https://axiospec.com/api/public/v1/webhooks" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"string"}'

Obtener un endpoint de webhook #

GET /api/public/v1/webhooks/{endpoint_id}

Parámetros de ruta

  • endpoint_idstring (uuid)Obligatorio

Respuestas

  • 200 Respuesta correcta

    application/json WebhookRead

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "url": "string",
      "events": [
        "string"
      ],
      "description": "string",
      "is_active": true,
      "secret_prefix": "string",
      "disabled_at": "string",
      "created_at": "string",
      "updated_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/webhooks/ENDPOINT_ID" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Actualizar un endpoint de webhook #

PATCH /api/public/v1/webhooks/{endpoint_id}

Parámetros de ruta

  • endpoint_idstring (uuid)Obligatorio

Cuerpo de la petición Obligatorio

application/json WebhookUpdate

  • urlstring | null

    Nueva URL de entrega HTTPS (se vuelve a validar contra SSRF cuando cambia).

    • Como máximo 2048 caracteres
  • eventsarray[string] | null

    Subconjunto de eventos que sustituye al actual (vacío/null = todos los eventos).

  • descriptionstring | null

    Etiqueta que sustituye a la actual.

    • Como máximo 500 caracteres
  • is_activeboolean | null

    Activa (true) o desactiva (false) la entrega a este endpoint.

Se rechazan los campos que no figuran aquí.

Ejemplo de cuerpo de la petición
{
  "url": "string",
  "events": [
    "string"
  ],
  "description": "string",
  "is_active": true
}

Respuestas

  • 200 Respuesta correcta

    application/json WebhookRead

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "url": "string",
      "events": [
        "string"
      ],
      "description": "string",
      "is_active": true,
      "secret_prefix": "string",
      "disabled_at": "string",
      "created_at": "string",
      "updated_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X PATCH "https://axiospec.com/api/public/v1/webhooks/ENDPOINT_ID" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"string"}'

Cancelar la suscripción de un endpoint de webhook (desactivación lógica) #

DELETE /api/public/v1/webhooks/{endpoint_id}

Parámetros de ruta

  • endpoint_idstring (uuid)Obligatorio

Respuestas

  • 204 Respuesta correcta

    Sin contenido

  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X DELETE "https://axiospec.com/api/public/v1/webhooks/ENDPOINT_ID" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Rotar el secreto de firma de un endpoint de webhook #

POST /api/public/v1/webhooks/{endpoint_id}/rotate-secret

Parámetros de ruta

  • endpoint_idstring (uuid)Obligatorio

Respuestas

  • 200 Respuesta correcta

    application/json SecretRotatedResponse

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "secret": "string",
      "secret_prefix": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X POST "https://axiospec.com/api/public/v1/webhooks/ENDPOINT_ID/rotate-secret" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Listar el registro de entregas de un endpoint #

GET /api/public/v1/webhooks/{endpoint_id}/deliveries

Parámetros de ruta

  • endpoint_idstring (uuid)Obligatorio

Parámetros de consulta

  • statusstring | null

    Filtra por estado de entrega: pending, failed, succeeded, exhausted.

    • Como máximo 32 caracteres
  • limitinteger
    • Valor por defecto: 50
    • Mínimo: 1
    • Máximo: 100
  • offsetinteger
    • Valor por defecto: 0
    • Mínimo: 0

Respuestas

  • 200 Respuesta correcta

    application/json Page_WebhookDeliveryRead_

    Ejemplo de respuesta
    {
      "data": [
        {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "event_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "event_type": "string",
          "status": "string",
          "attempt_count": 0,
          "next_attempt_at": "string",
          "last_attempt_at": "string",
          "last_status_code": 0,
          "last_error": "string",
          "response_snippet": "string",
          "created_at": "string",
          "updated_at": "string"
        }
      ],
      "pagination": {
        "limit": 0,
        "offset": 0,
        "total": 0,
        "has_more": true
      }
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/webhooks/ENDPOINT_ID/deliveries" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Reenviar manualmente una entrega #

POST /api/public/v1/webhooks/{endpoint_id}/deliveries/{delivery_id}/retry

Parámetros de ruta

  • endpoint_idstring (uuid)Obligatorio
  • delivery_idstring (uuid)Obligatorio

Respuestas

  • 202 Respuesta correcta

    application/json WebhookDeliveryRead

    Ejemplo de respuesta
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "event_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "event_type": "string",
      "status": "string",
      "attempt_count": 0,
      "next_attempt_at": "string",
      "last_attempt_at": "string",
      "last_status_code": 0,
      "last_error": "string",
      "response_snippet": "string",
      "created_at": "string",
      "updated_at": "string"
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl -X POST "https://axiospec.com/api/public/v1/webhooks/ENDPOINT_ID/deliveries/DELIVERY_ID/retry" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Sedes

Listar las sedes del espacio de trabajo #

GET /api/public/v1/sites

Respuestas

  • 200 Respuesta correcta

    application/json array[SiteSummary]

    Ejemplo de respuesta
    [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "string",
        "is_default": false,
        "timezone": "string"
      }
    ]
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/sites" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Ubicaciones

Listar las ubicaciones del espacio de trabajo #

GET /api/public/v1/locations

Parámetros de consulta

  • site_idstring | null

    Filtra por una sola sede (UUID). Se aplica dentro de las sedes a las que tienes acceso.

Respuestas

  • 200 Respuesta correcta

    application/json array[LocationSummary]

    Ejemplo de respuesta
    [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "string",
        "site_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      }
    ]
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/locations" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Normas de cumplimiento

Listar las normas de cumplimiento que ha seleccionado este espacio de trabajo #

GET /api/public/v1/standards

Respuestas

  • 200 Respuesta correcta

    application/json array[StandardSummary]

    Ejemplo de respuesta
    [
      {
        "key": "string",
        "label": "string"
      }
    ]
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/standards" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Los requisitos de campo que marcan las normas para una calibración o un instrumento #

GET /api/public/v1/standards/field-requirements

Parámetros de consulta

  • standardsstring | null

    Claves de norma opcionales, separadas por comas, para una VISTA PREVIA (p. ej., 'iso_17025,as9100'). Omítelas para reflejar las normas seleccionadas del espacio de trabajo (las que realmente se aplican al POST público de calibraciones). Una clave desconocida devuelve 422.

Respuestas

  • 200 Respuesta correcta

    application/json FieldRequirementsResponse

    Ejemplo de respuesta
    {
      "version": 0,
      "source": "workspace",
      "standards": [
        {
          "key": "string",
          "label": "string"
        }
      ],
      "available_standards": [
        {
          "key": "string",
          "label": "string"
        }
      ],
      "calibration": {
        "enforced": true,
        "fields": [
          {
            "field": "string",
            "label": "string",
            "requirement": "string",
            "required_by": [
              "string"
            ],
            "request_field": "string",
            "note": "string"
          }
        ]
      },
      "asset": {
        "enforced": true,
        "fields": [
          {
            "field": "string",
            "label": "string",
            "requirement": "string",
            "required_by": [
              "string"
            ],
            "request_field": "string",
            "note": "string"
          }
        ]
      }
    }
  • 422 Error de validación

    application/json HTTPValidationError

Ejemplo de petición

curl "https://axiospec.com/api/public/v1/standards/field-requirements" \
  -H "Authorization: Bearer $AXIOSPEC_API_KEY"

Esquemas

Los objetos que los endpoints aceptan y devuelven. Los nombres de campo, los tipos y los valores de enumeración se muestran exactamente como la API los envía y los espera.

CalibrationLogRequest #

Cuerpo de la petición para registrar una calibración. Se rechazan los campos desconocidos (422).

El registro se añade al libro de registros con detección de manipulaciones con las mismas reglas de validación y aprobación que una calibración registrada en la aplicación. Un resultado FAIL o DAMAGED pone el instrumento en cuarentena, igual que en la aplicación. Se exigen los campos que requieren las normas seleccionadas en tu espacio de trabajo: un cuerpo que omite uno se rechaza con 422 FIELD_REQUIREMENTS_UNMET. Consúltalos antes con GET /standards/field-requirements.

Un PASS o PASS_WITH_ADJUSTMENT cuya lectura final queda fuera de nominal_value +/- tolerance también necesita un breve motivo escrito en out_of_tolerance_impact; si no, la escritura se rechaza con 422 PASS_OVER_TOLERANCE_REASON_REQUIRED. La lectura final es as_left_reading, o as_found_reading cuando no se envió la lectura como se dejó, así que un instrumento encontrado fuera de tolerancia y ajustado de nuevo dentro de la banda no necesita nada más. Se acepta todo lo que el servidor no puede comparar.

Campos

  • resultstringObligatorio

    Uno de PASS, PASS_WITH_ADJUSTMENT, LIMITED_CALIBRATION, FAIL, DAMAGED.

    • Valores permitidos: PASS, PASS_WITH_ADJUSTMENT, LIMITED_CALIBRATION, FAIL, DAMAGED
  • performed_atstring (date-time) | null

    Cuándo se realizó la calibración. Si se omite, se usa el momento actual (UTC).

  • nominal_valuestring | null
    • Como máximo 255 caracteres
  • tolerancestring | null
    • Como máximo 255 caracteres
  • as_found_readingstring | null
    • Como máximo 255 caracteres
  • as_left_readingstring | null
    • Como máximo 255 caracteres
  • temperaturestring | null
    • Como máximo 64 caracteres
  • humiditystring | null
    • Como máximo 64 caracteres
  • reference_standardstring | null
    • Como máximo 255 caracteres
  • reference_standard_asset_idstring (uuid) | null
  • certificate_numberstring | null
    • Como máximo 255 caracteres
  • traceability_referencestring | null
    • Como máximo 255 caracteres
  • service_providerstring | null
    • Como máximo 255 caracteres
  • calibration_typestring | null

    'in_house' cuando tu equipo midió el instrumento, 'external_certificate' cuando lo calibró un laboratorio o un proveedor y estás registrando su certificado. En la vía externa, lo mínimo es result, performed_at y certificate_number; los campos de lectura no son obligatorios.

    • Valores permitidos: in_house, external_certificate
  • measurement_uncertaintystring | null
    • Como máximo 120 caracteres
  • coverage_factorstring | null
    • Como máximo 40 caracteres
  • confidence_levelstring | null
    • Como máximo 40 caracteres
  • decision_rulestring | null
    • Como máximo 120 caracteres
  • conformity_statementstring | null
    • Como máximo 4000 caracteres
  • reference_standard_certificate_numberstring | null
    • Como máximo 120 caracteres
  • restriction_notesstring | null
    • Como máximo 4000 caracteres
  • out_of_tolerance_impactstring | null
    • Como máximo 4000 caracteres
  • notesstring | null
    • Como máximo 4000 caracteres

Se rechazan los campos que no figuran aquí.

CalibrationRecord #

Un registro de calibración del libro de registros, de solo lectura. Los registros del libro nunca se editan ni se borran: una corrección o una anulación se añade como un registro nuevo.

Campos

  • idstring (uuid)Obligatorio
  • instrument_idstring (uuid)Obligatorio
  • resultstring | null
  • performed_atstring | null
  • performed_bystring | null
  • nominal_valuestring | null
  • tolerancestring | null
  • as_found_readingstring | null
  • as_left_readingstring | null
  • reference_standardstring | null
  • certificate_numberstring | null
  • traceability_referencestring | null
  • service_providerstring | null
  • measurement_uncertaintystring | null
  • coverage_factorstring | null
  • confidence_levelstring | null
  • decision_rulestring | null
  • conformity_statementstring | null
  • notesstring | null
  • calibration_typestring | null

    'in_house' o 'external_certificate', tal como se registró. Null cuando el registro no tiene tipo.

    • Valores permitidos: in_house, external_certificate
  • approval_statusstring | null
  • statusstring | null
  • superseded_by_idstring (uuid) | null
  • record_typestring

    'calibration' para un registro normal, o 'void' para una marca de anulación añadida (se obtiene con ?include=voided).

    • Valor por defecto: calibration
    • Valores permitidos: calibration, void
  • voids_idstring (uuid) | null

    En una marca de anulación (record_type='void'): el id del registro de calibración que esta anulación invalida. Null en un registro normal.

  • voided_by_idstring (uuid) | null

    En una calibración original que sigue visible y que después se anuló: el id de la marca de anulación que la invalidó. Null cuando el registro no está anulado.

  • created_atstring | null

DocumentDownloadResponse #

Una URL de descarga de corta duración para un documento. La URL siempre descarga el archivo en vez de mostrarlo en el navegador, y caduca a los expires_in segundos (en expires_at). Pide una URL nueva cada vez que necesites el archivo en lugar de guardar una.

Campos

  • download_urlstringObligatorio
  • expires_inintegerObligatorio
  • expires_atstringObligatorio

DocumentRecord #

Un documento adjunto a un instrumento, de solo lectura. Los documentos se identifican por su id. Para obtener el archivo, pide una URL de corta duración a GET /instruments/{instrument_id}/documents/{document_id}/download.

Campos

  • idstring (uuid)Obligatorio
  • instrument_idstring (uuid)Obligatorio
  • file_namestring | null
  • document_typestring | null
  • calibration_idstring (uuid) | null

    El registro de calibración al que está adjunto este documento, o null.

  • uploaded_atstring | null
  • uploaded_bystring (uuid) | null
  • is_archivedboolean
    • Valor por defecto: false

DocumentRegisterRequest #

Cuerpo de la petición para registrar como documento de este instrumento un archivo que subiste con el POST prefirmado, adjunto opcionalmente a uno de sus registros de calibración.

key debe ser exactamente la clave que devolvió la llamada upload-url para este instrumento. Cualquier otra clave se rechaza (422 INVALID_REQUEST), y una clave sin archivo subido devuelve 409 OBJECT_NOT_UPLOADED.

Campos

  • keystringObligatorio
    • Al menos 1 caracteres
    • Como máximo 512 caracteres
  • file_namestringObligatorio
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • document_typestring

    Uno de certificate, report, procedure, photo, other.

    • Valor por defecto: other
    • Valores permitidos: certificate, report, procedure, photo, other
  • calibration_idstring (uuid) | null

    Opcional: adjunta el documento a un registro de calibración concreto de ESTE instrumento. Debe ser un id de calibración que pertenezca a este instrumento.

Se rechazan los campos que no figuran aquí.

DocumentUploadUrlRequest #

Cuerpo de la petición para una URL de subida: un POST prefirmado de S3, de corta duración y con tamaño limitado, para un documento.

El servidor genera la key del objeto; no puedes elegirla. Se descarta cualquier parte de directorio de file_name.

Campos

  • file_namestringObligatorio
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • content_typestring

    Tipo MIME del archivo. Debe ser un tipo permitido (PDF o una imagen); se rechaza el contenido activo, como text/html o image/svg+xml.

    • Valor por defecto: application/octet-stream
    • Como máximo 255 caracteres
  • size_bytesinteger | null

    Tamaño de archivo declarado, opcional. Se rechaza (422) si supera el máximo; el POST prefirmado también limita la subida real en S3.

    • Mínimo: 1
    • Máximo: 26214400

Se rechazan los campos que no figuran aquí.

DocumentUploadUrlResponse #

Un POST prefirmado de S3 para subir el archivo. Envía un POST multipart/form-data a upload_url con todas las entradas de fields y, después, el propio archivo. Tras la subida, pasa key a POST /instruments/{instrument_id}/documents para registrar el documento.

Campos

  • methodstring
    • Valor por defecto: POST
    • Siempre POST
  • upload_urlstringObligatorio
  • fieldsmap<string, string>Obligatorio
  • keystringObligatorio
  • expires_inintegerObligatorio
  • max_size_bytesintegerObligatorio

DueExtension #

Campos

  • untilstringObligatorio
  • reasonstring | null
  • extended_atstring | null
  • extended_by_user_idstring (uuid) | null

DueInstrument #

Una fila de la lista de trabajo: un instrumento que vence dentro del horizonte solicitado o que ya está vencido.

compliance_status es uno de COMPLIANT, WARNING, NON_COMPLIANT o NOT_CALIBRATED, los mismos valores que devuelven los endpoints de instrumentos. También puede ser OUT_FOR_CALIBRATION mientras el instrumento está fuera, en un proveedor, un valor que los endpoints de instrumentos no devuelven en compliance_status.

due_date es YYYY-MM-DD en la zona horaria de la sede del instrumento. Agrupa las filas por este valor en vez de deducir un día a partir de due_at en tu propia zona horaria. due_at es el instante ISO-8601 completo en UTC. Un instrumento que tiene un plan de calibración activo pero nunca se ha calibrado aparece como vencido ya, con NOT_CALIBRATED.

Campos

  • idstring (uuid)Obligatorio
  • asset_tagstring | null
  • namestring | null
  • due_atstring | null
  • due_datestringObligatorio
  • compliance_statusstringObligatorio
  • interval_labelstring | null
  • site_namestring | null
  • location_namestring | null

EventCatalogEntry #

Un descriptor de tipo de evento, legible por máquina, para que el integrador descubra los eventos.

Campos

  • typestringObligatorio
  • descriptionstringObligatorio

EventCatalogResponse #

El catálogo de eventos v1: el conjunto completo de valores type que puede llevar un webhook.

Campos

FieldRequirement #

Cómo se trata un campo concreto, dependiente de las normas, para las normas resueltas.

requirement es el nivel más estricto entre las normas resueltas (required > recommended > optional > hidden). required_by enumera las etiquetas de las normas resueltas que lo hacen OBLIGATORIO (vacío cuando solo lo exige el mínimo base); coincide con required_by en los missing_fields de un error 422 FIELD_REQUIREMENTS_UNMET. request_field (solo en el alcance de calibración) es la clave del cuerpo del POST que cubre el campo, o null cuando lo fija el servidor o no se puede fijar con la API pública; note explica esos casos.

Campos

  • fieldstringObligatorio
  • labelstringObligatorio
  • requirementstringObligatorio
  • required_byarray[string]
  • request_fieldstring | null
  • notestring | null

FieldRequirementsResponse #

Los requisitos de campo, legibles por máquina, que marcan las normas. Úsalos para comprobar una escritura de calibración (o de instrumento) antes de enviarla, en vez de esperar a que el servidor la rechace.

source es workspace cuando los requisitos reflejan las normas seleccionadas del espacio de trabajo, o query cuando muestran una vista previa de un conjunto ?standards= explícito. available_standards es el catálogo completo de normas seleccionables (para descubrir claves ?standards= válidas).

Campos

FieldRequirementsScope #

Los requisitos de campo de un alcance (calibración o activo).

enforced indica si el servidor rechaza una escritura que omite un campo OBLIGATORIO. Registrar una calibración sí lo hace (422 FIELD_REQUIREMENTS_UNMET). POST /instruments no: los requisitos de activo son solo orientativos, así que no cuentes con un rechazo ahí.

Campos

InstrumentCreate #

Cuerpo de la petición para crear un instrumento con POST /instruments. Se rechazan los campos desconocidos (422). El intervalo de calibración es obligatorio porque inicia el calendario de calibración del instrumento.

Campos

  • asset_tagstringObligatorio
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • namestringObligatorio
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • manufacturerstring | null
    • Como máximo 255 caracteres
  • modelstring | null
    • Como máximo 255 caracteres
  • serial_numberstring | null
    • Como máximo 255 caracteres
  • categorystring | null
    • Como máximo 255 caracteres
  • departmentstring | null
    • Como máximo 255 caracteres
  • locationstring | null
    • Como máximo 255 caracteres
  • tolerance_specstring | null
    • Como máximo 255 caracteres
  • notesstring | null
    • Como máximo 10000 caracteres
  • unit_of_measurestring | null
    • Como máximo 64 caracteres
  • is_reference_standardboolean
    • Valor por defecto: false
  • calibration_interval_valueintegerObligatorio
    • Mínimo: 1
    • Máximo: 100000
  • calibration_interval_unitstring

    Uno de days, months, years.

    • Valor por defecto: months
    • Valores permitidos: days, months, years
  • last_calibration_datestring (date-time) | null

    Referencia inicial opcional: cuándo se calibró el instrumento por última vez. Si se indica, se crea un registro de referencia aprobado y el cumplimiento se calcula a partir de él. Si se omite, el instrumento devuelve NOT_CALIBRATED hasta que se registre su primera calibración.

  • customFieldsmap<string, string>

    Campos personalizados opcionales definidos por el espacio de trabajo, como un mapa plano de etiqueta -> valor. Las etiquetas se guardan exactamente como se envían. Un valor en blanco se descarta en lugar de guardarse.

Se rechazan los campos que no figuran aquí.

InstrumentDetail #

Un solo instrumento: todo lo que hay en el resumen más sus campos descriptivos y de planificación.

Campos

  • idstring (uuid)Obligatorio
  • asset_tagstring | null
  • namestring | null
  • manufacturerstring | null
  • modelstring | null
  • serial_numberstring | null
  • statusstring | null
  • is_quarantinedboolean
    • Valor por defecto: false
  • site_idstring (uuid) | null
  • location_idstring (uuid) | null
  • compliance_statusstring | null
  • last_calibration_atstring | null
  • next_due_atstring | null
  • retired_atstring | null

    Marca de baja: el instante ISO-8601 en que se dio de baja este instrumento (fuera de servicio), o null mientras está activo. Se rellena en las filas dadas de baja que se obtienen con ?include=retired.

  • deletedboolean

    Marca de baja: true cuando este instrumento se ha dado de baja y una réplica debe tratarlo como eliminado. Siempre false en la lista por defecto, que solo incluye activos.

    • Valor por defecto: false
  • due_extensionDueExtension | null

    La prórroga activa de la fecha de vencimiento (until, reason, extended_at, extended_by_user_id), o null cuando no hay ninguna o una calibración más reciente la ha sustituido. next_due_at ya la tiene en cuenta.

  • categorystring | null
  • departmentstring | null
  • locationstring | null
  • tolerance_specstring | null
  • notesstring | null
  • unit_of_measurestring | null
  • is_reference_standardboolean
    • Valor por defecto: false
  • requires_electronic_signatureboolean
    • Valor por defecto: false
  • requires_electronic_signature_overrideboolean | null
  • calibration_interval_valueinteger | null
  • calibration_interval_unitstring | null
  • grace_daysinteger | null
  • customFieldsmap<string, string>

    Campos personalizados definidos por el espacio de trabajo, como un mapa plano de etiqueta -> valor. Solo se devuelven en el detalle de un instrumento (no en el listado).

  • created_atstring | null
  • updated_atstring | null

InstrumentSummary #

Un instrumento tal como aparece en un listado: su identidad y su estado de cumplimiento, lo suficiente para mostrar una fila sin una segunda petición.

Campos

  • idstring (uuid)Obligatorio
  • asset_tagstring | null
  • namestring | null
  • manufacturerstring | null
  • modelstring | null
  • serial_numberstring | null
  • statusstring | null
  • is_quarantinedboolean
    • Valor por defecto: false
  • site_idstring (uuid) | null
  • location_idstring (uuid) | null
  • compliance_statusstring | null
  • last_calibration_atstring | null
  • next_due_atstring | null
  • retired_atstring | null

    Marca de baja: el instante ISO-8601 en que se dio de baja este instrumento (fuera de servicio), o null mientras está activo. Se rellena en las filas dadas de baja que se obtienen con ?include=retired.

  • deletedboolean

    Marca de baja: true cuando este instrumento se ha dado de baja y una réplica debe tratarlo como eliminado. Siempre false en la lista por defecto, que solo incluye activos.

    • Valor por defecto: false
  • due_extensionDueExtension | null

    La prórroga activa de la fecha de vencimiento (until, reason, extended_at, extended_by_user_id), o null cuando no hay ninguna o una calibración más reciente la ha sustituido. next_due_at ya la tiene en cuenta.

InstrumentUpdate #

Cuerpo de actualización parcial para PATCH /instruments/{instrument_id}. Solo cambian los campos que envías; se rechazan los campos desconocidos (422).

Campos

  • namestring | null
    • Al menos 1 caracteres
    • Como máximo 255 caracteres
  • manufacturerstring | null
    • Como máximo 255 caracteres
  • modelstring | null
    • Como máximo 255 caracteres
  • serial_numberstring | null
    • Como máximo 255 caracteres
  • categorystring | null
    • Como máximo 255 caracteres
  • departmentstring | null
    • Como máximo 255 caracteres
  • locationstring | null
    • Como máximo 255 caracteres
  • tolerance_specstring | null
    • Como máximo 255 caracteres
  • notesstring | null
    • Como máximo 10000 caracteres
  • unit_of_measurestring | null
    • Como máximo 64 caracteres
  • is_reference_standardboolean | null
  • calibration_interval_valueinteger | null
    • Mínimo: 1
    • Máximo: 100000
  • calibration_interval_unitstring | null
    • Valores permitidos: days, months, years
  • calibration_interval_change_reasonstring | null

    Por qué cambia el intervalo de calibración. Se aplica cuando el instrumento ya tiene un intervalo y el valor o la unidad que envías es distinto. El cambio siempre se escribe en el registro de actividad del espacio de trabajo con este motivo. Que el motivo sea obligatorio depende del ajuste CHANGE_REASON_RULES_ENFORCED de la instalación: si está activado, la petición falla con 422 y el código interval_change_reason_required cuando falta; si está desactivado, el cambio se acepta y se registra sin motivo. Envía un motivo desde ya y tu integración no se romperá cuando se active. No hace falta si el intervalo no cambia.

    • Como máximo 1000 caracteres
  • customFieldsmap<string, string> | null

    Campos personalizados definidos por el espacio de trabajo que se van a fijar, como un mapa plano de etiqueta -> valor. SE COMBINAN con los campos personalizados que ya tiene el instrumento: las etiquetas que no envías no se tocan, y enviar un valor en blanco elimina esa etiqueta. Omite la clave por completo, o envía null, para no cambiar nada.

Se rechazan los campos que no figuran aquí.

LocationSummary #

Una ubicación de tu espacio de trabajo. Úsala para resolver el location_id que devuelven las respuestas de instrumentos y que acepta el filtro location_id. Cada ubicación pertenece a una sede, indicada por site_id.

Campos

  • idstring (uuid)Obligatorio
  • namestring | null
  • site_idstring (uuid) | null

Pagination #

Metadatos de paginación offset/limit que se devuelven junto con cada listado.

Campos

  • limitintegerObligatorio
  • offsetintegerObligatorio
  • totalintegerObligatorio
  • has_morebooleanObligatorio

SecretRotatedResponse #

La respuesta de la rotación del secreto: el nuevo secret en claro, que se muestra una sola vez.

Campos

  • idstring (uuid)Obligatorio
  • secretstringObligatorio

    El nuevo secreto de firma, que se muestra SOLO aquí.

  • secret_prefixstring | null

SiteSummary #

Campos

  • idstring (uuid)Obligatorio
  • namestring | null
  • is_defaultboolean
    • Valor por defecto: false
  • timezonestring | null

StandardSummary #

Una norma de cumplimiento que ha seleccionado el espacio de trabajo.

Campos

  • keystringObligatorio
  • labelstringObligatorio

ValidationError #

Campos

  • locarray[string | integer]Obligatorio
  • msgstringObligatorio
  • typestringObligatorio
  • inputany
  • ctxobject

WebhookCreate #

Petición de suscripción. Si events se omite o está vacío, significa «todos los eventos del catálogo».

Campos

  • urlstringObligatorio

    URL de entrega HTTPS. Se valida contra SSRF (debe resolver a una dirección pública; se rechazan los destinos privados, de loopback, de enlace local o de metadatos).

    • Como máximo 2048 caracteres
  • eventsarray[string] | null

    Subconjunto del catálogo de eventos v1 que se quiere recibir. Omítelo o envía una lista vacía para suscribirte a TODOS los eventos. Se rechazan los tipos desconocidos (422).

  • descriptionstring | null

    Etiqueta opcional y legible para este endpoint.

    • Como máximo 500 caracteres

Se rechazan los campos que no figuran aquí.

WebhookCreatedResponse #

La respuesta de la suscripción. Incluye el secret en claro EXACTAMENTE UNA VEZ.

Campos

  • idstring (uuid)Obligatorio
  • urlstringObligatorio
  • eventsarray[string] | null

    Tipos de evento suscritos, o null para todos los eventos del catálogo.

  • descriptionstring | null
  • is_activeboolean
    • Valor por defecto: true
  • secret_prefixstring | null

    Fragmento inicial no secreto del secreto de firma (solo para mostrar).

  • disabled_atstring | null
  • created_atstring | null
  • updated_atstring | null
  • secretstringObligatorio

    El secreto de firma HMAC, que se muestra SOLO aquí. Guárdalo ahora. No se puede volver a recuperar. Úsalo para verificar la cabecera Axiospec-Signature.

WebhookDeliveryRead #

Una fila del registro de entregas de cada endpoint (observabilidad y depuración).

Nunca incluye el secreto de firma ni las cabeceras de la petición; response_snippet es un extracto truncado y sin secretos del cuerpo de la respuesta del consumidor.

Campos

  • idstring (uuid)Obligatorio
  • event_idstring (uuid)Obligatorio
  • event_typestringObligatorio
  • statusstringObligatorio

    Uno de estos valores: pending | failed | succeeded | exhausted.

  • attempt_countinteger
    • Valor por defecto: 0
  • next_attempt_atstring | null
  • last_attempt_atstring | null
  • last_status_codeinteger | null
  • last_errorstring | null
  • response_snippetstring | null
  • created_atstring | null
  • updated_atstring | null

WebhookRead #

La vista segura del endpoint. NUNCA incluye secret_key.

Campos

  • idstring (uuid)Obligatorio
  • urlstringObligatorio
  • eventsarray[string] | null

    Tipos de evento suscritos, o null para todos los eventos del catálogo.

  • descriptionstring | null
  • is_activeboolean
    • Valor por defecto: true
  • secret_prefixstring | null

    Fragmento inicial no secreto del secreto de firma (solo para mostrar).

  • disabled_atstring | null
  • created_atstring | null
  • updated_atstring | null

WebhookUpdate #

Petición PATCH. Solo se aplican los campos que se envían (semántica exclude-unset).

Campos

  • urlstring | null

    Nueva URL de entrega HTTPS (se vuelve a validar contra SSRF cuando cambia).

    • Como máximo 2048 caracteres
  • eventsarray[string] | null

    Subconjunto de eventos que sustituye al actual (vacío/null = todos los eventos).

  • descriptionstring | null

    Etiqueta que sustituye a la actual.

    • Como máximo 500 caracteres
  • is_activeboolean | null

    Activa (true) o desactiva (false) la entrega a este endpoint.

Se rechazan los campos que no figuran aquí.