HIREN · ops console para Freelancer.com — enerby.dev

Documentación — HIREN

Todo lo necesario para operar la app, conectar agentes IA y terminar el registro de la app en Freelancer.

1 · URLs para el formulario de app de Freelancer

Campos pendientes en accounts.freelancer.com/settings/develop:

Application Homepage:
https://hiren.enerby.dev/

Redirect Endpoint (URI de redirección):
https://hiren.enerby.dev/auth/callback

Scopes avanzados recomendados: 1 crear proyectos, 2 gestionar proyectos/bids, 3+4 concursos, 5 mensajería, 6 info de usuario. El scope basic es automático.

2 · Autenticación (dos vías)

Agentes IA / curl — header en TODA llamada a /api/**:

x-agent-key: <NUXT_AGENT_API_KEY>

Navegador — botón «Conectar con OAuth» (crea cookie HttpOnly) o guardar un PAT:

curl -X POST https://hiren.enerby.dev/api/auth/pat \
  -H 'content-type: application/json' \
  -H 'x-agent-key: TU_CLAVE' \
  -d '{"token":"TU_PERSONAL_ACCESS_TOKEN"}'

Freelancer no aprueba apps de un solo usuario: el PAT es la vía soportada para tu cuenta propia hoy; la app OAuth queda lista para la consultoría multi-usuario.

3 · Endpoints de HIREN

Método + rutaUpstreamNotas
GET /api/healthpúblico
GET /api/specpúblico, autodescubrimiento
GET /api/auth/statusmodo conectado y expiración
POST /api/auth/pat{token}
GET /api/meusers/0.1/self/perfil y balance
GET /api/projects/searchprojects/0.1/projects/active/query, min_price, max_price, sort_field, limit…
GET /api/projects/:idprojects/0.1/projects/{id}/proyecciones via query
POST /api/projectsprojects/0.1/projects/crear proyecto (consultoría)
GET /api/projects/jobsprojects/0.1/jobs/search/IDs de skills
GET /api/currenciesprojects/0.1/currencies/para crear proyectos
GET /api/bidsprojects/0.1/bids/mis bids por defecto
POST /api/bidsprojects/0.1/bids/{project_id, amount, period, description?, milestone_percentage?}
PUT /api/bids/:idprojects/0.1/bids/{id}/actualizar o {action:"retract"}
GET /api/messages/threadsmessages/0.1/threads/?unread_thread_count=true
POST /api/messages/threadsmessages/0.1/threads/{participant_ids[], project_id?, message_body}
POST /api/messages/threads/:id/messagesmessages/0.1/threads/{id}/messages/responder hilo
POST /api/contestscontests/0.1/contests/crear concurso
POST /api/proxycualquier endpoint{method, path, params?, body?}

4 · Ejemplos para agentes IA

// Buscar proyectos
curl 'https://hiren.enerby.dev/api/projects/search?query=nuxt&limit=5' \
  -H 'x-agent-key: TU_CLAVE'

// Postular (¡acción real!)
curl -X POST 'https://hiren.enerby.dev/api/bids' \
  -H 'content-type: application/json' \
  -H 'x-agent-key: TU_CLAVE' \
  -d '{"project_id":40720284,"amount":180,"period":21,
       "milestone_percentage":33,"description":"..."}'

// Cualquier endpoint vía pasarela
curl -X POST 'https://hiren.enerby.dev/api/proxy' \
  -H 'content-type: application/json' \
  -H 'x-agent-key: TU_CLAVE' \
  -d '{"method":"GET","path":"users/0.1/self/"}'

5 · Despliegue Cloudflare Workers

Checklist del dashboard (guía completa en el README del repo):

1. Workers & Pages → Create → Workers → Connect to Git → repo hiren
2. Build npm run build · Deploy npx wrangler deploy · Preview npx wrangler versions upload (usa el wrangler.jsonc del repo)
3. KV: ya declarado en wrangler.jsonc (namespace HIREN_KV, binding KV) — sin paso manual
4. Secrets (persisten): NUXT_AGENT_API_KEY; tras aprobarse la app OAuth: NUXT_FREELANCER_CLIENT_ID / NUXT_FREELANCER_CLIENT_SECRET
5. Custom domain: hiren.enerby.dev (Settings → Domains & Routes)
6. Probar /api/health y luego OAuth

El header de la API upstream es freelancer-oauth-v1; rate limits: 429 con RateLimit-Limit/`RateLimit-Remaining`.