El esquema JSON de definición de lotes de firmas es el siguiente:
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "algorithm": {
      "type": "string"
    },
    "format": {
      "type": "string"
    },
    "suboperation": {
      "type": "string"
    },
    "concurrenttimeout": {
      "type": "integer"
    },
    "stoponerror": {
      "type": "boolean"
    },
    "extraparams": {
      "type": "string"
    },
    "singlesigns": {
      "type": "array",
      "items": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "datareference": {
              "type": "string"
            },
            "format": {
              "type": "string"
            },
            "suboperation": {
              "type": "string"
            },
            "extraparams": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "datareference",
            "format",
            "suboperation",
            "extraparams"
          ]
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "datareference": {
              "type": "string"
            },
            "suboperation": {
              "type": "string"
            },
            "extraparams": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "datareference",
            "suboperation",
            "extraparams"
          ]
        }
      ]
    }
  },
  "required": [
    "algorithm",
    "format",
    "suboperation",
    "concurrenttimeout",
    "stoponerror",
    "extraparams",
    "singlesigns"
  ]
}
 
Un ejemplo de definición JSON de lote de firmas podría ser este (ejemplo con dos firmas en el lote):
{
   "algorithm":"SHA256withRSA",
   "format":"PAdES",
   "suboperation":"sign",
   "concurrenttimeout":30,
   "stoponerror":false,
   "extraparams":"Iw0KI1RodSBBdWcgMTMgMTY6Mjk6MDUgQ0VTVCAyMDE1DQpTaWduYXR1cmVJZD03NzI1Mzc0ZS03MjhkLTRhMzMtOWRiOS0zYTRlZmVhNGNlYWQNCg==",
   "singlesigns":[
      {
         "id":"7725374e-728d-4a33-9db9-3a4efea4cead",
         "datareference":"QzovcHJ1ZWJhcy90ZXN0X2ZpY2hlcm8xLnBkZg==",
         "format":"XAdES",
         "suboperation":"sign",
         "extraparams":"Iw0KI1RodSBBdWcgMTMgMTY6Mjk6MDUgQ0VTVCAyMDE1DQpTaWduYXR1cmVJZD03NzI1Mzc0ZS03MjhkLTRhMzMtOWRiOS0zYTRlZmVhNGNlYWQNCg=="
      },
      {
         "id":"93d1531c-cd32-4c8e-8cc8-1f1cfe66f64a",
         "datareference":"QzovcHJ1ZWJhcy90ZXN0X2ZpY2hlcm8yLnBkZg==",
         "suboperation":"sign",
         "extraparams":"Iw0KI1RodSBBdWcgMTMgMTY6Mjk6MDUgQ0VTVCAyMDE1DQpTaWduYXR1cmVJZD05M2QxNTMxYy1jZDMyLTRjOGUtOGNjOC0xZjFjZmU2NmY2NGENCg=="
      }
   ]
}
 
En este se distinguen los siguientes elementos:

Cabecera de definición de lote

En el ejemplo, es la línea "stoponerror":"false", que contiene dos atributos configurables por el integrador:

stoponerror

Cuando se establece a false se indica que el proceso debe continuar incluso si alguna de las firmas del lote no puede completarse, y cuando se establece a true el proceso se para en el momento en el que se produce el primer error.

algorithm

Algoritmo de firma a usar en todo el lote.
Se admiten los siguientes algoritmos:

  1. SHA1withRSA (no se recomienda por obsoleto)
  2. SHA256withRSA
  3. SHA384withRSA
  4. SHA512withRSA

Definición de cada firma dentro del lote

Dentro del elemento de definición de lote debemos incluir uno o varios elementos de tipo singlesign, que es obligatorio cuenten en origen con un identificados único (en el ejemplo se observa la primera cabecera de definición de firma "id":"7725374e-728d-4a33-9db9-3a4efea4cead", que indica que es una firma dentro del lote identificada por la cadena 7725374e-728d-4a33-9db9-3a4efea4cead.

Configuración de cada firma dentro del lote

Cada una de las firmas dentro del lote puede ser configurada individualmente con los siguientes parámetros:
Origen de los datos a firmar

El origen de los datos debe indicarse dentro del elemento datasource del JSON, por ejemplo: "datareference":""http://google.com"

El origen de los datos a firmar puede indicarse:
  1. Con una URL (se admite HTTP y HTTPS). En este caso el servidor (nunca el cliente) descargará directamente los datos a firmar.
  2. Indicando directamente los datos a firmar codificados en Base64. En este caso el servidor descodificará el Base64 para obtener los datos a firmar.
Formato de firma

El formato de firma a utilizar debe indicarse dentro del elemento format del JSON, por ejemplo "format":"XAdES".

Se admiten los siguientes formatos:
  1. XAdES
  2. CAdES
  3. PAdES (válido únicamente para documentos PDF)
Operación de firma

La operación concreta de firma a realizar debe indicarse dentro del elemento suboperation del JSON, por ejemplo "suboperation":"sign".

Se admiten las siguientes operaciones:
  1. sign (firma)
  2. cosign (cofirma)
Parámetros adicionales para la firma

Los parámetros adicionales para el formato y la operación concreta de firma (tal y como se describe en la documentación del MiniApplet) deben indicarse dentro del elemento extraparams del JSON, por ejemplo "extraparams":"bW9kZT1pbXBsaWNpdA0Kc2lnbmF0dXJlUHJvZHVjdGlvbkNpdHk9TWFkcmlk".

Estos parámetros adicionales deben indicarse codificando su representación textual como Base64.
Así, las siguientes propiedades (indicando cada parámetro en una línea de texto con el formato nombre_parĂ¡metro=valor):

mode=implicit
signatureProductionCity=Madrid

Quedarían codificadas en Base64 como:

bW9kZT1pbXBsaWNpdA0Kc2lnbmF0dXJlUHJvZHVjdGlvbkNpdHk9TWFkcmlk

Si no se desea establecer parámetros adicionales debe dejarse el nodo vacío.