# Automate new vacancies from Hirify Use this guide when the user wants new vacancies from a saved search to be processed without keeping an agent chat open. Build an always-on service that receives Hirify webhooks and uses the Agent REST API for follow-up actions. Before writing code, read the machine contract at `https://api.hirify.me/api/agent/openapi.json`. Ask the user where the service should run and where matching results should be sent. Do not assume that a local CLI, desktop app or web chat remains running after the conversation ends. ## Build the flow 1. Create a public HTTPS endpoint that accepts Hirify webhook requests. 2. Register it with `POST /api/agent/webhooks`. Store the one-time signing secret securely. 3. Create or update a saved search, then select the webhook endpoint with `PUT /api/agent/feeds/{feed_id}/delivery`. 4. For every `vacancy.matched` event, verify the HMAC signature and timestamp before reading the payload. Deduplicate by delivery ID and return a 2xx response quickly. 5. Process the event asynchronously. Use `vacancy.slug` with `GET /api/agent/vacancies/{slug}` when the compact webhook card is not enough. Compare the vacancy with the user's profile and instructions, then send the result through the channel the user chose. 6. Reveal a contact or submit an application only when the user's instructions authorize that action. These operations use the account allowances described by the API response. 7. Send a test event with `POST /api/agent/webhooks/{webhook_id}/test` and inspect recent attempts at `GET /api/agent/webhooks/{webhook_id}/deliveries` before declaring the integration ready. ## Runtime choices - A server, worker or serverless function can receive webhooks continuously. - A desktop agent with scheduled background tasks can monitor or reconcile the user's service, but the webhook receiver still needs a reachable runtime. - A local CLI can build and deploy the service. It is not itself an always-on runtime after the CLI session ends. Keep the personal Agent API key and webhook secret outside source code. Treat retries as the same delivery and make processing idempotent.