Bancos socios

Perfiles crediticios firmados, con consentimiento

OAuth 2.0 + PKCE da acceso a perfiles crediticios firmados de freelancers de GigRevo. Sandbox hoy, producción cuando estés listo.

openapi.yaml openapi.json Discovery JWKS

OAuth 2.0 + PKCE

Flujo estándar de authorization code con S256 PKCE. Usa cualquier cliente OAuth.

Perfiles firmados (JWS)

Cada perfil va firmado con RS256 o Ed25519. Verifica contra /jwks.json antes de confiar en los datos.

Fixtures sandbox

Seis freelancers de prueba — novato a top — aislados de los usuarios reales.

Step 01

Redirige al usuario a /authorize

Envía el navegador del freelancer a la pantalla de consentimiento con tu client_id y un PKCE challenge.

Browser redirect
https://www.gigrevo.com/api/v1/bank/authorize
  ?response_type=code
  &client_id=YOUR_CLIENT_ID
  &redirect_uri=https%3A%2F%2Fbank.example.com%2Fcallback
  &scope=profile.read
  &state=RANDOM_STATE
  &code_challenge=S256_OF_VERIFIER
  &code_challenge_method=S256
Step 02

Intercambia code por access_token

POST el authorization code + el code_verifier a /token con HTTP Basic auth.

POST /api/v1/bank/token
curl -X POST https://www.gigrevo.com/api/v1/bank/token \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -d "grant_type=authorization_code" \
  -d "code=$AUTHORIZATION_CODE" \
  -d "redirect_uri=$REDIRECT_URI" \
  -d "code_verifier=$CODE_VERIFIER"
Step 03

Obtén el perfil firmado

Incluye el access_token como Bearer. La respuesta trae payload y firma JWS.

GET /api/v1/bank/profile
curl https://www.gigrevo.com/api/v1/bank/profile \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Step 04

Verifica la firma

Trae nuestro JWKS, empareja por kid, verifica con jose (o equivalente). Rechaza payloads con _sandbox:true en producción.

Node.js (jose)
import { createRemoteJWKSet, jwtVerify } from "jose"

const JWKS = createRemoteJWKSet(
  new URL("https://www.gigrevo.com/api/v1/bank/jwks.json"),
)

async function fetchProfile(accessToken) {
  const res = await fetch("https://www.gigrevo.com/api/v1/bank/profile", {
    headers: { Authorization: `Bearer ${accessToken}` },
  })
  // `signature` is a full JWS compact serialization — the payload is
  // embedded inside it. The top-level `payload` field is a convenience
  // copy; always trust the JWS-embedded version after verification.
  const { signature } = await res.json()

  const { payload } = await jwtVerify(signature, JWKS, {
    algorithms: ["RS256", "EdDSA"],
  })
  if (payload._sandbox) throw new Error("Sandbox payload in production")
  return payload
}

Notas sandbox

Los bancos sandbox solo pueden autorizar fixtures sandbox. Cada respuesta sandbox incluye _sandbox:true para que puedas asegurar que no aparece en producción. Admins siembran seis personas: novato, emergente, top, volumen, disputado y KYC verificado.

Step 05

Solicitar acceso

Cuéntanos sobre tu integración. El equipo de partners te enviará credenciales sandbox en menos de dos días hábiles.

FAQ

¿Ofrecen KYC / verificación de identidad?

No en v1. El perfil incluye un kyc_tier (0–2) según nuestro onboarding interno, pero no hacemos IDV de freelancers. Tú ejecutas tu propio KYC si lo necesitas.

¿Cuánto cuesta el acceso?

Sandbox es gratis. El precio de producción depende del volumen y caso de uso — escríbenos por el formulario y lo aterrizamos contigo.

¿Cuáles son los límites de tasa?

Por defecto 60 peticiones por minuto por banco, configurable por partner. Los bancos sandbox comparten el mismo límite.

¿Cómo rotan las llaves de firma?

Publicamos varias llaves en /jwks.json antes de la rotación. Cada payload trae un kid — cachea por kid y refresca cuando veas uno nuevo.