Skip to content

Submissions

POI submissions are batches of point-of-interest locations you import into your company’s data. You can list them, read a single one, create them by file upload or by an inline list of locations, and delete a submission that is still waiting for Intuizi’s review.

All submission endpoints are authenticated and JSON-only. Reads use the read rate bucket (120 requests/min); creates and deletes use the write bucket (30 requests/min).

List Submissions

GET /api/v2/my-data/pois/submissions/index

Lists the POI submissions for the authenticated user’s company, with optional search and sort.

Auth: bearer token + Accept: application/json. Rate limit: read bucket.

Query parameters

FieldTypeRequiredDescription
qstringNoFree-text search on the submission name.
sortBystringNoSort field. One of name, status, created_at, updated_at.
orderBystringNoSort direction. One of asc, desc.
curl "https://console.intuizi.com/api/v2/my-data/pois/submissions/index?q=Hilton&sortBy=status&orderBy=desc" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Accept: application/json"

Response

{
  "status": "success",
  "code": 200,
  "message": "Resource fetched successfully.",
  "data": [
    {
      "id": 1,
      "name": "Virgin train Stations POIs",
      "pois_imported": 123,
      "pois_imported_count": 123,
      "company": { "id": 123, "name": "Company Name" },
      "user": { "id": 123, "name": "John Doe" },
      "status": { "id": 1, "name": "Waiting" },
      "brand": { "id": 123, "name": "Virgin" },
      "actions": { "key": "gps-coordinates", "remove": 0, "update": 1 },
      "backfill": { "requested": false, "status": null, "job_id": null },
      "geocoding": null,
      "not_imported_url": null,
      "created_at": "2025-01-01 12:00:00",
      "updated_at": "2025-01-01 12:00:00"
    }
  ]
}

Get Submission

GET /api/v2/my-data/pois/submissions/{id}

Retrieves a single submission owned by the authenticated user’s company.

Auth: bearer token + Accept: application/json. Rate limit: read bucket.

Path parameters

FieldTypeRequiredDescription
idintegerYesThe submission id to fetch.
curl "https://console.intuizi.com/api/v2/my-data/pois/submissions/123" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Accept: application/json"

Response

{
  "status": "success",
  "code": 200,
  "message": "Resource fetched successfully.",
  "data": [
    {
      "id": 1,
      "name": "Virgin train Stations POIs",
      "pois_imported": 123,
      "pois_imported_count": 123,
      "company": { "id": 123, "name": "Company Name" },
      "user": { "id": 123, "name": "John Doe" },
      "status": { "id": 1, "name": "Waiting" },
      "brand": { "id": 123, "name": "Virgin" },
      "actions": { "key": "gps-coordinates", "remove": 0, "update": 1 },
      "backfill": { "requested": false, "status": null, "job_id": null },
      "geocoding": null,
      "not_imported_url": null,
      "created_at": "2025-01-01 12:00:00",
      "updated_at": "2025-01-01 12:00:00"
    }
  ]
}

A new submission starts at status 4 Importing and moves to 1 Waiting on its own once Intuizi has read its locations, and geocoded the ones that came without coordinates (see Locations without coordinates). When it reads them, Intuizi checks every row of the file again, and a submission whose file fails those checks moves from 4 Importing straight to 3 Disabled. From Waiting, Intuizi reviews it by hand: an approved submission becomes 2 Imported, and only then do its locations appear in List POIs. A submission with locations past the limit may go back to 4 Importing while Intuizi’s team completes them, and returns to 1 Waiting (see Files past the limit). A declined one becomes 3 Disabled. The review is not automatic, so do not poll for Imported as if it were a processing step. See Status Codes.

Create Submission by File

POST /api/v2/my-data/pois/submissions/create-by-file

Creates a submission from an uploaded CSV file of locations. For large files, browser clients, or JSON-only integrations, use the presigned upload flow with Create Submission by Upload instead - both doors accept the same files and produce the same submission.

Auth: bearer token + Accept: application/json. Because this is a file upload, send Content-Type: multipart/form-data (not JSON). Rate limit: write bucket (30 requests/min).

Body (multipart form fields)

FieldTypeRequiredDescription
namestringYesThe submission name.
brand_idintegerYesThe brand id the POIs belong to. Must exist.
locations_filefileYesA CSV of locations with a .csv or .txt extension, up to 50 MB. The first row is the header row. A file that starts with a UTF-8 byte order mark, as a spreadsheet writes when it saves as CSV UTF-8, is accepted. So is a file in Windows-1252, as Excel for Windows writes when it saves as CSV (Comma delimited): its accented letters are stored as UTF-8. Save a file in any other encoding as CSV UTF-8. Required headers: longitude and latitude, or the address columns: address1 with zip_code, or with city and state (see Locations without coordinates). A country|alpha_2 or country|alpha_3 column is required too, unless the file has longitude and latitude: a row with coordinates may take its country from its point (see Locations without an address). Optional headers: location_id, store_id, name, address1, address2, city, state, zip_code, dma_desc, polygon, sqft, is_verified, max_trade_area|miles or max_trade_area|meters, external_id, master_id, placekey, h3_index, h3_index_integer, category_taxonomy, and sub_category_taxonomy. A file with any other header is rejected. A location_id value must be the id of one of your POIs, as a whole number (101 or 101.0).
updatebooleanNoUpdate the brand’s existing POIs that a listed location matches (see key). As a multipart form field, send 1 or 0 (the string true is rejected).
removebooleanNoArchive the brand’s existing POIs that no listed location matches (see key), and keep the matched ones, updated only with update. Applied once, over the whole submission - see the note below this table. As a multipart form field, send 1 or 0 (the string true is rejected).
keystringNoHow each listed location is matched to the brand’s existing POIs. One of location-id, gps-coordinates, store-id, master-id, external-id. Defaults to gps-coordinates when left out or null. location-id matches a location’s location_id column to the id of one of the brand’s POIs. With update or remove, a file with rows without coordinates cannot use gps-coordinates.

Matching. Locations are matched, and update and remove applied, when Intuizi approves the submission, not when it is created, and the same way on all three creates. A listed location that matches an existing POI of the brand is never added a second time: with update it updates that POI, and without update the POI is left as it is. A location that matches nothing is added as a new POI.

remove is applied once, after every location of the submission has been matched, whatever the submission’s size. Every POI the brand had before the approval that no location matches is archived. The POIs a location matches keep their ids, and the POIs the submission adds are kept. A submission whose locations carry values for its key but match no POI archives every POI the brand had. One that holds no location at all, or in which no location has a value for its key (a location_id, store_id, master_id, or external_id, a blank value counting as none), archives nothing. Each remove submission archives every POI of the brand that it does not list, so send every location the brand should keep in one submission, not the ones to drop. If an approval is interrupted part way, its locations are still imported but remove is not applied. Send the remove submission again to apply it.

With the location-id key, a location matches the brand’s POI whose id is its location_id, the id that List POIs returns. A location with no location_id, or with one that is not the id of one of the brand’s POIs, matches nothing and is added as a new POI. A remove submission in which no location has a location_id names no POI to keep, so it archives nothing.

curl -X POST "https://console.intuizi.com/api/v2/my-data/pois/submissions/create-by-file" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Accept: application/json" \
  -F "name=Virgin train Stations POIs" \
  -F "brand_id=123" \
  -F "key=gps-coordinates" \
  -F "update=1" \
  -F "locations_file=@locations.csv"

Response

{
  "status": "success",
  "code": 201,
  "message": "Resource created successfully.",
  "data": [
    {
      "value": 123,
      "text": "Virgin train Stations POIs"
    }
  ]
}

Create Submission by Upload

POST /api/v2/my-data/pois/submissions/create-by-upload

Creates a submission from a file previously uploaded through the presigned upload flow: reserve an upload with purpose poi_submission, PUT the CSV to the returned URL, then call this endpoint with the upload_reference. The file requirements are the same as Create Submission by File, and the response is identical. The reference is one-shot - a second create with the same reference is rejected.

The create checks the start of the file and rejects the file for a problem it finds there. Intuizi checks every row when it reads the locations, and a submission whose file fails that check moves to 3 Disabled.

Auth: bearer token + Accept: application/json + Content-Type: application/json. Rate limit: write bucket (30 requests/min). Optional: Idempotency-Key header makes this create safe to retry - see Idempotency.

Body

FieldTypeRequiredDescription
namestringYesThe submission name.
brand_idintegerYesThe brand id the POIs belong to. Must exist.
upload_referencestringYesThe upload_reference from Create an Upload (purpose poi_submission), after the file was PUT to the presigned URL.
updatebooleanNoUpdate the brand’s existing POIs that a listed location matches (see key).
removebooleanNoArchive the brand’s existing POIs that no listed location matches (see key), and keep the matched ones, updated only with update. Applied once, over the whole submission - see the matching note under Create Submission by File.
keystringNoHow each listed location is matched to the brand’s existing POIs. One of location-id, gps-coordinates, store-id, master-id, external-id. Defaults to gps-coordinates when left out or null. location-id matches a location’s location_id to the id of one of the brand’s POIs - see the matching note under Create Submission by File.
curl -X POST "https://console.intuizi.com/api/v2/my-data/pois/submissions/create-by-upload" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "name": "Virgin train Stations POIs",
    "brand_id": 123,
    "upload_reference": "upl_01k0p3v9example"
  }'

Response

{
  "status": "success",
  "code": 201,
  "message": "Resource created successfully.",
  "data": [
    {
      "value": 123,
      "text": "Virgin train Stations POIs"
    }
  ]
}

Create Submission by List

POST /api/v2/my-data/pois/submissions/create-by-list

Creates a submission from an inline list of location objects (no file upload).

Auth: bearer token + Accept: application/json + Content-Type: application/json. Rate limit: write bucket (30 requests/min).

Body

FieldTypeRequiredDescription
namestringYesThe submission name (max 255 chars).
brand_idintegerYesThe brand id the POIs belong to. Must exist.
country_isocodestringNoISO code standard for locations[].country. One of alpha_2, alpha_3. Defaults to alpha_3.
updatebooleanNoUpdate the brand’s existing POIs that a listed location matches (see key).
removebooleanNoArchive the brand’s existing POIs that no listed location matches (see key), and keep the matched ones, updated only with update. Applied once, over the whole submission - see the matching note under Create Submission by File.
keystringNoHow each listed location is matched to the brand’s existing POIs. One of location-id, gps-coordinates, store-id, master-id, external-id. Defaults to gps-coordinates when left out or null. location-id matches a location’s location_id to the id of one of the brand’s POIs - see the matching note under Create Submission by File.
locationsobject[]YesThe list of location objects (see below).

Each entry in locations[]:

FieldTypeRequiredDescription
countrystringWithout coordinates2- or 3-letter ISO country code, matching country_isocode. A location with both coordinates may leave it out: Intuizi takes it from the point. See Locations without an address.
longitudenumberWithout an addressLongitude, between -180 and 180, not 0. Give both coordinates, or leave out both and give an address: address1, plus zip_code (or city and state). See Locations without coordinates.
latitudenumberWithout an addressLatitude, between -90 and 90, not 0. Give both coordinates, or leave out both and give an address.
location_idintegerNoThe id of one of your POIs, as List POIs returns it. With the location-id key, the location matches the brand’s POI with this id, and with no match it is added as a new POI.
store_idstringNoYour reference store id.
namestringNoPOI name (max 255 chars).
address1stringWithout coordinatesAddress line 1, such as 1560 Broadway.
address2stringNoAddress line 2.
citystringWithout coordinates or zip_codeCity.
statestringWithout coordinates or zip_codeState.
zip_codestringWithout coordinates, or city and stateZIP/postal code.
dma_descstringNoDMA description.
polygonstringNoWKT polygon.
sqftnumberNoPolygon square footage.
is_verifiedbooleanNoWhether the POI is verified.
max_trade_areanumberNoMax trade-area radius in miles (min 0.1).
external_idstringNoExternal id.
master_idstringNoMaster id.
category_taxonomystringNoCategory taxonomy label.
sub_category_taxonomystringNoSub-category taxonomy label.
curl -X POST "https://console.intuizi.com/api/v2/my-data/pois/submissions/create-by-list" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "name": "Starbucks NYC",
    "brand_id": 123,
    "country_isocode": "alpha_3",
    "locations": [
      {
        "store_id": "ST-NY-001",
        "name": "Starbucks Times Square",
        "address1": "1560 Broadway",
        "city": "New York",
        "state": "NY",
        "zip_code": "10036",
        "country": "USA",
        "longitude": -73.9855,
        "latitude": 40.7580
      }
    ]
  }'

Response

{
  "status": "success",
  "code": 201,
  "message": "Resource created successfully.",
  "data": [
    {
      "value": 123,
      "text": "Starbucks NYC"
    }
  ]
}

Backfill (optional)

Any of the three creates above can optionally request a historical visitation backfill for the submission’s brand. POI locations only start accumulating visitation from the day they are added; a backfill makes the historical signal for the submission’s brand available for a chosen window. The submission and its backfill are requested in a single call. The backfill is submitted as soon as Intuizi has read the submission’s locations (status Waiting), before they are imported, so it covers the locations the brand already has at that point and not the ones in this submission. Deleting the submission does not cancel it.

Backfills are a gated capability: they require additional permissions that need to be approved by your Account Manager. A create that requests a backfill while your account is not enabled returns 403; a create without a backfill is unaffected.

Add these fields to the create body (they work the same on create-by-file, create-by-upload, and create-by-list):

FieldTypeRequiredDescription
backfillbooleanNoSet true to request a backfill for this submission’s brand.
backfill_recencystringWith backfillThe window. One of last_30_days, last_90_days, last_180_days, last_full_month, or custom.
backfill_start_datestringWith customWindow start, YYYY-MM-DD. By default the earliest available date is 2024-01-01; an earlier start is raised to that floor.
backfill_end_datestringWith customWindow end, YYYY-MM-DD. On or after backfill_start_date and not later than today.

Presets are measured from today and resolve to concrete UTC dates server-side. last_full_month is the whole previous calendar month. Only custom requires backfill_start_date / backfill_end_date.

curl -X POST "https://console.intuizi.com/api/v2/my-data/pois/submissions/create-by-upload" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "name": "Virgin train Stations POIs",
    "brand_id": 123,
    "upload_reference": "upl_01k0p3v9example",
    "backfill": true,
    "backfill_recency": "last_90_days"
  }'

Backfill status on the submission read

When a submission requested a backfill, Get Submission carries a backfill block so you can follow it:

{
  "backfill": {
    "requested": true,
    "status": "queued",
    "job_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
  }
}

requested reflects whether the submission asked for a backfill. job_id and status populate once the submission has reached Waiting and the backfill has been submitted. status is a string that progresses to a terminal value (succeeded, warning, failed, cancelled, or completed_with_errors). For a submission with no backfill, requested is false and the other fields are null.

Locations without coordinates

A location may leave out longitude and latitude when it gives an address: address1, plus zip_code (or city and state), plus the country. Intuizi geocodes it while the submission is at 4 Importing, before the review, the same way on every create.

  • A location Intuizi places with enough confidence gets the point of its address.
  • A location it places with less certainty is flagged for the review, for example when the city or state you sent does not match the address it found but the ZIP code does.
  • A location it cannot place has no point: its address was not found, or it matched too loosely, for example with a ZIP code that does not match. Approving the submission does not import it, and it never changes the POI it matches. Add its coordinates, or correct the address, and submit it again.

Nothing you send is changed: the name, the address, and every other field are kept as they are. A location that gives coordinates is never moved.

A file or list may hold any number of locations without coordinates: past the first 10,000 lookups, the rest waits for Intuizi’s team (see Files past the limit).

With update or remove, locations without coordinates cannot be matched on gps-coordinates, the default key: a point Intuizi geocoded is not a stable key. Match them on location-id, store-id, master-id, or external-id instead. Create Submission by File and Create Submission by List reject a create that would match them on gps-coordinates.

Create Submission by Upload checks only the start of the file when it creates the submission. A file with a location without coordinates further on that gps-coordinates would have to match moves to 3 Disabled when Intuizi reads the locations.

Locations without an address

A location that gives longitude and latitude may leave out its country and any of address1, city, state, and zip_code. Intuizi fills the empty ones from the point while the submission is at 4 Importing, before the review, the same way on every create:

  • address1 from the street address at the point, when there is one near it.
  • city, state, zip_code, and the country from the place the point is in. In the United States and Canada, state is the 2-letter code, such as NY, and elsewhere the name of the region.

Only empty fields are filled. The name and every value you send are kept, and the point never moves. A field there is no value for at the point, such as a state in a country without states, is left empty without a flag. When the point lies in another country than the one you give, nothing is filled and the location is flagged: the point or the country is likely wrong. A location whose address could be filled only in part, or from an address more than 150 m from the point, is flagged for the review, and so is one with no street address near its point, or whose address could not be looked up at the time. A location left without a country is not imported: add the country and submit it again.

Locations without a country take the lookups of the file with the locations without coordinates, before the locations that only miss address fields, each in the order of the file. A location past the first 10,000 lookups waits for Intuizi’s team (see Files past the limit), and reverse.over_limit on the submission read counts it.

Checks of locations

While the submission is at 4 Importing, Intuizi also checks the locations before the review, the same way on every create. A location that gives longitude, latitude, and its whole address (address1, city, state, zip_code, and the country) is checked against where that address lies. A point within the location’s trade area, or 150 m, matches its address. A point farther away is flagged for the review, and so is a location whose address could not be placed. When the point lies at the address with latitude and longitude swapped, the check says so.

A check never moves the point, changes a value, or keeps a location out of the import. A location with coordinates and only part of its address is filled, not checked (see Locations without an address).

The checks take what the other lookups of the file leave of its first 10,000, the earliest locations of the file first. The checks past that wait for Intuizi’s team like the rest (see Files past the limit), and check.over_limit on the submission read counts them. The checks also stop when the time Intuizi gives the import runs out: check.not_checked counts the locations not checked then. The checks can add up to ten minutes to the import.

Files past the limit

A file or list is never refused for the number of locations Intuizi has to look up. A file gets the first 10,000 lookups by itself, while the submission is at 4 Importing: first the locations that need one to be imported (no coordinates, or no country), then the address fields to fill, then the checks of the locations that give their coordinates and their whole address, each in the order of the file (see Limits).

Nothing past that is looked up by itself. The submission reaches the review, and Intuizi’s team decides whether to complete the rest. While it does, the submission is back at 4 Importing, and it returns to 1 Waiting when the locations are done. If the team stops before the end, the locations in progress are completed first. The submission then returns to 1 Waiting as well, and the state is waiting again for the locations not completed yet. The pending block of the submission read says how many locations wait, and in what state:

StateMeaning
waitingLocations past the limit wait for Intuizi’s team.
runningIntuizi’s team is completing them.
doneEvery location past the limit was completed.
skippedThe submission was approved without them.

A rejected submission has no pending block: nothing waits for it.

A location past the limit that is not completed stays as you sent it: one with coordinates and a country is imported without the address fields it missed or its check, and one without coordinates or a country is not imported. Add the coordinates and the countries, or submit the rest in smaller files.

not_imported_url on the submission read links a CSV of the locations that are not imported, in the columns of the import, with the reason in its last column, geocode_result. Correct them, take that column off, and submit them again. The link is valid for an hour: read the submission again for a new one. It is null when every location can be imported.

Geocoding on the submission read

Get Submission and List Submissions carry a geocoding block once Intuizi has read the locations: forward for the locations without coordinates, reverse for the locations with coordinates that missed address fields, check for the locations checked against their address (see Checks of locations), and pending for the locations past the limit (see Files past the limit). A block is left out when no location needed it. Next to geocoding, not_imported_url links the CSV of the locations not imported.

{
  "geocoding": {
    "forward": {
      "geocoded": 118,
      "flagged": 6,
      "not_imported": 1502,
      "low_confidence": 1,
      "not_found": 1,
      "failed": 0,
      "missing_address": 0,
      "over_limit": 1500
    },
    "reverse": {
      "filled": 40,
      "flagged": 3,
      "not_imported": 1,
      "approximate": 2,
      "no_address": 1,
      "failed": 0,
      "no_country": 1,
      "other_country": 0,
      "unchanged": 0,
      "over_limit": 0
    },
    "check": {
      "match": 812,
      "near": 9,
      "mismatch": 4,
      "swapped": 1,
      "address_not_found": 3,
      "flagged": 17,
      "not_checked": 0,
      "over_limit": 0
    },
    "pending": {
      "state": "waiting",
      "locations": 1500
    }
  },
  "not_imported_url": "https://..."
}
FieldTypeDescription
forward.geocodedintegerLocations that got the point of their address, the flagged ones included.
forward.flaggedintegerOf those, the ones placed with less certainty.
forward.not_importedintegerLocations left without a point, which the approval does not import: low_confidence plus not_found plus failed plus missing_address plus over_limit.
forward.low_confidenceintegerLocations whose address matched too loosely to be placed.
forward.not_foundintegerLocations whose address was not found.
forward.failedintegerLocations that could not be geocoded at the time. Submit them again. When Intuizi’s team completes a file past the limit, it tries them again.
forward.missing_addressintegerLocations without coordinates whose address could not be read, for example a country cell left empty.
forward.over_limitintegerLocations without coordinates past the first 10,000 lookups of the file, not looked up (see Files past the limit).
reverse.filledintegerLocations with coordinates whose empty address fields were all filled from the point.
reverse.flaggedintegerLocations with coordinates imported with a flag, with the fields they have: approximate plus no_address plus other_country plus the failed ones that have a country.
reverse.not_importedintegerLocations left without a country, which the approval does not import: no_country plus the failed and over_limit ones without a country.
reverse.approximateintegerLocations whose empty fields were filled in part, or from an address more than 150 m from the point.
reverse.no_addressintegerLocations with no street address near the point to fill from.
reverse.failedintegerLocations whose address could not be looked up at the time. Those without a country are not imported: submit them again. When Intuizi’s team completes a file past the limit, it tries them again.
reverse.no_countryintegerLocations without a country for which none was found at the point.
reverse.other_countryintegerLocations whose point lies in another country than the one you give. Nothing was filled: check the point and the country.
reverse.unchangedintegerLocations whose empty fields have no value at the point, such as a state in a country without states. They are left as you sent them.
reverse.over_limitintegerLocations with coordinates past the first 10,000 lookups of the file, not looked up. Those with a country are imported as you sent them, those without are not.
check.matchintegerLocations whose point lies within the trade area of their address, or 150 m.
check.nearintegerLocations whose point lies within 1,000 m of their address, outside its trade area. Flagged.
check.mismatchintegerLocations whose point lies farther from their address. Flagged.
check.swappedintegerLocations whose point lies at their address with latitude and longitude swapped. Flagged.
check.address_not_foundintegerLocations whose address could not be placed to check the point. Flagged.
check.flaggedintegerOf the locations checked, the flagged ones: near plus mismatch plus swapped plus address_not_found. They are imported as you sent them.
check.not_checkedintegerLocations with coordinates and a whole address that were not checked: past the time of the import, or not answered at the time.
check.over_limitintegerLocations with coordinates and a whole address past the first 10,000 lookups of the file, not checked. They are imported as you sent them.
pending.statestringwaiting, running, done, or skipped (see Files past the limit).
pending.locationsintegerLocations with a lookup past the limit, still to do.
not_imported_urlstring or nullOn the submission, next to geocoding: a link, valid for an hour, to a CSV of the locations not imported with the reason. null when every location can be imported.

geocoding is null before Intuizi has read the locations, and when none of them needed a lookup or a check.

Delete Submission

POST /api/v2/my-data/pois/submissions/delete-by-id

Deletes a submission by id. Only a submission at status 1 Waiting is eligible: Intuizi has read its locations and not yet reviewed it. Deleting it does not cancel a backfill it requested.

Auth: bearer token + Accept: application/json + Content-Type: application/json. Rate limit: write bucket (30 requests/min).

Body

FieldTypeRequiredDescription
idintegerYesThe submission id to delete. Must be a submission at status 1 Waiting owned by your company.
curl -X POST "https://console.intuizi.com/api/v2/my-data/pois/submissions/delete-by-id" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "id": 123 }'

Response

{
  "status": "success",
  "code": 200,
  "message": "Resource deleted successfully.",
  "data": []
}

Failed requests use the shared error envelope - see Errors.