> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.withpersona.com/2020-05-18/api-reference/transactions/set-tags/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.withpersona.com/_mcp/server. # Sets tags on a Transaction POST https://api.withpersona.com/api/v1/transactions/{transaction-id}/set-tags Content-Type: application/json Set the list of tags on a transaction. Remove all tags on the transaction that don't appear on the list. Add all tags on the transaction from the list. Reference: https://docs.withpersona.com/api-reference/transactions/set-tags ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Request ### Path parameters - `transaction-id` (string, required) — ID of the transaction to set tags on. ### Query parameters - `include` (string, optional) — A comma-separated list of relationship paths. This can be used to customize which related resources will be fully serialized in the `included` key in the response. See [Serialization](https://docs.withpersona.com/serialization#inclusion-of-related-resources) for more details. - `fields` (map from string to string, optional) — Comma-separated list(s) of attributes to include in the response. This can be used to customize which attributes will be serialized in the response. See [Serialization](https://docs.withpersona.com/serialization#sparse-fieldsets) for more details. ### Headers - `Key-Inflection` (enum, optional) — Determines casing for the API response. - Allowed values: `camel`, `kebab`, `snake` - `Idempotency-Key` (string, optional) — Ensures the request is idempotent. - `Persona-Version` (enum, optional) — Server API version. More info on versioning can be found [here](https://docs.withpersona.com/versioning). - Allowed values: `2025-12-08`, `2025-10-27`, `2023-01-05`, `2022-09-01`, `2021-08-18`, `2021-07-05`, `2021-02-21`, `2020-05-18` ### Body (application/json) This endpoint expects an object. - `meta` (TransactionsTransactionIdSetTagsPostRequestBodyContentApplicationJsonSchemaMeta, optional) ## Response ### 200 This endpoint returns a Transaction object and (optionally) its related objects in `included`. - `data` (transaction, required) ## Errors ### 400 Bad Request Error The request was unacceptable, often due to invalid parameters. - `errors` (list of TransactionsTransactionIdSetTagsPostResponsesContentApplicationJsonSchemaErrorsItems, optional) ### 401 Unauthorized Error An invalid API key was provided. - `errors` (list of TransactionsTransactionIdSetTagsPostResponsesContentApplicationJsonSchemaErrorsItems, optional) ### 403 Forbidden Error The given API key doesn’t have permissions to perform the request or a quota has been exceeded. - `errors` (list of TransactionsTransactionIdSetTagsPostResponsesContentApplicationJsonSchemaErrorsItems, optional) ### 404 Not Found Error The requested resource doesn’t exist. - `errors` (list of TransactionsTransactionIdSetTagsPostResponsesContentApplicationJsonSchemaErrorsItems, optional) ### 409 Conflict Error The request conflicts with another request, often due to attempting to create a duplicate resource. - `errors` (list of TransactionsTransactionIdSetTagsPostResponsesContentApplicationJsonSchemaErrorsItems, optional) ### 422 Unprocessable Entity Error The request modifies the resource in an unacceptable way, often due to an invalid action or parameter. - `errors` (list of TransactionsTransactionIdSetTagsPostResponsesContentApplicationJsonSchemaErrorsItems, optional) ### 429 Too Many Requests Error Your organization’s rate limit has been exceeded. We recommend an exponential backoff on requests. - `errors` (list of TransactionsTransactionIdSetTagsPostResponsesContentApplicationJsonSchemaErrorsItems, optional) ## Types ### TransactionsTransactionIdSetTagsPostRequestBodyContentApplicationJsonSchemaMeta - `tag-name` (list of string, optional) — Name of the tag to add to the Transaction. - `tag-id` (list of string, optional) — ID of the tag to add to the Transaction. ### transaction - `id` (string, optional) — Unique identifier for this Transaction. Starts with `txn_`. - `attributes` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionAttributes, optional) - `relationships` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationships, optional) ### TransactionsTransactionIdSetTagsPostResponsesContentApplicationJsonSchemaErrorsItems - `title` (string, optional) - `details` (string, optional) ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionAttributes - `status` (string, optional) - `reference-id` (string, optional, nullable) - `fields` (map from string to any, optional) — JSON key-value pairs of field name to field value. Exact schema depends on the configuration of the Transaction Type for this Transaction. - `tags` (list of string, optional) - `signals` (map from string to any, optional) — Risk signals computed for this Transaction, keyed by signal name. Only present for Transactions whose Transaction Type has Sentinel enabled; signals appear once the Sentinel session has been processed. Specific keys are not enumerated in the public spec and may be added or removed over time. Contact your Persona account team for more information. - `created-at` (datetime, optional) - `updated-at` (datetime, optional, nullable) ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationships - `reviewer` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsReviewer, optional) — The entity that reviewed the transaction - `transaction-label` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsTransactionLabel, optional) - `transaction-type` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsTransactionType, optional) - `related-objects` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsRelatedObjects, optional) — Objects involved in this Transaction's related Workflow runs. - `sentinel-sessions` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsSentinelSessions, optional) — The Sentinel sessions that collected device and network data for this Transaction. Present on every Transaction; `data` is empty unless the Transaction has one or more Sentinel sessions. ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsReviewer The entity that reviewed the transaction - `data` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsReviewerData, optional, nullable) ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsTransactionLabel - `data` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsTransactionLabelData, optional, nullable) ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsTransactionType - `data` (VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsTransactionTypeData, optional) ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsRelatedObjects Objects involved in this Transaction's related Workflow runs. - `data` (list of VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsRelatedObjectsDataItems, optional) ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsSentinelSessions The Sentinel sessions that collected device and network data for this Transaction. Present on every Transaction; `data` is empty unless the Transaction has one or more Sentinel sessions. - `data` (list of VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsSentinelSessionsDataItems, optional) ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsReviewerData - `type` (string, optional) - `id` (string, optional) ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsTransactionLabelData - `type` ("transaction-label", optional) - `id` (string, optional) — Unique identifier for this Transaction Label. Starts with `txnl_`. ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsTransactionTypeData - `type` ("transaction-type", optional) - `id` (string, optional) — Unique identifier for this Transaction Type. Starts with `txntp_`. ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsRelatedObjectsDataItems - `type` (string, optional) - `id` (string, optional) — Unique identifier for this object. ### VerificationIncludedObjectsItemsDiscriminatorMappingTransactionRelationshipsSentinelSessionsDataItems - `type` ("sentinel-session", optional) - `id` (string, optional) — Unique identifier for this Sentinel Session. Starts with `snts_`. ## Examples ### Success **Response** ```json { "data": { "id": "txn_ABC123", "attributes": { "status": "declined", "reference-id": null, "fields": { "back-photo": { "type": "file", "value": { "byte-size": 237011, "filename": "image.png", "mime-type": "image/png", "url": "https://files.withpersona.com/image.png?access_token=ACCESS_ABC123" } }, "country": { "type": "string", "value": "US" }, "front-photo": { "type": "file", "value": { "byte-size": 237011, "filename": "image.png", "mime-type": "image/png", "url": "https://files.withpersona.com/image.png?access_token=ACCESS_ABC123" } }, "name-first": { "type": "string", "value": "LeBron" }, "name-last": { "type": "string", "value": "James" }, "selected-id-class": { "type": "string", "value": "dl" } }, "tags": [], "created-at": "2023-05-26T16:49:33.860Z", "updated-at": "2023-05-26T16:49:43.965Z" }, "relationships": { "reviewer": { "data": { "type": "workflow-run", "id": "wfr_ABC123" } }, "transaction-label": { "data": null }, "transaction-type": { "data": { "type": "transaction-type", "id": "txntp_ABC123" } }, "related-objects": { "data": [ { "type": "account", "id": "act_ABC123" }, { "type": "verification/government-id", "id": "ver_ABC123" } ] }, "sentinel-sessions": { "data": [] } }, "type": "transaction" } } ``` **SDK Code** ```python Success import requests url = "https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags" headers = {"Authorization": "Bearer "} response = requests.post(url, headers=headers) print(response.json()) ``` ```javascript Success const url = 'https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags'; const options = {method: 'POST', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go Success package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags" req, _ := http.NewRequest("POST", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby Success require 'uri' require 'net/http' url = URI("https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java Success import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags") .header("Authorization", "Bearer ") .asString(); ``` ```php Success request('POST', 'https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp Success using RestSharp; var client = new RestClient("https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift Success import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ``` ### Example **Request** ```json { "meta": { "tag-name": [ "new tag 1", "new tag 2" ] } } ``` **Response** ```json { "data": { "id": "txn_ABC123", "attributes": { "status": "declined", "reference-id": null, "fields": { "back-photo": { "type": "file", "value": { "byte-size": 237011, "filename": "image.png", "mime-type": "image/png", "url": "https://files.withpersona.com/image.png?access_token=ACCESS_ABC123" } }, "country": { "type": "string", "value": "US" }, "front-photo": { "type": "file", "value": { "byte-size": 237011, "filename": "image.png", "mime-type": "image/png", "url": "https://files.withpersona.com/image.png?access_token=ACCESS_ABC123" } }, "name-first": { "type": "string", "value": "LeBron" }, "name-last": { "type": "string", "value": "James" }, "selected-id-class": { "type": "string", "value": "dl" } }, "tags": [], "created-at": "2023-05-26T16:49:33.860Z", "updated-at": "2023-05-26T16:49:43.965Z" }, "relationships": { "reviewer": { "data": { "type": "workflow-run", "id": "wfr_ABC123" } }, "transaction-label": { "data": null }, "transaction-type": { "data": { "type": "transaction-type", "id": "txntp_ABC123" } }, "related-objects": { "data": [ { "type": "account", "id": "act_ABC123" }, { "type": "verification/government-id", "id": "ver_ABC123" } ] }, "sentinel-sessions": { "data": [] } }, "type": "transaction" } } ``` **SDK Code** ```python Example import requests url = "https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags" payload = { "meta": { "tag-name": ["new tag 1", "new tag 2"] } } headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript Example const url = 'https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags'; const options = { method: 'POST', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{"meta":{"tag-name":["new tag 1","new tag 2"]}}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go Example package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags" payload := strings.NewReader("{\n \"meta\": {\n \"tag-name\": [\n \"new tag 1\",\n \"new tag 2\"\n ]\n }\n}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "Bearer ") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby Example require 'uri' require 'net/http' url = URI("https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{\n \"meta\": {\n \"tag-name\": [\n \"new tag 1\",\n \"new tag 2\"\n ]\n }\n}" response = http.request(request) puts response.read_body ``` ```java Example import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{\n \"meta\": {\n \"tag-name\": [\n \"new tag 1\",\n \"new tag 2\"\n ]\n }\n}") .asString(); ``` ```php Example request('POST', 'https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags', [ 'body' => '{ "meta": { "tag-name": [ "new tag 1", "new tag 2" ] } }', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp Example using RestSharp; var client = new RestClient("https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"meta\": {\n \"tag-name\": [\n \"new tag 1\",\n \"new tag 2\"\n ]\n }\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift Example import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = ["meta": ["tag-name": ["new tag 1", "new tag 2"]]] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://api.withpersona.com/api/v1/transactions/transaction-id/set-tags")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```