> ## Documentation Index
> Fetch the complete documentation index at: https://a3erpapi.appcloud.es/llms.txt
> Use this file to discover all available pages before exploring further.

# CRM A3ERP: gestiona acciones, tareas y actividades

> Consulta, crea, modifica y elimina acciones CRM (tareas, citas y emails) en A3ERP. Filtra y ordena el listado de acciones con los endpoints de CRM.

El módulo CRM de A3ERP te permite registrar y gestionar toda la actividad comercial con tus clientes y contactos: tareas pendientes, citas programadas y comunicaciones por email. Estos endpoints te dan acceso completo a las acciones CRM, desde la consulta filtrada del histórico hasta la creación, modificación y borrado de registros individuales. Además, en esta misma sección encontrarás los endpoints de impresión de documentos y eliminación de líneas de documento.

<Tip>
  Todos los endpoints de CRM requieren la cabecera `Authorization: Bearer {token}`.
</Tip>

***

## Consultar acciones CRM

### Consultar todas las acciones

Devuelve el listado completo de acciones CRM registradas en el sistema.

```http theme={null}
GET https://api.appcloud.es/api/crm/acciones
```

**Ejemplo de petición**

```http theme={null}
GET /api/crm/acciones HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
Accept: */*
```

**Respuesta `200`** — Array de objetos acción CRM.

***

### Filtrar acciones

Devuelve el listado de acciones que cumplen con el filtro especificado.

```http theme={null}
GET https://api.appcloud.es/api/crm/filtro/{filtro}
```

<ParamField path="filtro" type="string" required>
  Expresión de filtro a aplicar sobre las acciones CRM (p. ej., `TipoAccion='Tarea'`).
</ParamField>

**Ejemplo de petición**

```http theme={null}
GET /api/crm/filtro/TipoAccion%3D'Tarea' HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
```

***

### Ordenar acciones

Devuelve el listado de acciones ordenadas según el criterio indicado.

```http theme={null}
GET https://api.appcloud.es/api/crm/order/{order}
```

<ParamField path="order" type="string" required>
  Criterio de ordenamiento (p. ej., nombre de campo ascendente o descendente).
</ParamField>

**Ejemplo de petición**

```http theme={null}
GET /api/crm/order/FecPrevista HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
```

***

### Filtrar y ordenar acciones

Combina filtrado y ordenación en una sola llamada.

```http theme={null}
GET https://api.appcloud.es/api/crm/filtro/{filtro}/order/{order}
```

<ParamField path="filtro" type="string" required>
  Expresión de filtro a aplicar.
</ParamField>

<ParamField path="order" type="string" required>
  Criterio de ordenamiento de los resultados.
</ParamField>

**Ejemplo de petición**

```http theme={null}
GET /api/crm/filtro/TipoAccion%3D'Email'/order/FecPrevista HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
```

***

## Crear acción CRM

Crea una nueva acción CRM en A3ERP. Todos los campos del cuerpo son opcionales; la combinación de campos que envíes determinará el tipo y los datos de la acción.

```http theme={null}
POST https://api.appcloud.es/api/crm/acciones/crear
```

**Cuerpo de la petición (application/json)**

<ParamField body="TipoAccion" type="string">
  Tipo de acción. Valores posibles: `Tarea`, `Cita`, `Email`.
</ParamField>

<ParamField body="CodPer" type="string">
  Código del comercial o persona responsable de la acción.
</ParamField>

<ParamField body="FecAlta" type="string">
  Fecha de alta o creación de la acción (formato `DD/MM/YYYY`).
</ParamField>

<ParamField body="FecPrevista" type="string">
  Fecha prevista de realización. Si no se indica, se toma la fecha actual en el momento de la llamada.
</ParamField>

<ParamField body="HoraPrevista" type="string">
  Hora prevista de realización. Si no se indica, se toma la hora actual en el momento de la llamada.
</ParamField>

<ParamField body="CodCanal" type="string">
  Código del canal de comunicación.
</ParamField>

<ParamField body="Idcontacto" type="string">
  ID del contacto vinculado a la acción. Si se proporciona, el email se toma automáticamente del registro del contacto, ignorando el campo `Email`.
</ParamField>

<ParamField body="Email" type="string">
  Dirección de email. Solo se usa si no se ha proporcionado `Idcontacto`.
</ParamField>

<ParamField body="GastoImporte" type="string">
  Importe del gasto asociado a la acción.
</ParamField>

<ParamField body="CodMotivo" type="string">
  Código del motivo de la acción.
</ParamField>

<ParamField body="IdOrg" type="string">
  ID de la organización o empresa vinculada a la acción.
</ParamField>

<ParamField body="observaciones" type="string">
  Texto libre con observaciones sobre la acción.
</ParamField>

<ParamField body="telefono" type="string">
  Número de teléfono de contacto.
</ParamField>

<ParamField body="texto" type="string">
  Asunto de la acción (corresponde al campo "Asunto" en la interfaz de A3ERP).
</ParamField>

<ParamField body="tipocont" type="string">
  Tipo de contrato asociado.
</ParamField>

<ParamField body="cc" type="string">
  Dirección(es) en copia (CC) para acciones de tipo `Email`.
</ParamField>

<ParamField body="cco" type="string">
  Dirección(es) en copia oculta (CCO/BCC) para acciones de tipo `Email`.
</ParamField>

**Ejemplo de petición**

```http theme={null}
POST /api/crm/acciones/crear HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
Content-Type: application/json

{
  "TipoAccion": "Tarea",
  "CodPer": "VEN01",
  "FecPrevista": "10/09/2023",
  "HoraPrevista": "09:00",
  "texto": "Llamar para seguimiento de presupuesto",
  "observaciones": "Cliente interesado en la línea premium",
  "IdOrg": "CLI001"
}
```

<Note>
  Si no se indica `FecPrevista` ni `HoraPrevista`, la API asigna automáticamente la fecha y hora actuales en el momento de la llamada. Si incluyes `Idcontacto`, el email se tomará siempre del registro del contacto, aunque envíes el campo `Email` en el cuerpo.
</Note>

**Respuesta `200`**

```json theme={null}
{ "message": "Articulo creado correctamente" }
```

***

## Modificar acción CRM

Actualiza los datos de una acción CRM existente. Envía únicamente los campos que deseas modificar.

```http theme={null}
PUT https://api.appcloud.es/api/crm/acciones/modificar/{idaccion}
```

<ParamField path="idaccion" type="integer" required>
  ID numérico de la acción a modificar.
</ParamField>

**Cuerpo de la petición (application/json)**

Acepta los mismos campos que el endpoint de creación, a excepción de `TipoAccion`.

<Warning>
  El campo `TipoAccion` no puede modificarse una vez creada la acción. Si lo incluyes en el cuerpo, será ignorado.
</Warning>

**Ejemplo de petición**

```http theme={null}
PUT /api/crm/acciones/modificar/1042 HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
Content-Type: application/json

{
  "FecPrevista": "15/09/2023",
  "observaciones": "Reprogramada por solicitud del cliente"
}
```

**Respuesta `200`**

```json theme={null}
{ "message": "Articulo creado correctamente" }
```

***

## Borrar acción CRM

Elimina de forma permanente una acción CRM del sistema.

```http theme={null}
DELETE https://api.appcloud.es/api/crm/acciones/borrar/{idaccion}
```

<ParamField path="idaccion" type="integer" required>
  ID numérico de la acción a borrar.
</ParamField>

**Ejemplo de petición**

```http theme={null}
DELETE /api/crm/acciones/borrar/1042 HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
```

**Respuesta `200`** — La acción ha sido borrada correctamente.

<Warning>
  Esta operación es irreversible. Asegúrate de que la acción que vas a borrar no esté vinculada a procesos activos antes de eliminarla.
</Warning>

***

## Impresión de documentos

Obtiene los datos de impresión de un documento en formato Base64, listo para renderizar o descargar como PDF.

```http theme={null}
GET https://api.appcloud.es/api/documento/{tipo}/impresion/{id}
```

<ParamField path="tipo" type="string" required>
  Tipo de documento a imprimir (p. ej., `pedido`, `albaran`, `factura`).
</ParamField>

<ParamField path="id" type="string" required>
  ID del documento cuya impresión se desea obtener.
</ParamField>

**Ejemplo de petición**

```http theme={null}
GET /api/documento/factura/impresion/1023 HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
```

**Respuesta `200`**

```json theme={null}
{
  "Documento": "JVBERi0xLjQKJcOkw7zDtsO..."
}
```

<ResponseField name="Documento" type="string">
  Contenido del documento codificado en Base64. Decodifícalo en tu aplicación para obtener el fichero PDF.
</ResponseField>

***

## Eliminar línea de documento

Elimina una línea concreta de un documento identificándola por el ID del documento y el número de línea (`Numlin`).

```http theme={null}
DELETE https://api.appcloud.es/api/documento/{tipo}/{id}/linea/{numlin}
```

<ParamField path="tipo" type="string" required>
  Tipo de documento (p. ej., `pedido`, `albaran`, `factura`).
</ParamField>

<ParamField path="id" type="string" required>
  ID del documento del que se eliminará la línea.
</ParamField>

<ParamField path="numlin" type="string" required>
  Número de línea (`Numlin`) dentro del documento que se desea eliminar.
</ParamField>

**Ejemplo de petición**

```http theme={null}
DELETE /api/documento/pedido/1023/linea/3 HTTP/1.1
Host: api.appcloud.es
Authorization: Bearer {token}
```

**Respuesta `200`** — Línea eliminada correctamente (sin contenido).

<Warning>
  La eliminación de una línea de documento es permanente y puede afectar al cálculo de totales, impuestos y cartera asociados al documento. Verifica el impacto antes de ejecutar esta operación.
</Warning>
