Crear un cliente
POST
/customers
# Guarda tus datos en solicitud.json; consulta los campos debajo.FACTUCAT_API_URL="${FACTUCAT_API_URL:-https://sandbox.factucat.com/api/v1}"
curl --fail-with-body --request POST \ --url "$FACTUCAT_API_URL/customers" \ --header "X-API-Key: $FACTUCAT_API_KEY" \ --header 'Content-Type: application/json' \ --data @'solicitud.json'// Guarda tus datos en solicitud.json; consulta los campos debajo.import { readFile, writeFile } from 'node:fs/promises'
const baseUrl = process.env.FACTUCAT_API_URL || "https://sandbox.factucat.com/api/v1"const body = await readFile("solicitud.json", 'utf8')const response = await fetch(`${baseUrl}/customers`, { method: "POST", headers: { 'X-API-Key': process.env.FACTUCAT_API_KEY, 'Content-Type': 'application/json', }, body,})const text = await response.text()if (!response.ok) throw new Error(`HTTP ${response.status}: ${text}`)console.log(JSON.parse(text))# Guarda tus datos en solicitud.json; consulta los campos debajo.import jsonimport osfrom pathlib import Pathimport urllib.errorimport urllib.request
base_url = os.environ.get("FACTUCAT_API_URL", "https://sandbox.factucat.com/api/v1")body = Path("solicitud.json").read_bytes()request = urllib.request.Request( f"{base_url}/customers", method="POST", headers={ "X-API-Key": os.environ["FACTUCAT_API_KEY"], "Content-Type": "application/json", }, data=body,)try: with urllib.request.urlopen(request) as response: text = response.read().decode("utf-8")except urllib.error.HTTPError as error: raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8')}") from errorprint(json.loads(text))// Guarda tus datos en solicitud.json; consulta los campos debajo.package main
import ( "bytes" "fmt" "io" "net/http" "os")
func main() { baseURL := os.Getenv("FACTUCAT_API_URL") if baseURL == "" { baseURL = "https://sandbox.factucat.com/api/v1" } body, _ := os.ReadFile("solicitud.json") request, err := http.NewRequest("POST", baseURL + "/customers", bytes.NewReader(body)) if err != nil { panic(err) } request.Header.Set("X-API-Key", os.Getenv("FACTUCAT_API_KEY")) request.Header.Set("Content-Type", "application/json") response, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer response.Body.Close() text, _ := io.ReadAll(response.Body) if response.StatusCode < 200 || response.StatusCode >= 300 { panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, text)) } fmt.Print(string(text))}Authorizations
Sección titulada «Authorizations»Parameters
Sección titulada «Parameters»Header Parameters
Sección titulada «Header Parameters»Idempotency-Key
string
Opcional. Reutiliza la misma clave, ruta y contenido para reintentar una operación sin repetirla. Una clave con contenido diferente devuelve 409. Sin clave, cada solicitud es independiente.
Request Bodyrequired
Sección titulada «Request Bodyrequired»Media typeapplication/json
object
legalName
required
string
rfc
required
string
fiscalResidence
string
taxId
string
email
string format: email
whatsappPhone
string
sendInvoices
boolean
invoiceLanguage
string
currency
string
Responses
Sección titulada «Responses»Operación exitosa
Media typeapplication/json
object
data
required
object
id
required
string format: uuid
userId
required
string
legalName
required
string
rfc
required
string
postalCode
required
string
taxRegime
required
string
preferredCfdiUse
string | null
fiscalResidence
string
taxId
string
email
string format: email
whatsappPhone
string
sendInvoices
required
boolean
invoiceLanguage
required
string
currency
required
string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
meta
required
object
requestId
required
string
idempotencyKey
string
pagination
object
limit
required
integer
offset
required
integer
hasMore
required
boolean
nextCursor
string | null
Datos inválidos
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string
API key ausente, inválida o de otro ambiente
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string
Plan inactivo o permisos insuficientes
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string
Recurso no encontrado
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string
Método no permitido
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string
Conflicto o solicitud en curso. error.reason es opcional; duplicate_rfc indica que ya existe un cliente con ese RFC en la cuenta; stamp_in_progress indica que el documento se está timbrando: consúltalo antes de reintentar.
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string
Límite de solicitudes alcanzado
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string
Headers
Sección titulada «Headers»Retry-After
integer
Segundos antes de reintentar.
Error interno
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string
PAC temporalmente no disponible
Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
requestId
required
string
retryable
required
boolean
reason
string