# Buscar Tercero por Código [BETA]

<p class="callout warning">**Funcionalidad en desarrollo y pruebas:** este servicio está disponible en el ambiente de pruebas y todavía no debe usarse en producción. El funcionamiento, los campos y los mensajes de error pueden cambiar antes del despliegue definitivo.</p>

Este servicio devuelve el **detalle completo de un tercero** a partir de su identificador interno en nuby (`tercero_id`): documento, nombres y apellidos por separado, datos de contacto, ubicación (municipio, departamento y país) y sus tipos o roles.

Úsalo después de crear o resolver un tercero, o cuando ya guardaste su `tercero_id` y necesitas todos sus datos sin volver a buscarlo por documento.

<p class="callout info">**¿Para qué sirve este servicio?**  
Los casos de uso más frecuentes de este servicio son:</p>

<div class="page-content" dir="auto" id="bkmrk-mostrar-el-detalle-c"><div dir="auto">- **Mostrar el detalle completo de un tercero** en tu interfaz, con nombres y apellidos por separado.
- **Recuperar el contacto y la ubicación** del tercero (municipio, departamento y país) sin volver a buscarlo por documento.
- **Confirmar los tipos o roles** del tercero antes de usarlo en otro proceso.
- **Evitar guardar datos derivados** como `nombre_completo`: nuby los entrega listos.

---

  </div></div>#### **1. El Endpoint (La dirección web)**

##### **Método y dirección**

<div class="page-content" dir="auto" id="bkmrk-dato-valor-m%C3%A9todo-ge"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 23%;"></col><col style="width: 77%;"></col></colgroup><thead><tr><th>Dato</th><th>Valor</th></tr></thead><tbody><tr><td>Método</td><td>`GET`</td></tr><tr><td>Recurso</td><td>`/third-parties/{tercero_id}`</td></tr><tr><td>Cuerpo de la petición</td><td>No se envía cuerpo</td></tr></tbody></table>

</div></div>```http
GET https://{{instancia}}/service/v2/public/third-parties/{tercero_id}
```

**¿Qué debes colocar en `{{instancia}}`?** La dirección web principal con la que ingresas a tu plataforma, incluyendo la terminación `.nuby.app` o `.arrendasoft.co`, sin `https://` y sin barras diagonales al final.

##### **Encabezados requeridos**

<div class="page-content" dir="auto" id="bkmrk-encabezado-valor-aut"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 22%;"></col><col style="width: 78%;"></col></colgroup><thead><tr><th>Encabezado</th><th>Valor</th></tr></thead><tbody><tr><td>`Authorization`</td><td>`Bearer <token>`, con el token obtenido en el servicio **Login**.</td></tr></tbody></table>

</div></div>##### **Permiso requerido (scope)**

Este servicio es de **solo lectura** y exige el permiso `catalogs:read` en el cliente OAuth. Si el token es válido pero al cliente le falta el permiso, la respuesta es `403` con el código `RECURSO_NO_AUTORIZADO`.

<p class="callout info">Si aún no tienes un token, consulta la página [*<span class="tw-font-bold tw-text-arrBlue hover:tw-text-nubyBlue tw-cursor-pointer">Login</span>*](https://docs.nuby.ai/books/api-nuby-v2/page/login) del libro **API nuby V2**.</p>

<div class="page-content" dir="auto" id="bkmrk-"><div dir="auto">  </div></div>#### **2. La Petición (¿Qué debes enviarnos?)**

Este servicio **no requiere cuerpo**: el único dato que envías es el identificador del tercero, que va en la dirección. Los encabezados requeridos se describen en la sección 1.

**`{tercero_id}`** es el identificador interno que devuelve nuby al crear o listar terceros. Debe ser un número: la dirección solo acepta dígitos.

##### **Parámetros de la ruta (path)**

<div class="page-content" dir="auto" id="bkmrk-par%C3%A1metro-tipo-reque"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 22%;"></col><col style="width: 8%;"></col><col style="width: 9%;"></col><col style="width: 61%;"></col></colgroup><thead><tr><th>Parámetro</th><th>Tipo</th><th>Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td>`tercero_id`</td><td>entero</td><td>Sí</td><td>Identificador interno del tercero. Va en la dirección, después de `/third-parties/`, y define qué tercero se devuelve.</td></tr></tbody></table>

  </div></div>#### **3. La Respuesta (¿Qué te entregaremos?)**

```json
{
  "status": 200,
  "message": null,
  "body": {
    "tercero_id": 123,
    "documento": "900123456",
    "dv": null,
    "tipo_doc_id": 1,
    "tipo_doc": "NIT",
    "nombre1": "ACME",
    "nombre2": null,
    "apellido1": "SAS",
    "apellido2": null,
    "nombre_completo": "ACME SAS",
    "direccion1": "CL 1 #2-3",
    "direccion2": null,
    "telefono1": "6040000000",
    "telefono2": null,
    "fax": null,
    "email": "cuenta@acme.co",
    "email_cumpleanos": null,
    "persona": 2,
    "tipo_persona_id": null,
    "regimen_id": null,
    "resp_fiscal_id": null,
    "tratamiento_id": null,
    "autoretenedor": null,
    "gran_contribuyente": null,
    "banco_id": null,
    "intTipoCuentaB": null,
    "no_cuenta": null,
    "aplica_documento_soporte": null,
    "codigo_postal": null,
    "municipio_id": 1,
    "municipio": "Medellin",
    "departamento": "Antioquia",
    "pais": "Colombia",
    "tipo_tercero_id": "1,2",
    "tipos": [1, 2]
  },
  "pagination": null,
  "filters_applied": null
}
```

<p class="callout info">**Nota sobre el envelope:** esta es una consulta de un solo registro, así que `pagination` y `filters_applied` siempre vienen en `null`.</p>

##### **Campos del detalle**

<p class="callout warning">**Importante:** la columna “Puede ser `null`” describe el contrato del endpoint para terceros creados o actualizados por la API. En terceros históricos de nuby algunos campos que hoy son obligatorios pueden estar vacíos o en `null`; no asumas que un campo marcado “No” siempre trae valor.</p>

<div class="page-content" dir="auto" id="bkmrk-campo-tipo-puede-ser"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 26%;"></col><col style="width: 8%;"></col><col style="width: 11%;"></col><col style="width: 55%;"></col></colgroup><thead><tr><th>Campo</th><th>Tipo</th><th>Puede ser `null`</th><th>Descripción</th></tr></thead><tbody><tr><td>`tercero_id`</td><td>entero</td><td>No</td><td>Identificador interno del tercero en nuby.</td></tr><tr><td>`documento`</td><td>texto</td><td>No</td><td>Número de documento o NIT.</td></tr><tr><td>`dv`</td><td>texto</td><td>Sí</td><td>Dígito de verificación, si está registrado.</td></tr><tr><td>`tipo_doc_id`</td><td>entero</td><td>No</td><td>Identificador del tipo de documento.</td></tr><tr><td>`tipo_doc`</td><td>texto</td><td>Sí</td><td>Nombre del tipo de documento (por ejemplo, NIT); puede ser `null` si el catálogo no lo resuelve.</td></tr><tr><td>`nombre1`</td><td>texto</td><td>No</td><td>Primer nombre o razón social. En una empresa, la razón social viene en este campo.</td></tr><tr><td>`nombre2`</td><td>texto</td><td>Sí</td><td>Segundo nombre, si está registrado.</td></tr><tr><td>`apellido1`</td><td>texto</td><td>Sí</td><td>Primer apellido, si está registrado.</td></tr><tr><td>`apellido2`</td><td>texto</td><td>Sí</td><td>Segundo apellido, si está registrado.</td></tr><tr><td>`nombre_completo`</td><td>texto</td><td>No</td><td>Nombre unificado, listo para mostrar.</td></tr><tr><td>`direccion1`</td><td>texto</td><td>No</td><td>Dirección principal.</td></tr><tr><td>`direccion2`</td><td>texto</td><td>Sí</td><td>Dirección secundaria.</td></tr><tr><td>`telefono1`</td><td>texto</td><td>Sí</td><td>Teléfono principal.</td></tr><tr><td>`telefono2`</td><td>texto</td><td>Sí</td><td>Teléfono secundario.</td></tr><tr><td>`fax`</td><td>texto</td><td>Sí</td><td>Fax registrado.</td></tr><tr><td>`email`</td><td>texto</td><td>Sí</td><td>Correo principal.</td></tr><tr><td>`email_cumpleanos`</td><td>texto</td><td>Sí</td><td>Correo alterno para cumpleaños.</td></tr><tr><td>`persona`</td><td>entero</td><td>Sí</td><td>`1` persona natural, `2` persona jurídica.</td></tr><tr><td>`tipo_persona_id`</td><td>entero</td><td>Sí</td><td>Identificador de la maestra de tipo de persona.</td></tr><tr><td>`regimen_id`</td><td>entero</td><td>Sí</td><td>Identificador del régimen tributario.</td></tr><tr><td>`resp_fiscal_id`</td><td>entero</td><td>Sí</td><td>Identificador de la responsabilidad fiscal.</td></tr><tr><td>`tratamiento_id`</td><td>entero</td><td>Sí</td><td>Identificador de la maestra de tratamiento.</td></tr><tr><td>`autoretenedor`</td><td>indicador</td><td>Sí</td><td>Indicador de autorretenedor.</td></tr><tr><td>`gran_contribuyente`</td><td>indicador</td><td>Sí</td><td>Indicador de gran contribuyente.</td></tr><tr><td>`banco_id`</td><td>entero</td><td>Sí</td><td>Identificador del banco.</td></tr><tr><td>`intTipoCuentaB`</td><td>entero</td><td>Sí</td><td>Tipo de cuenta bancaria.</td></tr><tr><td>`no_cuenta`</td><td>texto</td><td>Sí</td><td>Número de cuenta bancaria.</td></tr><tr><td>`aplica_documento_soporte`</td><td>indicador</td><td>Sí</td><td>Indicador de documento soporte.</td></tr><tr><td>`codigo_postal`</td><td>texto</td><td>Sí</td><td>Código postal.</td></tr><tr><td>`municipio_id`</td><td>entero</td><td>No</td><td>Identificador del municipio.</td></tr><tr><td>`municipio`</td><td>texto</td><td>Sí</td><td>Nombre del municipio resuelto.</td></tr><tr><td>`departamento`</td><td>texto</td><td>Sí</td><td>Nombre del departamento resuelto.</td></tr><tr><td>`pais`</td><td>texto</td><td>Sí</td><td>Nombre del país resuelto.</td></tr><tr><td>`tipo_tercero_id`</td><td>texto</td><td>Sí</td><td>Tipos del tercero en una cadena separada por comas, por ejemplo `"1,2"`.</td></tr><tr><td>`tipos`</td><td>arreglo</td><td>Sí</td><td>Los mismos tipos como arreglo de enteros ordenado de menor a mayor, por ejemplo `[1, 2]`.</td></tr></tbody></table>

</div></div><p class="callout warning">**Importante:** los campos que no tienen valor registrado vienen en `null`, no se omiten. Verifica `null` antes de usar un dato en tu interfaz.</p>

##### **Variantes de respuesta**

El detalle cambia según el tipo de persona y los roles del tercero. Los identificadores y etiquetas de las maestras (`tipo_doc`) varían por instancia; los ejemplos usan Cédula y NIT como referencia.

##### **Persona natural**

```json
{
  "status": 200,
  "message": null,
  "body": {
    "tercero_id": 124,
    "documento": "1020304050",
    "dv": null,
    "tipo_doc_id": 2,
    "tipo_doc": "Cédula",
    "nombre1": "MARÍA",
    "nombre2": null,
    "apellido1": "GÓMEZ",
    "apellido2": null,
    "nombre_completo": "MARÍA GÓMEZ",
    "direccion1": "CL 10 #5-20",
    "direccion2": null,
    "telefono1": "3001234567",
    "telefono2": null,
    "fax": null,
    "email": "maria.gomez@example.co",
    "email_cumpleanos": null,
    "persona": 1,
    "tipo_persona_id": null,
    "regimen_id": null,
    "resp_fiscal_id": null,
    "tratamiento_id": null,
    "autoretenedor": null,
    "gran_contribuyente": null,
    "banco_id": null,
    "intTipoCuentaB": null,
    "no_cuenta": null,
    "aplica_documento_soporte": null,
    "codigo_postal": null,
    "municipio_id": 1,
    "municipio": "Medellin",
    "departamento": "Antioquia",
    "pais": "Colombia",
    "tipo_tercero_id": "2",
    "tipos": [2]
  },
  "pagination": null,
  "filters_applied": null
}
```

En una persona natural, `nombre2` y `apellido2` pueden venir en `null` si no están registrados. Los campos tributarios y bancarios también pueden ser `null`.

##### **Persona jurídica**

```json
{
  "status": 200,
  "message": null,
  "body": {
    "tercero_id": 123,
    "documento": "900123456",
    "dv": null,
    "tipo_doc_id": 1,
    "tipo_doc": "NIT",
    "nombre1": "ACME",
    "nombre2": null,
    "apellido1": "SAS",
    "apellido2": null,
    "nombre_completo": "ACME SAS",
    "direccion1": "CL 1 #2-3",
    "direccion2": null,
    "telefono1": "6040000000",
    "telefono2": null,
    "fax": null,
    "email": "cuenta@acme.co",
    "email_cumpleanos": null,
    "persona": 2,
    "tipo_persona_id": null,
    "regimen_id": null,
    "resp_fiscal_id": null,
    "tratamiento_id": null,
    "autoretenedor": null,
    "gran_contribuyente": null,
    "banco_id": null,
    "intTipoCuentaB": null,
    "no_cuenta": null,
    "aplica_documento_soporte": null,
    "codigo_postal": null,
    "municipio_id": 1,
    "municipio": "Medellin",
    "departamento": "Antioquia",
    "pais": "Colombia",
    "tipo_tercero_id": "1",
    "tipos": [1]
  },
  "pagination": null,
  "filters_applied": null
}
```

En una persona jurídica, la razón social viene en `nombre1` y el NIT en `documento`. `apellido1` puede contener la terminación societaria o venir en `null`.

##### **Tercero con varios tipos**

```json
{
  "status": 200,
  "message": null,
  "body": {
    "tercero_id": 125,
    "documento": "901234567",
    "dv": null,
    "tipo_doc_id": 1,
    "tipo_doc": "NIT",
    "nombre1": "INVERSIONES ANDINAS SAS",
    "nombre2": null,
    "apellido1": null,
    "apellido2": null,
    "nombre_completo": "INVERSIONES ANDINAS SAS",
    "direccion1": "CR 43A #1-50",
    "direccion2": null,
    "telefono1": "6044445555",
    "telefono2": null,
    "fax": null,
    "email": "contacto@andinas.co",
    "email_cumpleanos": null,
    "persona": 2,
    "tipo_persona_id": null,
    "regimen_id": null,
    "resp_fiscal_id": null,
    "tratamiento_id": null,
    "autoretenedor": null,
    "gran_contribuyente": null,
    "banco_id": null,
    "intTipoCuentaB": null,
    "no_cuenta": null,
    "aplica_documento_soporte": null,
    "codigo_postal": null,
    "municipio_id": 1,
    "municipio": "Medellin",
    "departamento": "Antioquia",
    "pais": "Colombia",
    "tipo_tercero_id": "1,2",
    "tipos": [1, 2]
  },
  "pagination": null,
  "filters_applied": null
}
```

##### **Comparación de variantes**

<div class="page-content" dir="auto" id="bkmrk-variante-persona-tip"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 22%;"></col><col style="width: 14%;"></col><col style="width: 14%;"></col><col style="width: 50%;"></col></colgroup><thead><tr><th>Variante</th><th>`persona`</th><th>`tipos`</th><th>Qué cambia</th></tr></thead><tbody><tr><td>Persona natural</td><td>`1`</td><td>`[2]`</td><td>Nombres y apellidos por separado; documento que no es NIT.</td></tr><tr><td>Persona jurídica</td><td>`2`</td><td>`[1]`</td><td>Razón social en `nombre1`; documento de tipo NIT.</td></tr><tr><td>Varios tipos</td><td>`1` o `2`</td><td>`[1, 2]`</td><td>`tipo_tercero_id` es `"1,2"` y `tipos` repite los mismos valores.</td></tr></tbody></table>

</div></div>##### **Campos que no devuelve el detalle**

Algunos datos se aceptan al crear el tercero, pero no forman parte de la respuesta de lectura. No los esperes en el `body`:

<div class="page-content" dir="auto" id="bkmrk-campo-por-qu%C3%A9-no-apa"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 34%;"></col><col style="width: 14%;"></col><col style="width: 52%;"></col></colgroup><thead><tr><th>Campo</th><th>Por qué no aparece</th><th>Dónde consultarlo</th></tr></thead><tbody><tr><td>`sexo`</td><td>No forma parte del contrato de lectura.</td><td>Módulo de terceros de nuby.</td></tr><tr><td>`fecha_nacimiento`</td><td>No forma parte del contrato de lectura.</td><td>Módulo de terceros de nuby.</td></tr><tr><td>`autore_res`</td><td>Es un dato de creación que el detalle no devuelve.</td><td>Información tributaria del tercero, en nuby.</td></tr><tr><td>`gran_contr_res`</td><td>Es un dato de creación que el detalle no devuelve.</td><td>Información tributaria del tercero, en nuby.</td></tr><tr><td>`representante`</td><td>No se incluye en la respuesta de lectura.</td><td>Módulo de terceros de nuby.</td></tr><tr><td>`representante_legal`</td><td>No se incluye en la respuesta de lectura.</td><td>Módulo de terceros de nuby.</td></tr><tr><td>`certificado`</td><td>Es un dato de creación, no de consulta.</td><td>Módulo de terceros de nuby.</td></tr><tr><td>Contactos, archivos, bitácoras y documentos</td><td>No forman parte de esta API.</td><td>Módulo de terceros de nuby.</td></tr></tbody></table>

</div></div>##### **Campos del envelope**

<div class="page-content" dir="auto" id="bkmrk-campo-valor-en-el-de"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 22%;"></col><col style="width: 14%;"></col><col style="width: 64%;"></col></colgroup><thead><tr><th>Campo</th><th>Valor en el detalle</th><th>Significado</th></tr></thead><tbody><tr><td>`status`</td><td>`200`</td><td>Consulta exitosa.</td></tr><tr><td>`message`</td><td>`null`</td><td>No hay mensaje informativo en una consulta con resultados.</td></tr><tr><td>`body`</td><td>Objeto con el detalle</td><td>Cabecera, datos de contacto, ubicación, información tributaria y tipos.</td></tr><tr><td>`pagination`</td><td>`null`</td><td>Es un solo registro, no una lista paginada.</td></tr><tr><td>`filters_applied`</td><td>`null`</td><td>La ruta usa el identificador, no filtros de consulta.</td></tr></tbody></table>

  </div></div>#### **4. Seguridad y Posibles Errores**

<div class="page-content" dir="auto" id="bkmrk-http-error_code-cu%C3%A1n"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 22%;"></col><col style="width: 14%;"></col><col style="width: 64%;"></col></colgroup><thead><tr><th>HTTP</th><th>`error_code`</th><th>Cuándo ocurre y cómo resolverlo</th></tr></thead><tbody><tr><td>`401`</td><td>—</td><td>No enviaste el encabezado `Authorization`, o el token no existe o expiró. Vuelve a consumir **Login**.</td></tr><tr><td>`403`</td><td>`CONSUMIDOR_NO_AUTENTICADO`</td><td>El token es válido, pero no corresponde a un cliente OAuth habilitado para consumir la API.</td></tr><tr><td>`403`</td><td>`RECURSO_NO_AUTORIZADO`</td><td>Al cliente OAuth le falta el permiso `catalogs:read`.</td></tr><tr><td>`404`</td><td>`TERCERO_NO_ENCONTRADO`</td><td>No existe un tercero con ese identificador. Verifica el `tercero_id` o búscalo por documento en la página **Listar Terceros**.</td></tr><tr><td>`500`</td><td>`INTERNAL_ERROR`</td><td>Fallo interno al consultar. Reintenta; si persiste, contacta a soporte.</td></tr></tbody></table>

</div></div>##### **Errores frecuentes y solución**

<div class="page-content" dir="auto" id="bkmrk-c%C3%B3digo-causa-qu%C3%A9-hac"><div dir="auto"><table style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 27%;"></col><col style="width: 14%;"></col><col style="width: 59%;"></col></colgroup><thead><tr><th>Código</th><th>Causa</th><th>Qué hacer</th></tr></thead><tbody><tr><td>`401`</td><td>No enviaste el token o ya expiró.</td><td>Vuelve a consumir **Login** y repite la consulta.</td></tr><tr><td>`403 RECURSO_NO_AUTORIZADO`</td><td>Al cliente OAuth le falta el permiso `catalogs:read`.</td><td>Solicita el scope a tu administrador en nuby.</td></tr><tr><td>`404 TERCERO_NO_ENCONTRADO`</td><td>El `tercero_id` no existe en nuby.</td><td>Verifica el identificador o busca por documento con **Listar Terceros**.</td></tr><tr><td>`404 TERCERO_NO_ENCONTRADO`</td><td>Enviaste el documento en la ruta (`/third-parties/900123456`) en lugar del identificador interno.</td><td>Usa `/third-parties/list?documento=...` para resolver el documento.</td></tr><tr><td>`500 INTERNAL_ERROR`</td><td>Fallo interno al consultar.</td><td>Reintenta; si persiste, contacta a soporte con el `tercero_id` consultado.</td></tr></tbody></table>

</div></div>##### **Ejemplo de tercero inexistente (404)**

```json
{
  "success": false,
  "status": 404,
  "message": "No se encontró el tercero con el código solicitado.",
  "error_code": "TERCERO_NO_ENCONTRADO"
}
```

<p class="callout warning">**Ojo con el identificador:** `tercero_id` es el número interno de nuby, no el documento del tercero. Si envías un documento en la dirección (por ejemplo `/third-parties/900123456`), no obtendrás el tercero que buscas. Para buscar por documento usa `/third-parties/list?documento=...`.</p>

<div class="page-content" dir="auto" id="bkmrk--1"><div dir="auto">  ---

</div></div>#### **5. Ejemplos de integración**

<div class="page-content" dir="auto" id="bkmrk-curl-token%3D%22tu_token"><div dir="auto"><details><summary>cURL</summary>

```bash
TOKEN="TU_TOKEN_AQUI"
INSTANCIA="tu-inmobiliaria.nuby.app"
TERCERO_ID=123

curl "https://${INSTANCIA}/service/v2/public/third-parties/${TERCERO_ID}" \
  -H "Authorization: Bearer ${TOKEN}"
```

</details><details><summary>PHP</summary>

```php
<?php

$instancia = 'tu-inmobiliaria.nuby.app';
$token = 'TU_TOKEN_AQUI';
$terceroId = 123;

$url = "https://{$instancia}/service/v2/public/third-parties/{$terceroId}";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer {$token}",
]);

$respuesta = curl_exec($ch);
$codigo = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$datos = json_decode($respuesta, true);

if ($codigo === 200) {
    $tercero = $datos['body'];
    echo $tercero['documento'] . ' - ' . $tercero['nombre_completo'] . "\n";
    echo $tercero['municipio'] . ', ' . $tercero['departamento'] . "\n";
} else {
    echo "HTTP {$codigo}: " . $datos['message'] . "\n";
}
```

</details><details><summary>Python</summary>

```python
import requests

instancia = "tu-inmobiliaria.nuby.app"
token = "TU_TOKEN_AQUI"
tercero_id = 123
url = f"https://{instancia}/service/v2/public/third-parties/{tercero_id}"

headers = {
    "Authorization": f"Bearer {token}",
}

respuesta = requests.get(url, headers=headers, timeout=30)

if respuesta.status_code == 200:
    tercero = respuesta.json()["body"]
    print(tercero["documento"], "-", tercero["nombre_completo"])
    print(tercero["municipio"], ",", tercero["departamento"], "-", tercero["pais"])
    print("Tipos:", tercero["tipos"])
else:
    print(respuesta.status_code, respuesta.json())
```

</details><details><summary>JavaScript (Fetch API)</summary>

```javascript
const instancia = 'tu-inmobiliaria.nuby.app';
const token = 'TU_TOKEN_AQUI';
const terceroId = 123;

const url = `https://${instancia}/service/v2/public/third-parties/${terceroId}`;

const respuesta = await fetch(url, {
  headers: { 'Authorization': `Bearer ${token}` }
});

const data = await respuesta.json();

if (respuesta.ok) {
  const tercero = data.body;
  console.log(tercero.nombre_completo, tercero.documento);
  console.log('Tipos:', tercero.tipos);
} else {
  console.error(`${respuesta.status} ${data.error_code}: ${data.message}`);
}
```

</details><details><summary>Power Query M (Excel / Power BI)</summary>

Power Query convierte el detalle en una tabla de una fila. Los campos anidados, como `tipos`, se conservan como lista y puedes expandirlos si necesitas una fila por tipo.

```m
let
    // 1. Configura tus datos de acceso
    instancia = "tu-inmobiliaria.nuby.app",
    token = "TU_TOKEN_AQUI",
    terceroId = "123",

    // 2. Prepara la dirección de la petición
    url = "https://" & instancia & "/service/v2/public/third-parties/" & terceroId,

    // 3. Envía la petición GET
    response = Web.Contents(url, [
        Headers = [
            #"Authorization" = "Bearer " & token
        ]
    ]),

    // 4. Decodifica la respuesta JSON
    jsonResponse = Json.Document(response),
    body = jsonResponse[body],

    // 5. Convierte el detalle en tabla
    tabla = Table.FromList({body}, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    expandido = Table.ExpandRecordColumn(tabla, "Column1",
        {"tercero_id", "documento", "dv", "tipo_doc_id", "tipo_doc",
         "nombre1", "nombre2", "apellido1", "apellido2", "nombre_completo",
         "direccion1", "direccion2", "telefono1", "telefono2", "fax",
         "email", "email_cumpleanos", "persona", "tipo_persona_id",
         "regimen_id", "resp_fiscal_id", "tratamiento_id", "autoretenedor",
         "gran_contribuyente", "banco_id", "intTipoCuentaB", "no_cuenta",
         "aplica_documento_soporte", "codigo_postal", "municipio_id",
         "municipio", "departamento", "pais", "tipo_tercero_id", "tipos"},
        {"TerceroID", "Documento", "DV", "TipoDocID", "TipoDoc",
         "Nombre1", "Nombre2", "Apellido1", "Apellido2", "NombreCompleto",
         "Direccion1", "Direccion2", "Telefono1", "Telefono2", "Fax",
         "Email", "EmailCumpleanos", "Persona", "TipoPersonaID",
         "RegimenID", "RespFiscalID", "TratamientoID", "Autoretenedor",
         "GranContribuyente", "BancoID", "IntTipoCuentaB", "NoCuenta",
         "AplicaDocumentoSoporte", "CodigoPostal", "MunicipioID",
         "Municipio", "Departamento", "Pais", "TipoTerceroID", "Tipos"}),
    tipos = Table.TransformColumnTypes(expandido, {
        {"TerceroID", Int64.Type},
        {"TipoDocID", Int64.Type},
        {"MunicipioID", Int64.Type},
        {"Persona", Int64.Type}
    })
in
    tipos
```

</details></div></div>#### **6. Buenas prácticas y límites conocidos**

##### **Recomendaciones**

<div class="page-content" dir="auto" id="bkmrk-consulta-el-detalle-"><div dir="auto">- **Consulta el detalle solo cuando lo necesites.** Si solo vas a usar el identificador, la respuesta de **Crear o Resolver Tercero** ya te lo entrega.
- **Usa `nombre_completo` para mostrar** y los campos separados (`nombre1`, `apellido1`, ...) cuando necesites componer un formato propio.
- **Trata el `404` como un caso de negocio**, no como una falla técnica: significa que el identificador no existe en nuby.
- **Recuerda que los campos ausentes vienen en `null`**; no supongas cadenas vacías.

</div></div>##### **Límites de este servicio**

<div class="page-content" dir="auto" id="bkmrk-solo-devuelve-tercer"><div dir="auto">- Solo devuelve terceros que **existen** en nuby; no consulta maestras ni catálogos.
- El detalle **no incluye** algunos datos que sí se pueden enviar al crear el tercero, como `sexo`, `fecha_nacimiento`, `autore_res`, `gran_contr_res`, `representante`, `representante_legal` o `certificado`.
- El detalle **no incluye** contactos, archivos, bitácoras ni documentos del tercero.

</div></div><p class="callout info">Para buscar por documento o listar terceros, revisa la página [*<span class="tw-font-bold tw-text-arrBlue hover:tw-text-nubyBlue tw-cursor-pointer">Listar Terceros</span>*](https://docs.nuby.ai/books/api-nuby-v2/page/listar-terceros). Para crear un tercero nuevo o resolver uno existente, revisa [*<span class="tw-font-bold tw-text-arrBlue hover:tw-text-nubyBlue tw-cursor-pointer">Crear o Resolver Tercero</span>*](https://docs.nuby.ai/books/api-nuby-v2/page/crear-o-resolver-tercero).</p>