alt text

Con el API de eFirma.com podrás integrar nuestros servicios a tu plataforma de una manera sencilla y práctica.

En caso de contar con un plan enterprise de geo-localización, eFirma tiene multiples servidores geo-distribuidos para cumplir con normas de privacidad de datos. Si se requiere almacenar datos en un servidor especifico, el nombre del servidor se encuentra en código Alfa-2 especificado en ISO 3166-1 y llevará la siguiente base:

https://{servidor}.efirma.com/

Por ejemplo, para almacenar datos y transferir datos de manera especifica por nuestros servidores en México, se haría de la siguiente manera:

https://mx.efirma.com/

Y para nuestros servidores en españa, sería de la siguiente manera:

https://es.efirma.com/

Una respuesta exitosa siempre vendra en formato JSON.

Cuenta

Los métodos de cuenta, nos sirven para monitorear la cuenta dueña de las API Keys; recomendamos también usarla par revisar la correcta conexión de nuestro código con eFirma

Account

Para autenticar la llamada a la API contamos con un header personalizado X-eFirma-Auth donde tendrás que especificar tú ID de Usuario y tu Llave de API, los cuales podrás obtener en tu panel de administración en https://efirma.com/panel/api-management, el header debe contener los parámetros en formato JSON:

curl -H 'X-eFirma-Auth:{"uid": "your_uid","key": "your_key"}' \
https://efirma.com/api/account

GET /api/account

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/account"
GET %7B%7Befirma_url%7D%7D/api/account HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "uid": "GUUXXXXXXXXXS04",
    "individualname": "ALAN DAVID",
    "companyname": "EFIRMA PUNTO COM SAPI DE CV",
    "certificate": "00001000000410001409",
    "funds": 0,
    "docsleft": 99999,
    "whitelist": [
        "*"
    ]
}

Documentos

List documents

Permite obtener una lista objectos del tipo Documento a los cuales se tiene acceso.

GET /api/document/get_all

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/document/get_all"
GET %7B%7Befirma_url%7D%7D/api/document/get_all HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
[
    {
        "id": "XXXXXXXXXX",
        "name": "Document 1",
        "createdat": "2020-08-04T02:10:52.607Z",
        "hash": "b9cdafe03253e2d25360547c12e021e90e3e1562cb30baee4e88703bd305b0ee",
        "owner": "test@efirma.com",
        "users": [
            {
                "email": "test@efirma.com",
                "type": "signer",
                "access_token": "XXXXXXXXXX",
                "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXXXXXX&at=XXXXXXXXXX&ae=test@efirma.com"
            }
        ],
        "signatures": [
            {
                "email": "test@efirma.com",
                "name": "ALAN",
                "lname": "GUTIERREZ",
                "signature_type": 1,
                "signed": false
            }
        ],
        "fully_signed": false,
        "original_file": "https://efirma.com/odocument/XXXXXXXXXX?at=XXXXXXXXXX&ut=XXXXXXXXXX&tt=XXXXXXXXXX",
        "evidence_file": "",
        "merged_file": "",
        "signed_file": ""
    },
    {
        "id": "XXXXXXXXXX",
        "name": "Document 2",
        "createdat": "2020-08-04T02:10:31.188Z",
        "hash": "2f295610279183e5388a206a2a2a67ce24971bf732ea5a58cac58fdd64ddbcc5",
        "owner": "test@efirma.com",
        "users": [
            {
                "email": "test@efirma.com",
                "type": "signer",
                "access_token": "XXXXXXXXXX",
                "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXXXXXX&at=XXXXXXXXXX&ae=test@efirma.com"
            }
        ],
        "signatures": [
            {
                "email": "test@efirma.com",
                "name": "ALAN",
                "lname": "GUTIERREZ",
                "signature_type": 1,
                "signed": false
            }
        ],
        "fully_signed": false,
        "original_file": "https://efirma.com/odocument/XXXXXXXXXX?at=XXXXXXXXXX&ut=XXXXXXXXXX&tt=XXXXXXXXXX",
        "evidence_file": "",
        "merged_file": "",
        "signed_file": ""
    },
    {
        "id": "5f28be10aa470052878a7fe6",
        "name": "Documento 3",
        "createdat": "2020-08-04T01:46:56.845Z",
        "hash": "cc8f92183d7b20a46188585dfdf6f28b4208ca402c36ccc4a9f3304ac18c928b",
        "owner": "test@efirma.com",
        "users": [
            {
                "email": "test@efirma.com",
                "type": "signer",
                "access_token": "XXXXXXXXXX",
                "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXXXXXX&at=XXXXXXXXXX&ae=XXXXXXXXXX"
            },
            {
                "email": "test@efirma.com",
                "type": "signer",
                "access_token": "XXXXXXXXXX",
                "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXXXXXX&at=XXXXXXXXXX&ae=XXXXXXXXXX"
            },
            {
                "email": "test@efirma.com",
                "type": "signer",
                "access_token": "XXXXXXXXXX",
                "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXXXXXX&at=XXXXXXXXXX&ae=test@efirma.com"
            },
            {
                "email": "test@efirma.com",
                "type": "observer",
                "access_token": "XXXXXXXXXX",
                "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXXXXXX&at=XXXXXXXXXX&ae=test@efirma.com"
            }
        ],
        "signatures": [
            {
                "email": "test@efirma.com",
                "name": "Alberto",
                "lname": "Leyva",
                "signature_type": 1,
                "signed": false
            },
            {
                "email": "test@efirma.com",
                "name": "Eleonora",
                "lname": "Martinez",
                "signature_type": 1,
                "signed": false
            },
            {
                "email": "test@efirma.com",
                "name": "ALAN",
                "lname": "GUTIERREZ",
                "signature_type": 1,
                "signed": false
            }
        ],
        "fully_signed": false,
        "original_file": "https://efirma.com/odocument/XXXXXXXXXX?at=XXXXXXXXXX&ut=XXXXXXXXXX&tt=XXXXXXXXXX",
        "evidence_file": "",
        "merged_file": "",
        "signed_file": ""
    }
]

Find document by ID

Permite obtener los datos respecto a un documento.

GET /api/document/get/:id

Nombre Tipo de Dato Descripcion
:id String El id único del documento.

Regresará un objeto Documento

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/document/get/:id"
GET %7B%7Befirma_url%7D%7D/api/document/get/:id HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "id": "XXXXXX",
    "name": "Documento",
    "createdat": "2020-05-15T18:40:35.554Z",
    "hash": "66c0fc2bb90ce3565c4cb8a8afdf3bd800323c94d7d3003971cdd7c186985159",
    "owner": "test@efirma.com",
    "users": [
        {
            "email": "test@efirma.com",
            "type": "signer",
            "access_token": "XXXXXX",
            "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXX&at=XXXXXX&ae=test@efirma.com"
        },
        {
            "email": "yyyy@efirma.com",
            "type": "signer",
            "access_token": "XXXXXX",
            "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXX&at=XXXXXX&ae=yyyy@efirma.com"
        },
        {
            "email": "test@efirma.com",
            "type": "signer",
            "access_token": "XXXXXX",
            "iframe_url": "https://efirma.com/frame/verify/doc?doc=XXXXXX&at=XXXXXX&ae=test@efirma.com"
        }
    ],
    "signatures": [
        {
            "email": "test@efirma.com",
            "name": "DAVID",
            "lname": "GUTIERREZ",
            "signature_type": 2,
            "signed": true,
            "signature": "<<BASE64 de la imágen de la firma>>",
            "tsq_file": "https://efirma.com/tsq/XXXXXX",
            "tsr_file": "https://efirma.com/tsr/XXXXXX",
            "ip": "127.0.0.1"
        },
        {
            "email": "yyyy@efirma.com",
            "name": "Alberto",
            "lname": "Leyva",
            "signature_type": 2,
            "signed": true,
            "signature": "<<BASE64 de la imágen de la firma>>",
            "tsq_file": "https://efirma.com/tsq/XXXXXX",
            "tsr_file": "https://efirma.com/tsr/XXXXXX",
            "ip": "127.0.0.1"
        },
        {
            "email": "alanfaz@hotmail.com",
            "name": "Isabel",
            "lname": "Ulloa",
            "signature_type": 2,
            "signed": true,
            "signature": "<<BASE64 de la imágen de la firma>>",
            "tsq_file": "https://efirma.com/tsq/XXXXXX",
            "tsr_file": "https://efirma.com/tsr/XXXXXX",
            "ip": "127.0.0.1"
        }
    ],
    "fully_signed": true,
    "original_file": "https://efirma.com/odocument/XXXXXX?at=XXXXXX&ut=XXXXXX&tt=XXXXXX",
    "evidence_file": "https://efirma.com/sdocument/XXXXXX?at=XXXXXX&ut=XXXXXX&tt=XXXXXX",
    "merged_file": "https://efirma.com/osdocument/XXXXXX?at=XXXXXX&ut=XXXXXX&tt=XXXXXX",
    "signed_file": "https://efirma.com/pkcsdocument/XXXXXX?at=XXXXXX&ut=XXXXXX&tt=XXXXXX"
}

Get Document Signatures

Permite obtener los datos de todas las firmas que aparecen en un documento.

POST /api/document/get_signatures

Nombre Tipo de Dato Descripción
:id String El id único del documento.

Regresará un arreglo de firmantes

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/document/get_signatures" --form 'docid="60X2103cX291cXX8cX8a706X"'
Status 200 OK
[
    {
        "email": "user@domain.com",
        "name": "User Name",
        "lname": "User Lastname",
        "curp": "CURP",
        "svg_signature": "data:image/svg+xml;base64,PHN...2Zz4=",
        "png_signature": "iVBOR...s65S5EZ"
        "ip": "127.0.0.1",
        "signature_type": "firma_autografa",
        "ts": "xxx",
        "tsq": "https://efirma.com/tsq/xxxx",
        "tsr": "https://efirma.com/tsr/xxxx"
    }
]
Status 200 OK
[
    {
        "email": "user@domain.com",
        "name": "User Name",
        "lname": "User Lastname",
        "curp": "CURP",
        "certificado": {
            "CommonName": "",
            "Issuer": "",
            "Country": "",
            "Organization": "",
            "CURP": "",
            "RFC": "",
            "Serial": "",
            "Email": "",
            "NotAfter": "",
            "IsOrg": true/false
        },
        "signature_type": "firma_electronica",
        "ts": "0",
        "tsq": "https://efirma.com/tsq/xxxx",
        "tsr": "https://efirma.com/tsr/xxxx",
        "signature": "b64Signature",
        "algorithm": "sha-x"
    }
]

Create Document

Permite crear/subir un documento a nuestros sistemas para su firmado, el contenido debe venir en un multipart/form-data y los parametros en formato JSON dentro de un campo con nombre “data”.

POST /api/document/

Nombre Tipo de Dato Descripcion
name String El nombre con el cual se creará el documento.
signature_type Int Especifica el tipo de firma electrónica a utilizar dentro del documento. 1 = Firma Electrónica Avanzada, 2 = Firma Autógrafa Digital.
users [ ]Object Una lista de objetos del tipo User de los usuarios que tienen permisos dentro del documento. El usuario que sube el documento se agrega por default como observador, si necesita que el usuario que sube el documento sea firmante, es necesario darlo de alta.
send_mails Bool En caso de ser falso, no se enviarán los correos de invitación a los usuarios del documento.
idcard_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá una identificación anexa para poder ser firmado.
allowed_ids AllowedIds (Opcional) Un arreglo indexado donde el indice representa el nombre de la identificación a aceptar y el valor otorgado al indice representa si es permitido el documento para identificarse al firmar. Por ejemplo: { "idcard" : true, "passport" : false, "fmcard" : true }, los indices permitidos son: idcard, passport, fmcard.
geo_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá obtener la geolocalización del dispositivo para ser firmado.
sms_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá validar el número de celular del firmante. Esta opción solo es válida para documentos que vayan a ser firmados con Firma Autógrafa Digital.
expiry_in Int (Opcional) Plazo para la celebración del contrato, el parametro puede ser entre 1 y 90 días. Valor predefinido de 30 días.
desc String (Opcional) Descripción del documento que se agregará en la nota de invitación enviada a los usuarios por correo electrónico.
callback_url String (Opcional) URL para notificar cuando una acción sea ejercida sobre el documento.
return_url String (Opcional) URL para redirigir al usuario una vez que se firme el documento.
reject_url String (Opcional) URL para redirigir al usuario en caso de que decida rechazar el documento.

Regresa un JSON con el “id” del documento creado

curl -X POST -H "Content-Type: multipart/form-data" -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/document"
POST %7B%7Befirma_url%7D%7D/api/document HTTP/1.1
Host:
Content-Type: multipart/form-data
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "id": "XXXXXXXXX"
}

Delete Document

Permite eliminar un documento previamente subido por el usuario de la API Key

Solo se pueden eliminar documentos que hayan sido creados por el usuario y que no esten firmados.

GET /api/document/delete/:id

Nombre Tipo de Dato Descripcion
id String El identificador unico del documento.

Regresa un JSON un mensaje de error o de éxito.

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/document/delete/:id"
GET %7B%7Befirma_url%7D%7D/api/document/delete/:id HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}

Send Reminder

Permite enviar un recordatorio de firma con acceso al documento, los parametros deben venir en el BODY con un Header del tipo application/json.

POST /api/document/send_reminder/

Nombre Tipo de Dato Descripcion
id String El id único del documento en nuestro sistemas.
user String El correo electrónico del usuario al que se le enviará el recordatorio. El usuario tiene que estar registrado como observador o firmante.
curl -X POST -H "Content-Type: application/json" -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" -d '{
	"id":"XXXXXXXXX",
	"user":"test@efirma.com"
}' "https://efirma.com/api/document/send_reminder/"
POST %7B%7Befirma_url%7D%7D/api/document/send_reminder/ HTTP/1.1
Host:
Content-Type: application/json
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}

{
	"id":"XXXXXXXXX",
	"user":"test@efirma.com"
}
Status 400 Bad Request
{
    "message": "Can't send a reminder to yourself",
    "status": "error"
}
Status 200 OK
{
    "status": "success"
}
Status 404 Not Found
{
    "message": "Document does't exist",
    "status": "error"
}

IFrames

La API de eFirma permitirá a sus usuarios mostrar los documentos a firmar dentro de sus propias páginas web a travez de iframes.

*Por seguridad de los firmantes, antes de mostrar el documento se enviará un correo electrónico para confirmar al usuario.

Mostrar un documento dentro de un iFrame

Para mostrar un documento en un iframe, sera necesario obtener el iframe_url, de nuestras llamadas de API.

Una vez que se tenga el url del usuario seleccionado, debera importar en su pagina, el SDK de Javascript alojado SDK de Javascript alojado en su HTML e inicializarlo de la siguiente manera:

En el cuerpo de la pagina, debera renderizarse un boton que mande a llamar al metodo openWindow() del SDK EfirmaTools; asimismo, debera existir un <div> vacio para que el SDK lo tome como su contenedor.

<html>
	<head>
		<script src='https://efirma.com/pub/js/efirmaTools.js'/>
		<script>
			let frameId = 'theframe'; // Se define en el HTML mas adelante
			let iframeUrl = 'https://efirma.com/frame/verify/doc?doc=<<ID DOCUMENTO>>&at=<<CODIGO DE ACCESO>>&ae=<<EMAIL USUARIO>>'; //Lo obtendras de las llamadas API
			var efirmaTools = new EfirmaTools(frameId, iframeUrl);
		</script>
	</head>

	<body>
		<button onclick="efirmaTools.openWindow()">Text</button> <!--Aqui se asigna la accion al boton-->
		<div id="theframe" style="height: 1000px;"></div>
	</body>
</html>

							

Plantillas

Get HTML Template by ID

Permite obtener los datos de una plantilla.

GET /api/template/get/:id

Regresará un objeto Plantilla

curl -X GET -H "X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}" "https://efirma.com/api/template/get/:id"
GET %7B%7Befirma_url%7D%7D/api/template/get/:id HTTP/1.1
	Host:
	X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}
Status 200 OK
{
"id": "XXXXXXXX",
"ref": "Demo Plantilla",
"custom_fields": [
	{
		"name": "campo_opcion_mulitple",
		"fname": "¿Cual es la pregunta a contestar con opción múltiple?",
		"type": "multiple",
		"Choices": [
			"Opción 1",
			"Opción 2",
			"Opción 3",
			"Opción 4"
		]
	},
	{
		"name": "campo_texto",
		"fname": "¿Que quieres mostrar en la forma de llenado de plantilla?",
		"type": "string",
		"Choices": null
	}
],
"autosigner": []
	}

List HTML Templates

Permite obtener una lista de objectos del tipo Plantilla a las cuales tienes acceso en la cuenta.

GET /api/template/get_all

curl -X GET -H "X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}" "https://efirma.com/api/template/get_all"
GET %7B%7Befirma_url%7D%7D/api/template/get_all HTTP/1.1
	Host:
	X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}
Status 200 OK
[
{
	"id": "5dd8b9xxxxxxxx69f76",
	"ref": "Hello World",
	"custom_fields": [
		{
			"name": "test",
			"fname": "test",
			"type": "string"
		},
		{
			"name": "newtest",
			"fname": "New Test",
			"type": "string"
		}
	]
},
{
	"id": "5dd8b957xxxxxxxxxxd12",
	"ref": "Hello World 2",
	"custom_fields": [
		{
			"name": "test",
			"fname": "test",
			"type": "string"
		},
		{
			"name": "newtest",
			"fname": "New Test",
			"type": "string"
		}
	]
}
	]

Create Doc from HTML Template

Permite generar un documento PDF en nuestros sistemas para su firmado, los parametros deben venir en el BODY con un Header del tipo application/json.

POST /api/template

Nombre Tipo de Dato Descripcion
id String El identificador de la plantilla que se utilizará para generar el documento.
title String El nombre con el cual se creará el documento.
desc String Descripción del documento que se agregará en la nota de invitación enviada a los usuarios por correo electrónico.
signature_type Int Especifica el tipo de firma electrónica a utilizar dentro del documento. 1 = Firma Electrónica Avanzada, 2 = Firma Autógrafa Digital.
users [ ]Users Una lista de objetos del tipo User de los usuarios que tienen permisos dentro del documento.
send_mails Bool En caso de ser falso, no se enviarán los correos de invitación a los usuarios del documento.
idcard_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá una identificación anexa para poder ser firmado.
allowed_ids AllowedIds (Opcional) Un arreglo indexado donde el indice representa el nombre de la identificación a aceptar y el valor otorgado al indice representa si es permitido el documento para identificarse al firmar. Por ejemplo: { "idcard" : true, "passport" : false, "fmcard" : true }, los indices permitidos son: idcard, passport, fmcard.
geo_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá obtener la geolocalización del dispositivo para ser firmado.
sms_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá validar el número de celular del firmante. Esta opción solo es válida para documentos que vayan a ser firmados con Firma Autógrafa Digital.
expiry_in Int (Opcional) Plazo para la celebración del contrato, el parametro puede ser entre 1 y 90 días. Valor predefinido de 30 días.
callback_url String (Opcional) URL para notificar cuando una acción sea ejercida sobre el documento.
return_url String (Opcional) URL para redirigir al usuario una vez que se firme el documento.
reject_url String Opcional) URL para redirigir al usuario en caso de que decida rechazar el documento.
custom_fields JSONObject Un objeto JSON formado de la siguiente manera {"<<NOMBRE DE VARIABLE STRING>>":"Texto a llenar","<<NOMBRE DE VARIABLE MULTIPLE>>":"<< NUMERO DE RESPUESTA >>"}
curl -X POST -H "Content-Type: application/json" -H "Accept-Encoding: application/json" -H "X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}" -d '{
"id": "XXXXXXXXX",
"title": "Documento 1",
"desc": "This is a test made thru the API to check on the template creation",
"users": [
	{
		"email": "usuario@correo.com",
		"type": "signer"
	}
],
"custom_fields":
	{
		"string_test":"David Gutierrez",
		"test_multiple":"1,2"
	}
,
"send_mails": false,
"signature_type": 2,
"idcard_required": true,
"geo_required": false,
"sms_required": false,
"allowed_ids": {
	"idcard": true,
	"passport": false,
	"fmcard": true
},
"callback_url": "https://callback.example.com",
"return_url": "https://example.com",
"reject_url": "https://example.com/reject",
"expiry_in": 30
}' "https://efirma.com/api/template/"
POST %7B%7Befirma_url%7D%7D/api/template/ HTTP/1.1
Host:
Content-Type: application/json
Accept-Encoding: application/json
X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}

{
	"id": "XXXXXXXXX",
	"title": "Documento 1",
	"desc": "This is a test made thru the API to check on the template creation",
	"users": [
		{
			"email": "usuario@correo.com",
			"type": "signer"
		}
	],
	"custom_fields":
		{
			"string_test":"David Gutierrez",
			"test_multiple":"1,2"
		}
	,
	"send_mails": false,
	"signature_type": 2,
	"idcard_required": true,
	"geo_required": false,
	"sms_required": false,
	"allowed_ids": {
		"idcard": true,
		"passport": false,
		"fmcard": true
	},
	"callback_url": "https://callback.example.com",
	"return_url": "https://example.com",
	"reject_url": "https://example.com/reject",
	"expiry_in": 30
}
Status 400 Bad Request
{
		"message": "The API User does not have a specified role in the document",
		"status": "error"
	}
Status 200 OK
{
		"id": "5e41dd35aa4xxxxx10db52f7"
	}

Upload PDFTemplate

Permite crear/subir un documento a nuestros sistemas para su firmado, el contenido debe venir en un multipart/form-data y los parametros en formato JSON dentro de un campo con nombre “data”.

POST /api/document/

Nombre Tipo de Dato Descripcion
name String El nombre con el cual se creará el documento.
auto_signers []Auto_Signers Especifica un arreglo de autofirmantes [{"email":"example@example.com"},{"email":"example2@example.com"}]

Regresa un JSON con el “id” del documento creado

curl -X POST -H "Content-Type: multipart/form-data" -H "X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}" "https://efirma.com/api/pdftemplate"
POST %7B%7Befirma_url%7D%7D/api/pdftemplate HTTP/1.1
	Host:
	Content-Type: multipart/form-data
	X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}
Status 200 OK
{
	"id": "xxxxxxxxxxxx",
	"title": "API Template Title",
	"custom_fields": [
		{
			"name": "num_clie",
			"fname": "num_clie",
			"type": "string"
		},
		{
			"name": "tip_clie",
			"fname": "tip_clie",
			"type": "string"
		},
		{
			"name": "tip_prod",
			"fname": "tip_prod",
			"type": "string"
		},
		{
			"name": "pf_pm",
			"fname": "pf_pm",
			"type": "string"
		},
		{
			"name": "num_cod_copp",
			"fname": "num_cod_copp",
			"type": "string"
		},
		{
			"name": "raz_soc",
			"fname": "raz_soc",
			"type": "string"
		},
		{
			"name": "rfc",
			"fname": "rfc",
			"type": "string"
		},
		{
			"name": "dom_fisc_col",
			"fname": "dom_fisc_col",
			"type": "string"
		},
		{
			"name": "dom_fis_calle_y_num",
			"fname": "dom_fis_calle_y_num",
			"type": "string"
		},
		{
			"name": "dom_fisc_cp",
			"fname": "dom_fisc_cp",
			"type": "string"
		},
		{
			"name": "dom_fisc_ef",
			"fname": "dom_fisc_ef",
			"type": "string"
		},
		{
			"name": "dom_fisc_mun",
			"fname": "dom_fisc_mun",
			"type": "string"
		},
		{
			"name": "tel",
			"fname": "tel",
			"type": "string"
		},
		{
			"name": "num_esc_pub",
			"fname": "num_esc_pub",
			"type": "string"
		},
		{
			"name": "num_ntaria",
			"fname": "num_ntaria",
			"type": "string"
		},
		{
			"name": "rppyc",
			"fname": "rppyc",
			"type": "string"
		},
		{
			"name": "fech_const",
			"fname": "fech_const",
			"type": "string"
		},
		{
			"name": "fecha_rppyc",
			"fname": "fecha_rppyc",
			"type": "string"
		},
		{
			"name": "nom_rl",
			"fname": "nom_rl",
			"type": "string"
		},
		{
			"name": "poder_rl",
			"fname": "poder_rl",
			"type": "string"
		},
		{
			"name": "num_not_rl",
			"fname": "num_not_rl",
			"type": "string"
		},
		{
			"name": "fecha_rl",
			"fname": "fecha_rl",
			"type": "string"
		},
		{
			"name": "nom_not_pub",
			"fname": "nom_not_pub",
			"type": "string"
		},
		{
			"name": "com_cli_1",
			"fname": "com_cli_1",
			"type": "string"
		},
		{
			"name": "com_cli_2",
			"fname": "com_cli_2",
			"type": "string"
		},
		{
			"name": "com_cli_3",
			"fname": "com_cli_3",
			"type": "string"
		},
		{
			"name": "com_cli_4",
			"fname": "com_cli_4",
			"type": "string"
		},
		{
			"name": "com_cli_5",
			"fname": "com_cli_5",
			"type": "string"
		},
		{
			"name": "cost_lic_intg1",
			"fname": "cost_lic_intg1",
			"type": "string"
		},
		{
			"name": "cost_lic_intg2",
			"fname": "cost_lic_intg2",
			"type": "string"
		},
		{
			"name": "per_lic_intg1",
			"fname": "per_lic_intg1",
			"type": "string"
		}
	],
	"auto_signers": [
		{
			"Id": "xxxxxxxxxxxxxxxxxxxx",
			"email": "test@efirma.com",
			"SignatureId": ""
		},
		{
			"Id": "xxxxxxxxxxxxxxxxxxxx",
			"email": "test@efirma.com",
			"SignatureId": ""
		}
	]
}

Fill PDFTemplate

Permite generar un documento PDF a partir de una plantilla PDF para su firmado, los parametros deben venir en el BODY con un Header del tipo application/json.

POST /api/pdftemplate/fill

Nombre Tipo de Dato Descripcion
id String El identificador de la plantilla que se utilizará para generar el documento.
title String El nombre con el cual se creará el documento.
desc String Descripción del documento que se agregará en la nota de invitación enviada a los usuarios por correo electrónico.
signature_type Int Especifica el tipo de firma electrónica a utilizar dentro del documento. 1 = Firma Electrónica Avanzada, 2 = Firma Autógrafa Digital.
users [ ]Users Una lista de objetos del tipo User de los usuarios que tienen permisos dentro del documento.
send_mails Bool En caso de ser falso, no se enviarán los correos de invitación a los usuarios del documento.
idcard_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá una identificación anexa para poder ser firmado.
allowed_ids AllowedIds (Opcional) Un arreglo indexado donde el indice representa el nombre de la identificación a aceptar y el valor otorgado al indice representa si es permitido el documento para identificarse al firmar. Por ejemplo: { "idcard" : true, "passport" : false, "fmcard" : true }, los indices permitidos son: idcard, passport, fmcard.
geo_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá obtener la geolocalización del dispositivo para ser firmado.
sms_required Bool (Opcional) En caso de ser verdadero, el documento generado requerirá validar el número de celular del firmante. Esta opción solo es válida para documentos que vayan a ser firmados con Firma Autógrafa Digital.
expiry_in Int (Opcional) Plazo para la celebración del contrato, el parametro puede ser entre 1 y 90 días. Valor predefinido de 30 días.
callback_url String (Opcional) URL para notificar cuando una acción sea ejercida sobre el documento.
return_url String (Opcional) URL para redirigir al usuario una vez que se firme el documento.
reject_url String Opcional) URL para redirigir al usuario en caso de que decida rechazar el documento.
custom_fields JSONObject Un objeto JSON formado de la siguiente manera {"<<NOMBRE DE VARIABLE STRING>>":"Texto a llenar","<<NOMBRE DE VARIABLE MULTIPLE>>":"<< NUMERO DE RESPUESTA >>"}
curl -X POST -H "Content-Type: application/json" -H "Accept-Encoding: application/json" -H "X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}" -d '{
		"id": "xxxxxxxxxxxx",
		"title": "Documento",
		"desc": "This is a test made thru the API to check on the template creation",
		"users": [
			{
				"email": "usuario@correo.com",
				"type": "signer"
			}
		],
		"custom_fields":
			{
			   "num_clie":"test",
					"tip_clie":"test",
					"tip_prod":"test",
					"pf_pm":"test",
					"num_cod_copp":"test",
					"raz_soc":"test",
					"rfc":"test",
					"dom_fisc_col":"test",
					"dom_fis_calle_y_num":"test",
					"dom_fisc_cp":"test",
					"dom_fisc_ef":"test",
					"dom_fisc_mun":"test",
					"tel":"test",
					"num_esc_pub":"test",
					"num_ntaria":"test",
					"rppyc":"test",
					"fech_const":"test",
					"fecha_rppyc":"test",
					"nom_rl":"test",
					"poder_rl":"test",
					"num_not_rl":"test",
					"fecha_rl":"test",
					"nom_not_pub":"test",
					"com_cli_1":"test",
					"com_cli_2":"test",
					"com_cli_3":"test",
					"com_cli_4":"test",
					"com_cli_5":"test",
					"cost_lic_intg1":"test",
					"cost_lic_intg2":"test",
					"per_lic_intg1":"test"
			}
		,
		"send_mails": false,
		"signature_type": 2,
		"idcard_required": false,
		"geo_required": false,
		"sms_required": false,
		"allowed_ids": {
			"idcard": false,
			"passport": false,
			"fmcard": false
		},
		"callback_url": "https://callback.example.com",
		"return_url": "https://example.com",
		"reject_url": "https://example.com/reject",
		"expiry_in": 30
	}' "https://efirma.com/api/pdftemplate/fill"
POST %7B%7Befirma_url%7D%7D/api/pdftemplate/fill HTTP/1.1
	Host:
	Content-Type: application/json
	Accept-Encoding: application/json
	X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}

	{
		"id": "xxxxxxxxxxxx",
		"title": "Documento",
		"desc": "This is a test made thru the API to check on the template creation",
		"users": [
			{
				"email": "usuario@correo.com",
				"type": "signer"
			}
		],
		"custom_fields":
			{
			   "num_clie":"test",
					"tip_clie":"test",
					"tip_prod":"test",
					"pf_pm":"test",
					"num_cod_copp":"test",
					"raz_soc":"test",
					"rfc":"test",
					"dom_fisc_col":"test",
					"dom_fis_calle_y_num":"test",
					"dom_fisc_cp":"test",
					"dom_fisc_ef":"test",
					"dom_fisc_mun":"test",
					"tel":"test",
					"num_esc_pub":"test",
					"num_ntaria":"test",
					"rppyc":"test",
					"fech_const":"test",
					"fecha_rppyc":"test",
					"nom_rl":"test",
					"poder_rl":"test",
					"num_not_rl":"test",
					"fecha_rl":"test",
					"nom_not_pub":"test",
					"com_cli_1":"test",
					"com_cli_2":"test",
					"com_cli_3":"test",
					"com_cli_4":"test",
					"com_cli_5":"test",
					"cost_lic_intg1":"test",
					"cost_lic_intg2":"test",
					"per_lic_intg1":"test"
			}
		,
		"send_mails": false,
		"signature_type": 2,
		"idcard_required": false,
		"geo_required": false,
		"sms_required": false,
		"allowed_ids": {
			"idcard": false,
			"passport": false,
			"fmcard": false
		},
		"callback_url": "https://callback.example.com",
		"return_url": "https://example.com",
		"reject_url": "https://example.com/reject",
		"expiry_in": 30
	}
Status 200 OK
{
		"id": "xxxxxxxxxxxx",
		"users": [
			{
				"email": "test@efirma.com",
				"iframe_url": "https://efirma.com/frame/verify/doc?doc=xxxxxxxx&at=xxxxxxxxxxxx&ae=xxxxxxxxxxxx",
				"token": "xxxx-xxxx",
				"type": "signer"
			}
		]
	}

Get PDF Template by ID

Permite obtener los datos de una plantilla.

GET /api/pdftemplate/get/:id

Regresará un objeto Plantilla

curl -X GET -H "X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}" "https://efirma.com/api/pdftemplate/get/:id"
GET %7B%7Befirma_url%7D%7D/api/pdftemplate/get/:id HTTP/1.1
	Host:
	X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}

List PDF Templates

Permite obtener una lista de objectos del tipo Plantilla a las cuales tienes acceso en la cuenta.

GET /api/template/get_all

curl -X GET -H "X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}" "https://efirma.com/api/pdftemplate/get_all"
GET %7B%7Befirma_url%7D%7D/api/pdftemplate/get_all HTTP/1.1
	Host:
	X-eFirma-Auth: {"uid":"SU USER ID OBTENIDO DE LA PLATAFORMA","key":"SU API KEY DE LA PLATAFORMA"}

KYC [ PRO ]

Si le interesa obtener la licencia KYC, porfavor comuniquese con un vendedor.

Find KYC Request by ID

Nos permitirá encontrar una forma KYC y obtener toda la información.

GET /api/kyc/request/:id

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/kyc/request/:id"
GET %7B%7Befirma_url%7D%7D/api/kyc/request/:id HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "formfill_link": "https://efirma.com/panel/kyc-form?r=XXXXXX&at=XXXXXX&ae=person@email.com",
    "documents_download_link": "https://efirma.com/kyc-documents/XXXXXX",
    "download_pdf_report": "https://efirma.com/kyc-report/XXXXXX",
    "kyc-request": {
        "Id": "XXXXXX",
        "RequesterId": "XXXXXX",
        "OrganizationRequesterId": "XXXXXX",
        "RequestedId": "XXXXXX",
        "Type": "p",
        "Filler": "requested",
        "Requirements": {
            "idcard": true,
            "esignature": true
        },
        "OpenEmail": {
            "Notified": "0001-01-01T00:00:00Z",
            "Timestamp": "0001-01-01T00:00:00Z"
        },
        "LastOpen": "2020-04-27T22:12:02.358Z",
        "TrackIPs": [
            {
                "IPInfo": "XXXXXX",
                "TimeStamp": "2020-04-27T22:12:02.358Z"
            }
        ],
        "Description": "Invitacion llenado de documentos KYC por API",
        "Documents": {
            "IdCard": "XXXXXX",
            "Passport": "",
            "FMCard": "",
            "BirthCertificate": "",
            "TaxId": "",
            "IncLetter": "",
            "Address": "",
            "ProCard": "",
            "DigitalSignature": "",
            "ElectronicSignature": "",
            "VideoProof": ""
        },
        "Report": {
            "individual": {
                "name": "Isabel",
                "lname": "Ulloa",
                "fname": "Isabel Ulloa",
                "uid": "XUXIXXXXXXS04",
                "taxid": "GUUIXXXXXXF0",
                "birth_year": "70",
                "birth_month": "01",
                "birth_day": "01",
                "sex": "F",
                "nationality": "MEX",
                "addresses": [
                    {
                        "street": "XXXXXX",
                        "number": "",
                        "interior_number": "",
                        "colony": "XXXXXX",
                        "municipality": "XXXXXX",
                        "state": "XXXXXX",
                        "zip": "XXXXXX"
                    }
                ],
                "emails": [
                    "test@efirma.com"
                ],
                "father": {},
                "mother": {},
                "cedulas": [
                    {
                        "anioreg": 1987,
                        "desins": "UNIVERSIDAD DE XXXXXX",
                        "idCedula": "1XXXXXX2",
                        "titulo": "LICENCIATURA EN DERECHO"
                    }
                ]
            }
        },
        "CallbackUrl": "https://callback.exmaple.com/post",
        "ReturnUrl": "http://yourcompany.com"
    }
}

Download Report Documents

Nos permitirá descargar los documentos de el KYC.

GET /api/kyc/download/:id

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/kyc/download/:id"
GET %7B%7Befirma_url%7D%7D/api/kyc/download/:id HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK

Validate RFC

RFC: Para la validación por RFC se hace una consulta directa a la base de datos de Secretaría de Hacienda y Crédito Público, existen diferentes métodos utilizados los cuales pueden ser:
1. Con certificados expedidos para ver si la persona se encuentra registrada para emitir facturas.
2. Utilizando la cédula fiscal o comparando con listas emitidas por la secretaría para consultas públicas.

GET /api/validate/rfc/:rfc

Regresara:

Nombre Tipo de Dato Descripcion
valid Bool Estatus del RFC ante la Secretaría de Hacienda y Crédito Público
organization Organizacion Datos de la organización
curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/validate/rfc/:rfc"
GET %7B%7Befirma_url%7D%7D/api/validate/rfc/:rfc HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "valid": true,
    "organization": {
        "names": [
            "EFIRMA PUNTO COM S A P I DE CV"
        ],
        "rfc": "EPC180509TV5",
        "active_esignature": true,
        "certificates": [
            {
                "owner": "LEVJXXXXXXXZN06",
                "serial": "00001000000411050484",
                "active": true
            }
        ]
    }
}

Validate RFC Format

RFC: Para la validación por RFC se hace una consulta directa a la base de datos de Secretaría de Hacienda y Crédito Público, existen diferentes métodos utilizados los cuales pueden ser:
1. Con certificados expedidos para ver si la persona se encuentra registrada para emitir facturas.
2. Utilizando la cédula fiscal o comparando con listas emitidas por la secretaría para consultas públicas.

GET /api/validate/rfc-format/:rfc

Regresara:

Nombre Tipo de Dato Descripcion
valid Bool Nos indicará si el RFC cumple con el formato de formación de un RFC.
organization Organizacion Datos de la organización solo en caso de que existan.
message String Un mensaje sobre el RFC.
curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/validate/rfc-format/:rfc"
GET %7B%7Befirma_url%7D%7D/api/validate/rfc-format/:rfc HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "valid": false,
    "message": "No se encontraron certificados ligados a este RFC, la composición del RFC es inválida"
}
Status 200 OK
{
    "valid": true,
    "organization": {
        "names": null,
        "rfc": "AEO900157LA4",
        "active_esignature": false,
        "certificates": null
    },
    "message": "No se encontraron certificados ligados a este RFC, la composición del RFC es válida"
}
Status 200 OK
{
    "valid": true,
    "organization": {
        "names": [
            "EFIRMA PUNTO COM S A P I DE CV"
        ],
        "rfc": "EPC180509TV5",
        "active_esignature": true,
        "certificates": [
            {
                "owner": "LEVJ900205HBCXZN06",
                "serial": "00001000000411050484",
                "active": true
            }
        ]
    }
}

Validate CURP

CURP: Para la validación por CURP se hace en distintos pasos, el cual contempla:
1. Verificación de los códigos y estándares de emisión conforme a la normativa mexicana de asignación de Clave Única de Registro de Población.
2. Verificación ante Registro Civil para validar que se encuentra registrado con un Acta de Nacimiento ante el estado correspondiente.

GET /api/validate/curp/:curp

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/validate/curp/:curp"
GET %7B%7Befirma_url%7D%7D/api/validate/curp/:curp HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "valid": false,
    "person": {
        "name": "",
        "parsed_name": {
            "first_name": "",
            "middle_name": "",
            "last_name_1": "",
            "last_name_2": ""
        },
        "curp": "",
        "birthyear": "",
        "birthmonth": "",
        "birthday": "",
        "gender": "",
        "nationality": "",
        "state": "",
        "rfc": "",
        "active_esignature": false,
        "certificates": null
    },
    "message": "No hay un acta de nacimiento asociada a la CURP capturada. Por favor verifica que hayas ingresado el dato correctamente o comunícate a nuestro centro de atención."
}
Status 200 OK
{
    "valid": true,
    "person": {
        "name": "",
        "parsed_name": {
            "first_name": "",
            "middle_name": "",
            "last_name_1": "",
            "last_name_2": ""
        },
        "curp": "BURA031029HOCSBNA4",
        "birthyear": "03",
        "birthmonth": "10",
        "birthday": "29",
        "gender": "M",
        "nationality": "MX",
        "state": "OAXACA",
        "rfc": "",
        "active_esignature": false,
        "certificates": null
    }
}

Create a KYC Request

POST /api/kyc/request

curl -X POST -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" -d '{
   "type":"p",
   "filler":"requested",
   "requested":"test@efirma.com",
   "description":"Invitacion llenado de documentos KYC por API",
   "callback_url":"https://example.com/post",
   "return_url":"http://example.com",
   "requirements":{
   		"idcard":true,
		"passport":false,
		"fmcard":false,
		"birthcert":false,
		"taxid":false,
		"incletter":false,
		"address":false,
		"procard":false,
		"dsignature":false,
		"esignature":true,
		"videoproof":false
   }
}' "https://efirma.com/api/kyc/request"
POST %7B%7Befirma_url%7D%7D/api/kyc/request HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}

{
   "type":"p",
   "filler":"requested",
   "requested":"test@efirma.com",
   "description":"Invitacion llenado de documentos KYC por API",
   "callback_url":"https://example.com/post",
   "return_url":"http://example.com",
   "requirements":{
   		"idcard":true,
		"passport":false,
		"fmcard":false,
		"birthcert":false,
		"taxid":false,
		"incletter":false,
		"address":false,
		"procard":false,
		"dsignature":false,
		"esignature":true,
		"videoproof":false
   }
}

Validate email

Nos permite corroborar la veracidad de una cuenta de correo electrónico. Se envía:

Nombre Tipo de Dato Descripcion
email String La cuenta de email a consultar.

Regresa:

Nombre Tipo de Dato Descripcion
valid Bool Indica si fue posible contactar al correo para verificar que exista.
generic Bool Indica si es un correo genérico. ej: Gmail, Hotmail, Outlook
email String El email consultado.

POST /api/validate/email

curl -X POST -H "Content-Type: application/json" -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" -d '{"email" : "test@efirma.com"}' "https://efirma.com/api/validate/email"
POST %7B%7Befirma_url%7D%7D/api/validate/email HTTP/1.1
Host:
Content-Type: application/json
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}

{"email" : "test@efirma.com"}
Status 200 OK
{
    "valid": true,
    "email": "soporte@efirma.com"
}
Status 200 OK
{
    "valid": true,
    "generic": true,
    "email": "juanperez@gmail.com"
}
Status 200 OK
{
    "valid": false,
    "message": "Address does not exists in hostname or is unreachable.",
    "email": "gilberto.guerrero80@hotmail.com"
}

Validate Inc Letter

Utilizando algoritmos de reconocimiento de imagen y extracción de datos podemos obtener los datos por separado de:
1. Razón Social
2. Número de Acta
3. Fedatario Público (Notario o Corredor) que escrituró con:
    - Estado del fedatario
    - Municipio del fedatario
    - Número de registro del fedatario
    - Nombre del fedatario
    - Sitio web registrado ante hacienda
    - Dirección de notaría o correduría
    - Teléfonos de contacto
    - Emails de contacto
    - Estado de actividad
4. Participantes en el capital social con su:
    - Razón Social
    - RFC
    - Participación en porcentaje
    - En caso de ser una persona moral adicionalmente:
        * Nombre del representante legal
        * CURP del representante legal
        * RFC del representante legal
    - En caso de ser una persona física adicionalmente:
        * CURP

Posteriormente se hace una consulta con el RPC/SIGER para cotejar la información en el documento y obtener la información que se encuentre dentro de la base de datos de RPC para anexar al expediente organizacional.

El cuerpo del menaje debe contener:

Nombre Tipo de Dato Descripcion
Multipart/Form Multipart/Form El documento PDF del Acta Constitutiva
data String Json con el siguiente formato: {"callback_url":"<< ENDPOINT DONDE ENTREGAR LA INFORMACION >>"

La respuesta generada por este metodo no sera inmediata por lo que se le solicitara un endpoint/webhook/callback a donde enviarle la informacion procesada.

Se enviará la informacion al callback que se especifique en el cuerpo del request

{
    "id":"5e3222eaaa4700975a426dfe",
    "lname":"",
    "inc_number":0,
    "Nationality":"",
    "share_capital":0,
    "individuals":null,
    "notary":{
        "type":"",
        "state":"",
        "municipality":"",
        "number":0,
        "name":"",
        "phones":null,
        "emails":null
    },
    "status":"rejected",
    "reason":"Algunas secciones no son legibles"
}

POST /api/incletter

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/incletter"
POST %7B%7Befirma_url%7D%7D/api/incletter HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "id": "5e3222eaaa4700975a426dfe",
    "status": "success"
}

Verify ID Card

Documento de identidad expedido por el Instituto Nacional/Federal Electoral (INE/IFE):

Utilizando algoritmos de reconocimiento de imagen y extracción de datos podemos obtener los datos por separado de:
1. Nombre
2. Apellidos
3. CURP
4. Fecha de Nacimiento
5. Clave de Elector
6. Folio de identificación
7. Dirección
8. Estado
9. Municipio
10. Localidad Electoral
11. Sección Electoral
12. Fecha de Emisión de la identificación.
13. Fecha de Vigencia de la identificación.

El cuerpo del menaje debe contener:

Nombre Tipo de Dato Descripcion
Multipart/Form Multipart/Form El documento JPG o PNG del documento de identidad (MAX 3MB)

POST /api/idcard/verify

curl -X POST -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/idcard/verify"
POST %7B%7Befirma_url%7D%7D/api/idcard/verify HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
{
    "id": "5e3225a6aa4700975a426e02",
    "v": false,
    "MRPZData": {
        "IdCardType": "",
        "CIC": "",
        "IdCardFolium": "",
        "Name": "",
        "Nationality": "",
        "OptCode": "",
        "Birth": "",
        "Sex": "",
        "Expiration": ""
    },
    "c": "FARC61XX01HSRZXX04",
    "ce": "FZRVCRX1030XX6H600",
    "Name": "Carlos Rxxxx",
    "Lname": "Fxx Rxxxxs",
    "Address": "RTNO XXXX 14, RDCIAL CASA XXX, HERMOSILLO, SON.",
    "ParsedAddress": {
        "street": "RTNO XXXX 14",
        "number": "",
        "interior_number": "",
        "colony": "RDCIAL CASA XXX",
        "municipality": "HERMOSILLO",
        "state": "SONORA",
        "zip": "XXXX"
    },
    "Estado": "26",
    "Municipio": "049",
    "Localidad": "0001",
    "Seccion": "0499",
    "Emision": "2019",
    "Vigencia": "2029",
    "d": "",
    "classification": "idcard_front"
}
Status 200 OK
{
    "id": "5e322665aa4700975a426e04",
    "v": false,
    "MRPZ": [
        "IDMEX1XXXXXXXX0<<0XXXXX06XXX4",
        "6103017XXX29XXXXXMEX<03<<07674<4",
        "XXX<XXXX<<CARLOS<XXXXX<<<<<"
    ],
    "MRPZData": {
        "IdCardType": "IDMEX",
        "CIC": "1XXXXXXX0",
        "IdCardFolium": "0XXXXXXXX4",
        "Name": "",
        "Nationality": "MEX",
        "OptCode": "<03<<07674<",
        "Birth": "610301",
        "Sex": "H",
        "Expiration": "291231"
    },
    "c": "",
    "ce": "",
    "Folio": "0XXXXXX4",
    "CIC": "18XXXXXX0",
    "ParsedAddress": {
        "street": "",
        "number": "",
        "interior_number": "",
        "colony": "",
        "municipality": "",
        "state": "",
        "zip": ""
    },
    "d": "",
    "classification": "idcard_back"
}
Status 402 Payment Required
{
    "message": "No fué posible extraer los datos de la parte inferior de la credencial, reajusta el marco de la imagen.",
    "status": "error"
}
Status 402 Payment Required
{
    "message": "Error clasificando documento, intenta con una imagen de mejor calidad, nítida, sin flash, brillos o reflejos.",
    "status": "error"
}

Verify Cedula Fiscal

Utilizando algoritmos de reconocimiento de imagen y extracción de datos podemos obtener los datos por separado de:

  1. Nombre
  2. CURP
  3. RFC
  4. Status
  5. Email
  6. Regimen
  7. Direccioón
  8. URL del SAT

El cuerpo del menaje debe contener:

Nombre Tipo de Dato Descripcion
Multipart/Form Multipart/Form El documento JPG o PNG de la cédula fiscal (MAX 1MB)

POST /api/taxidletter

curl -X POST -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/taxidletter"
POST %7B%7Befirma_url%7D%7D/api/taxidletter HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 402 Payment Required
{
    "name": "XXXXXXXXX",
    "curp": "",
    "rfc": "XXXXXXXXX",
    "status": "XXXXXXXXX",
    "email": "XXXXXtest@efirma.com",
    "class": "XXXXXXXXX",
    "address": {
        "street": "XXXXXXXXX",
        "number": "XXXXXXXXX",
        "interior_number": "",
        "colony": "XXXXXXXXX XXXXXXXXX",
        "municipality": "XXXXXXXXX",
        "state": "XXXXXXXXX",
        "zip": "XXXXXXXXX"
    },
    "sat_url": "https://siat.sat.gob.mx/a/XXXXXXXXX"
}

Validate Address

Utilizando algoritmos de reconocimiento de imagen y extracción de datos podemos obtener los datos de un comprobante de COMISION FEDERAL DE ELECTRICIDAD CFE:

La respuesta generada por este metodo no será inmediata por lo que se le solicitara un endpoint/webhook/callback a donde enviarle la informacion procesada.

  1. Calle
  2. Número externo
  3. Número interno
  4. Colonia
  5. Municipio
  6. Estado
  7. Código Postal
  8. Identificador de Medidor
  9. Número de Contrato

El cuerpo del menaje debe contener:

Nombre Tipo de Dato Descripcion
Multipart/Form Multipart/Form El documento PDF, JPG o PNG del comprobante de domicilio. (MAX 3MB)
data String Json con el siguiente formato: {"callback_url":"<< ENDPOINT DONDE ENTREGAR LA INFORMACION >>"

POST /api/kyc/upload-address-voucher

curl -X POST -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/kyc/upload-address-voucher"
POST %7B%7Befirma_url%7D%7D/api/kyc/upload-address-voucher HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 400 Bad Request
{
    "address_voucher": {
        "address_data": {
            "street": "",
            "number": "",
            "interior_number": "",
            "colony": "",
            "municipality": "",
            "state": "",
            "zip": ""
        },
        "date_time": "0001-01-01T00:00:00Z",
        "reason": "razon de rechazo",
        "id": ""
    },
    "verified": true,
    "status": "Rejected",
    "reason": "razon de rechazo"
}
	

Get KYC Requests

Listado de todos las solicitudes de KYC.

GET /api/kyc/requests/

curl -X GET -H "X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}" "https://efirma.com/api/kyc/requests/"
GET %7B%7Befirma_url%7D%7D/api/kyc/requests/ HTTP/1.1
Host:
X-eFirma-Auth: {"uid":"UID_EFIRMA","key":"KEY_EFIRMA"}
Status 200 OK
[
    {
        "index": 0,
        "formfill_link": "https://efirma.com/panel/kyc-form?r=XXXXXXXXX&at=XXXXXXXXX&ae=test@efirma.com",
        "documents_download_link": "https://efirma.com/kyc-documents/XXXXXXXXX3",
        "download_pdf_report": "https://efirma.com/kyc-report/XXXXXXXXX",
        "kyc-request": {
            "Id": "XXXXXXXXX",
            "RequesterId": "XXXXXXXXX",
            "OrganizationRequesterId": "XXXXXXXXX",
            "RequestedId": "XXXXXXXXX",
            "Type": "p",
            "Filler": "requester",
            "Requirements": {
                "idcard": true,
                "passport": true,
                "fmcard": true
            },
            "OpenEmail": {
                "Notified": "2020-07-23T17:45:53.293Z",
                "Timestamp": "0001-01-01T00:00:00Z"
            },
            "LastOpen": "2020-07-23T17:45:53.373Z",
            "TrackIPs": [
                {
                    "IPInfo": "XXXXXXXXX",
                    "TimeStamp": "2020-07-23T17:45:53.373Z"
                }
            ],
            "Description": "",
            "Documents": {
                "IdCard": "XXXXXXXXX",
                "Passport": "",
                "FMCard": "",
                "BirthCertificate": "",
                "TaxId": "",
                "IncLetter": "",
                "Address": "",
                "ProCard": "",
                "DigitalSignature": "",
                "ElectronicSignature": "",
                "VideoProof": ""
            },
            "Report": {
                "individual": {
                    "name": "Isabel",
                    "lname": "Ulloa",
                    "fname": "Isabel Ulloa",
                    "uid": "GUI6XXXXXXXXXLS04",
                    "taxid": "GUXXXXXXXXX0",
                    "birth_year": "70",
                    "birth_month": "01",
                    "birth_day": "01",
                    "sex": "F",
                    "nationality": "MEX",
                    "addresses": [
                        {
                            "street": "XXXXXXXXX",
                            "number": "",
                            "interior_number": "",
                            "colony": "XXXXXXXXX",
                            "municipality": "XXXXXXXXX",
                            "state": "XXXXXXXXX",
                            "zip": "XXXXXXXXX"
                        }
                    ],
                    "emails": [
                        "xxxc@example.org"
                    ],
                    "father": {},
                    "mother": {},
                    "cedulas": [
                        {
                            "anioreg": 1987,
                            "desins": "UNIVERSIDAD DE XXXXXXXXX",
                            "idCedula": "XXXXXXXXX",
                            "titulo": "LICENCIATURA EN DERECHO"
                        }
                    ]
                }
            },
            "CallbackUrl": "",
            "ReturnUrl": ""
        }
    },
    {
        "index": 1,
        "formfill_link": "https://efirma.com/panel/kyc-form?r=XXXXXXXXX&at=XXXXXXXXX&ae=test@efirma.com",
        "documents_download_link": "https://efirma.com/kyc-documents/XXXXXXXXX3",
        "download_pdf_report": "https://efirma.com/kyc-report/XXXXXXXXX",
        "kyc-request": {
            "Id": "XXXXXXXXX",
            "RequesterId": "XXXXXXXXX",
            "OrganizationRequesterId": "XXXXXXXXX",
            "RequestedId": "XXXXXXXXX",
            "Type": "p",
            "Filler": "requester",
            "Requirements": {
                "idcard": true,
                "passport": true,
                "fmcard": true
            },
            "OpenEmail": {
                "Notified": "2020-07-23T17:45:53.293Z",
                "Timestamp": "0001-01-01T00:00:00Z"
            },
            "LastOpen": "2020-07-23T17:45:53.373Z",
            "TrackIPs": [
                {
                    "IPInfo": "XXXXXXXXX",
                    "TimeStamp": "2020-07-23T17:45:53.373Z"
                }
            ],
            "Description": "",
            "Documents": {
                "IdCard": "XXXXXXXXX",
                "Passport": "",
                "FMCard": "",
                "BirthCertificate": "",
                "TaxId": "",
                "IncLetter": "",
                "Address": "",
                "ProCard": "",
                "DigitalSignature": "",
                "ElectronicSignature": "",
                "VideoProof": ""
            },
            "Report": {
                "individual": {
                    "name": "Isabel",
                    "lname": "Ulloa",
                    "fname": "Isabel Ulloa",
                    "uid": "GUI6XXXXXXXXXLS04",
                    "taxid": "GUXXXXXXXXX0",
                    "birth_year": "70",
                    "birth_month": "01",
                    "birth_day": "01",
                    "sex": "F",
                    "nationality": "MEX",
                    "addresses": [
                        {
                            "street": "XXXXXXXXX",
                            "number": "",
                            "interior_number": "",
                            "colony": "XXXXXXXXX",
                            "municipality": "XXXXXXXXX",
                            "state": "XXXXXXXXX",
                            "zip": "XXXXXXXXX"
                        }
                    ],
                    "emails": [
                        "test@efirma.com"
                    ],
                    "father": {},
                    "mother": {},
                    "cedulas": [
                        {
                            "anioreg": 1987,
                            "desins": "UNIVERSIDAD DE XXXXXXXXX",
                            "idCedula": "XXXXXXXXX",
                            "titulo": "LICENCIATURA EN DERECHO"
                        }
                    ]
                }
            },
            "CallbackUrl": "",
            "ReturnUrl": ""
        }
    }
]

Objetos

Se hace un listado de los diferentes tipos de objetos mencionados en la documentación


Objeto Document

Nombre Tipo Descripcion
id String El id único del documento.
name String El nombre del documento.
createdat Date Fecha en que el documento.
hash String El hash del documento original (documento sin firmar).
owner String El email de la cuenta que creó el documento.
users [ ]User Una lista de objetos del tipo User en formato JSON.
signatures [ ]Signature Una lista de objetos del tipo Signature.
fully_signed Bool Indica si el documento ha sido firmado por todos los firmantes.
callback_url String URL a la cual se hará una llamada notificando cuando un usuario tome una acción en el documento.
return_url String URL para redirigir al usuario una vez que se firme el documento
reject_url String URL para redirigir al usuario en caso de que decida rechazar el documento.
original_file String URL que permite descargar el documento original.
signed_file String URL que permite descargar el documento con las firmas.
merged_file String URL que permite descargar el documento original junto con la constancia de las firmas.

Objeto User

Nombre Tipo de Dato Descripcion
email String El correo electrónico del usuario.
type String El permiso del usuario sobre el documento, hay 2 valores posibles signer o observer.
ignore_invitation Bool Define si le enviaremos al usuario el correo electrónico de invitación a firmar.
access_token String El token para acceder al documento previa la validacion del usuario.
iframe_url String Una URL que permitirá montar el documento en un iFrame.

Objeto Organizacion

Nombre Tipo de Dato Descripcion
names [ ]String Los nombres por los que se puede llamar a la organizacion
rfc String El RFC siendo validado
active_esignature Bool Status de los certificados de facturacion de la empresa
Certificates [ ]Certificados Lista de certificados involucrados.

Objeto Certificados

Nombre Tipo de Dato Descripcion
owner String Curp de los dueños del RFC
serial String El RFC siendo validado
active Bool Status de los certificados de facturacion de la empresa

Puede aparecer el mismo RFC varias veces con diferentes seriales, esto significa que han sido certificados que han vencido.


Objeto Signature

Nombre Tipo de Dato Descripcion
email String El correo electrónico del usuario.
name String Nombre del Firmante Aparecerá cuando ya tenga cuenta en eFirma.
lname String Apellido del Firmante Aparecerá cuando ya tenga cuenta en eFirma.
signature_type Integer 1:Firma Electrónica Avanzada, 2:Firma Digital
signed Bool Nos indica si el usuario ya firmo el documento

Objeto Plantilla

Nombre Tipo de Dato Descripcion
id String El id único de la plantilla en nuestro sistemas.
ref String El nombre de referencia del documento.
custom_fields CustomField Una lista de objetos del tipo CustomField en formato JSON.
autosigner [ ]Object Un listado de los autofirmantes dados de alta para la plantilla. Los autofirmantes seran solicitados la firma de la plantilla y una vez firmada; cada documento generado a partir de la misma, se firmará por ellos de manera automática.

Objeto CustomField

Nombre Tipo de Dato Descripcion
name String El nombre de la variable utilizado en la plantilla.
fname String El nombre amistoso, se mostrara para el llenado en la plataforma. Suele ser una pregunta ej:  ¿Como te llamas?
type String El tipo de campo.
Choices [ ]String En caso de ser un campo de opción múltiple, se listan las opciones.

Objeto AllowedIds

Nombre Tipo de Dato Descripcion
idcard Bool Si es true, se permitirá la CREDENCIAL IFE/INE como evidencia.
passport Bool Si es true, se permitirá un PASAPORTE como evidencia.
fmcard Bool Si es true, se permitirá la CREDENCIAL MIGRATORIA como evidencia.

Errores


Catalogo de errores

La API de eFirma utiliza códigos de respuesta HTTP convencionales para indicar cuando una solicitud a la API ha sido exitosa o ha fallado. En general, códigos del tipo 2xx indican que la solicitud fué exitosa, códigos del tipo 4xx indican que ocurrio un problema con la solicitud por la información dada (un parámetro inválido, fondos insuficientes, etc.), y códigos del tipo 5xx indican que ocurrió un problema con los servidores de eFirma.

Código Descripcion
400 (Bad Request) La solicitud no fué aceptada, regularmente debido a la falta de parámetros obligatorios.
401 (Unauthorized) La autenticación para la validación de las credenciales ha fallado o las llaves son inválidas.
402 (Request Failed) Los parámetros fueron aceptados, pero ocurrió un error al procesar la solicitud.
404 (Not Found) El objeto solicitado no existe, esto puede ocurrir en solicitudes del tipo GET o DELETE.
405 (Method Not Allowed) El metodo HTTP (GET, PUT, POST, DELETE) no es válido para la URI solicitada.
500 (Internal Server Error) Ha ocurrido un error por parte de nuestros servidores.
504 (Gateway Timeout) Nuestro servidor intentó conectarse a los OCSP para la validación de certificados, pero no recibió respuesta del OCSP.

CORS


Cross Origin Resource Sharing

Nuestra API puede ser ejecutada en front end, es importante aclarar que recomendamos no hacer uso de este recurso debido a que la API KEY se puede ver comprometida y de igual manera se espera un desempeño reducido.

En caso de que sea totalmente necesario utilizar la API de esta manera, es necesario establecer el host https en la generación de la API KEY; desde el cual se contactarà a los servidores de eFirma. Las solicitudes hechas por este dominio a eFirma.com serán respondidas, cualquier otra solicitud que venga de otro dominio, será denegada.

Tambien hay que aclarar, que todos los endpoints cambiaran su URI, en donde se agregará la palabra cors a la url.

Ej.

Asi sucesivamente para cada metodo descrito en esta documentación

Endpoint Regular Enpoint Cors
GET /api/account GET /api/cors/account
GET /api/template/get/:id GET /api/cors/template/get/:id
GET /api/validate/rfc/:rfc GET /api/cors/validate/rfc/:rfc

Recomendamos utilizar Postman para hacer pruebas y entender mejor la API


Haga click aqui para descargar Postman

postmanlogo

Descargue la Colección de eFirma aqui e importela en Postman





Para cualquier duda, porfavor pongase en contacto con nosotros en soporte@efirma.com