[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Log candidate activity

> Log a progression trigger on a candidate in a job, with an optional note. Inputs, cURL, Python and Node.js examples and an example response.

Source: https://cotlet.dev/docs/api/loxo/log_activity

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

Log a progression trigger on a candidate in a job, with an optional note.

Loxo API: https://cotlet.dev/docs/api/loxo.md

`POST https://cotlet.dev/api/v1/loxo/jobs/{job_id}/activities`

Access: write. Confirm: waits for the user's OK before it runs.

Logs the trigger as the activity drop-down on the profile does. Loxo adds two events, "Moved to {stage}" and the trigger, so the candidate also changes stage. A trigger name your workflow does not have fails the call. A stage with an Email Automation can start sending its emails. By default you confirm each call; you can switch that off for this tool.

## Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | integer | yes | Job id. |
| `person_id` | integer | yes | Person id. |
| `activity` | string | yes | Progression trigger name from list_workflow_stages, for example 1st Interview. |
| `note` | string | no | Text saved with the activity. |

## Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/loxo/jobs/2481530/activities \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"person_id":48211102,"activity":"1st Interview","note":"Good system design answers."}'
```

**Python**

```python
result = client.call("loxo", "log_activity", {"job_id":2481530,"person_id":48211102,"activity":"1st Interview","note":"Good system design answers."})
```

**Node.js**

```js
const result = await cotlet.call('loxo', 'log_activity', {"job_id":2481530,"person_id":48211102,"activity":"1st Interview","note":"Good system design answers."});
```

**CLI**

```bash
cotlet call loxo log_activity --data '{"job_id":2481530,"person_id":48211102,"activity":"1st Interview","note":"Good system design answers."}'
```

## Example response

```json
{
  "job_id": 2481530,
  "person_id": 48211077,
  "stage": "Interviewing",
  "events": [
    "Moved to Interviewing",
    "1st Interview"
  ],
  "note": "Strong on Spark, wants a remote role."
}
```

Previous: [Move a candidate to a stage](https://cotlet.dev/docs/api/loxo/move_candidate.md)
Next: [Add people to a list](https://cotlet.dev/docs/api/loxo/add_to_list.md)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
