> For the complete documentation index, see [llms.txt](https://developer.celigo.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.celigo.com/api/api-reference/monitoring/tags.md).

# Tags

API for managing the account-level tag catalog. Tags are short-code labels that can be applied to flow-step errors for classification and triage.

### Tag schema

## The Tag object

```json
{"openapi":"3.2.0","info":{"title":"Tags","version":"1.0.0"},"components":{"schemas":{"Tag":{"type":"object","required":["_id","tag","tagId"],"description":"One tag entry from the account's tag catalog. `tag` is the human\ndisplay name; `tagId` is the 5-char short code used when writing tag\nreferences on flow-step errors.","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"tag":{"type":"string","maxLength":100,"description":"Human-readable tag name. Appears on read-side error records."},"tagId":{"type":"string","readOnly":true,"minLength":5,"maxLength":5,"pattern":"^[a-zA-Z0-9]{5}$","description":"Short code used when writing tag references — e.g. as the values\nin `PUT /v1/flows/{_id}/{_stepId}/tags` `tagIds[]`.\nServer-generated and immutable: `tagId` values supplied on\ncreate/update are ignored and a fresh code is generated."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]}}}}
```

## List the account's tag catalog

> Returns every tag defined in the account, each with its short \`tagId\`\
> code and human-readable \`tag\` name. This is the catalog that backs the\
> tag-picker on flow-step errors (\`PUT /v1/flows/{\_id}/{\_stepId}/tags\`).\
> \
> The \`tagId\` field is the short code used as a write-side input on\
> flow-step tag mutations (\`PUT /v1/flows/{\_id}/{\_stepId}/tags\`\
> accepts \`tagIds: \["NjMMA", ...]\`), while the human name is stored\
> on the error record as \`tags: \["Ignore", ...]\`.

```json
{"openapi":"3.2.0","info":{"title":"Tags","version":"1.0.0"},"tags":[{"name":"Tags","description":"API for managing the account-level tag catalog. Tags are short-code labels\nthat can be applied to flow-step errors for classification and triage.\n\n## Tag schema\n\n{% openapi-schemas spec=\"tag\" schemas=\"Tag\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"parameters":{"After":{"name":"after","in":"query","required":false,"description":"Opaque cursor for forward pagination. Pass the value from the `Link`\nresponse header (`rel=\"next\"`) to fetch the next page.","schema":{"type":"string"}}},"schemas":{"Tag":{"type":"object","required":["_id","tag","tagId"],"description":"One tag entry from the account's tag catalog. `tag` is the human\ndisplay name; `tagId` is the 5-char short code used when writing tag\nreferences on flow-step errors.","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"tag":{"type":"string","maxLength":100,"description":"Human-readable tag name. Appears on read-side error records."},"tagId":{"type":"string","readOnly":true,"minLength":5,"maxLength":5,"pattern":"^[a-zA-Z0-9]{5}$","description":"Short code used when writing tag references — e.g. as the values\nin `PUT /v1/flows/{_id}/{_stepId}/tags` `tagIds[]`.\nServer-generated and immutable: `tagId` values supplied on\ncreate/update are ignored and a fresh code is generated."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}}}},"paths":{"/v1/tags":{"get":{"operationId":"listTags","tags":["Tags"],"parameters":[{"name":"limit","in":"query","description":"Maximum number of records to return per page.","schema":{"type":"integer","minimum":1}},{"$ref":"#/components/parameters/After"}],"summary":"List the account's tag catalog","description":"Returns every tag defined in the account, each with its short `tagId`\ncode and human-readable `tag` name. This is the catalog that backs the\ntag-picker on flow-step errors (`PUT /v1/flows/{_id}/{_stepId}/tags`).\n\nThe `tagId` field is the short code used as a write-side input on\nflow-step tag mutations (`PUT /v1/flows/{_id}/{_stepId}/tags`\naccepts `tagIds: [\"NjMMA\", ...]`), while the human name is stored\non the error record as `tags: [\"Ignore\", ...]`.","responses":{"200":{"description":"Array of tag entries (at least one tag exists).","headers":{"Link":{"description":"RFC-5988 pagination links. When more pages remain, includes a `<...>; rel=\"next\"` entry;\nabsent on the final page.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Tag"}}}}},"204":{"description":"No tags exist in the account."},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## Create a tag

> Creates a new tag in the account's tag catalog. The server generates\
> an immutable short \`tagId\` code automatically. Tag names are\
> case-insensitively unique within the account — a case-variant\
> duplicate is rejected with HTTP 422 \`\[create\_not\_allowed]\` "A tag\
> with this name already exists." Per Celigo's documentation, the\
> catalog holds at most 1,000 unique tags per account. Note the\
> per-error limit is separate and much smaller: a single error carries\
> at most 3 tags (see \`PUT /v1/flows/{\_id}/{\_stepId}/tags\`).

```json
{"openapi":"3.2.0","info":{"title":"Tags","version":"1.0.0"},"tags":[{"name":"Tags","description":"API for managing the account-level tag catalog. Tags are short-code labels\nthat can be applied to flow-step errors for classification and triage.\n\n## Tag schema\n\n{% openapi-schemas spec=\"tag\" schemas=\"Tag\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Request":{"type":"object","description":"Fields for creating or updating a tag.","required":["tag"],"properties":{"tag":{"type":"string","minLength":1,"maxLength":100,"description":"The human-readable tag name. Case-insensitively unique within the\naccount. Whitespace is trimmed on save; names that are empty after\ntrimming are rejected."}}},"Tag":{"type":"object","required":["_id","tag","tagId"],"description":"One tag entry from the account's tag catalog. `tag` is the human\ndisplay name; `tagId` is the 5-char short code used when writing tag\nreferences on flow-step errors.","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"tag":{"type":"string","maxLength":100,"description":"Human-readable tag name. Appears on read-side error records."},"tagId":{"type":"string","readOnly":true,"minLength":5,"maxLength":5,"pattern":"^[a-zA-Z0-9]{5}$","description":"Short code used when writing tag references — e.g. as the values\nin `PUT /v1/flows/{_id}/{_stepId}/tags` `tagIds[]`.\nServer-generated and immutable: `tagId` values supplied on\ncreate/update are ignored and a fresh code is generated."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/tags":{"post":{"operationId":"createTag","tags":["Tags"],"summary":"Create a tag","description":"Creates a new tag in the account's tag catalog. The server generates\nan immutable short `tagId` code automatically. Tag names are\ncase-insensitively unique within the account — a case-variant\nduplicate is rejected with HTTP 422 `[create_not_allowed]` \"A tag\nwith this name already exists.\" Per Celigo's documentation, the\ncatalog holds at most 1,000 unique tags per account. Note the\nper-error limit is separate and much smaller: a single error carries\nat most 3 tags (see `PUT /v1/flows/{_id}/{_stepId}/tags`).","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"responses":{"201":{"description":"The created tag entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Get a tag

> Returns a single tag entry by its \`\_id\`.

```json
{"openapi":"3.2.0","info":{"title":"Tags","version":"1.0.0"},"tags":[{"name":"Tags","description":"API for managing the account-level tag catalog. Tags are short-code labels\nthat can be applied to flow-step errors for classification and triage.\n\n## Tag schema\n\n{% openapi-schemas spec=\"tag\" schemas=\"Tag\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Tag":{"type":"object","required":["_id","tag","tagId"],"description":"One tag entry from the account's tag catalog. `tag` is the human\ndisplay name; `tagId` is the 5-char short code used when writing tag\nreferences on flow-step errors.","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"tag":{"type":"string","maxLength":100,"description":"Human-readable tag name. Appears on read-side error records."},"tagId":{"type":"string","readOnly":true,"minLength":5,"maxLength":5,"pattern":"^[a-zA-Z0-9]{5}$","description":"Short code used when writing tag references — e.g. as the values\nin `PUT /v1/flows/{_id}/{_stepId}/tags` `tagIds[]`.\nServer-generated and immutable: `tagId` values supplied on\ncreate/update are ignored and a fresh code is generated."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/tags/{_id}":{"get":{"operationId":"getTagById","tags":["Tags"],"summary":"Get a tag","description":"Returns a single tag entry by its `_id`.","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string","format":"objectId"},"description":"The tag ID."}],"responses":{"200":{"description":"The tag entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Update a tag

> Updates the human-readable \`tag\` name for an existing tag entry.\
> The short \`tagId\` code is immutable and cannot be changed.

```json
{"openapi":"3.2.0","info":{"title":"Tags","version":"1.0.0"},"tags":[{"name":"Tags","description":"API for managing the account-level tag catalog. Tags are short-code labels\nthat can be applied to flow-step errors for classification and triage.\n\n## Tag schema\n\n{% openapi-schemas spec=\"tag\" schemas=\"Tag\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Request":{"type":"object","description":"Fields for creating or updating a tag.","required":["tag"],"properties":{"tag":{"type":"string","minLength":1,"maxLength":100,"description":"The human-readable tag name. Case-insensitively unique within the\naccount. Whitespace is trimmed on save; names that are empty after\ntrimming are rejected."}}},"Tag":{"type":"object","required":["_id","tag","tagId"],"description":"One tag entry from the account's tag catalog. `tag` is the human\ndisplay name; `tagId` is the 5-char short code used when writing tag\nreferences on flow-step errors.","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"tag":{"type":"string","maxLength":100,"description":"Human-readable tag name. Appears on read-side error records."},"tagId":{"type":"string","readOnly":true,"minLength":5,"maxLength":5,"pattern":"^[a-zA-Z0-9]{5}$","description":"Short code used when writing tag references — e.g. as the values\nin `PUT /v1/flows/{_id}/{_stepId}/tags` `tagIds[]`.\nServer-generated and immutable: `tagId` values supplied on\ncreate/update are ignored and a fresh code is generated."}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/tags/{_id}":{"put":{"operationId":"updateTag","tags":["Tags"],"summary":"Update a tag","description":"Updates the human-readable `tag` name for an existing tag entry.\nThe short `tagId` code is immutable and cannot be changed.","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string","format":"objectId"},"description":"The tag ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"responses":{"200":{"description":"The updated tag entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Delete a tag

> Permanently deletes a tag from the account's tag catalog.

```json
{"openapi":"3.2.0","info":{"title":"Tags","version":"1.0.0"},"tags":[{"name":"Tags","description":"API for managing the account-level tag catalog. Tags are short-code labels\nthat can be applied to flow-step errors for classification and triage.\n\n## Tag schema\n\n{% openapi-schemas spec=\"tag\" schemas=\"Tag\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/tags/{_id}":{"delete":{"operationId":"deleteTag","tags":["Tags"],"summary":"Delete a tag","description":"Permanently deletes a tag from the account's tag catalog.","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string","format":"objectId"},"description":"The tag ID."}],"responses":{"204":{"description":"Tag deleted successfully."},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Patch a tag

> Partially updates a tag using a JSON Patch document (RFC 6902).\
> Only the \`replace\` operation is supported, and only on the following\
> whitelisted path:\
> \
> \| Path | Description |\
> \|------|-------------|\
> \| \`/tag\` | The human-readable tag name |\
> \
> All other paths are rejected with \`422\`.

```json
{"openapi":"3.2.0","info":{"title":"Tags","version":"1.0.0"},"tags":[{"name":"Tags","description":"API for managing the account-level tag catalog. Tags are short-code labels\nthat can be applied to flow-step errors for classification and triage.\n\n## Tag schema\n\n{% openapi-schemas spec=\"tag\" schemas=\"Tag\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"JsonPatchRequest":{"type":"array","description":"A JSON Patch document (RFC 6902). Send an array of patch\noperations on whitelisted fields — all other paths are rejected\nwith 422.","minItems":1,"items":{"$ref":"#/components/schemas/JsonPatchOperation"}},"JsonPatchOperation":{"type":"object","description":"A single JSON Patch operation (RFC 6902).","required":["op","path"],"properties":{"op":{"type":"string","enum":["replace","add","remove"],"description":"The operation to perform."},"path":{"type":"string","description":"JSON Pointer (RFC 6901) to the field to patch. Only\nwhitelisted paths are accepted — unlisted paths return\n`422` with `\"<path> is not a whitelisted property\"`."},"value":{"description":"The new value to set. Required for `replace` and `add`, omit for `remove`."}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/tags/{_id}":{"patch":{"operationId":"patchTag","tags":["Tags"],"summary":"Patch a tag","description":"Partially updates a tag using a JSON Patch document (RFC 6902).\nOnly the `replace` operation is supported, and only on the following\nwhitelisted path:\n\n| Path | Description |\n|------|-------------|\n| `/tag` | The human-readable tag name |\n\nAll other paths are rejected with `422`.","parameters":[{"name":"_id","in":"path","required":true,"schema":{"type":"string","format":"objectId"},"description":"The tag ID."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPatchRequest"}}}},"responses":{"204":{"description":"Tag patched successfully."},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```
