Listar movimientos de una empresa
curl --request GET \
--url https://api.tupana.ai/v2/movements/ \
--header 'Authorization: <api-key>'import requests
url = "https://api.tupana.ai/v2/movements/"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.tupana.ai/v2/movements/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tupana.ai/v2/movements/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tupana.ai/v2/movements/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tupana.ai/v2/movements/")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v2/movements/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "move_Qm8102938475612",
"account_id": "bacc_7Hk2938475610293",
"company_id": "ment_3672486436546233854",
"amount": 450000,
"direction": "inbound",
"currency": "CLP",
"status": "pending",
"posted_movement_id": "<string>",
"transaction_date": "2023-12-25",
"post_date": "2023-12-25",
"description": "<string>",
"balance_after": 123,
"counterparty": {
"tax_id": "76.543.169-7",
"name": "Comercial Andina SpA",
"institution": {
"code": "cl_banco_de_chile",
"name": "Banco de Chile"
},
"account_number_mask": "0912"
},
"category": "customer_payment",
"card": {
"last_four": "2105",
"merchant": "AMAZON WEB SERVICES",
"installments": 123
}
}
],
"meta": {
"page": 123,
"page_size": 123,
"total": 123,
"total_pages": 123
},
"links": {
"next": "<string>",
"prev": "<string>"
}
}Movimientos
Listar movimientos de una empresa
Todos los movimientos de la empresa, de todas sus cuentas bancarias, los más nuevos primero. Cada movimiento trae la contraparte con su RUT y la razón social del maestro de entidades de Tupana. El GET nunca toca al banco.
GET
/
movements
/
Listar movimientos de una empresa
curl --request GET \
--url https://api.tupana.ai/v2/movements/ \
--header 'Authorization: <api-key>'import requests
url = "https://api.tupana.ai/v2/movements/"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.tupana.ai/v2/movements/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tupana.ai/v2/movements/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tupana.ai/v2/movements/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tupana.ai/v2/movements/")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v2/movements/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "move_Qm8102938475612",
"account_id": "bacc_7Hk2938475610293",
"company_id": "ment_3672486436546233854",
"amount": 450000,
"direction": "inbound",
"currency": "CLP",
"status": "pending",
"posted_movement_id": "<string>",
"transaction_date": "2023-12-25",
"post_date": "2023-12-25",
"description": "<string>",
"balance_after": 123,
"counterparty": {
"tax_id": "76.543.169-7",
"name": "Comercial Andina SpA",
"institution": {
"code": "cl_banco_de_chile",
"name": "Banco de Chile"
},
"account_number_mask": "0912"
},
"category": "customer_payment",
"card": {
"last_four": "2105",
"merchant": "AMAZON WEB SERVICES",
"installments": 123
}
}
],
"meta": {
"page": 123,
"page_size": 123,
"total": 123,
"total_pages": 123
},
"links": {
"next": "<string>",
"prev": "<string>"
}
}Todos los movimientos de la empresa, de todas sus cuentas bancarias, los más
nuevos primero. Es lo que usa la consola de developers para mostrar los
movimientos de un cliente. El GET nunca toca al banco.
curl "https://api.tupana.ai/v2/movements/?company_id=ment_3672486436546233854&since=2026-10-01" \
-H "Authorization: Api-Key TU_API_KEY"
{
"data": [
{
"id": "move_Qm8102938475612",
"account_id": "bacc_7Hk2938475610293",
"company_id": "ment_3672486436546233854",
"amount": 595000,
"direction": "inbound",
"currency": "CLP",
"status": "posted",
"transaction_date": "2026-10-14",
"description": "0765432103 PAGO PROVEEDOR",
"balance_after": 12016781,
"counterparty": { "tax_id": "76.543.210-3", "name": "COMERCIAL EJEMPLO SPA" }
}
],
"meta": { "page": 1, "page_size": 50, "total": 1, "total_pages": 1 },
"links": { "next": null, "prev": null }
}
company_ides obligatorio;account_idacota a una cuenta.searchbusca en la glosa, el RUT y la razón social de la contraparte.- Acepta los mismos filtros que el listado por cuenta:
since,until,direction,status,min_amountymax_amount. counterparty.namees la razón social del maestro de entidades de Tupana. Si la contraparte no está en el maestro, es el nombre que trae el banco.- Para mantener una copia al día sin releer rangos, usa
GET /v2/movements/sync/.
Authorizations
API Key para autenticación. Debe proporcionarse en el header Authorization con el formato: 'Api-Key YOUR-API-KEY' (incluye el prefijo 'Api-Key ' seguido de tu API key)
Query Parameters
Tupana ID de la empresa (ment_…).
Example:
"ment_3672486436546233854"
Acota a una cuenta (bacc_…).
Busca en la glosa, el RUT y la razón social de la contraparte.
Desde esta transaction_date, inclusive.
Hasta esta transaction_date, inclusive.
Available options:
inbound, outbound Available options:
pending, posted Sobre el monto sin signo.
Sobre el monto sin signo.
Required range:
x <= 200