{"openapi":"3.0.0","components":{"examples":{},"headers":{},"parameters":{},"requestBodies":{},"responses":{},"schemas":{"ChytaError":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"id":{"type":"string"},"cause":{"type":"string"}},"required":["code","message","id"],"type":"object","additionalProperties":false},"GetWebhookSubscriptionsResponseBody":{"description":"The client's webhook subscription, as GET and PUT\n/my-integration/webhook-subscriptions both return it.\n\nPer integration_client, not per endpoint: of the three delivery routes only\ntwo are rows (`payment_request.webhook_url` has nowhere to hang a column), so\na client-level gate is the only one that covers all three.","properties":{"enabledEvents":{"items":{"type":"string"},"type":"array"}},"required":["enabledEvents"],"type":"object","additionalProperties":false},"PutWebhookSubscriptionsRequestBody":{"description":"Body for PUT /my-integration/webhook-subscriptions. REPLACES the stored list\n— the portal sends the full checkbox state, which makes the call idempotent.\nAn empty array is valid and means \"no recibo nada\".","properties":{"enabledEvents":{"items":{"type":"string"},"type":"array"}},"required":["enabledEvents"],"type":"object","additionalProperties":false},"GetWebhookSigningSecretResponseBody":{"description":"The key an integrator uses to verify `X-Chytapay-Signature` on the webhooks we\nsend. Returned in clear on purpose: verifying needs the plaintext, unlike the\nwidget secret key, which is only ever compared by lookup.","properties":{"webhookSigningSecret":{"type":"string"}},"required":["webhookSigningSecret"],"type":"object","additionalProperties":false},"WebhookEventCatalogItem":{"description":"One entry of the catalog served by GET /my-integration/webhook-events.\n`event` is both the wire value the integrator receives and the exact string\nthe PUT accepts; `label` and `description` are portal copy.","properties":{"event":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["event","label","description"],"type":"object","additionalProperties":false},"GetWebhookEventsResponseBody":{"items":{"$ref":"#/components/schemas/WebhookEventCatalogItem"},"type":"array","description":"Response body for GET /my-integration/webhook-events."},"TestWebhookStatus":{"type":"string","enum":["delivered","not_subscribed","no_target","ambiguous_target","delivery_failed"]},"PostTestWebhookResponseBody":{"properties":{"delivered":{"type":"boolean"},"status":{"$ref":"#/components/schemas/TestWebhookStatus"},"message":{"type":"string","description":"Spanish, actionable. The portal shows it as-is."},"webhookId":{"type":"string","description":"The X-Chytapay-Webhook-Id that was sent. Only present when delivery was attempted."},"targetUrl":{"type":"string","description":"Only present when a destination was resolved."},"responseStatus":{"type":"number","format":"double","description":"HTTP status the integrator's endpoint responded with. Only present on\ndelivery_failed by a non-2xx response (absent when it was a network error).\nThe integrator's response BODY is never returned, because echoing it would turn\nthe button into an SSRF oracle."},"livemode":{"type":"boolean","description":"Echo of the flag that traveled in the payload. Always false outside prod."}},"required":["delivered","status","message","livemode"],"type":"object","additionalProperties":false},"IntegrationWebhookEventType.UNMATCHED":{"enum":["payment.unmatched"],"type":"string"},"UnmatchedPaymentReason":{"description":"Why an incoming transfer could not be imputed to a payment request.\n\nThe integrator's next action differs per reason, which is the whole point of\nshipping it: `expired` means decide whether to honour a late payment,\n`already_paid` means there is someone else's money to return, and\n`no_cuil_match` means we could not even identify who paid.\n\n`ambiguous` covers the two collision paths in the matcher (several pending\nrequests on an exclusive CVU, or two customers on a shared CVU claiming the\nsame payer). They are OUR data anomalies, not something the integrator can\nfix, so they must not be reported as `no_cuil_match` — that would tell them\nto register a CUIL that is already registered.\n\nIt is also the bucket for a reason we LOST rather than never had: a queued\nevent that reaches the consumer with no reason at all (an in-flight message\nacross a deploy) is delivered as `ambiguous`, because \"we could not name a\nrequest and there is nothing on your side to do\" is the only true thing left\nto say about it. See deliverUnmatchedPayment.","enum":["expired","already_paid","canceled","no_cuil_match","no_pending","ambiguous"],"type":"string"},"PostTestWebhookRequestBody":{"properties":{"event":{"$ref":"#/components/schemas/IntegrationWebhookEventType.UNMATCHED","description":"Only supported event today. Explicit so adding another doesn't silently change the contract."},"reason":{"$ref":"#/components/schemas/UnmatchedPaymentReason"},"tenantKey":{"type":"string","description":"Disambiguates the destination when more than one webhook is configured."}},"required":["event","reason"],"type":"object","additionalProperties":false},"AutoLinkAction":{"type":"string","enum":["linked","already-linked"],"description":"Resultado del auto-link de la cuenta fixture a la integration del caller:\n- `linked`: el fixture user se vinculó recién en esta llamada (mostrar\n  feedback al user explicando que la cuenta quedó vinculada).\n- `already-linked`: ya estaba vinculado de antes — el frontend NO debería\n  mostrar el mensaje \"vinculamos también la cuenta\" porque sería confuso.\n\nNote: the previous `skipped` variant was removed. Auto-link is now fail-fast:\nif any step fails the service throws rather than returning tokens silently."},"PostTestOAuthTokensResponseBody":{"properties":{"idToken":{"type":"string","description":"ID token Bearer para usar en POST /integration/payment-request."},"refreshToken":{"type":"string","description":"Refresh token para renovar cuando idToken expire."},"expiresIn":{"type":"number","format":"double","description":"TTL en segundos del idToken (Cognito default: 3600)."},"autoLinkAction":{"$ref":"#/components/schemas/AutoLinkAction","description":"Resultado del auto-link del fixture user a la integration del caller."}},"required":["idToken","refreshToken","expiresIn","autoLinkAction"],"type":"object","additionalProperties":false},"GetAdminTenantItem":{"description":"Single item in the GET /my-integration/tenant list response.\nThe raw webhook_validation_token is NEVER returned — it is a secret. Instead\nthe derived hasValidationToken flag tells the UI whether one is set, without\nleaking its value.","properties":{"integrationTenantId":{"type":"string"},"key":{"type":"string"},"name":{"type":"string"},"webhook_url":{"type":"string"},"hasValidationToken":{"type":"boolean"}},"required":["integrationTenantId","key","name","webhook_url","hasValidationToken"],"type":"object","additionalProperties":false},"GetAdminTenantsResponseBody":{"items":{"$ref":"#/components/schemas/GetAdminTenantItem"},"type":"array","description":"Response body for GET /my-integration/tenant"},"PostAdminTenantResponseBody":{"properties":{"integrationTenantId":{"type":"string"},"key":{"type":"string"},"name":{"type":"string"}},"required":["integrationTenantId","key","name"],"type":"object","additionalProperties":false},"PostAdminTenantRequestBody":{"properties":{"key":{"type":"string"},"name":{"type":"string"},"webhook_url":{"type":"string"},"webhook_validation_token":{"type":"string"}},"required":["key","name","webhook_url"],"type":"object","additionalProperties":false},"PutAdminTenantResponseBody":{"$ref":"#/components/schemas/GetAdminTenantItem","description":"Response body for PUT /my-integration/tenant/{integrationTenantId}.\nMirrors the list item shape (the raw token is never returned — only the\nderived hasValidationToken flag)."},"PutAdminTenantRequestBody":{"description":"Common edit of a tenant — key, name and webhook_url only.\nwebhook_validation_token is a WRITE-ONLY secret and is NOT managed here:\nit is set/rotated/removed via the dedicated sub-resource endpoints\nPUT/DELETE /my-integration/tenant/{id}/validation-token.","properties":{"key":{"type":"string"},"name":{"type":"string"},"webhook_url":{"type":"string"}},"required":["key","name","webhook_url"],"type":"object","additionalProperties":false},"PutAdminTenantValidationTokenRequestBody":{"description":"Body for PUT /my-integration/tenant/{integrationTenantId}/validation-token.\nSets or rotates the webhook validation secret. Write-only — never echoed back.","properties":{"webhook_validation_token":{"type":"string"}},"required":["webhook_validation_token"],"type":"object","additionalProperties":false},"PostSimulatePaymentResponseBody":{"properties":{"simulated":{"type":"boolean"},"forcePspFailure":{"type":"boolean"},"idTransaccion":{"type":"string","description":"ID de la transacción simulada (generado por el PSP/simulator)."},"cvu":{"type":"string","description":"CVU destinatario (eco del request)."},"numeroCuenta":{"type":"string","description":"Número de cuenta resuelto del CVU destinatario."},"amount":{"type":"number","format":"double","description":"Monto (eco del request)."},"fechaOperacion":{"type":"string","description":"Fecha de operación efectiva (puede ser default si no se mandó)."},"conciliated":{"type":"boolean","description":"true si el pago se concilió con un cobro pendiente (matcheó un payment request)."},"webhookWillFire":{"type":"boolean","description":"true si tu integración está suscrita al evento que produce este pago.\n\nNO es lo mismo que `conciliated`: un pago que no concilia dispara\n`payment.unmatched`, y uno que concilia no dispara nada si te diste de baja\nde `payment_request.payment_received`. El gate de suscripción aplica a los\ndos carriles por igual.\n\nMira la suscripción, no simula la entrega completa: un evento suscrito puede\nigual no llegar si el webhook no está configurado o si el destino no se\npuede resolver."},"webhookEvent":{"type":"string","description":"El evento que produce este pago, esté suscrito o no."},"paymentRequestId":{"type":"string","description":"Id del cobro conciliado. Presente solo cuando `conciliated` es true."}},"required":["simulated","forcePspFailure","idTransaccion","cvu","numeroCuenta","amount","fechaOperacion","conciliated","webhookWillFire","webhookEvent"],"type":"object","additionalProperties":false},"PostSimulatePaymentRequestBody":{"description":"Interfaces del simulador del portal integration-admin.\n\nMirror estable del body + response del wrapper `simulatePaymentForIntegrationAdmin`\n(que a su vez delega en `simulatePaymentV2` de chyta). Vivir acá — y no\nreusar el type de chyta — asegura que el contrato público del integration-admin\nno quede acoplado al refactor interno del service de chyta y que TSOA pueda\ngenerar el swagger sin importar tipos cross-API.","properties":{"externalAccountCvu":{"type":"string","description":"CVU origen de la transferencia simulada (cuenta externa que \"paga\")."},"externalAccountCuil":{"type":"string","description":"CUIL/CUIT del titular de la cuenta origen."},"externalAccountName":{"type":"string","description":"Nombre del titular de la cuenta origen."},"cvu":{"type":"string","description":"CVU destinatario — debe pertenecer a un payment_request del integration del caller (anti-IDOR)."},"amount":{"type":"number","format":"double","description":"Monto en pesos. Debe ser positivo."},"simulated":{"type":"boolean","description":"Marca la transacción como simulada (default true)."},"forcePspFailure":{"type":"boolean","description":"Fuerza un fallo del PSP para testear el path de error (default false)."},"fechaOperacion":{"type":"string","description":"Fecha de operación en ISO 8601. Si se omite, usa \"ahora\" en zona Argentina."}},"required":["externalAccountCvu","externalAccountCuil","externalAccountName","cvu","amount"],"type":"object","additionalProperties":false},"PostPayoutLinkInviteResponseBody":{"properties":{"invitationId":{"type":"string"}},"required":["invitationId"],"type":"object","additionalProperties":false},"PostPayoutLinkInviteRequestBody":{"properties":{"email":{"type":"string"}},"required":["email"],"type":"object","additionalProperties":false},"PayoutLinkRecipient":{"description":"Identidad del recaudador activo, para que el admin confirme a quién le\nestá mandando la plata. Sólo se puebla en status='accepted'. El CUIT se\nexpone deliberadamente (es exactamente ese dato de confirmación); nada de\ndomicilio ni datos de KYC.","properties":{"userId":{"type":"string"},"email":{"type":"string","nullable":true},"fantasyName":{"type":"string","nullable":true},"legalName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true}},"required":["userId","email","fantasyName","legalName","taxId"],"type":"object","additionalProperties":false},"GetPayoutLinkResponseBody":{"properties":{"status":{"type":"string","enum":["none","pending","accepted"]},"invitedEmail":{"type":"string","nullable":true},"acceptedUserId":{"type":"string","nullable":true},"recipient":{"allOf":[{"$ref":"#/components/schemas/PayoutLinkRecipient"}],"nullable":true}},"required":["status","invitedEmail","acceptedUserId","recipient"],"type":"object","additionalProperties":false},"PostPayoutLinkInviteResendResponseBody":{"properties":{"invitationId":{"type":"string"}},"required":["invitationId"],"type":"object","additionalProperties":false},"OfferResponseBody":{"properties":{"percentage":{"type":"number","format":"double","nullable":true},"fixedAmount":{"type":"number","format":"double","nullable":true}},"required":["percentage","fixedAmount"],"type":"object","additionalProperties":false},"PutOfferRequestBody":{"properties":{"percentage":{"type":"number","format":"double"},"fixedAmount":{"type":"number","format":"double"}},"type":"object","additionalProperties":false},"PostCommissionChangeResponseBody":{"properties":{"invitationId":{"type":"string"},"status":{"type":"string"},"percentage":{"type":"number","format":"double"},"supersededInvitationId":{"type":"string"}},"required":["invitationId","status","percentage"],"type":"object","additionalProperties":false},"PostCommissionChangeRequestBody":{"properties":{"percentage":{"type":"number","format":"double"}},"required":["percentage"],"type":"object","additionalProperties":false},"DeleteCommissionChangeResponseBody":{"properties":{"invitationId":{"type":"string"}},"required":["invitationId"],"type":"object","additionalProperties":false},"ClientUrlType":{"enum":["webhook","redirect_uri"],"type":"string"},"WebhookVerificationStatus":{"type":"string","enum":["ok","non_2xx","unreachable"],"description":"Outcome of the non-blocking webhook reachability test (DEV-244 B2/B3).\n- `ok`          → endpoint answered 2xx\n- `non_2xx`     → endpoint was reachable but answered a non-2xx status\n                  (e.g. it validated the validation-token and rejected)\n- `unreachable` → network/timeout/DNS error, no response at all"},"WebhookVerificationResult":{"properties":{"status":{"$ref":"#/components/schemas/WebhookVerificationStatus"},"httpStatus":{"type":"number","format":"double","description":"HTTP status the endpoint answered with. Present only when `non_2xx`."}},"required":["status"],"type":"object","additionalProperties":false},"GetClientUrlResponseBody":{"properties":{"clientUrlId":{"type":"string"},"data":{"properties":{"hasValidationToken":{"type":"boolean"},"urlType":{"$ref":"#/components/schemas/ClientUrlType"},"url":{"type":"string"}},"required":["hasValidationToken","urlType","url"],"type":"object"},"verification":{"$ref":"#/components/schemas/WebhookVerificationResult","description":"Result of the reachability test. Present only when creating/updating a\nWEBHOOK url; the test never blocks registration (warning, not error)."}},"required":["clientUrlId","data"],"type":"object","additionalProperties":false},"PostClientUrlRequestBody":{"properties":{"url":{"type":"string"},"urlType":{"$ref":"#/components/schemas/ClientUrlType"},"validationToken":{"type":"string"}},"required":["url","urlType"],"type":"object","additionalProperties":false},"PutClientUrlRequestBody":{"properties":{"url":{"type":"string"},"validationToken":{"type":"string"}},"type":"object","additionalProperties":false},"TestClientUrlResponseBody":{"properties":{"verification":{"$ref":"#/components/schemas/WebhookVerificationResult"}},"required":["verification"],"type":"object","additionalProperties":false},"PostClientResponseBody":{"properties":{"integrationClientId":{"type":"string"},"cognitoClientId":{"type":"string"},"cognitoClientSecret":{"type":"string"},"authorizationUrl":{"type":"string"},"tokenUrl":{"type":"string"},"userinfoUrl":{"type":"string"},"hostedUiUrl":{"type":"string"},"logoutUrl":{"type":"string"},"name":{"type":"string"},"companyName":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"}},"required":["integrationClientId","cognitoClientId","cognitoClientSecret","authorizationUrl","tokenUrl","userinfoUrl","hostedUiUrl","logoutUrl","name","companyName","scopes"],"type":"object","additionalProperties":false},"PostClientRequestBody":{"properties":{"name":{"type":"string"},"companyName":{"type":"string"},"contactEmail":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"},"logoUrl":{"type":"string"},"description":{"type":"string"},"redirectUrls":{"items":{"type":"string"},"type":"array"},"logoutUrls":{"items":{"type":"string"},"type":"array"},"firstAdminEmail":{"type":"string","description":"Email del primer admin a invitar automáticamente. Cuando se provee, el\nbackend crea el integration_client_admin tras crear el integration y\nenvía email con credenciales completas (tempPassword + clientId +\nclientSecret + URLs OAuth). Reduce friction de onboarding — el\nPLATFORM_ADMIN no tiene que copiar el secret y compartirlo manual."},"firstAdminName":{"type":"string","description":"Optional name for the first admin (used in the welcome email)."}},"required":["name","companyName","contactEmail"],"type":"object","additionalProperties":false},"PostClientAdminRequestBody":{"properties":{"email":{"type":"string"},"clientId":{"type":"string"},"name":{"type":"string"}},"required":["email","clientId"],"type":"object","additionalProperties":false},"IntegrationClientType":{"description":"Credential/setting profile of an integration_client.\nDrives what the Integration Admin Portal shows/hides per integration.\n\napi_direct   → server-to-server only (Pedix-style, Cognito OAuth2 or sk_*).\nwidget       → widget embedded in merchant checkout (AutoEntrada-style).\nboth         → api_direct + widget.\nmultitenant  → white-label server-to-server with named tenants; gates the\n               Tenants section of the Integration Admin Portal.","enum":["api_direct","widget","both","multitenant"],"type":"string"},"IntegrationClientSummary":{"description":"Listing-only shape — extiende el shape de detalle con flags de estado para\nque el portal pueda mostrar un resumen \"lista para usar / pendiente / sin\nconfigurar\" sin entrar al detalle de cada integration.\n\n- `firstAdminEmailSent`: hay al menos un admin cuyo lifecycle status no es\n  'invited' (o sea, el backend al menos intentó mandar el email — exitoso\n  `email_sent` o fallido `email_failed`).\n- `firstAdminLoggedIn`: hay al menos un admin con Cognito UserStatus\n  CONFIRMED. Implica que ya pasó por /change-password al menos una vez.\n  Se deriva de Cognito porque el flow de change-password no actualiza\n  integration_client_admin.status a 'active' todavía.\n- `webhookConfigured`: hay al menos una row en integration_client_url con\n  type='webhook' (no soft-deleted).","properties":{"integrationClientId":{"type":"string"},"cognitoClientId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"companyName":{"type":"string"},"logoUrl":{"type":"string","nullable":true},"contactEmail":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"},"type":{"$ref":"#/components/schemas/IntegrationClientType"},"createDate":{"type":"string"},"firstAdminEmailSent":{"type":"boolean"},"firstAdminLoggedIn":{"type":"boolean"},"webhookConfigured":{"type":"boolean"}},"required":["integrationClientId","cognitoClientId","name","description","companyName","logoUrl","contactEmail","scopes","type","createDate","firstAdminEmailSent","firstAdminLoggedIn","webhookConfigured"],"type":"object","additionalProperties":false},"ListIntegrationClientsResponseBody":{"description":"Paginated listing envelope for `/integration-admin/setup/clients`.","properties":{"items":{"items":{"$ref":"#/components/schemas/IntegrationClientSummary"},"type":"array"},"total":{"type":"number","format":"double"},"limit":{"type":"number","format":"double"},"offset":{"type":"number","format":"double"}},"required":["items","total","limit","offset"],"type":"object","additionalProperties":false},"GetIntegrationClientAdminResponseBody":{"description":"Detalle para PLATFORM_ADMIN. Separado de `GetIntegrationClientResponseBody`\nporque esa forma la comparten el GET del admin y el `GET /my-integration/me`\ndel integrador, así que agregarle el porcentaje ahí le mostraría al\nintegrador la comisión que negociamos.","properties":{"integrationClientId":{"type":"string"},"cognitoClientId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"companyName":{"type":"string"},"logoUrl":{"type":"string","nullable":true},"contactEmail":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"},"type":{"$ref":"#/components/schemas/IntegrationClientType"},"createDate":{"type":"string"},"chytaCommissionPercentage":{"type":"number","format":"double","nullable":true},"commissionBackfill":{"properties":{"pending":{"type":"number","format":"double"},"failed":{"type":"number","format":"double"},"skipped":{"type":"number","format":"double"},"applied":{"type":"number","format":"double"},"total":{"type":"number","format":"double"}},"required":["pending","failed","skipped","applied","total"],"type":"object","description":"Resultado de propagar el porcentaje a los ya enrolados. Solo viene en la\nrespuesta del PATCH que lo modificó. `pending > 0` significa que se cortó\npor presupuesto de tiempo y hay que volver a guardar para continuar."}},"required":["integrationClientId","cognitoClientId","name","description","companyName","logoUrl","contactEmail","scopes","type","createDate","chytaCommissionPercentage"],"type":"object","additionalProperties":false},"PatchIntegrationClientAdminRequestBody":{"description":"Campos que SOLO puede tocar PLATFORM_ADMIN.\n\nEstá separado de `PatchIntegrationClientRequestBody` porque ese body lo\ncomparten dos endpoints: el del admin (`PATCH /clients/:id`) y el\nself-service del integrador (`PATCH /my-integration`). Poner la comisión de\nChyta en el body compartido le daría al integrador la capacidad de fijarse su\npropia comisión, incluso ponerla en cero.\n\nY Joi no alcanza como defensa: el middleware valida con `allowUnknown: true`,\nasí que un campo de más no lo rechaza nadie. La única compuerta real es qué\ncampos mapea el service, y por eso el mapeo está partido en dos.","properties":{"name":{"type":"string"},"description":{"type":"string"},"companyName":{"type":"string"},"logoUrl":{"type":"string"},"contactEmail":{"type":"string"},"type":{"$ref":"#/components/schemas/IntegrationClientType"},"chytaCommissionPercentage":{"type":"number","format":"double","nullable":true,"description":"DEV-235: % de comisión Chyta para los comerciantes que entran por esta\nintegración. Al guardarlo se aplica también a los que ya estaban\nenrolados.\n\n`null` deshace el trato: la integración vuelve a no tocar la comisión de\nnadie, y los comerciantes que hoy cargan SU tasa vuelven a la que\ncorresponda. Es la única excepción al \"sin null\" del body compartido, y\nexiste porque sin ella un trato se puede empezar pero nunca terminar."}},"type":"object","additionalProperties":false},"IntegrationClientAdminStatus":{"type":"string","enum":["active","pending","unknown"],"description":"Status del admin en Cognito, normalizado para el portal.\n- `active`: el admin completó el primer login (Cognito CONFIRMED).\n- `pending`: ya fue invitado pero todavía no se logueó (FORCE_CHANGE_PASSWORD).\n- `unknown`: no se pudo determinar (Cognito devolvió error o estado raro)."},"GetClientAdminResponseBody":{"properties":{"integrationClientAdminId":{"type":"string"},"email":{"type":"string"},"status":{"$ref":"#/components/schemas/IntegrationClientAdminStatus"},"invitedAt":{"type":"string"}},"required":["integrationClientAdminId","email","status","invitedAt"],"type":"object","additionalProperties":false},"ListClientAdminsResponseBody":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GetClientAdminResponseBody"},"type":"array"},"total":{"type":"number","format":"double"}},"required":["items","total"],"type":"object","additionalProperties":false},"GetIntegrationClientResponseBody":{"description":"Public representation of an integration_client for admin portal consumption.\nExcludes sensitive fields (cognito_client_secret) and internal flags (delete_date).","properties":{"integrationClientId":{"type":"string"},"cognitoClientId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"companyName":{"type":"string"},"logoUrl":{"type":"string","nullable":true},"contactEmail":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"},"type":{"$ref":"#/components/schemas/IntegrationClientType"},"createDate":{"type":"string"}},"required":["integrationClientId","cognitoClientId","name","description","companyName","logoUrl","contactEmail","scopes","type","createDate"],"type":"object","additionalProperties":false},"PatchIntegrationClientRequestBody":{"description":"Fields a PLATFORM_ADMIN or scoped INTEGRATION_ADMIN can update on their integration.\nAll fields optional — partial update semantics. Null values are NOT supported\n(schema rejects them); there is no \"clear field\" semantic in PATCH — use an\nexplicit DELETE endpoint if that becomes a product need.","properties":{"name":{"type":"string"},"description":{"type":"string"},"companyName":{"type":"string"},"logoUrl":{"type":"string"},"contactEmail":{"type":"string"},"type":{"$ref":"#/components/schemas/IntegrationClientType"}},"type":"object","additionalProperties":false},"GetIntegrationClientUserResponseBody":{"description":"End-user (B2C) que paga a través de la integración.\nEs lo que ve el INTEGRATION_ADMIN en su sección Users.","properties":{"integrationClientUserId":{"type":"string"},"userId":{"type":"string"},"email":{"type":"string"},"fantasyName":{"type":"string","description":"Nombre con el que opera el comercio. Undefined si no lo cargó. El\nintegrador lo reconoce por acá, no por el mail: un mail personal\n(juanperez@gmail.com) no dice de qué comercio se trata, y en la pantalla\nde proponer comisión hay que estar seguro de a quién se le cambia la tasa."},"joinedAt":{"type":"string"},"tenantKey":{"type":"string","description":"Key of the bound integration tenant. Undefined when no tenant is bound."},"tenantName":{"type":"string","description":"Name of the bound integration tenant. Undefined when no tenant is bound."},"currentCommissionPercentage":{"type":"number","format":"double","description":"Comisión que este comercio le paga HOY a la integración. 0 (nunca\nundefined) cuando no aceptó ninguna: no pagar nada es un estado real, no\nun dato faltante. Sin esto el integrador propondría un cambio sin saber\ndesde qué valor parte."},"pendingCommissionProposal":{"properties":{"expiresAt":{"type":"string"},"proposedPercentage":{"type":"number","format":"double"},"invitationId":{"type":"string"}},"required":["invitationId"],"type":"object","description":"Propuesta de cambio pendiente, si la hay. Ausente cuando no hay ninguna\nviva. Permite que el portal avise antes de proponer de nuevo, porque una\npropuesta nueva reemplaza a la anterior."}},"required":["integrationClientUserId","userId","email","joinedAt","currentCommissionPercentage"],"type":"object","additionalProperties":false},"ListIntegrationClientUsersResponseBody":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GetIntegrationClientUserResponseBody"},"type":"array"},"total":{"type":"number","format":"double"},"limit":{"type":"number","format":"double"},"offset":{"type":"number","format":"double"}},"required":["items","total","limit","offset"],"type":"object","additionalProperties":false},"IntegrationPaymentRequestState":{"enum":["draft","pending","total_payment","canceled","overdue","partial_payment","partial_overdue"],"type":"string"},"GetIntegrationPaymentRequestResponseBody":{"description":"Vista del payment_request para el INTEGRATION_ADMIN.","properties":{"paymentRequestId":{"type":"string"},"integrationReferenceId":{"type":"string","nullable":true},"paidAmount":{"type":"number","format":"double"},"payerEmail":{"type":"string"},"description":{"type":"string","description":"Descripción del cobro (lo que el integrador envía como `description` al crearlo)."},"createdAt":{"type":"string"},"status":{"$ref":"#/components/schemas/IntegrationPaymentRequestState","description":"Estado vigente del cobro, en el enum público de integración (inglés)."}},"required":["paymentRequestId","integrationReferenceId","paidAmount","payerEmail","description","createdAt","status"],"type":"object","additionalProperties":false},"ListIntegrationPaymentRequestsResponseBody":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GetIntegrationPaymentRequestResponseBody"},"type":"array"},"total":{"type":"number","format":"double"},"limit":{"type":"number","format":"double"},"offset":{"type":"number","format":"double"}},"required":["items","total","limit","offset"],"type":"object","additionalProperties":false},"GetApiKeysResponseBody":{"description":"Read shape for display. Deliberately excludes the plaintext secret and its\nlookup. hasKeys distinguishes the true no-keys case (nulls, still 200) from a\npopulated account.","properties":{"publishableKey":{"type":"string","nullable":true},"secretKeyLast4":{"type":"string","nullable":true},"hasKeys":{"type":"boolean"},"hasSecretKey":{"type":"boolean","description":"A publishable key can exist with no secret key — these are independent."},"allowedOrigins":{"items":{"type":"string"},"type":"array","description":"Empty means the publishable key is accepted from any origin."}},"required":["publishableKey","secretKeyLast4","hasKeys","hasSecretKey","allowedOrigins"],"type":"object","additionalProperties":false},"PostApiKeysResponseBody":{"description":"Returned on create. Publishable key only: the secret key is issued on demand\nthrough rotate-secret, not at signup.","properties":{"publishableKey":{"type":"string"}},"required":["publishableKey"],"type":"object","additionalProperties":false},"PutAllowedOriginsResponseBody":{"description":"Returned by the origins endpoint: the allow-list as persisted.","properties":{"allowedOrigins":{"items":{"type":"string"},"type":"array"}},"required":["allowedOrigins"],"type":"object","additionalProperties":false},"PutAllowedOriginsRequestBody":{"description":"Request body for the origins endpoint. Replaces the whole allow-list: a\npartial update has no sane meaning for an allow-list, and read-modify-write\non the client is what makes the removal case work.","properties":{"allowedOrigins":{"items":{"type":"string"},"type":"array"}},"required":["allowedOrigins"],"type":"object","additionalProperties":false},"PostRotateSecretResponseBody":{"description":"Returned once on rotate. New plaintext secretKey; the publishable key is\npreserved and therefore not echoed here.","properties":{"secretKey":{"type":"string"},"secretKeyLast4":{"type":"string"}},"required":["secretKey","secretKeyLast4"],"type":"object","additionalProperties":false}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"info":{"title":"Chytapay Integration - Admin API","version":"1.0.0","description":"API de administración para configurar URLs de webhook y redirect_uri","license":{"name":"ISC"},"contact":{"name":"Chytapay Support","email":"contacto@chytapay.com.ar","url":"https://chytapay.com.ar/api/getting-started"}},"paths":{"/my-integration/webhook-subscriptions":{"get":{"operationId":"getWebhookSubscriptions","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWebhookSubscriptionsResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Webhook Subscriptions"],"security":[{"bearer":[]}],"parameters":[]},"put":{"operationId":"setWebhookSubscriptions","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWebhookSubscriptionsResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Webhook Subscriptions"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutWebhookSubscriptionsRequestBody"}}}}}},"/my-integration/webhook-signing-secret":{"get":{"operationId":"getWebhookSigningSecret","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWebhookSigningSecretResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Webhook Signing Secret"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration/webhook-events":{"get":{"operationId":"listWebhookEvents","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWebhookEventsResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Webhook Events"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration/test-webhook":{"post":{"operationId":"postTestWebhook","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostTestWebhookResponseBody"}}}},"400":{"description":"Bad Request: body inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden: rol incorrecto o no disponible en producción","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found: tenantKey inexistente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Test Webhook"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostTestWebhookRequestBody"}}}}}},"/my-integration/test-oauth-tokens":{"post":{"operationId":"postTestOAuthTokens","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostTestOAuthTokensResponseBody"}}}},"403":{"description":"Forbidden — not available in production","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Test Tokens"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration/tenant":{"get":{"operationId":"listTenants","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAdminTenantsResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Tenant"],"security":[{"bearer":[]}],"parameters":[]},"post":{"operationId":"createTenant","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostAdminTenantResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Tenant"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostAdminTenantRequestBody"}}}}}},"/my-integration/tenant/{integrationTenantId}":{"put":{"operationId":"updateTenant","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutAdminTenantResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Tenant"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationTenantId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutAdminTenantRequestBody"}}}}},"delete":{"operationId":"deleteTenant","responses":{"204":{"description":"No Content"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Tenant"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationTenantId","required":true,"schema":{"type":"string"}}]}},"/my-integration/tenant/{integrationTenantId}/validation-token":{"put":{"operationId":"setTenantValidationToken","responses":{"204":{"description":"No Content"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Set or rotate the tenant's webhook validation token (write-only secret).\nResponds 204 with no body — the secret is never echoed back.","tags":["My Integration Tenant"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationTenantId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutAdminTenantValidationTokenRequestBody"}}}}},"delete":{"operationId":"deleteTenantValidationToken","responses":{"204":{"description":"No Content"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Remove (clear) the tenant's webhook validation token. Responds 204.","tags":["My Integration Tenant"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationTenantId","required":true,"schema":{"type":"string"}}]}},"/my-integration/simulate-payment":{"post":{"operationId":"simulatePayment","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSimulatePaymentResponseBody"}}}},"403":{"description":"Forbidden — CVU does not match caller integration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Simulate"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSimulatePaymentRequestBody"}}}}}},"/my-integration/distribution/payout-link/invite":{"post":{"operationId":"postPayoutLinkInvite","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostPayoutLinkInviteResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Invita a un usuario a convertirse en el recaudador (payout wallet) de\nesta integración. integrationClientId + integrationClientAdminId salen\nde res.locals (auth middleware) — NUNCA del body.","tags":["Integration Distribution Payout Link"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostPayoutLinkInviteRequestBody"}}}}},"delete":{"operationId":"deletePayoutLinkInvite","responses":{"204":{"description":"No Content"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Cancela la invitación de recaudador PENDING de esta integración.\nintegrationClientId sale de res.locals — NUNCA de body/params (no hay\nningún id en la request, el WHERE ya lo trae desde el context). Sin body:\nno hay nada útil que devolver, 204 y el front re-fetchea el status.","tags":["Integration Distribution Payout Link"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration/distribution/payout-link":{"get":{"operationId":"getPayoutLink","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPayoutLinkResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Estado actual del recaudador de esta integración. integrationClientId\nsale de res.locals (auth middleware) — NUNCA de query/body.","tags":["Integration Distribution Payout Link"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration/distribution/payout-link/invite/resend":{"post":{"operationId":"postPayoutLinkInviteResend","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostPayoutLinkInviteResendResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Reenvía la invitación de recaudador pendiente con un token nuevo. Si el\nmail no sale responde error y la invitación sigue pendiente.","tags":["Integration Distribution Payout Link"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration/distribution/offer":{"get":{"operationId":"getIntegrationOffer","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferResponseBody"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Devuelve la oferta de comisión activa de la integración del admin autenticado.\nintegrationClientId sale de res.locals (auth middleware) — NUNCA del body.","tags":["Integration Distribution Offer"],"security":[{"bearer":[]}],"parameters":[]},"put":{"operationId":"putIntegrationOffer","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferResponseBody"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Crea/versiona la oferta de comisión. percentage XOR fixedAmount. El destino\nNO se acepta del body: el recaudador es un payout-link.","tags":["Integration Distribution Offer"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutOfferRequestBody"}}}}},"delete":{"operationId":"deleteIntegrationOffer","responses":{"204":{"description":"No Content"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Elimina (soft-delete) la oferta de comisión activa de la integración.","tags":["Integration Distribution Offer"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration/distribution/commission-change/{integrationClientUserId}":{"post":{"operationId":"postCommissionChange","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCommissionChangeResponseBody"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Propone (o reemplaza, D5) una tasa de comisión para un enrolamiento ya\nactivo. Idempotente por valor si coincide con la propuesta pendiente.","tags":["My Integration"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationClientUserId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCommissionChangeRequestBody"}}}}},"delete":{"operationId":"deleteCommissionChange","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteCommissionChangeResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Cancela la propuesta PENDING de un enrolamiento (D1). Solo válida desde\n`pending` — sobre cualquier estado terminal el service devuelve 409.","tags":["My Integration"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationClientUserId","required":true,"schema":{"type":"string"}}]}},"/my-integration/url":{"get":{"operationId":"getClientUrl","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GetClientUrlResponseBody"},"type":"array"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Url"],"security":[{"bearer":[]}],"parameters":[]},"post":{"operationId":"createClientUrl","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetClientUrlResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Url"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostClientUrlRequestBody"}}}}}},"/my-integration/url/{clientUrlId}":{"put":{"operationId":"modifyClientUrl","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetClientUrlResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Url"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"clientUrlId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutClientUrlRequestBody"}}}}},"delete":{"operationId":"deleteClientUrl","responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Url"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"clientUrlId","required":true,"schema":{"type":"string"}}]}},"/my-integration/url/{clientUrlId}/test":{"post":{"operationId":"testClientUrl","responses":{"200":{"description":"Resultado del test","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestClientUrlResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration Url"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"clientUrlId","required":true,"schema":{"type":"string"}}]}},"/setup/clients":{"post":{"operationId":"postClient","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostClientResponseBody"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["Clients","internal"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostClientRequestBody"}}}}},"get":{"operationId":"listIntegrationClients","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListIntegrationClientsResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"PLATFORM_ADMIN: list all integration clients (admin portal overview).","tags":["Clients","internal"],"security":[{"bearer":[]}],"parameters":[{"in":"query","name":"limit","required":false,"schema":{"format":"double","type":"number"}},{"in":"query","name":"offset","required":false,"schema":{"format":"double","type":"number"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}}]}},"/setup/clients/admin":{"post":{"operationId":"createIntegrationAdmin","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"properties":{"next_steps":{"items":{"type":"string"},"type":"array"},"credentials":{"properties":{"must_change_password":{"type":"boolean"},"temporary_password":{"type":"string"}},"required":["must_change_password","temporary_password"],"type":"object"},"user":{"properties":{"integration":{"type":"string"},"email":{"type":"string"},"cognitoUser":{"type":"string"},"integrationClientAdminId":{"type":"string"}},"required":["integration","email","cognitoUser","integrationClientAdminId"],"type":"object"},"message":{"type":"string"}},"required":["next_steps","credentials","user","message"],"type":"object"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["Clients","internal"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostClientAdminRequestBody"}}}}}},"/setup/clients/{integrationClientId}":{"get":{"operationId":"getIntegrationClientById","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetIntegrationClientAdminResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"PLATFORM_ADMIN: get a specific integration client by id.\nThrows ClientNotFoundError → 404 if missing.","tags":["Clients","internal"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationClientId","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"patchIntegrationClientById","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetIntegrationClientAdminResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"PLATFORM_ADMIN: partially update an integration client.\nOnly whitelisted fields (see PatchIntegrationClientRequestBody) are accepted.\nThrows ClientNotFoundError → 404 if missing.","tags":["Clients","internal"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationClientId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchIntegrationClientAdminRequestBody"}}}}},"delete":{"operationId":"deleteIntegrationClient","responses":{"204":{"description":"No Content"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"PLATFORM_ADMIN: cascade soft-delete de la integración + sus admins +\nURLs + webhook subs en DB. Best-effort cleanup en Cognito (admins +\napp client). Pensado para que se pueda recrear con el mismo email\nsin chocar contra UsernameExistsException.","tags":["Clients","internal"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationClientId","required":true,"schema":{"type":"string"}}]}},"/setup/clients/{integrationClientId}/admins":{"get":{"operationId":"listClientAdmins","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListClientAdminsResponseBody"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"PLATFORM_ADMIN: list admins for a specific integration client.\nEach item is enriched with Cognito UserStatus (active / pending / unknown).","tags":["Clients","internal"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationClientId","required":true,"schema":{"type":"string"}}]}},"/setup/clients/{integrationClientId}/admins/{integrationClientAdminId}/reset-password":{"post":{"operationId":"resetClientAdminPassword","responses":{"204":{"description":"No Content"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Admin or integration not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"PLATFORM_ADMIN: reset the admin's Cognito password to a fresh temp + email\nthe new credentials. Used when the admin lost access (no recibió email,\npassword en limbo, etc.). Cognito marks the user FORCE_CHANGE_PASSWORD —\nel flow de /change-password se dispara en el primer login.","tags":["Clients","internal"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"integrationClientId","required":true,"schema":{"type":"string"}},{"in":"path","name":"integrationClientAdminId","required":true,"schema":{"type":"string"}}]}},"/my-integration/me":{"get":{"operationId":"getMyIntegration","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetIntegrationClientResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Returns the integration_client the calling INTEGRATION_ADMIN administers.\nThe id is resolved by `integrationAdminAuthMiddleware` and placed in\n`res.locals.integrationClientId` BEFORE this controller runs. Missing\nvalue here means middleware misconfiguration and is treated as auth error.","tags":["My Integration"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration":{"patch":{"operationId":"patchMyIntegration","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetIntegrationClientResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Partial update of the caller's own integration.","tags":["My Integration"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchIntegrationClientRequestBody"}}}}}},"/my-integration/users":{"get":{"operationId":"listMyIntegrationUsers","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListIntegrationClientUsersResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Paginated list of B2C end-users associated with the calling integration.\nUseful for the INTEGRATION_ADMIN to monitor adoption.","tags":["My Integration"],"security":[{"bearer":[]}],"parameters":[{"in":"query","name":"limit","required":false,"schema":{"format":"double","type":"number"}},{"in":"query","name":"offset","required":false,"schema":{"format":"double","type":"number"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}}]}},"/my-integration/payment-requests":{"get":{"operationId":"listMyIntegrationPaymentRequests","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListIntegrationPaymentRequestsResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Paginated list of payment_requests issued through the calling integration.\nOptional date range filter on create_date (inclusive bounds, ISO date strings).","tags":["My Integration"],"security":[{"bearer":[]}],"parameters":[{"in":"query","name":"limit","required":false,"schema":{"format":"double","type":"number"}},{"in":"query","name":"offset","required":false,"schema":{"format":"double","type":"number"}},{"in":"query","name":"dateFrom","required":false,"schema":{"type":"string"}},{"in":"query","name":"dateTo","required":false,"schema":{"type":"string"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}}]}},"/my-integration/commerce-account/{userId}":{"delete":{"operationId":"deleteCommerceAccount","responses":{"204":{"description":"No Content"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}}},"description":"Unlinks a previously-linked B2C account from the calling integration.\nSoft-deletes the integration_client_user row for the (integrationClientId,\nuserId) pair.\n\nReturns 204 on success, 404 if no active link exists for that pair.\n\nMVP does NOT pre-check pending payment_requests — see service doc for the\nedge case and follow-up plan.","tags":["My Integration"],"security":[{"bearer":[]}],"parameters":[{"in":"path","name":"userId","required":true,"schema":{"type":"string"}}]}},"/my-integration/logo":{"post":{"operationId":"uploadMyIntegrationLogo","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetIntegrationClientResponseBody"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"description":"Uploads (or replaces) the caller's own integration logo.\n\nThe real multipart parsing is done by the multer middleware wired in\n`myIntegration.routes.ts` (route-level, field name \"file\") — this is not\na TSOA-managed route, so `@UploadedFile()` here only documents the\nmultipart body for swagger/SDK generation; at runtime we read\n`request.file`, populated by that middleware before this controller runs.","tags":["My Integration"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}}}},"/my-integration/api-keys":{"get":{"operationId":"getWidgetApiKeys","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetApiKeysResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration API Keys"],"security":[{"bearer":[]}],"parameters":[]},"post":{"operationId":"createWidgetApiKeys","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostApiKeysResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration API Keys"],"security":[{"bearer":[]}],"parameters":[]}},"/my-integration/api-keys/origins":{"put":{"operationId":"setWidgetAllowedOrigins","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutAllowedOriginsResponseBody"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration API Keys"],"security":[{"bearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutAllowedOriginsRequestBody"}}}}}},"/my-integration/api-keys/rotate-secret":{"post":{"operationId":"rotateWidgetSecretKey","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostRotateSecretResponseBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"},"examples":{"Example 1":{}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChytaError"}}}}},"tags":["My Integration API Keys"],"security":[{"bearer":[]}],"parameters":[]}}},"servers":[{"url":"https://integration-admin-api.chytapay.com.ar","description":"PROD"},{"url":"https://integration-admin-api.test.chytapay.com.ar","description":"TEST"},{"url":"https://integration-admin-api.dev.chytapay.com.ar","description":"DEV"}]}