---
title: "Actions: O"
description: "How to set up each action of the 8 apps starting with O."
label: "O"
generated: "the tool catalog in services/core/src/tool-catalog"
---


Apps starting with O. Add any of these from **Integrations → n8n → Add tools → Browse apps**; see [Set up an action](/build/set-up-actions) for each way a key is sent, and the [catalog index](/reference/actions) for every app.

## Odoo

- **n8n node:** [Odoo](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.odoo/) (`n8n-nodes-base.odoo`, version 2), 20 actions.
- **n8n performs it:** runs on the n8n credential *Odoo API (API Key)* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/odoo/)).
- **Veefore performs it:** 20 of 20 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://{host}`.
- **Get the key:** [odoo.com](https://www.odoo.com/documentation/15.0/developer/reference/external_api.html?#api-keys)

**Odoo in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create an activity | `POST /json/2/mail.activity/create` | `res_model`, `res_id`, `activity_type_id`, `host` |
| Delete an activity | `POST /json/2/mail.activity/unlink` | `activityId`, `host` |
| Get an activity | `POST /json/2/mail.activity/read` | `activityId`, `host` |
| Get many activities | `POST /json/2/mail.activity/search_read` | `host` |
| Update an activity | `POST /json/2/mail.activity/write` | `activityId`, `host` |
| Create a contact | `POST /json/2/res.partner/create` | `host` |
| Delete a contact | `POST /json/2/res.partner/unlink` | `contactId`, `host` |
| Get a contact | `POST /json/2/res.partner/read` | `contactId`, `host` |
| Get many contacts | `POST /json/2/res.partner/search_read` | `host` |
| Update a contact | `POST /json/2/res.partner/write` | `contactId`, `host` |
| Create a record | `POST /json/2/{customResource}/create` | `customResource`, `host` |
| Delete a record | `POST /json/2/{customResource}/unlink` | `customResource`, `recordId`, `host` |
| Get a record | `POST /json/2/{customResource}/read` | `customResource`, `recordId`, `host` |
| Get many records | `POST /json/2/{customResource}/search_read` | `customResource`, `host` |
| Update a record | `POST /json/2/{customResource}/write` | `customResource`, `recordId`, `host` |
| Create an opportunity | `POST /json/2/crm.lead/create` | `host` |
| Delete an opportunity | `POST /json/2/crm.lead/unlink` | `opportunityId`, `host` |
| Get an opportunity | `POST /json/2/crm.lead/read` | `opportunityId`, `host` |
| Get many opportunities | `POST /json/2/crm.lead/search_read` | `host` |
| Update an opportunity | `POST /json/2/crm.lead/write` | `opportunityId`, `host` |

## Okta

- **n8n node:** [Okta](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.okta/) (`n8n-nodes-base.okta`, version 1), 5 actions.
- **n8n performs it:** runs on the n8n credential *Okta API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/okta/)).
- **Veefore performs it:** 5 of 5 actions, with the key in a header, as `Authorization: SSWS <key>`.
- **You enter:** API key.
- **API address:** `https://{domain}.okta.com/api/v1`.
- **Get the key:** [login.okta.com](https://login.okta.com/)

**Okta in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a new user | `POST /users/` | `firstName`, `lastName`, `login`, `email`, `domain` |
| Delete a user | `DELETE /users/{userId}` | `userId`, `domain` |
| Get a user | `GET /users/{userId}` | `userId`, `domain` |
| Get many users | `GET /users/` | `domain` |
| Update a user | `POST /users/{userId}` | `userId`, `domain` |

## One Simple API

- **n8n node:** [One Simple API](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.onesimpleapi/) (`n8n-nodes-base.oneSimpleApi`, version 1), 10 actions.
- **n8n performs it:** runs on the n8n credential *One Simple API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/onesimpleapi/)).
- **Veefore performs it:** 10 of 10 actions, with the key in the query string, as `?token=<key>`.
- **You enter:** API token.
- **API address:** `https://onesimpleapi.com/api`.
- **Get the key:** [onesimpleapi.com](https://onesimpleapi.com/user/api-tokens)

**One Simple API in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Convert a value between currencies | `GET /exchange_rate` | `value`, `fromCurrency`, `toCurrency` |
| Get image metadata from a URL | `GET /image_info` | `link` |
| Get details about an Instagram profile | `GET /instagram_profile` | `profileName` |
| Get details about a Spotify artist | `GET /spotify_profile` | `artistName` |
| Expand a shortened URL | `GET /unshorten` | `link` |
| Generate a QR code utility | `GET /qr_code` | `message`, `download` |
| Validate an email address | `GET /email` | `emailAddress` |
| Generate PDF | `GET /pdf` | `link`, `download` |
| Get SEO Data | `GET /page_info` | `link` |
| Screenshot | `GET /screenshot` | `link`, `download` |

## Onfleet

- **n8n node:** [Onfleet](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.onfleet/) (`n8n-nodes-base.onfleet`, version 1), 37 actions.
- **n8n performs it:** runs on the n8n credential *Onfleet API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/onfleet/)).
- **Veefore performs it:** 37 of 37 actions, with HTTP basic auth: username API key, password empty.
- **You enter:** API key.
- **API address:** `https://onfleet.com/api/v2`.
- **Get the key:** [onfleet.com](https://onfleet.com/dashboard#/manage)

**Onfleet in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create an admin | `POST /admins` | `name`, `email` |
| Delete an admin | `DELETE /admins/{id}` | `id` |
| Get many admins | `GET /admins` | — |
| Update an admin | `PUT /admins/{id}` | `id` |
| Add tasks | `PUT /containers/{containerType}/{containerId}` | `containerType`, `containerId`, `type`, `tasks` |
| Get a container | `GET /containers/{containerType}/{containerId}` | `containerType`, `containerId` |
| Update tasks | `PUT /containers/{containerType}/{containerId}` | `containerId`, `tasks`, `containerType` |
| Create a destination | `POST /destinations` | `unparsed`, `addressNumber`, `addressStreet`, `addressCity`, `addressCountry` |
| Get a destination | `GET /destinations/{id}` | `id` |
| Create a hub | `POST /hubs` | `name` |
| Get many hubs | `GET /hubs` | — |
| Update a hub | `PUT /hubs/{id}` | `id` |
| Get my organization | `GET /organization` | — |
| Get a delegatee's details | `GET /organizations/{id}` | `id` |
| Create a recipient | `POST /recipients` | `recipientName`, `recipientPhone` |
| Get a recipient | `GET /recipients/{id}` | `getBy`, `id` |
| Update a recipient | `PUT /recipients/{id}` | `id` |
| Clone a task | `POST /tasks/{id}/clone` | `id` |
| Complete a task | `POST /tasks/{id}/complete` | `id`, `success` |
| Create a task | `POST /tasks` | — |
| Delete a task | `DELETE /tasks/{id}` | `id` |
| Get a task | `GET /tasks/{id}` | `id` |
| Get many tasks | `GET /tasks/all` | — |
| Update a task | `PUT /tasks/{id}` | `id` |
| Auto-dispatch a team | `POST /teams/{id}/dispatch` | `id` |
| Create a team | `POST /teams` | `name`, `workers`, `managers` |
| Delete a team | `DELETE /teams/{id}` | `id` |
| Get a team | `GET /teams/{id}` | `id` |
| Get many teams | `GET /teams` | — |
| Get time estimates for a team | `GET /teams/{id}/estimate` | `id` |
| Update a team | `PUT /teams/{id}` | `id` |
| Create a worker | `POST /workers` | `name`, `phone`, `teams` |
| Delete a worker | `DELETE /workers/{id}` | `id` |
| Get a worker | `GET /workers/{id}` | `id` |
| Get many workers | `GET /workers` | `byLocation` |
| Get the schedule for a worker | `GET /workers/{id}/schedule` | `id` |
| Update a worker | `PUT /workers/{id}` | `id` |

## OpenAI

- **n8n node:** [OpenAI](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/) (`@n8n/n8n-nodes-langchain.openAi`, version 2.3), 16 actions.
- **n8n performs it:** runs on the n8n credential *OpenAI* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/openai/)).
- **Veefore performs it:** 16 of 16 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://api.openai.com/v1`.
- **Get the key:** [platform.openai.com](https://platform.openai.com/api-keys)

**OpenAI in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Message a model | `POST /responses` | `modelId` |
| Classify text for violations | `POST /moderations` | — |
| Analyze image | `POST /responses` | `modelId` |
| Generate an image | `POST /images/generations` | `modelId` |
| Edit image | `POST /images/edits` | `modelId`, `prompt` |
| Generate audio | `POST /audio/speech` | — |
| Transcribe a recording | `POST /audio/transcriptions` | — |
| Translate a recording | `POST /audio/translations` | — |
| Delete a file | `DELETE /files/{fileId}` | `fileId` |
| List files | `GET /files` | — |
| Upload a file | `POST /files` | — |
| Create a conversation | `POST /conversations` | — |
| Get a conversation | `GET /conversations/{conversationId}` | `conversationId` |
| Remove a conversation | `DELETE /conversations/{conversationId}` | `conversationId` |
| Update a conversation | `POST /conversations/{conversationId}` | `conversationId`, `metadata` |
| Generate a video | `POST /videos` | `modelId`, `prompt`, `seconds` |

## OpenWeatherMap

- **n8n node:** [OpenWeatherMap](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.openweathermap/) (`n8n-nodes-base.openWeatherMap`, version 1), 2 actions.
- **n8n performs it:** runs on the n8n credential *OpenWeatherMap API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/openweathermap/)).
- **Veefore performs it:** no action has an endpoint Veefore can call; n8n performs them.
- **Get the key:** [home.openweathermap.org](https://home.openweathermap.org/api_keys)

**OpenWeatherMap in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Return current weather data | n8n performs it | `cityName` |
| Return weather data for the next 5 days | n8n performs it | `cityName` |

## Oracle Database

- **n8n node:** [Oracle Database](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.oracledatabase/) (`n8n-nodes-base.oracleDatabase`, version 1.1), 6 actions.
- **n8n performs it:** runs on the n8n credential *Oracle Database Credentials API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/oracledb/)).
- **Veefore performs it:** not available. Oracle Database is not a web API (a database, queue, file transfer or local step), so only n8n can perform it.

**Oracle Database in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Delete table or rows | n8n performs it | `schema`, `table` |
| Execute SQL | n8n performs it | `query` |
| Insert rows in a table | n8n performs it | `schema`, `table` |
| Insert or update rows in a table | n8n performs it | `schema`, `table` |
| Select rows from a table | n8n performs it | `schema`, `table` |
| Update rows in a table | n8n performs it | `schema`, `table` |

## Oura

- **n8n node:** [Oura](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.oura/) (`n8n-nodes-base.oura`, version 1), 4 actions.
- **n8n performs it:** runs on the n8n credential *Oura API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/oura/)).
- **Veefore performs it:** 4 of 4 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://api.ouraring.com/v2`.
- **Get the key:** [cloud.ouraring.com](https://cloud.ouraring.com/personal-access-tokens)

**Oura in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a profile | `GET /usercollection/personal_info` | — |
| Get activity summary | `GET /usercollection/daily_activity` | — |
| Get readiness summary | `GET /usercollection/daily_readiness` | — |
| Get sleep summary | `GET /usercollection/daily_sleep` | — |
