curl --request POST \
--url https://api.gigstack.io/v2/invoices/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"client": {
"id": "client_1234567890"
},
"carta_porte": {
"TranspInternac": "No",
"TotalDistRec": 120,
"Ubicaciones": [
{
"TipoUbicacion": "Origen",
"RFCRemitenteDestinatario": "EKU9003173C9",
"NombreRemitenteDestinatario": "ESCUELA KEMPER URGATE",
"FechaHoraSalidaLlegada": "2026-10-06T09:00:00",
"Domicilio": {
"Pais": "MEX",
"CodigoPostal": "42501",
"Estado": "HID"
}
},
{
"TipoUbicacion": "Destino",
"RFCRemitenteDestinatario": "EKU9003173C9",
"NombreRemitenteDestinatario": "ESCUELA KEMPER URGATE",
"FechaHoraSalidaLlegada": "2026-10-06T13:00:00",
"DistanciaRecorrida": 120,
"Domicilio": {
"Pais": "MEX",
"CodigoPostal": "03020",
"Estado": "CMX"
}
}
],
"Mercancias": {
"PesoBrutoTotal": 12.5,
"UnidadPeso": "KGM",
"NumTotalMercancias": 1,
"Mercancia": [
{
"BienesTransp": "50202203",
"Descripcion": "Bebida embotellada",
"Cantidad": 10,
"ClaveUnidad": "XBO",
"PesoEnKg": 12.5
}
]
},
"Autotransporte": {
"PermSCT": "TPAF01",
"NumPermisoSCT": "0X2XTXZ0X5X0X3X2X1X0",
"IdentificacionVehicular": {
"ConfigVehicular": "VL",
"PlacaVM": "ABC1234",
"AnioModeloVM": 2022,
"PesoBrutoVehicular": 3
},
"Seguros": {
"AseguraRespCivil": "SEGUROS SA",
"PolizaRespCivil": "123456"
}
},
"FiguraTransporte": [
{
"TipoFigura": "01",
"RFCFigura": "VAAM130719H60",
"NombreFigura": "OPERADOR",
"NumLicencia": "a234567890"
}
]
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
client: {id: 'client_1234567890'},
carta_porte: {
TranspInternac: 'No',
TotalDistRec: 120,
Ubicaciones: [
{
TipoUbicacion: 'Origen',
RFCRemitenteDestinatario: 'EKU9003173C9',
NombreRemitenteDestinatario: 'ESCUELA KEMPER URGATE',
FechaHoraSalidaLlegada: '2026-10-06T09:00:00',
Domicilio: {Pais: 'MEX', CodigoPostal: '42501', Estado: 'HID'}
},
{
TipoUbicacion: 'Destino',
RFCRemitenteDestinatario: 'EKU9003173C9',
NombreRemitenteDestinatario: 'ESCUELA KEMPER URGATE',
FechaHoraSalidaLlegada: '2026-10-06T13:00:00',
DistanciaRecorrida: 120,
Domicilio: {Pais: 'MEX', CodigoPostal: '03020', Estado: 'CMX'}
}
],
Mercancias: {
PesoBrutoTotal: 12.5,
UnidadPeso: 'KGM',
NumTotalMercancias: 1,
Mercancia: [
{
BienesTransp: '50202203',
Descripcion: 'Bebida embotellada',
Cantidad: 10,
ClaveUnidad: 'XBO',
PesoEnKg: 12.5
}
]
},
Autotransporte: {
PermSCT: 'TPAF01',
NumPermisoSCT: '0X2XTXZ0X5X0X3X2X1X0',
IdentificacionVehicular: {
ConfigVehicular: 'VL',
PlacaVM: 'ABC1234',
AnioModeloVM: 2022,
PesoBrutoVehicular: 3
},
Seguros: {AseguraRespCivil: 'SEGUROS SA', PolizaRespCivil: '123456'}
},
FiguraTransporte: [
{
TipoFigura: '01',
RFCFigura: 'VAAM130719H60',
NombreFigura: 'OPERADOR',
NumLicencia: 'a234567890'
}
]
}
})
};
fetch('https://api.gigstack.io/v2/invoices/transfer', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.gigstack.io/v2/invoices/transfer"
payload = {
"client": { "id": "client_1234567890" },
"carta_porte": {
"TranspInternac": "No",
"TotalDistRec": 120,
"Ubicaciones": [
{
"TipoUbicacion": "Origen",
"RFCRemitenteDestinatario": "EKU9003173C9",
"NombreRemitenteDestinatario": "ESCUELA KEMPER URGATE",
"FechaHoraSalidaLlegada": "2026-10-06T09:00:00",
"Domicilio": {
"Pais": "MEX",
"CodigoPostal": "42501",
"Estado": "HID"
}
},
{
"TipoUbicacion": "Destino",
"RFCRemitenteDestinatario": "EKU9003173C9",
"NombreRemitenteDestinatario": "ESCUELA KEMPER URGATE",
"FechaHoraSalidaLlegada": "2026-10-06T13:00:00",
"DistanciaRecorrida": 120,
"Domicilio": {
"Pais": "MEX",
"CodigoPostal": "03020",
"Estado": "CMX"
}
}
],
"Mercancias": {
"PesoBrutoTotal": 12.5,
"UnidadPeso": "KGM",
"NumTotalMercancias": 1,
"Mercancia": [
{
"BienesTransp": "50202203",
"Descripcion": "Bebida embotellada",
"Cantidad": 10,
"ClaveUnidad": "XBO",
"PesoEnKg": 12.5
}
]
},
"Autotransporte": {
"PermSCT": "TPAF01",
"NumPermisoSCT": "0X2XTXZ0X5X0X3X2X1X0",
"IdentificacionVehicular": {
"ConfigVehicular": "VL",
"PlacaVM": "ABC1234",
"AnioModeloVM": 2022,
"PesoBrutoVehicular": 3
},
"Seguros": {
"AseguraRespCivil": "SEGUROS SA",
"PolizaRespCivil": "123456"
}
},
"FiguraTransporte": [
{
"TipoFigura": "01",
"RFCFigura": "VAAM130719H60",
"NombreFigura": "OPERADOR",
"NumLicencia": "a234567890"
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"message": "Transfer invoice created",
"data": {}
}Create transfer invoice (Carta Porte)
Stamp a CFDI type T (traslado) with the Carta Porte 3.1 complement, for moving goods by road (autotransporte).
- The comprobante is fixed by the SAT:
MonedaXXX,Total0,UsoCFDIS01, noMetodoPago.currency,use,payment_methodandpayment_formare ignored if sent. - There are no
items: the CFDI conceptos are built fromcarta_porte.Mercancias.Mercancia. carta_porteuses the SAT attribute names from CartaPorte31.xsd. Numbers may be sent as numbers or numeric strings.- At least one
Origenand oneDestino; everyDestinoneedsDistanciaRecorrida.DistanciaRecorridais dropped from theOrigen. FiguraTransporteis required (forTipoFigura01, the operator, sendNumLicencia).- The series defaults to
T. - Only teams stamping through gigstack’s own PAC (CSD uploaded) can use this endpoint.
Stamping is irreversible. Use a test API key to try it without fiscal effect.
curl --request POST \
--url https://api.gigstack.io/v2/invoices/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"client": {
"id": "client_1234567890"
},
"carta_porte": {
"TranspInternac": "No",
"TotalDistRec": 120,
"Ubicaciones": [
{
"TipoUbicacion": "Origen",
"RFCRemitenteDestinatario": "EKU9003173C9",
"NombreRemitenteDestinatario": "ESCUELA KEMPER URGATE",
"FechaHoraSalidaLlegada": "2026-10-06T09:00:00",
"Domicilio": {
"Pais": "MEX",
"CodigoPostal": "42501",
"Estado": "HID"
}
},
{
"TipoUbicacion": "Destino",
"RFCRemitenteDestinatario": "EKU9003173C9",
"NombreRemitenteDestinatario": "ESCUELA KEMPER URGATE",
"FechaHoraSalidaLlegada": "2026-10-06T13:00:00",
"DistanciaRecorrida": 120,
"Domicilio": {
"Pais": "MEX",
"CodigoPostal": "03020",
"Estado": "CMX"
}
}
],
"Mercancias": {
"PesoBrutoTotal": 12.5,
"UnidadPeso": "KGM",
"NumTotalMercancias": 1,
"Mercancia": [
{
"BienesTransp": "50202203",
"Descripcion": "Bebida embotellada",
"Cantidad": 10,
"ClaveUnidad": "XBO",
"PesoEnKg": 12.5
}
]
},
"Autotransporte": {
"PermSCT": "TPAF01",
"NumPermisoSCT": "0X2XTXZ0X5X0X3X2X1X0",
"IdentificacionVehicular": {
"ConfigVehicular": "VL",
"PlacaVM": "ABC1234",
"AnioModeloVM": 2022,
"PesoBrutoVehicular": 3
},
"Seguros": {
"AseguraRespCivil": "SEGUROS SA",
"PolizaRespCivil": "123456"
}
},
"FiguraTransporte": [
{
"TipoFigura": "01",
"RFCFigura": "VAAM130719H60",
"NombreFigura": "OPERADOR",
"NumLicencia": "a234567890"
}
]
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
client: {id: 'client_1234567890'},
carta_porte: {
TranspInternac: 'No',
TotalDistRec: 120,
Ubicaciones: [
{
TipoUbicacion: 'Origen',
RFCRemitenteDestinatario: 'EKU9003173C9',
NombreRemitenteDestinatario: 'ESCUELA KEMPER URGATE',
FechaHoraSalidaLlegada: '2026-10-06T09:00:00',
Domicilio: {Pais: 'MEX', CodigoPostal: '42501', Estado: 'HID'}
},
{
TipoUbicacion: 'Destino',
RFCRemitenteDestinatario: 'EKU9003173C9',
NombreRemitenteDestinatario: 'ESCUELA KEMPER URGATE',
FechaHoraSalidaLlegada: '2026-10-06T13:00:00',
DistanciaRecorrida: 120,
Domicilio: {Pais: 'MEX', CodigoPostal: '03020', Estado: 'CMX'}
}
],
Mercancias: {
PesoBrutoTotal: 12.5,
UnidadPeso: 'KGM',
NumTotalMercancias: 1,
Mercancia: [
{
BienesTransp: '50202203',
Descripcion: 'Bebida embotellada',
Cantidad: 10,
ClaveUnidad: 'XBO',
PesoEnKg: 12.5
}
]
},
Autotransporte: {
PermSCT: 'TPAF01',
NumPermisoSCT: '0X2XTXZ0X5X0X3X2X1X0',
IdentificacionVehicular: {
ConfigVehicular: 'VL',
PlacaVM: 'ABC1234',
AnioModeloVM: 2022,
PesoBrutoVehicular: 3
},
Seguros: {AseguraRespCivil: 'SEGUROS SA', PolizaRespCivil: '123456'}
},
FiguraTransporte: [
{
TipoFigura: '01',
RFCFigura: 'VAAM130719H60',
NombreFigura: 'OPERADOR',
NumLicencia: 'a234567890'
}
]
}
})
};
fetch('https://api.gigstack.io/v2/invoices/transfer', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.gigstack.io/v2/invoices/transfer"
payload = {
"client": { "id": "client_1234567890" },
"carta_porte": {
"TranspInternac": "No",
"TotalDistRec": 120,
"Ubicaciones": [
{
"TipoUbicacion": "Origen",
"RFCRemitenteDestinatario": "EKU9003173C9",
"NombreRemitenteDestinatario": "ESCUELA KEMPER URGATE",
"FechaHoraSalidaLlegada": "2026-10-06T09:00:00",
"Domicilio": {
"Pais": "MEX",
"CodigoPostal": "42501",
"Estado": "HID"
}
},
{
"TipoUbicacion": "Destino",
"RFCRemitenteDestinatario": "EKU9003173C9",
"NombreRemitenteDestinatario": "ESCUELA KEMPER URGATE",
"FechaHoraSalidaLlegada": "2026-10-06T13:00:00",
"DistanciaRecorrida": 120,
"Domicilio": {
"Pais": "MEX",
"CodigoPostal": "03020",
"Estado": "CMX"
}
}
],
"Mercancias": {
"PesoBrutoTotal": 12.5,
"UnidadPeso": "KGM",
"NumTotalMercancias": 1,
"Mercancia": [
{
"BienesTransp": "50202203",
"Descripcion": "Bebida embotellada",
"Cantidad": 10,
"ClaveUnidad": "XBO",
"PesoEnKg": 12.5
}
]
},
"Autotransporte": {
"PermSCT": "TPAF01",
"NumPermisoSCT": "0X2XTXZ0X5X0X3X2X1X0",
"IdentificacionVehicular": {
"ConfigVehicular": "VL",
"PlacaVM": "ABC1234",
"AnioModeloVM": 2022,
"PesoBrutoVehicular": 3
},
"Seguros": {
"AseguraRespCivil": "SEGUROS SA",
"PolizaRespCivil": "123456"
}
},
"FiguraTransporte": [
{
"TipoFigura": "01",
"RFCFigura": "VAAM130719H60",
"NombreFigura": "OPERADOR",
"NumLicencia": "a234567890"
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"message": "Transfer invoice created",
"data": {}
}Authorizations
Authentication Method: HTTP Bearer token.
The runtime requires the literal Bearer prefix — a bare token in the
Authorization header is rejected with 401 unauthorized.
Header Format: Authorization: Bearer YOUR_API_KEY
Your API key is a JWT. Live keys operate on live data (livemode: true);
test keys operate on isolated test data (livemode: false).
Get your key at: app.gigstack.pro/settings?tab=api
Errors: credential failures are answered by the authentication layer with a raw
{ "message": … } body, not the standardized envelope — 401 for a missing, malformed or
expired token, 403 for a revoked key or a plan without API access. See the Unauthorized
and AuthForbidden responses.
Query Parameters
gigstack Connect: Target team ID for multi-team access.
Requires gigstack Connect enabled on your team and shared billing account.
Also requires the multipleIssuerAccounts feature on your plan. Requests targeting a
team other than the one your API key belongs to return 403 without it.
Only API keys can use it: an OAuth access token sent with another team's id is rejected with
403 Team mismatch with OAuth token.
Optional — omit it entirely unless you are acting on another team. It deliberately
carries no example value so generated snippets do not emit ?team=undefined; when the
parameter is absent, the team is derived from your API key.
Example: ?team=team_xyz789
Body
Client reference (receptor). Same format as income invoices.
Show child attributes
Show child attributes
Unix epoch milliseconds