QvaPay API
User

Cuenta empresa / organización

Solicitud de cuenta empresa u organización sin fines de lucro desde la app, y estado de las solicitudes del usuario.

Endpoint

GET  /api/user/company
POST /api/user/company

Autenticación: Bearer Token del usuario (la empresa u organización queda vinculada a esa cuenta, que será su cuenta designada).

La misma solicitud puede hacerse desde la web en qvapay.com/enterprise. Ambos canales comparten validación, revisión y aprobación.

GET — Solicitudes del usuario

Devuelve hasta 10 solicitudes donde el usuario es el dueño (owner_id).

{
  "companies": [
    {
      "uuid": "…",
      "company_name": "Cáritas Cubana",
      "director_name": "María Pérez",
      "email": "[email protected]",
      "activity": "Asistencia social",
      "employee_count": "11-50",
      "country": "CU",
      "status": "pending",
      "statutes_sent": true,
      "created_at": "2026-11-01T12:00:00.000Z",
      "updated_at": "2026-11-01T12:00:00.000Z"
    }
  ]
}

status: pending · reviewing · contacted · approved · rejected.

POST — Nueva solicitud

multipart/form-data. Límite: 3 solicitudes por 10 minutos por IP; una sola solicitud en proceso por cuenta (409 si ya hay una).

Campos comunes

CampoTipoRequeridoDescripción
orgKindstringNobusiness (default) o nonprofit. Decide la rama: empresa con socios, u organización sin fines de lucro con directivos.
countrystringSíPaís de constitución, ISO-2. Jurisdicciones sancionadas rechazadas.
directorNamestringSíDirector o presidente. En la rama nonprofit es el representante legal / persona de control (31 CFR 1010.230(e)(3)); su cuenta QvaPay verificada es la cuenta designada.
emailstringSíEmail de contacto de la organización.
companyNamestringSíRazón social / nombre de la organización.
activitystringSíActividad o misión.
employeeCountstringSí1-10 · 11-50 · 51-200 · 201-500 · 500+.
taxIdstringSí*US: EIN (12-3456789). CU: NIT (11 dígitos). Otros: identificador fiscal. *Opcional solo para nonprofit en Cuba.
entityTypestringUSTipo de entidad (LLC, C-Corp, …). En la rama nonprofit se fija a Nonprofit.
incStatestringUSEstado de constitución (código de 2 letras).
addrLine1, addrCity, addrState, addrZipstringUSDirección registrada en EE. UU.
statutesfile (PDF ≤ 10 MB)SíEstatutos / escritura. En nonprofit: documento de gobierno (bylaws) o, en Cuba, documento fundacional o autorizante.
refstringNoUsuario que invita (?ref=).
invstringNoCódigo de enlace de invitación limitado (/i/<código>).

Rama empresa (orgKind ausente o business)

CampoTipoRequeridoDescripción
ownersJSON stringCU: sí · resto: puede ir vacío[{ "name", "pct", "email"?, "username"? }]. Cuba: todos los socios de la escritura, cualquier %. Resto: solo socios con 25 % o más, pct obligatorio.

Rama organización sin fines de lucro (orgKind=nonprofit)

Sin socios ni porcentajes. En Cuba no se cruza con el listado MEP (no es una mipyme).

CampoTipoRequeridoDescripción
registrationKindstringSíUS: irs_501c3. CU: church_decree · asociaciones_registry · other_authorization. Otros países: local_registry.
registrationRefstringNoNúmero de registro, fecha del decreto, EIN de la carta… (≤ 191 caracteres).
officersJSON stringNo[{ "name", "title", "email"?, "username"? }], hasta 20 directivos y miembros de la junta. Cada uno se verifica contra listas de sanciones al recibir la solicitud. Un username que no exista responde 400.
registrationDocfile (PDF ≤ 10 MB)SíUS: carta de determinación del IRS. Otros países: registro de la organización. Cuba: carta que nombra al representante legal.

Respuesta

{ "message": "Solicitud enviada con éxito. Nos pondremos en contacto contigo pronto.", "uuid": "…" }
CódigoSignificado
200Solicitud creada.
400Campo inválido o faltante (el mensaje dice cuál).
409Ya hay una solicitud en proceso o la misma organización ya está aprobada.
429Límite de solicitudes.

Qué pasa después

  1. La razón social se verifica como entidad y el director, los socios o los directivos como personas contra las listas de sanciones.
  2. El equipo revisa el expediente; una organización cubana sin fines de lucro se aprueba con diligencia reforzada (el oficial de cumplimiento deja constancia de la base legal).
  3. Al aprobarse, la cuenta designada queda habilitada como cuenta empresa / organización. Si la organización fue invitada por una app integradora autorizada, esa app recibe el evento company.approved con el username de la cuenta designada (webhook firmado, mismo formato que los webhooks de app).

Webhook company.approved

Solo para organizaciones sin fines de lucro y solo a las apps autorizadas por QvaPay. Firmado con el secreto de la app (x-qvapay-signature: sha256=<hmac>, x-qvapay-timestamp).

{
  "event": "company.approved",
  "company": {
    "uuid": "…",
    "name": "Cáritas Cubana",
    "country": "CU",
    "kind": "ENTERPRISE_NONPROFIT_CU",
    "registration_kind": "church_decree",
    "approved_at": "2026-11-05T15:20:00.000Z"
  },
  "account": { "uuid": "…", "username": "caritascubana" },
  "referred_by": "godbless"
}

account.username es el destino de POST /api/transaction/transfer para pagarle a la organización.