Emitir Token
Este endpoint permite emitir un token a partir de un documento o dato. El token debe de estar previamente configurado en la plataforma de Inmutable.
Endpoint
POST /api/inmutable/public/emision
Headers
Header | Tipo | Requerido | Descripción |
---|---|---|---|
Secret | string | Sí | Clave secreta de la aplicación. |
ApplicationId | string | Sí | Identificador único de la aplicación. |
Body (multipart/form-data)
Parámetro | Tipo | Requerido | Descripción |
---|---|---|---|
value | file or String | Sí | Archivo o dato que se desea tokenizar. |
tokenId | string | Sí | Tipo de Token que se desea emitir. |
metadata | string | Sí | Metadatos del token en estructura JSON |
Respuesta Esperada
Este endpoint devuelve un archivo como respuesta o un JSON con los datos del token emitido. El tipo de contenido del archivo dependerá del tipo de documento configurado en el tipo de token.
Content-Type
A continuación, se describen los tipos de archivos o datos permitidos en la configuración y sus respectivos Content-Type
:
Tipo de Archivo | Content-Type |
---|---|
application/pdf | |
Excel | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
Word | application/msword |
Imagen (PNG) | image/png |
Imagen (JPEG) | image/jpeg |
Texto (TXT) | text/plain |
JSON | application/json |
String | string |
Number | number |
Headers en la Respuesta
Header | Tipo | Descripción |
---|---|---|
Content-Type | string | Indica el tipo de archivo o respuesta devuelto. |
Content-Disposition | string | Indica que el archivo debe descargarse. |
**Ejemplo de Respuesta - Datos **
{
"tokenId": "678925a62f2c22dc2a646360",
"tx": "0xbe5e2ccfe6f372df1792f0a10655ec475d289b0cc96ea618270881a9198db74c",
"blockNumber": "3063894",
"blockHash": "0x360a436dc07f0adac5fbecf0a5ed99022de2a6917a82e28d79f126d02b9be24a",
"ownerAddress": "0xD56ac0008853D4610f43395C725Ea821e5852a95",
"tokenNumber": "14",
"tokenExpiration": "0xb886fa2daab541930128c09f4283b933d7917d71e339d20ca3258df59d34419b",
"tokenHash": "65318fb967816074dcc3641e3dcb8252d6f6ef5bda4be9022f529616ada1feb435c4d2e12f0d842f18c428939914674a05665c6ad01dbcb17b115269128d6377",
"status": "SUCCESS",
"metadata": "{}",
}
**Ejemplo de Respuesta - Documentos o Archivos **
El sistema devolverá el mismo archivo enviado para tokenización, pero ahora con los datos de tokenización incorporados. Este archivo actualizado estará disponible para su descarga y contendrá el contenido tokenizado.
Headers
Content-Type: application/pdf
Content-Disposition: attachment; filename="tokenizacion.pdf"
Errores en la API
La API puede devolver diferentes errores dependiendo de la situación. A continuación, se detallan los posibles códigos de error, sus significados, y ejemplos de las respuestas JSON.
Tabla de Resumen de Errores
Código HTTP | Mensaje | Descripción |
---|---|---|
401 | Unauthorized | Las credenciales son incorrectas o faltan en la solicitud. |
400 | Validation Error | La solicitud contiene datos inválidos o faltantes. |
500 | Internal Server Error | Error inesperado en el servidor. |
Detalles de Respuesta para Errores
1. Error 401 - Unauthorized
Este error ocurre cuando no se incluyen los headers necesarios o cuando las credenciales son incorrectas.
2. Error 400 - Tipo de Archivo
{
"statusCode": 400,
"message": "Metadata addition not supported for this file type."
}
**3. Error 400 - Error emisión del Token **
{
"tokenId": "6789273195f012212d0600c5",
"ownerAddress": "0xD56ac0008853D4610f43395C725Ea821e5852a95",
"status": "FAILED",
"tokenHash": "65318fb967816074dcc3641e3dcb8252d6f6ef5bda4be9022f529616ada1feb435c4d2e12f0d842f18c428939914674a05665c6ad01dbcb17b115269128d6377",
"metadata": "{}",
"errorDetails": "Failed to initialize provider"
}
**3. Error 500 - Internal Server Error **
{
"result": "error",
"companyId": "676f108c06b64404dd2d03d8",
"errorDetails": "Returned error: ",
"_id": "6789273195f012212d0600c5",
"dateTime": "2025-01-16T15:35:13.343Z"
}
Ejemplos de Código
Shell
curl --request POST \
--url https://api-dev.inmutable.app/api/inmutable/public/emision \
--header 'Secret: <Your-Secret-Key>' \
--header 'ApplicationId: <Your-Application-Id>' \
--form 'value=@"/path/to/file.pdf"' \
--form 'tokenId="<Your-Document-Type-Contract>"' \
--form 'metadata="{}"'
Node.js
const FormData = require('form-data');
const axios = require('axios');
const fs = require('fs');
const formData = new FormData();
formData.append('value', fs.createReadStream('/path/to/file.pdf'));
formData.append('tokenId', '<Your-Document-Type-Contract>');
formData.append('metadata', '{}');
axios.post('https://api-dev.inmutable.app/api/inmutable/public/emision', formData, {
headers: {
...formData.getHeaders(),
Secret: '<Your-Secret-Key>',
ApplicationId: '<Your-Application-Id>',
},
})
.then(response => console.log(response.data))
.catch(error => console.error(error));
Python
import requests
url = 'https://api-dev.inmutable.app/api/inmutable/public/emision'
files = {'value': open('/path/to/file.pdf', 'rb')}
data = {
'tokenId': '<Your-Document-Type-Contract>',
'metadata': '{}'
}
headers = {
'Secret': '<Your-Secret-Key>',
'ApplicationId': '<Your-Application-Id>',
}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
C#
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
var client = new HttpClient();
var formData = new MultipartFormDataContent();
formData.Add(new ByteArrayContent(await File.ReadAllBytesAsync("/path/to/file.pdf")), "value", "file.pdf");
formData.Add(new StringContent("<Your-Document-Type-Contract>"), "tokenId");
formData.Add(new StringContent("{}"), "metadata");
client.DefaultRequestHeaders.Add("Secret", "<Your-Secret-Key>");
client.DefaultRequestHeaders.Add("ApplicationId", "<Your-Application-Id>");
var response = await client.PostAsync("https://api-dev.inmutable.app/api/inmutable/public/emision", formData);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
Notas
- Asegúrate de que el archivo cargado sea válido.
- Los metadatos deben estar en formato JSON o string plano.