Skip to main content

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

HeaderTipoRequeridoDescripción
SecretstringClave secreta de la aplicación.
ApplicationIdstringIdentificador único de la aplicación.

Body (multipart/form-data)

ParámetroTipoRequeridoDescripción
valuefile or StringArchivo o dato que se desea tokenizar.
tokenIdstringTipo de Token que se desea emitir.
metadatastringMetadatos 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 ArchivoContent-Type
PDFapplication/pdf
Excelapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Wordapplication/msword
Imagen (PNG)image/png
Imagen (JPEG)image/jpeg
Texto (TXT)text/plain
JSONapplication/json
Stringstring
Numbernumber

Headers en la Respuesta

HeaderTipoDescripción
Content-TypestringIndica el tipo de archivo o respuesta devuelto.
Content-DispositionstringIndica 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 HTTPMensajeDescripción
401UnauthorizedLas credenciales son incorrectas o faltan en la solicitud.
400Validation ErrorLa solicitud contiene datos inválidos o faltantes.
500Internal Server ErrorError 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.