curl --request GET \
--url https://api.raul.ugps.io/api/v1/activity/by-visit/{visitId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.raul.ugps.io/api/v1/activity/by-visit/{visitId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.raul.ugps.io/api/v1/activity/by-visit/{visitId}', 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.raul.ugps.io/api/v1/activity/by-visit/{visitId}",
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: Bearer <token>"
],
]);
$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.raul.ugps.io/api/v1/activity/by-visit/{visitId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.raul.ugps.io/api/v1/activity/by-visit/{visitId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.raul.ugps.io/api/v1/activity/by-visit/{visitId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"activity_id": "<string>",
"activity_type_id": 123,
"activity_type_name": "<string>",
"content": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"files_count": 123,
"item_type": "<string>",
"client_id": {},
"contact_id": {},
"visit_id": {},
"opportunity_id": {},
"quote_id": {},
"invoice_id": {},
"website_form_submission_id": {},
"created_by": {},
"created_by_name": {},
"occurred_at": {},
"edited_at": {},
"editable": true,
"contact_name": {},
"participants": [
{
"contact_id": "<string>",
"role": "<string>",
"contact_name": {},
"email": {},
"phone": {}
}
],
"websiteFormSubmission": {}
}
]Get activities for a specific visit
Get activities for a specific visit
curl --request GET \
--url https://api.raul.ugps.io/api/v1/activity/by-visit/{visitId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.raul.ugps.io/api/v1/activity/by-visit/{visitId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.raul.ugps.io/api/v1/activity/by-visit/{visitId}', 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.raul.ugps.io/api/v1/activity/by-visit/{visitId}",
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: Bearer <token>"
],
]);
$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.raul.ugps.io/api/v1/activity/by-visit/{visitId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.raul.ugps.io/api/v1/activity/by-visit/{visitId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.raul.ugps.io/api/v1/activity/by-visit/{visitId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"activity_id": "<string>",
"activity_type_id": 123,
"activity_type_name": "<string>",
"content": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"files_count": 123,
"item_type": "<string>",
"client_id": {},
"contact_id": {},
"visit_id": {},
"opportunity_id": {},
"quote_id": {},
"invoice_id": {},
"website_form_submission_id": {},
"created_by": {},
"created_by_name": {},
"occurred_at": {},
"edited_at": {},
"editable": true,
"contact_name": {},
"participants": [
{
"contact_id": "<string>",
"role": "<string>",
"contact_name": {},
"email": {},
"phone": {}
}
],
"websiteFormSubmission": {}
}
]Authorizations
Token de sesión Better Auth para rutas de backoffice; las rutas de portal usan su token propio.
Path Parameters
Visit Detail UUID
Query Parameters
Filter by activity type
Filtrar por contacto
Filter from date (ISO)
"2026-01-01"
Filter to date (ISO)
"2026-12-31"
Incluir emails en el timeline (default: true)
Agrupar emails por thread_id cuando tienen conversaciones (default: true)
WhatsApp: separar conversaciones en sesiones cuando hay inactividad >= N horas (0 = no separar). Recomendado: 24.
Response
Activities for the visit sorted by date DESC
ID de la actividad
ID del tipo de actividad
Nombre del tipo de actividad
Contenido de la actividad
Fecha de creación
Fecha de actualización
Cantidad de archivos adjuntos
Tipo de item para el timeline
ID del cliente
ID del contacto
ID de visita vinculada
ID del negocio/oportunidad vinculada
ID de la cotización vinculada
ID de la factura vinculada
ID del formulario web vinculado a la actividad
ID del usuario creador
Nombre del usuario creador
Fecha/hora efectiva de la actividad
Última edición del contenido por su autor
El usuario actual puede editar el contenido (autor de un registro manual)
Nombre del contacto asociado
Contactos participantes de la actividad
Show child attributes
Show child attributes
Formulario web estructurado vinculado a la actividad