orkasa

Guías

De la operación al cierre

Registrar una oferta, avanzar el pipeline, y qué hacer cuando la compuerta dice que no.

Registrar la oferta

Una oferta se ancla en la operación, no en el lead. El lead_id se toma de ella, y property_id del cuerpo o de la propia operación — si no hay ninguno de los dos, es 422.

curl -X POST "$ORKASA_API/offers" \
  -H "Authorization: Bearer $ORKASA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operation_id": "053655cc-47f4-43fd-9369-6f9dee659a28",
    "amount": 238000,
    "currency": "USD",
    "notes": "Sujeta a aprobación de crédito."
  }'

Registrar una oferta no la acepta y no mueve la etapa. Son dos gestos distintos a propósito: recibir una propuesta y aceptarla no son la misma decisión, y aceptar tiene consecuencias reales — el bien vuelve a pending y sus publicaciones se pausan.

offer_type sigue al listing_type de la propiedad cuando lo omites. La respuesta trae un public_token: es el enlace compartible de la oferta.

Avanzar la etapa

curl -X PATCH "$ORKASA_API/operations/053655cc-47f4-43fd-9369-6f9dee659a28" \
  -H "Authorization: Bearer $ORKASA_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "stage": "offer" }'

Un paso a la vez, y con la compuerta de la etapa actual pasada. Si falta algo:

{
  "error": {
    "code": "validation_error",
    "message": "La etapa actual tiene 2 paso(s) pendiente(s).",
    "details": {
      "reason": "stage_gate_blocked",
      "pending_actions": [
        { "id": "propiedadesVisitadas", "label": "Propiedades visitadas" },
        { "id": "favoritaElegida", "label": "Propiedad favorita elegida" }
      ]
    }
  }
}

Nada se escribió. La operación sigue donde estaba, y pending_actions te dice exactamente qué falta.

No existe un endpoint para « marcar estos pasos como hechos ». Es deliberado: marcar precioAcordado pasa la oferta a accepted, lo que despublica el bien; marcar ofertaPreparada crea una oferta y exige un monto. Un « marcar hecho » genérico dejaría que una frase suelta despublique un anuncio. Los pasos se cierran con verbos precisos — registrar una oferta, subir un documento — o a mano en la operación.

Cerrar

won · sold · rented solo se alcanzan desde la última etapa activa del recorrido, con la compuerta pasada. lost se alcanza desde cualquier punto y exige su razón:

curl -X PATCH "$ORKASA_API/operations/053655cc…" \
  -H "Authorization: Bearer $ORKASA_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "stage": "lost", "lost_reason": "Compró con otra agencia" }'

El cierre dispara el webhook deal_won — ahí es donde engancha la facturación, el aviso al equipo, o lo que venga después. Ver Webhooks.

Importar una cartera que ya viene a mitad de camino

stage en POST /operations no está bloqueado: ahí es un estado inicial, no una transición. Una agencia que llega con negocios en curso los crea en la etapa donde están de verdad.

curl -X POST "$ORKASA_API/operations" \
  -H "Authorization: Bearer $ORKASA_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "lead_id": "…", "operation_type": "buy", "stage": "offer" }'

Después de crearla, todo pasa por las reglas normales. Una operación existente nunca se arrastra hacia atrás.