# Crear una liga de alta

`POST https://api.fiscalisto.com/v1/issuers/{id}/onboarding_links`

Una página en fiscalisto.com donde el dueño del emisor sube su CSD y firma el contrato con el PAC con su e.firma, sin que esos archivos ni sus contraseñas pasen por su plataforma. Mande a su cliente a url; al terminar vuelve a return_url y llega issuer.ready. Cada liga sirve para un emisor, hasta que vence.

## Parámetros

| Nombre | Dónde | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `id` | ruta | sí | El id del objeto. |
| `Idempotency-Key` | encabezado |  | Opcional (los SDK la mandan solos). Si la respuesta se pierde, repita la solicitud con el mismo valor durante 24 horas: contesta lo mismo, con idempotent-replayed: true, y no lo hace dos veces (ni crea, ni manda correos, ni cobra). |

## Cuerpo

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `return_url` | string (uri) |  | A dónde regresa el botón al terminar, por ejemplo la página de su plataforma donde su cliente sigue. Sin ella, la página solo dice que ya terminó. (hasta 2000 caracteres) |
| `expires_in_hours` | integer |  | Horas que la liga sirve, de 1 a 168 (7 días). Por omisión 24. (de 1 a 168) |

Ejemplo:

```json
{
  "return_url": "https://miplataforma.mx/configuracion/facturas"
}
```

## Con el SDK de TypeScript

```ts
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const issuerOnboardingLink = await fiscalisto.issuers.createOnboardingLink("id", {
  return_url: "https://miplataforma.mx/configuracion/facturas",
}, { idempotencyKey: "pedido-A-1042" });
```

## Con el SDK de Python

```python
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

issuer_onboarding_link = fiscalisto.issuers.create_onboarding_link("id", {
    "return_url": "https://miplataforma.mx/configuracion/facturas",
}, idempotency_key="pedido-A-1042")
```

## Con el SDK de PHP

```php
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$issuerOnboardingLink = $fiscalisto->issuers->createOnboardingLink('id', [
    'return_url' => 'https://miplataforma.mx/configuracion/facturas',
], ['idempotency_key' => 'pedido-A-1042']);
```

## Con el SDK de .NET

```csharp
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var issuerOnboardingLink = await fiscalisto.Issuers.CreateOnboardingLinkAsync("id", new CreateIssuerOnboardingLinkParams
{
    ReturnUrl = "https://miplataforma.mx/configuracion/facturas",
}, new RequestOptions { IdempotencyKey = "pedido-A-1042" });
```

## Con el SDK de Go

```go
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	issuerOnboardingLink, err := client.Issuers.CreateOnboardingLink(ctx, "id", &fiscalisto.CreateIssuerOnboardingLinkParams{
		ReturnURL: fiscalisto.String("https://miplataforma.mx/configuracion/facturas"),
	}, fiscalisto.WithIdempotencyKey("pedido-A-1042"))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *issuerOnboardingLink)
}
```

## Con el SDK de Java

```java
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.RequestOptions;
import com.fiscalisto.model.CreateIssuerOnboardingLinkParams;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var issuerOnboardingLink = fiscalisto.issuers().createOnboardingLink("id", new CreateIssuerOnboardingLinkParams()
        .setReturnUrl("https://miplataforma.mx/configuracion/facturas"), RequestOptions.idempotencyKey("pedido-A-1042"));
System.out.println(issuerOnboardingLink);
```

## Respuesta 201

Correcto.

Un objeto `IssuerOnboardingLink`:

| Campo | Tipo | Siempre viene | Descripción |
| --- | --- | --- | --- |
| `object` | `"issuer_onboarding_link"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `livemode` | boolean | sí | true en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT. |
| `issuer` | string | sí | El emisor que se da de alta. |
| `url` | string | sí | La página para el dueño del emisor, en fiscalisto.com. Ábrala en el navegador de su cliente; no la incruste en un iframe. |
| `return_url` | string o null | sí | A dónde regresa al terminar. |
| `expires_at` | string (date-time) o null | sí | Cuándo deja de servir la liga. Pida otra cuando quiera. |
| `created_at` | string (date-time) o null | sí | Cuándo se creó. |

```json
{
  "object": "issuer_onboarding_link",
  "livemode": false,
  "issuer": "iss_0q1Vmmw52sbD",
  "url": "https://fiscalisto.com/alta/fko_8Xc1nQ2VbT0aLm3Rk7Yp9WdZs4Hf6Jg5Ue1Oi2Ky",
  "return_url": "https://miplataforma.mx/configuracion/facturas",
  "expires_at": "2026-10-25T10:15:00-06:00",
  "created_at": "2026-10-24T10:15:00-06:00"
}
```

## Errores

Puede responder 400, 401, 403, 404, 429, 500 con el cuerpo de error de siempre; cada código está en https://fiscalisto.com/docs/api/errores.md.
