Referencia de la API

Crea una factura

POST/v1/invoices

Contrato v1 / 1.0.0 62 / 2026-10-10

En esta página

Crear una factura de Payments. Envíe chain y amount para obtener datos de pago fijos, o bien omita chain, asset, amount, address y tolerance y envíe invoice_currency e invoice_amount para que el pagador elija el método. Esta última opción requiere una clave de producción con permiso de escritura e Idempotency-Key; la creación y un reintento idéntico devuelven la URL de pago interactiva. GET y los listados mantienen enlaces de solo lectura. Tras un tiempo de espera agotado, repita el mismo cuerpo con el mismo Idempotency-Key; otros parámetros devuelven 409. Un reintento con clave devuelve 201 con el mismo ID. Sin clave, repetir una creación con método fijo puede crear otra factura. No crea un pago en la cadena de bloques.

Permisos de la clave: invoices / write / payments.

Parámetros

ParámetroEntranteObligatorioDescripción
Idempotency-KeyheaderNo16–80 letras ASCII, dígitos, guiones o guiones bajos. ID lógico de pedido único dentro de la cuenta. Obligatorio cuando el pagador elige el método de pago.
string minLength: 16; maxLength: 80; pattern: ^[A-Za-z0-9_-]+$

Cuerpo de la solicitud

CampoTipoObligatorioDescripción
projectstringNoID del proyecto Payments; se recomienda seleccionarlo explícitamente. Una clave limitada a un proyecto usa su proyecto.
chainstringNoCódigo de red.
minLength: 1
assetstringNoActivo de pago compatible: native, símbolo o identificador conocido. Los activos aceptados dependen de la red; si se omite, se selecciona native.
Predeterminado: native
amountstringNoImporte cripto positivo en unidades del activo; la precisión no debe superar sus decimales.
pattern: ^[0-9]+(?:\.[0-9]+)?$
referencestringNoTu referencia del pedido; no sustituye a Idempotency-Key.
maxLength: 120
addressstringNoDirección opcional del pool de pagos del proyecto. Si se omite, el servicio selecciona una.
tolerancestringNoPago insuficiente permitido en unidades del activo, estrictamente inferior a amount. Omítelo para una tolerancia cero.
pattern: ^[0-9]+(?:\.[0-9]+)?$
customerobjectNo
productobjectNo
payerobjectNo
metadataobjectNoHasta 20 pares, máximo 8192 bytes JSON. No incluyas secretos.
invoice_currencystringNoMoneda de tres letras de la cotización del pedido; solo junto con invoice_amount.
pattern: ^[A-Za-z]{3}$
invoice_amountstringNoImporte positivo del pedido en invoice_currency. Junto con chain y amount, es la instantánea del comerciante. Sin datos de pago, es el valor fijo de la factura que se utiliza para calcular el activo elegido por el pagador.
maxLength: 80; pattern: ^[0-9]+(?:\.[0-9]+)?$
expires_inintegerNoPlazo de pago en minutos, a partir de la emisión correcta de los datos. Si se omite o se indica 0, se aplica la política del proyecto (60 de forma predeterminada); máximo 10080. Las solicitudes anteriores con método fijo también consideran los valores negativos como omitidos; el pago con elección de método rechaza los valores negativos.
Predeterminado: 60; maximum: 10080
application/json
{
  "project": "2002",
  "invoice_currency": "USD",
  "invoice_amount": "12.50",
  "reference": "order-42"
}

Ejemplos de solicitudes

Los ejemplos realizan una operación real en tu cuenta. Configura las variables de entorno indicadas en el código. Mantén tu clave privada; las solicitudes de escritura no se reintentan automáticamente.

Shell / cURL
#!/usr/bin/env bash
set -euo pipefail
: "${CRYPTANIO_API_KEY:?Set CRYPTANIO_API_KEY}"
: "${CRYPTANIO_OPERATION_ID:?Set CRYPTANIO_OPERATION_ID}"
: "${CRYPTANIO_PROJECT_ID:?Set CRYPTANIO_PROJECT_ID}"
json_string() {
  local text="$1" char code index output='"'
  for ((index=0; index<${#text}; index++)); do
    char="${text:index:1}"
    case "$char" in
      '"'|'\') output+="\\$char" ;;
      *) printf -v code '%d' "'$char"
         if ((code < 32)); then printf -v char '\\u%04x' "$code"; fi
         output+="$char" ;;
    esac
  done
  printf '%s"' "$output"
}
response_file="$(mktemp)"
trap 'rm -f "$response_file"' EXIT
transfer_status=0
http_status="$(curl \
  --silent --show-error --max-time 30 --request POST \
  --header "Authorization: Bearer $CRYPTANIO_API_KEY" \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header "Idempotency-Key: $CRYPTANIO_OPERATION_ID" \
  --data-binary '{"project":'"$(json_string "$CRYPTANIO_PROJECT_ID")"',"invoice_currency":"USD","invoice_amount":"12.50","reference":"order-42"}' \
  "https://api.cryptanio.com/v1/invoices" \
  --output "$response_file" --write-out '%{http_code}')" || transfer_status=$?
if [[ "$http_status" == 2?? ]]; then
  cat "$response_file"
  exit "$transfer_status"
fi
printf 'HTTP %s\n' "$http_status" >&2
cat "$response_file" >&2
exit 1
Descargar ejemplo
Go
// Go; standard library only. Run: go run request.go
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func env(name string) string {
    value := os.Getenv(name)
    if value == "" { fmt.Fprintln(os.Stderr, "Set", name); os.Exit(1) }
    return value
}
func run() error {
    path := "/v1/invoices"

    endpoint, err := url.Parse("https://api.cryptanio.com" + path)
    if err != nil { return err }
    query := endpoint.Query()

    endpoint.RawQuery = query.Encode()
    var payload map[string]any
    if err := json.Unmarshal([]byte("{\"project\":\"2002\",\"invoice_currency\":\"USD\",\"invoice_amount\":\"12.50\",\"reference\":\"order-42\"}"), &payload); err != nil { return err }
    payload["project"] = env("CRYPTANIO_PROJECT_ID")
    body, err := json.Marshal(payload)
    if err != nil { return err }
    request, err := http.NewRequest("POST", endpoint.String(), bytes.NewReader(body))
    if err != nil { return err }
    request.Header.Set("Authorization", "Bearer " + env("CRYPTANIO_API_KEY"))
    request.Header.Set("Accept", "application/json")
    request.Header.Set("Content-Type", "application/json")
    request.Header.Set("Idempotency-Key", env("CRYPTANIO_OPERATION_ID"))
    client := &http.Client{Timeout: 30 * time.Second, CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
    response, err := client.Do(request)
    if err != nil { return err }
    defer response.Body.Close()
    if response.StatusCode < 200 || response.StatusCode >= 300 {
        body, err := io.ReadAll(response.Body)
        if err != nil { return err }
        return fmt.Errorf("HTTP %d: %s", response.StatusCode, body)
    }
    _, err = io.Copy(os.Stdout, response.Body)
    return err
}
func main() {
    if err := run(); err != nil { fmt.Fprintln(os.Stderr, err); os.Exit(1) }
}
Descargar ejemplo
Rust
// Cargo.toml dependencies:
// reqwest = { version = "=0.12.24", features = ["blocking", "json"] }
// serde_json = "=1.0.145"
use std::{error::Error, io, time::Duration};
use reqwest::{blocking::Client, redirect::Policy, Method, Url};

fn env(name: &str) -> Result<String, Box<dyn Error>> {
    let value = std::env::var(name)?;
    if value.is_empty() { return Err(format!("Set {name}").into()); }
    Ok(value)
}
fn run() -> Result<(), Box<dyn Error>> {
    let mut url = Url::parse("https://api.cryptanio.com")?;
    {
        let mut segments = url.path_segments_mut().map_err(|_| "Invalid base URL")?;
        segments.clear();
        segments.push("v1");
        segments.push("invoices");
    }
    let client = Client::builder().timeout(Duration::from_secs(30)).redirect(Policy::none()).build()?;
    let request = client.request(Method::POST, url)
        .header("Authorization", format!("Bearer {}", env("CRYPTANIO_API_KEY")?))
        .header("Accept", "application/json".to_owned())
        .header("Content-Type", "application/json".to_owned())
        .header("Idempotency-Key", env("CRYPTANIO_OPERATION_ID")?);
    let mut body: serde_json::Value = serde_json::from_str("{\"project\":\"2002\",\"invoice_currency\":\"USD\",\"invoice_amount\":\"12.50\",\"reference\":\"order-42\"}")?;
    body["project"] = serde_json::Value::String(env("CRYPTANIO_PROJECT_ID")?);
    let request = request.json(&body);
    let mut response = request.send()?;
    let status = response.status();
    if !status.is_success() { return Err(format!("HTTP {}: {}", status.as_u16(), response.text()?).into()); }
    io::copy(&mut response, &mut io::stdout())?;
    Ok(())
}
fn main() {
    if let Err(error) = run() { eprintln!("{error}"); std::process::exit(1); }
}
Descargar ejemplo
PHP
<?php
// PHP 8 with the cURL extension. Run this on your server.
function env(string $name): string {
    $value = getenv($name);
    if ($value === false || $value === '') throw new RuntimeException('Set ' . $name);
    return $value;
}
try {
    $path = '/v1/invoices';

    $query = [

    ];
    $url = 'https://api.cryptanio.com' . $path . ($query ? '?' . http_build_query($query, '', '&', PHP_QUERY_RFC3986) : '');
    $headers = [
        'Authorization: ' . 'Bearer ' . env('CRYPTANIO_API_KEY'),
        'Accept: ' . 'application/json',
        'Content-Type: ' . 'application/json',
        'Idempotency-Key: ' . env('CRYPTANIO_OPERATION_ID'),
    ];
    $body = json_decode('{"project":"2002","invoice_currency":"USD","invoice_amount":"12.50","reference":"order-42"}', true, 512, JSON_THROW_ON_ERROR);
    $body['project'] = env('CRYPTANIO_PROJECT_ID');
    $curl = curl_init($url);
    curl_setopt_array($curl, [
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => false,
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_POSTFIELDS => json_encode($body, JSON_THROW_ON_ERROR),
    ]);
    $response = curl_exec($curl);
    if ($response === false) throw new RuntimeException(curl_error($curl));
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    if ($status < 200 || $status >= 300) throw new RuntimeException('HTTP ' . $status . ': ' . $response);
    echo $response;
} catch (Throwable $error) {
    fwrite(STDERR, $error->getMessage() . PHP_EOL);
    exit(1);
}
Descargar ejemplo
Python
# Python 3; standard library only.
import json
import os
import sys
from urllib.error import HTTPError, URLError
from urllib.parse import quote, urlencode
from urllib.request import HTTPRedirectHandler, Request, build_opener

def env(name):
    result = os.environ.get(name)
    if not result:
        raise ValueError("Set " + name)
    return result

class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

try:
    path = "/v1/invoices"

    query = {

    }
    url = "https://api.cryptanio.com" + path + ("?" + urlencode(query) if query else "")
    headers = {
        "Authorization": "Bearer " + env("CRYPTANIO_API_KEY"),
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Idempotency-Key": env("CRYPTANIO_OPERATION_ID"),
    }
    body = json.loads("{\"project\":\"2002\",\"invoice_currency\":\"USD\",\"invoice_amount\":\"12.50\",\"reference\":\"order-42\"}")
    body["project"] = env("CRYPTANIO_PROJECT_ID")
    data = json.dumps(body).encode("utf-8")
    request = Request(url, data=data, headers=headers, method="POST")
    with build_opener(NoRedirect()).open(request, timeout=30) as response:
        if not 200 <= response.status < 300:
            raise ValueError("HTTP " + str(response.status))
        sys.stdout.buffer.write(response.read())
except HTTPError as error:
    print("HTTP " + str(error.code) + ": " + error.read().decode("utf-8", errors="replace"), file=sys.stderr)
    sys.exit(1)
except (ValueError, URLError, OSError) as error:
    print(str(error), file=sys.stderr)
    sys.exit(1)
Descargar ejemplo
Node.js
// Node.js 18+. Run on your server, never in a browser.
const env = name => {
  const result = process.env[name];
  if (!result) throw new Error(`Set ${name}`);
  return result;
};
try {
  let path = "/v1/invoices";

  const url = new URL(path, "https://api.cryptanio.com");

  const headers = {
    "Authorization": "Bearer " + env("CRYPTANIO_API_KEY"),
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Idempotency-Key": env("CRYPTANIO_OPERATION_ID"),
  };
  const body = {
    "project": "2002",
    "invoice_currency": "USD",
    "invoice_amount": "12.50",
    "reference": "order-42"
  };
  body["project"] = env("CRYPTANIO_PROJECT_ID");
  const response = await fetch(url, {
    method: "POST", headers, redirect: "manual",
    signal: AbortSignal.timeout(30_000), body: JSON.stringify(body),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  if (response.body) {
    for await (const chunk of response.body) process.stdout.write(chunk);
  }
} catch (error) {
  console.error(error.message);
  process.exitCode = 1;
}
Descargar ejemplo

Respuestas y errores

201 Respuesta correcta.
CampoTipoObligatorioDescripción
checkout_urlstringNoPágina de pago alojada por Cryptanio. La creación o el reintento de una factura con elección de método devuelve un enlace de acceso interactivo que permite elegirlo hasta que se detecte un pago. La creación con método fijo y todos los GET y listados devuelven un enlace independiente de solo lectura. Comparta cualquiera de los enlaces solo con el pagador previsto; ninguno da acceso a la cuenta ni a la clave API. Confirme el pago mediante la API de facturas o un webhook verificado, no mediante una redirección del navegador.
uri
idstringSíIdentificador opaco; consérvalo como cadena.
minLength: 1
statusstringSípending espera el pago; seen detectado; partial parcialmente pagado; paid liquidado; underpaid/overpaid/late requieren una decisión; expired plazo vencido; canceled anulado.
pending, seen, paid, underpaid, partial, overpaid, expired, late, canceled
project_idstringSíIdentificador opaco; consérvalo como cadena.
minLength: 1
referencestringNoReferencia del pedido.
customerobjectNo
productobjectNo
payerobjectNo
metadataobjectNoHasta 20 pares, máximo 8192 bytes JSON. No incluyas secretos.
invoice_currencystringNoMoneda de la cotización del pedido.
invoice_amountstringNoImporte decimal exacto como cadena; no uses coma flotante.
pattern: ^[0-9]+(?:\.[0-9]+)?$
chainstringSíCódigo de red.
assetstringSíActivo de pago.
addressstringSíDirección de pago.
payment_routeobjectNoIdentificador de pago en la cadena obligatorio cuando una fuente automática genera un tag, memo, comentario TON o referencia Solana Pay. Consérvelo junto con la dirección de recepción; la referencia del pedido del comercio es un campo independiente.
payment_uristringNoSolicitud de transferencia Solana Pay con el destinatario, el importe exacto, el mint del token admitido y la referencia obligatoria. Codifique este URI en el QR de pago en lugar de la dirección de recepción sin más datos.
uri
amountstring | stringSíImporte real que debe enviar el comprador; puede diferir del solicitado para distinguir facturas. Vacío hasta que se elija un método.
amount_rawstring | stringSíImporte entero en la unidad mínima, como cadena de texto. Vacío hasta que se elija un método.
askedstring | stringSíImporte de criptomoneda solicitado originalmente. Vacío hasta que se elija un método.
decimalsintegerSíDecimales del activo.
minimum: 0
tolerancestringNoTolerancia en unidades mínimas; a diferencia de request.tolerance.
pattern: ^[0-9]+$
sandboxbooleanSíUna factura de prueba no demuestra un pago real en la blockchain.
needs_decisionbooleanNoLos estados underpaid, overpaid o late requieren una decisión.
paidstringNoImporte recibido en unidades mínimas.
pattern: ^[0-9]+$
tx_idstringNoIdentificador de la transacción de pago.
paid_atstringNoFecha y hora UTC en RFC 3339.
date-time
expires_atstringSíFecha y hora UTC en RFC 3339.
date-time
created_atstringSíFecha y hora UTC en RFC 3339.
date-time
201 application/json
{
  "id": "2100",
  "status": "pending",
  "project_id": "2002",
  "reference": "order-42",
  "chain": "ethereum",
  "asset": "USDC",
  "address": "0x52908400098527886E0F7030069857D2E4169EE7",
  "amount": "12.5",
  "amount_raw": "12500000",
  "asked": "12.5",
  "decimals": 6,
  "sandbox": true,
  "expires_at": "2026-10-06T11:00:00Z",
  "created_at": "2026-10-06T10:00:00Z"
}
400 Solicitud inválida (bad_request, unsupported_asset).
CampoTipoObligatorioDescripción
errorobjectSí
400 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
401 No hay una clave API activa válida (unauthorized).
CampoTipoObligatorioDescripción
errorobjectSí
401 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
403 La clave no permite la operación, el proyecto, el servicio o la IP; correo sin confirmar.
CampoTipoObligatorioDescripción
errorobjectSí
403 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
409 Conflicto de estado, parámetros de reintento distintos o límite de recursos de pago (conflict, limit_reached, service_inactive).
CampoTipoObligatorioDescripción
errorobjectSí
409 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
429 Demasiadas solicitudes (rate_limited); reintenta después de Retry-After.
CampoTipoObligatorioDescripción
errorobjectSí
429 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
500 Error interno (internal).
CampoTipoObligatorioDescripción
errorobjectSí
500 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
503 Indisponibilidad temporal (unavailable); reintenta con espera progresiva.
CampoTipoObligatorioDescripción
errorobjectSí
503 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}

Gestión de errores y reintentos seguros

Objetos anidados

Invoice

CampoTipoObligatorioDescripción
checkout_urlstringNoPágina de pago alojada por Cryptanio. La creación o el reintento de una factura con elección de método devuelve un enlace de acceso interactivo que permite elegirlo hasta que se detecte un pago. La creación con método fijo y todos los GET y listados devuelven un enlace independiente de solo lectura. Comparta cualquiera de los enlaces solo con el pagador previsto; ninguno da acceso a la cuenta ni a la clave API. Confirme el pago mediante la API de facturas o un webhook verificado, no mediante una redirección del navegador.
uri
idstringSíIdentificador opaco; consérvalo como cadena.
minLength: 1
statusstringSípending espera el pago; seen detectado; partial parcialmente pagado; paid liquidado; underpaid/overpaid/late requieren una decisión; expired plazo vencido; canceled anulado.
pending, seen, paid, underpaid, partial, overpaid, expired, late, canceled
project_idstringSíIdentificador opaco; consérvalo como cadena.
minLength: 1
referencestringNoReferencia del pedido.
customerobjectNo
productobjectNo
payerobjectNo
metadataobjectNoHasta 20 pares, máximo 8192 bytes JSON. No incluyas secretos.
invoice_currencystringNoMoneda de la cotización del pedido.
invoice_amountstringNoImporte decimal exacto como cadena; no uses coma flotante.
pattern: ^[0-9]+(?:\.[0-9]+)?$
chainstringSíCódigo de red.
assetstringSíActivo de pago.
addressstringSíDirección de pago.
payment_routeobjectNoIdentificador de pago en la cadena obligatorio cuando una fuente automática genera un tag, memo, comentario TON o referencia Solana Pay. Consérvelo junto con la dirección de recepción; la referencia del pedido del comercio es un campo independiente.
payment_uristringNoSolicitud de transferencia Solana Pay con el destinatario, el importe exacto, el mint del token admitido y la referencia obligatoria. Codifique este URI en el QR de pago en lugar de la dirección de recepción sin más datos.
uri
amountstring | stringSíImporte real que debe enviar el comprador; puede diferir del solicitado para distinguir facturas. Vacío hasta que se elija un método.
amount_rawstring | stringSíImporte entero en la unidad mínima, como cadena de texto. Vacío hasta que se elija un método.
askedstring | stringSíImporte de criptomoneda solicitado originalmente. Vacío hasta que se elija un método.
decimalsintegerSíDecimales del activo.
minimum: 0
tolerancestringNoTolerancia en unidades mínimas; a diferencia de request.tolerance.
pattern: ^[0-9]+$
sandboxbooleanSíUna factura de prueba no demuestra un pago real en la blockchain.
needs_decisionbooleanNoLos estados underpaid, overpaid o late requieren una decisión.
paidstringNoImporte recibido en unidades mínimas.
pattern: ^[0-9]+$
tx_idstringNoIdentificador de la transacción de pago.
paid_atstringNoFecha y hora UTC en RFC 3339.
date-time
expires_atstringSíFecha y hora UTC en RFC 3339.
date-time
created_atstringSíFecha y hora UTC en RFC 3339.
date-time
ID

Identificador opaco. Su formato no está garantizado; no lo conviertas a número.

string Identificador opaco. Su formato no está garantizado; no lo conviertas a número.

InvoiceStatus

pending espera el pago; seen detectado; partial parcialmente pagado; paid liquidado; underpaid/overpaid/late requieren una decisión; expired plazo vencido; canceled anulado.

string pending espera el pago; seen detectado; partial parcialmente pagado; paid liquidado; underpaid/overpaid/late requieren una decisión; expired plazo vencido; canceled anulado.

Customer

CampoTipoObligatorioDescripción
idstringSíIdentificador del cliente en tu sistema.
maxLength: 120
Product

CampoTipoObligatorioDescripción
idstringNoIdentificador del producto en tu sistema.
maxLength: 120
namestringNoNombre del producto.
maxLength: 200
quantityintegerNoCantidad.
minimum: 1; maximum: 1000000
Payer

CampoTipoObligatorioDescripción
commentstringSíComentario del pagador.
maxLength: 500
InvoiceMetadata

Hasta 20 pares, máximo 8192 bytes JSON. No incluyas secretos.

object Hasta 20 pares, máximo 8192 bytes JSON. No incluyas secretos.

Decimal

string

RawAmount

string

InvoiceRequest

CampoTipoObligatorioDescripción
projectstringNoID del proyecto Payments; se recomienda seleccionarlo explícitamente. Una clave limitada a un proyecto usa su proyecto.
chainstringNoCódigo de red.
minLength: 1
assetstringNoActivo de pago compatible: native, símbolo o identificador conocido. Los activos aceptados dependen de la red; si se omite, se selecciona native.
Predeterminado: native
amountstringNoImporte cripto positivo en unidades del activo; la precisión no debe superar sus decimales.
pattern: ^[0-9]+(?:\.[0-9]+)?$
referencestringNoTu referencia del pedido; no sustituye a Idempotency-Key.
maxLength: 120
addressstringNoDirección opcional del pool de pagos del proyecto. Si se omite, el servicio selecciona una.
tolerancestringNoPago insuficiente permitido en unidades del activo, estrictamente inferior a amount. Omítelo para una tolerancia cero.
pattern: ^[0-9]+(?:\.[0-9]+)?$
customerobjectNo
productobjectNo
payerobjectNo
metadataobjectNoHasta 20 pares, máximo 8192 bytes JSON. No incluyas secretos.
invoice_currencystringNoMoneda de tres letras de la cotización del pedido; solo junto con invoice_amount.
pattern: ^[A-Za-z]{3}$
invoice_amountstringNoImporte positivo del pedido en invoice_currency. Junto con chain y amount, es la instantánea del comerciante. Sin datos de pago, es el valor fijo de la factura que se utiliza para calcular el activo elegido por el pagador.
maxLength: 80; pattern: ^[0-9]+(?:\.[0-9]+)?$
expires_inintegerNoPlazo de pago en minutos, a partir de la emisión correcta de los datos. Si se omite o se indica 0, se aplica la política del proyecto (60 de forma predeterminada); máximo 10080. Las solicitudes anteriores con método fijo también consideran los valores negativos como omitidos; el pago con elección de método rechaza los valores negativos.
Predeterminado: 60; maximum: 10080
Error

CampoTipoObligatorioDescripción
errorobjectSí