Secciones de la documentación
Trabajos de simulación
Las calculadoras responden en una sola solicitud. Los simuladores no (una resolución de onda completa tarda de minutos a horas), por eso se envían como trabajos y se consultan. Cada tipo de trabajo publica su contrato de parámetros en /api/py/v1/jobs/types: tipo, unidad, rango u opciones, valor predeterminado y obligatoriedad de cada parámetro, y los límites de su plan. El formulario del navegador se construye a partir de ese documento y el worker valida contra él, así que léalo en lugar de copiar nombres de parámetros de esta página.
Endpoints
| Endpoint | Qué hace | Credencial |
|---|---|---|
| GET /api/py/v1/jobs/types | Cada tipo de trabajo de simulación, sus planes, su tiempo máximo, sus límites y sus cargas. | Ninguna |
| GET /api/py/v1/jobs/types/{job_type} | El contrato de parámetros de un tipo de trabajo, como JSON Schema. | Ninguna |
| POST /api/py/v1/jobs/estimate | Lo que costaría un trabajo y cuánto tardaría, sin enviarlo. | Ninguna |
| POST /api/py/v1/upload | Un formulario prefirmado para el archivo de entrada de un trabajo. | Clave de API o sesión iniciada |
| POST /api/py/v1/jobs | Enviar un trabajo de simulación. | Opcional: clave de API |
| GET /api/py/v1/jobs/{job_id} | El estado y el progreso de un trabajo y, una vez terminado, el enlace a su resultado. | La identidad que lo envió |
| GET /api/py/v1/jobs | Los trabajos recientes del cliente, de todas las claves de la cuenta. | Clave de API o sesión iniciada |
Enviar y consultar
Lea el contrato, envíe el trabajo por POST con sus params (y inputFileKeys para un archivo cargado) y reciba 202 con un jobId. Con una clave, un envío se descuenta de la cuota como una llamada.
Consulte GET /api/py/v1/jobs/{jobId} con la misma identidad que lo envió. El estado lleva progress, stage, finishedAt, elapsedSeconds, errorKind y, una vez terminado, una resultUrl prefirmada. GET /api/py/v1/jobs enumera sus trabajos recientes, incluidos los enviados con cualquier clave de la cuenta. La biblioteca de Python consulta como lo hace la aplicación web: job.wait() comprueba de inmediato y luego cada 2 s, 5 s y 15 s mientras el trabajo sigue en curso.
Tipos de trabajo
13 tipos de trabajo. La lista de parámetros de cada uno está en /api/py/v1/jobs/types/{jobType}.
| jobType | Simulador | Cargas |
|---|---|---|
antenna_sim14 parámetros | Simulador de antena de cable (NEC-2) | Ninguna |
emi_radiated11 parámetros | Estimador de emisiones radiadas EMI | Ninguna |
eye_diagram11 parámetros | Diagrama ocular a partir de parámetros S | Obligatoria, hasta 1 × .s2p / .s4p |
fdtd_sparam17 parámetros | Simulador de línea de transmisión FDTD | Ninguna |
filter_monte_carlo15 parámetros | Análisis Monte Carlo del filtro RF | Ninguna |
impedance_match14 parámetros | Sintetizador de adaptación de impedancia de banda ancha | Opcional, hasta 2 × .s2p / .s1p |
magnetics_optimizer14 parámetros | Optimizador de diseño de magnetismo y transformadores | Ninguna |
pdn_impedance16 parámetros | Analizador de impedancia PDN y optimizador de condensadores de desacoplamiento | Ninguna |
radar_detection15 parámetros | Rendimiento de detección de radar Monte Carlo | Ninguna |
rf_cascade8 parámetros | Analizador de presupuesto RF Cascade | Opcional, hasta 12 × .s2p |
sat_link_budget14 parámetros | Presupuesto de enlaces satelitales y terrestres | Ninguna |
smps_control_loop36 parámetros | Analizador de estabilidad del bucle de control SMPS | Ninguna |
sparam_pipeline3 parámetros | Canalización de análisis de parámetros S | Obligatoria, hasta 4 × .s1p / .s2p / .s3p / .s4p |
Lo que costaría un trabajo
POST /api/py/v1/jobs/estimate recibe el cuerpo que enviaría un envío y responde con el entorno de cómputo en el que se ejecutaría, el tiempo de reloj previsto, si cabe en el presupuesto de ese entorno y, en el entorno de pago, los créditos que registraría. Nunca se cobra, no necesita clave y aplica las mismas comprobaciones que un envío, de modo que rechaza exactamente cuando lo haría un envío. Los créditos se muestran y se registran, pero todavía no se cobran.
Cuando se rechaza una solicitud
Un envío se comprueba contra su contrato antes de poner nada en cola o cobrar nada. Una solicitud fuera de él es un 400 que nombra cada parámetro erróneo, no solo el primero; no se pone nada en cola y no se consume cuota. Las claves de parámetro desconocidas se rechazan en lugar de ignorarse.
Tipos de error
Cada fallo lleva errorKind junto a su mensaje, en un envío rechazado y en un trabajo que falló después de ser aceptado. Es un conjunto cerrado; base su lógica en él y no en la redacción del mensaje, que está escrita para personas y puede cambiar.
| errorKind | Significado |
|---|---|
| invalid_request | Falta un parámetro, es de un tipo incorrecto, está fuera de rango, no es una de las opciones declaradas o no es un parámetro de este tipo de trabajo. El cuerpo del 400 enumera cada parámetro erróneo. |
| too_large | La solicitud está dentro del contrato pero supera lo que puede ejecutar el entorno de este plan. Reduzca el tamaño del problema. |
| not_available | La solicitud pide un modo o una función que este plan no incluye. El mensaje nombra lo que sí incluye el plan. |
| rate_limited | Se agotó un límite de trabajos simultáneos o una cuota mensual. Lleva Retry-After y, si la cuota es mensual, resetAt. |
| timeout | El trabajo superó el tiempo máximo de su tipo. No se cobra nada por él. |
| interrupted | La ejecución se detuvo antes de terminar: se sustituyó un worker o se detuvo una tarea. No se cobra nada por ella. |
| result_expired | El trabajo terminó, pero su resultado ya no está guardado. El estado sigue siendo completed y no lleva resultUrl. |
| transient | El servicio no pudo aceptar ni comprobar la solicitud en ese momento. No se puso nada en cola ni se cobró nada; inténtelo de nuevo. |
| fault | El servicio falló durante el cálculo. El mensaje indica en qué paso; no se cobra nada por ello. |
Límites, duplicados y duración
Concurrencia
429 con Retry-After y un cuerpo que lleva pending y limit.Envíos duplicados
Idempotency-Bypass: true para ejecutarlo de nuevo de todos modos.Cargas
POST /api/py/v1/upload necesita una clave o una sesión iniciada y devuelve un formulario POST prefirmado válido durante 5 minutos. Como máximo 10 MB por archivo, impuesto por el propio formulario. Se aceptan: .s1p .s2p .s3p .s4p .s6p .s8p .snp .csv .txt. El objeto cargado se conserva 24 horas, así que envíe el trabajo que lo usa en el mismo día. 20 formularios por minuto y dirección.Resultados
resultExpiresAt indica cuándo desaparece el propio resultado: a los 30 días en el plan Free, se conserva indefinidamente en Pro y API. resultUrlExpiresIn indica cuánto dura la resultUrl prefirmada: 15 minutos. Vuelva a consultar para obtener un enlace nuevo; no guarde la URL en caché. Cuando el resultado ya no existe, el estado sigue siendo completed, con el tipo result_expired y sin URL.Qué cambió para quien omite un parámetro
Cada tipo de trabajo tiene una sola definición de sus parámetros, y los valores de reserva propios de los manejadores han desaparecido. Si envía todos los campos, nada ha cambiado. Si omite uno de estos, el valor usado es distinto del anterior, y también lo es la respuesta.
| jobType | Parámetro | Antes | Ahora |
|---|---|---|---|
rf_cascade | nfSpec_db | 10 dB | 6 dB |
rf_cascade | inputPower_dbm | −60 dBm | −70 dBm |
rf_cascade | bandwidth_hz | 1 MHz | 10 MHz |
rf_cascade | stages | "[]" | obligatorio — sin valor predeterminado |
smps_control_loop | toleranceDistribution | uniform | gaussian |
filter_monte_carlo | freqCutoff | 1 MHz | 1 GHz |
impedance_match | freqStart | 1 MHz | 800 MHz |
impedance_match | freqStop | 100 MHz | 1,2 GHz |
antenna_sim | freq (instant solve) | 145 MHz | 146 MHz |
pdn_impedance | portX_mm | centro de la placa (boardWidth_mm / 2) | punto de un tercio (boardWidth_mm / 3) |
pdn_impedance | portY_mm | centro de la placa (boardLength_mm / 2) | punto de un tercio (boardLength_mm / 3) |
Antes, las claves de parámetro desconocidas se descartaban y se respondía con un valor predeterminado. Ahora se rechazan, y el rechazo enumera las claves que acepta el tipo de trabajo.
En los tipos de trabajo que muestrean (filter_monte_carlo y los demás optimizadores), la semilla aleatoria se deriva del cuerpo que envía, de modo que el mismo diseño enviado con claves distintas toma una muestra distinta. Omitir un parámetro y enviarlo con su valor predeterminado es la misma solicitud para el solucionador, pero no el mismo cuerpo; por eso una ejecución desde el formulario web y otra desde esta API pueden diferir dentro del error de muestreo. Envíe randomSeed para fijar exactamente una ejecución.
Cambios de la versión de septiembre de 2026
Comportamiento que cambió para una integración existente. Si envía todos los parámetros y comprueba errorKind en lugar del texto del mensaje, las únicas diferencias que debería ver son estas. Los cambios posteriores, y la fecha en que se anunció cada uno, están en el registro de cambios de la API.
Qué cambió
- Las claves de parámetro desconocidas y los valores fuera de rango se rechazan al enviar con un 400 que nombra el parámetro erróneo, en lugar de descartarse o recortarse y responderse de todos modos.
- 11 valores predeterminados de parámetros cambiaron para quien omite el campo; consulte la tabla anterior.
- Una cuota mensual agotada es ahora HTTP 402 (errorKind rate_limited) con Retry-After y resetAt, nunca un 401 ni un simple 429. Esto abarca tanto el mes de la clave de API como la cuota de los modos de resolución FDTD.
- Una carga necesita ahora una sesión iniciada o una clave de API; una solicitud anónima recibe un 401 antes de guardar nada. El entorno gratuito anónimo pierde por completo las dos herramientas con archivo de entrada (eye_diagram, sparam_pipeline), ya que ninguna funciona sin un archivo cargado.
- Un trabajo enviado con una clave de API pertenece ahora a la cuenta propietaria de la clave: se autoriza por propietario, no solo por id de clave o IP de envío, y aparece en la lista de trabajos del panel del propietario.
- Un resultado terminado lleva ahora warnings y provenance (method, version, seed y las entradas normalizadas realmente usadas) junto a los valores calculados.
- Todo fallo —un envío rechazado y un trabajo que falló después de ser aceptado— lleva ahora errorKind. Consulte el conjunto cerrado anterior.
- Un trabajo cuyo worker se cae a mitad de ejecución —sustituido, o con su tarea detenida— se marca ahora como fallido con el tipo interrupted en lugar de quedarse atascado, y se libera cualquier cargo por él.
- Un resultado se conserva exactamente el tiempo que indica su registro: consulte resultExpiresAt en la tarjeta Resultados anterior.
- La topología Auto del sintetizador de impedancias compara ahora las cinco topologías y devuelve la de mejor pérdida de retorno en el peor caso; antes construía siempre una red L, tanto en el modo rápido como en la opción avanzada predeterminada.
- El sintetizador de impedancias respeta ahora maxQ y componentSeries; antes ambos se aceptaban y se ignoraban sin aviso.
- El ajuste a valores normalizados de la serie E redondea ahora una mantisa superior a unos 9,55 hacia arriba, al primer valor de la década siguiente (9,9 nF → 10 nF), en lugar de hacia abajo. Esto puede cambiar el valor de una pieza en un diseño de adaptación de impedancias o en una ejecución Monte Carlo de un filtro con la misma entrada.
- Las netlists SPICE exportadas desde la página de impedancias llevan ahora los valores normalizados (ajustados) de los componentes, no los ideales, con una línea de cabecera que nombra la serie.
- Los diseños de inductores de potencia y de inductores acoplados se dimensionan ahora a partir de la inductancia y la corriente de pico que usted indica, en lugar de derivarse de otras entradas; los transformadores flyback y forward no cambian. Una solicitud cuya corriente de pico indicada no concuerda con el rizado de su inductancia indicada se devuelve con una advertencia ripple_exceeds_peak.
- Nota de despliegue: el validador de la API se desplegó antes que el worker durante esta implantación, de modo que un trabajo puesto en cola en ese intervalo cuyo cuerpo llevaba una clave mal escrita —antes aceptada sin aviso con un valor predeterminado— se rechazó al enviarse en lugar de ejecutarse hasta el final.