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.
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.
Redirige al usuario a /authorize
Envía el navegador del freelancer a la pantalla de consentimiento con tu client_id y un PKCE challenge.
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
Intercambia code por access_token
POST el authorization code + el code_verifier a /token con HTTP Basic auth.
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"
Obtén el perfil firmado
Incluye el access_token como Bearer. La respuesta trae payload y firma JWS.
curl https://www.gigrevo.com/api/v1/bank/profile \ -H "Authorization: Bearer $ACCESS_TOKEN"
Verifica la firma
Trae nuestro JWKS, empareja por kid, verifica con jose (o equivalente). Rechaza payloads con _sandbox:true en producción.
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.
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.