Documentación de la API REST

Autenticación

La API se autentica mediante un token de API que los clientes pueden obtener de la siguiente manera:

  1. Iniciar sesión en Mi Cuenta.
  2. Hacer clic en la pestaña Mi Información en la pantalla de bienvenida.
  3. Hacer clic en el enlace Mi perfil de cuenta link.
  4. Encontrar el token de API en la parte superior del perfil.

Agregar Encabezados Necesarios

Es necesario incluir los siguientes dos encabezados en cada solicitud:

Consejos para Desarrolladores

Las herramientas de documentación populares (como Swagger) no son adecuadas para la API de Skypunch Technology porque, a diferencia de muchas APIs, estos servicios—o al menos los tres servicios de papeleta—no están diseñados principalmente para permitir operaciones CRUD (Crear, Leer, Actualizar y Eliminar) sobre datos. Más bien, el recurso de la API para la papeleta y sus tres sub-recursos (step_one, step_two, step_three) soportan la lógica real de la aplicación y el flujo del usuario a través del proceso de:

  1. Ver una papeleta.
  2. Confirmar las selecciones realizadas por un votante en esa papeleta.
  3. Insertar la papeleta en el sistema.

Por esta razón, las representaciones de la papeleta en step_one y step_two devuelven HTML como respuesta. Este HTML está listo para ser mostrado en un navegador web y puede ser estilizado para integrarse con el aspecto y la sensación del sitio que lo consuma, como se explica en la sección Estilizando la Papeleta.

Estilizando la Papeleta

Al consumir una papeleta en tu propio sitio web utilizando los métodos Get Ballot step one y Get Ballot step two detallados a continuación, por defecto no tendrá ningún estilo aplicado y, por lo tanto, no se verá muy bien. Para cambiar eso y aplicar los mismos estilos utilizados cuando la papeleta está alojada en el sitio de Skypunch Technology, sigue estos pasos:

  1. Inicia sesión en Mi cuenta.
  2. Haz clic en el botón Vista previa de la papeleta asociado con tu elección. (Si ese botón no se muestra, también puedes hacer clic en el enlace Enviar una papeleta en papel.)
  3. Una vez que la papeleta se muestre, ve al código fuente de esa página.
  4. Copia la hoja de estilo de la sección HEAD en esta página y pégala en cada una de tus páginas de papeleta.

Al copiar la hoja de estilo de una papeleta actual en el sitio de Skypunch Technology, te aseguras de tener los estilos más actualizados en uso con la papeleta en cualquier momento. Una vez que la hoja de estilo se haya copiado en tus propias páginas de papeleta, puedes dejarla tal como está o realizar cualquier cambio que desees en esos estilos para hacer que la papeleta se integre perfectamente con el aspecto y la sensación de tu propio sitio.

Evitando Conflictos de Estilos

Algunos de los estilos pueden entrar en conflicto con los estilos existentes que ya se usan en tu sitio. Sin embargo, dado que la salida de los métodos step_one y step_two debe estar anidada en una etiqueta, se recomienda incluir el atributo id para esa etiqueta FORM con un valor como "ballot". Un ejemplo sería:

<form method="post" id="ballot">

Luego, antepones cualquier regla CSS donde haya un conflicto con #ballot. Un ejemplo sería:

#ballot header > div > img:first-child {width:570px; height:95px; vertical-align:text-bottom;}

Esto convierte el selector para esa regla en un selector descendiente, y asegura que la regla solo se aplique a la papeleta y a nada más.

Los Métodos de la API

  • Los valores entre llaves son variables proporcionadas por la aplicación que consume la API.
  • El ID de la elección es el ID de tu elección generado por Skypunch Technology para cada elección. Este valor se muestra en tu cuenta de Skypunch Technology asociada con cada elección, o puedes obtenerlo programáticamente desde el punto final /elections.
  • La documentación hace referencia a los tres modelos para llevar a cabo una elección: 1. completamente alojado, 2. autenticación pasada y 3. completamente integrado. Esos modelos están representados en los Diagramas de Flujo de Modelos de Elección.

Obtener información de las elecciones

Descripción: Obtiene información general sobre las elecciones, útil para mostrar un anuncio sobre una próxima elección o la fecha límite para votar en una elección en curso. También incluye los IDs de las elecciones, que son útiles para crear endpoints hacia otros recursos.

Método HTTP: GET

Endpoint
https://www.electionsonline.com/rest/v3/elections
Notas
Añada ?startdate=yyyy/mm/dd al endpoint para seleccionar únicamente las elecciones que comienzan después de la fecha especificada.
Solicitud de ejemplo
GET /rest/v3/elections
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Respuesta de ejemplo
[
	{
		"ID": 1549,
		"UUID": "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx",
		"PUBLISHRESULTS": 1,
		"ELECTIONNAME": "Sample Election",
		"STARTDATE": "June, 06 2016 00:00:00",
		"ENDDATE": "June, 13 2016 23:59:00",
		"BIODEADLINE": "June, 03 2016 23:59:00"
	},
	{
		"ID": 1562,
		"UUID": "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx",
		"PUBLISHRESULTS": 0,
		"ELECTIONNAME": "Demonstration Election",
		"STARTDATE": "June, 29 2016 00:00:00",
		"ENDDATE": "June, 29 2016 00:00:00",
		"BIODEADLINE": "June, 29 2016 00:00:00"
	}
]

Obtener elección específica

Descripción: Obtiene información general sobre una elección específica.

Método HTTP: GET

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}
Solicitud de ejemplo
GET /rest/v3/elections/{electionID}
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Respuesta de ejemplo
[
	{
		"ID": 1549,
		"UUID": "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx",
		"PUBLISHRESULTS": 1,
		"ELECTIONNAME": "Sample Election",
		"STARTDATE": "June, 06 2016 00:00:00",
		"ENDDATE": "June, 13 2016 23:59:00",
		"BIODEADLINE": "June, 03 2016 23:59:00"
	}
]

Obtener papeleta – paso uno

Descripción: Muestra la papeleta en un sitio web externo y permite aplicar estilos para que su apariencia coincida con la del sitio externo. Una vez que un votante realiza sus selecciones en esta representación de la papeleta, procede a la representación de paso dos para confirmar sus selecciones.

Método HTTP: POST

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}/ballot/step_one
Notas
El cuerpo de la solicitud es una colección de pares clave-valor, que se crea más fácilmente tratando los parámetros listados a continuación como campos de un formulario.
  • VoterID es un identificador numérico único para cada votante.
  • Voted es un valor booleano que indica el estado de votación de los votantes. False para quienes no han votado, true para quienes sí lo han hecho.
  • VoterGroup debe ser una cadena vacía cuando no se asocian grupos de votantes con una elección. Sin embargo, cuando se utiliza, este parámetro debe coincidir con el código de grupo de votantes correspondiente definido en la configuración de la elección para los votantes que pertenecen a un grupo específico.
  • SIGs, al igual que VoterGroup, debe ser una cadena vacía cuando no se usa. Cuando se utiliza, este parámetro debe coincidir con el código SIG asociado a cualquier cargo que deba incluirse en la papeleta para ese votante.
  • Weight debe tener por defecto el valor 1, pero puede ser cualquier valor entero para reflejar el peso de la papeleta de un votante en casos donde algunas papeletas tienen más peso que otras.
  • js es un parámetro booleano. True para navegadores que soportan JavaScript, false para aquellos que no. Esto afecta el comportamiento de las biografías de los candidatos.
Solicitud de ejemplo
POST /rest/v3/elections/{electionID}/ballot/step_one
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

voterID=10&voted=false&voterGroup=&sigs=&weight=1&js=true
Respuesta
La respuesta será una cadena de HTML. Simplemente muestre la cadena en el lugar deseado de la página web y aplique los estilos tal como se describe en la sección anterior Estilizando la papeleta.

Obtener papeleta – paso dos

Descripción: Muestra la página de confirmación que presenta las selecciones realizadas por el votante en la página anterior (paso uno). Desde esta página, el votante procede a la representación de la papeleta en paso tres, donde sus selecciones se guardan en el sistema.

Método HTTP: POST

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}/ballot/step_two
Notas
El cuerpo de la solicitud es una colección de pares clave-valor, que se crea más fácilmente tratando los parámetros listados a continuación como campos de un formulario.
  • Papeleta se distingue en que es un fragmento de XML que se crea a partir de las selecciones realizadas por el votante en la página anterior. El siguiente ejemplo demuestra el formato de XML que debe generarse. Para fines de demostración, este ejemplo asume:
    1. La papeleta contiene los cargos Presidente (id = 8812) y Tesorero (id = 8813).
    2. El votante seleccionó a Robert Harrison para Presidente y a Terry McAllister para Tesorero.
    3. El votante no proporcionó comentarios, o los comentarios no están habilitados para ninguno de los cargos.
    Para crear este XML, debe analizar el alcance FORM creado cuando la papeleta es enviada por el votante en paso uno. Busque la variable del alcance FORM, positions. Esta lista de cargos en la papeleta, delimitada por comas, puede recorrerse en un bucle y durante cada iteración se crean los distintos nodos XML.
    ‹positions›
       ‹position›
          ‹positionID›pos8812‹/positionID›
          ‹candidates›Robert Harrison‹/candidates›
          ‹comments›‹/comments›
       ‹/position›
          ‹position›
          ‹positionID›pos8813‹/positionID›
          ‹candidates›Terry McAllister‹/candidates›
          ‹comments›‹/comments›
       ‹/position›
    ‹/positions›
    
  • VoterID es un identificador numérico único para cada votante.
  • Weight debe tener por defecto el valor 1, pero puede ser cualquier valor entero para reflejar el peso de la papeleta de un votante en casos donde algunas papeletas tienen más peso que otras.
  • Languages es una cadena de texto delimitada por comas con los códigos de idiomas soportados por el sistema (en para inglés, es para español, de para alemán, fr para francés, it para italiano, ch para chino, br para portugués).
Solicitud de ejemplo
POST /rest/v3/elections/{electionID}/ballot/step_two
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

ballot=‹positions›‹position›‹positionID›pos8812‹/positionID›‹candidates›Robert Harrison‹/candidates›‹comments›‹/comments›‹/position›
‹position›‹positionID›pos8813‹/positionID›‹candidates›Terry McAllister
‹/candidates›‹comments›‹/comments›‹/position›‹/positions›&voterID=123&weight=1&languages=en
Respuesta
La respuesta será una cadena de HTML. Simplemente muestre la cadena en el lugar deseado de la página web y aplique los estilos tal como se describe en la sección anterior Estilizando la papeleta.

Obtener papeleta – paso tres

Descripción: Inserta la papeleta en el sistema inmediatamente después de que el votante confirme sus selecciones en la representación de la papeleta en paso dos. Todos los parámetros son obligatorios, excepto los cuatro parámetros custom.

Método HTTP: POST

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}/ballot/step_three
Notas
El cuerpo de la solicitud es una colección de pares clave-valor, que se crea más fácilmente tratando los parámetros listados a continuación como campos de un formulario.
  • Papeleta
    ‹positions›
       ‹position›
          ‹positionID›pos8812‹/positionID›
          ‹candidates›Robert Harrison‹/candidates›
          ‹comments›‹/comments›
       ‹/position›
          ‹position›
          ‹positionID›pos8813‹/positionID›
          ‹candidates›Terry McAllister‹/candidates›
          ‹comments›‹/comments›
       ‹/position›
    ‹/positions›
    
  • VoterID es un identificador numérico único para cada votante.
  • Weight debe tener por defecto el valor 1, pero puede ser cualquier valor entero para reflejar el peso de la papeleta de un votante en casos donde algunas papeletas tienen más peso que otras.
  • VoterGroup es la misma variable utilizada en la representación de la papeleta de paso uno.
  • SIGs es la misma variable utilizada en la representación de la papeleta de paso uno.
  • custom1 es un parámetro opcional usado para enviar datos demográficos específicos del votante.
  • custom2 es un parámetro opcional usado para enviar datos demográficos específicos del votante.
  • custom3 es un parámetro opcional usado para enviar datos demográficos específicos del votante.
  • custom4 es un parámetro opcional usado para enviar datos demográficos específicos del votante.
  • Languages es una cadena de texto delimitada por comas con los códigos de idiomas soportados por el sistema (en para inglés, es para español, de para alemán, fr para francés, it para italiano, ch para chino, br para portugués).
Solicitud de ejemplo

POST /rest/v3/elections/{electionID}/ballot/step_three
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

ballot=‹positions›‹position›‹positionID›pos8812‹/positionID›‹candidates›Robert Harrison‹/candidates›‹comments›‹/comments›‹/position›‹position›‹positionID›pos8813‹/positionID›‹candidates›Terry McAllister‹/candidates›‹comments›‹/comments›‹ /position›‹/positions›&voterID=123&weight=1&voterGroup=&sigs=&custom1=&custom2=&custom3=&custom4=&languages=en

Respuesta de ejemplo
{
    "heading": "PHNwYW4gY2xhc3M9Imxhbmd1YWdlXzEiPkJhbGxvdCBhY2NlcHRlZDwvc3Bhbj4=",
    "message": "PHNwYW4gY2xhc3M9Imxhbmd1YWdlXzEiPlRoYW5rIHlvdS4gWW91ciBiYWxsb3Q
    	gaGFzIGJlZW4gYWNjZXB0ZWQuPC9zcGFuPg==",
    "status": "1",
    "ballot_id": "DSSYjuoBdDkJi2fjq3C1WL",
    "verify_heading": "PHNwYW4gY2xhc3M9Imxhbmd1YWdlXzEiPkJhbGxvdCB2ZXJpZmljYXRpb
    	248L3NwYW4+",
    "verify_message": "PHNwYW4gY2xhc3M9Imxhbmd1YWdlXzEiPihPcHRpb25hbCkgVmVyaWZ5a
    	W5nIHRoaXMgYmFsbG90IGxhdGVyIHJlcXVpcmVzIHNhdmluZyBkYXRhIGFib3V0IGl0IHJpZ
        2h0IG5vdy48L3NwYW4+",
    "verify_button": "PHNwYW4gY2xhc3M9Imxhbmd1YWdlXzEiPkdldCB2ZXJpZmljYXRpb24g
    	ZGF0YTwvc3Bhbj4="
}

Obtener recuento de papeletas

Descripción: Obtiene un recuento de todas las papeletas emitidas en una elección. Útil para fomentar una mayor participación de los votantes, como se describe en Prueba social para aumentar la participación de los votantes.

Método HTTP: GET

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}/ballot/count
Notas
Notice in the sample request that it is not necessary to send a key parameter through the request header as it is with other services.
Solicitud de ejemplo
GET /rest/v3/elections/2206/ballot/count
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Cache-Control: no-cache
Respuesta
La respuesta solo contendrá un número entero.

Obtener votantes

Descripción: Obtiene todos los votantes de elecciones completamente alojadas. Para elecciones con autenticación pasada o completamente integradas, en las que nunca se carga un padrón de votantes en el sistema de Skypunch Technology, esto no es aplicable. Un uso de este servicio sería determinar quiénes han votado y enviar recordatorios por correo electrónico únicamente a quienes no lo han hecho, para los clientes que elijan enviar recordatorios usando su propio servicio de correo electrónico.

Método HTTP: GET

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}/voters
Notas
El comportamiento predeterminado es obtener todos los votantes, pero la respuesta puede filtrarse para incluir únicamente a los votantes que han votado o a los que no lo han hecho. Para aplicar un filtro, simplemente agregue ?filter=voted o ?filter=notvoted a la URI.
Solicitud de ejemplo
GET /rest/v3/elections/{electionID}/voters
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Cache-Control: no-cache
Respuesta de ejemplo
[
    {
        "ID": 2891481,
        "FIRSTNAME": "Pete",
        "LASTNAME": "Lopez",
        "EMAIL": "lopez@phony-domain.net",
        "WEIGHT": 1.0000,
        "VOTERGROUP": null,
        "SIGS": null,
        "ROLES": "voter",
        "VOTED": 1,
        "CUSTOM1": null,
        "CUSTOM2": null,
        "CUSTOM3": null,
        "CUSTOM4": null,
        "LANGUAGE": null,
        "OTP_TYPE": "s",
        "STATIC_OTP": 109379
    },
    {
        "ID": 2891486,
        "FIRSTNAME": "Jimmy",
        "LASTNAME": "Roberts",
        "EMAIL": "jimmy@phony-domain.tech",
        "WEIGHT": 1.0000,
        "VOTERGROUP": null,
        "SIGS": null,
        "ROLES": "voter",
        "VOTED": 0,
        "CUSTOM1": null,
        "CUSTOM2": null,
        "CUSTOM3": null,
        "CUSTOM4": null,
        "LANGUAGE": null,
        "OTP_TYPE": null,
        "STATIC_OTP": null
    }
]

Agregar un votante

Descripción: Agrega un votante individual a un padrón de votantes existente.

Método HTTP: POST

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}/voters
Notas
otp_type es opcional en la solicitud y solo debe incluirse para elecciones del sector público. Establezca el valor en d para votantes con contraseña de un solo uso dinámica y en s para votantes con contraseña de un solo uso estática.
Solicitud de ejemplo
POST /rest/v3/elections/{electionID}/voters
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Content-Type: application/json
Cache-Control: no-cache
{
    "first_name":"Terry",
    "last_name":"McMurray",
    "email":"terry@phony-domain.net",
    "weight":1,
    "voter_group":"student",
    "sigs":"",
    "custom1":"",
    "custom2":"",
    "custom3":"", 
    "custom4":"",
    "otp_type":""
}
Respuesta de ejemplo
{
    "sigs": null,
    "email": "terry@phony-domain.net",
    "voted": 0,
    "weight": 1.0000,
    "custom1": null,
    "custom2": null,
    "custom3": null,
    "custom4": null,
    "language": null,
    "otp_type": null,
    "voter_id": 2891501,
    "last_name": "McMurray",
    "first_name": "Terry",
    "voter_group": "student"
}

Obtener los IDs de los votantes con autenticación aprobada

Descripción: En una elección con autenticación aprobada, los votantes inician sesión en un sitio web externo y luego son transferidos a Skypunch Technology para votar. En este proceso, su ID único en el sitio web de origen se almacena en Skypunch Technology. Use este servicio para recuperar esos IDs y actualizar su propia base de datos, marcando a los votantes como que ya han votado, de manera que puedan ser excluidos de recibir recordatorios por correo electrónico adicionales, y también para mantener un registro de quiénes votaron.

Método HTTP: GET

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}/voters/passed
Solicitud de ejemplo
GET /rest/v3/elections/{electionID}/voters/passed
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Cache-Control: no-cache
Respuesta de ejemplo
6103,4982,1085,10876,2374,1984

Obtener token para autenticación aprobada

Descripción: Obtiene un token de autenticación para un votante que inicia sesión en un sitio externo y luego es transferido al sitio de Skypunch Technology para visualizar y emitir la papeleta.

Método HTTP: POST

Endpoint
https://www.electionsonline.com/rest/v3/elections/{electionID}/token
Notas

La respuesta es un objeto JSON (ver Respuesta de ejemplo más abajo) que contiene tres claves. Los valores asociados a esas claves dependen de la respuesta de este endpoint. Cuando este endpoint emite un token, la clave token_issued tendrá el valor yes y la clave token contendrá el token que puede usar para autenticar al votante y dirigirlo a la papeleta. Haga esto redirigiendo la solicitud a la siguiente URL proporcionando el token de la respuesta como valor del parámetro token. Por ejemplo:

https://www.electionsonline.com/vote/login.cfm?token=xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx.

En otros casos, por ejemplo si el votante ya ha votado, aparecerá un mensaje al respecto en la clave message y token estará vacío.

En la solicitud de ejemplo que se muestra a continuación, los cuatro campos custom al final de la cadena de pares nombre/valor son todos opcionales. Inclúyalos si desea enviar datos demográficos personalizados del votante al sistema. De lo contrario, pueden omitirse.

Solicitud de ejemplo
POST /rest/v3/elections/{electionID}/token
Host: www.electionsonline.com
key: 08BF6D9D-YC16-72F4-385AD9AF30CCF877
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

firstname=Robert&lastname=Royal&email=royal@phony-domain.tech&voterID=1268&weight=1&votergroup=0&sigs=0&custom1=51&custom2=22213&custom3=Male&custom4=Volunteer
Respuesta de ejemplo
{
        "Token": "f3de9ee1-c143-11ee-8cac-74867a213c83",
        "Message": "",
        "token_issued": "yes"
}