Download OpenAPI specification:
The contract for the customer-facing MerchJar Public API. All paths in this document are relative to the server URL.
All requests use https://app.merchjar.com/api/v5.
Send a provisioned MerchJar API key with every request:
curl https://app.merchjar.com/api/v5/profiles \
-H 'Authorization: Bearer mj_live_…'
Create and manage API keys in Settings > API Keys. The full key is shown only once when you create it. Start with GET /profiles to discover the profile IDs available to the key.
API keys are limited by scopes. Every operation lists its required scope in x-merchjar-required-scope; a key without that scope receives 403 Forbidden.
profiles:read: list accessible Amazon Advertising profilessegments:read: list, retrieve, and manage segment schedulessegments:write: create, update, and delete segments and schedulessegments:preview: preview segment resultssegments:validate: validate a segment definitionaudit_logs:read: list audit logs and audit-log itemshistory:read: retrieve entity change historycampaigns:write: create campaignsad_groups:write: create ad groupsads:write: create product adstargets:write: create targetsnegative-targets:write: create negative product targetscustom_fields:read: read custom-field catalogs, values, and CSV exportscustom_fields:write: manage custom-field definitions, values, and CSV importsUse the response headers to make retry decisions; limits are enforced before the operation runs.
| Request type | Limit | Identity | On exhaustion |
|---|---|---|---|
| Standard API operations | 1,200 requests per minute by default; an API key may have a configured override | API key | 429 with Retry-After; standard rate limit headers appear on successful and rate limited responses |
POST /segments/preview |
In addition to the standard limit: a 3-request burst that refills one request every 2 seconds by default | Account, shared across its API keys | 429 with Retry-After; the rate limit headers report the preview-admission bucket |
| Campaign, ad-group, product-ad, and target creation | No standard rate limit middleware currently | Not applicable | These endpoints do not emit the standard rate limit headers or standard 429/503 rate limit responses |
Retry a 429 after the supplied Retry-After value. Retry a 503 only when that response includes Retry-After; otherwise investigate before retrying.
MerchJar makes additive, backward-compatible changes within v5. A breaking change uses a new API version and is documented in the reference before release. Deprecated operations remain documented with migration guidance and a removal date.
Handled API errors use a JSON envelope with error.code and error.message. Use the HTTP status to choose the next action: correct 400 requests, replace invalid or revoked 401 keys, request the required scope after 403, retry 429 after Retry-After, and retry only 503 responses that include Retry-After.
Returns profiles owned by the API key's user. This operation does not require a profileid header; it is the operation used to discover profile IDs for later profile-scoped requests.
{- "data": [
- {
- "profile_id": "9007199254740993",
- "name": "string",
- "nickname": "string",
- "country_code": "string",
- "currency_code": "string",
- "marketplace_id": "string",
- "timezone": "string",
- "type": "string",
- "managed": true,
- "ad_spend_30d": 0,
- "ad_spend_30d_usd": 0
}
]
}Compiles a Segment DSL trigger without executing it. profile_id is optional unless the trigger references custom fields; when supplied, the API key must own that profile.
| trigger required | string non-empty Segment DSL expression to compile. |
| ad_type required | string non-empty Segment entity type. Input is case- and separator-insensitive; see the endpoint description for supported values. |
| profile_id | string (NumericString) ^[1-9][0-9]*$ Required when validating a trigger that references custom fields. |
{- "trigger": "string",
- "ad_type": "string",
- "profile_id": "9007199254740993"
}{- "valid": true,
- "variables": { }
}Evaluates a Segment DSL trigger for a profile without persisting a segment. Preview rows depend on ad_type; every returned field whose name ends in _id is serialized as a decimal string. In addition to the API-key per-minute limiter, preview uses an account-level burst-admission limiter.
| profile_id required | string (NumericString) ^[1-9][0-9]*$ A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| trigger required | string non-empty Segment DSL expression. |
| ad_type required | string non-empty One of campaigns, ad_groups, ads (or accepted alias product_ads), keywords, targets, keywords_and_targets, search_terms, placements, or a negative type. Input is case- and separator-insensitive. Negative types are preview-only. |
| action required | string non-empty One of set_state, set_budget, set_default_bid, set_bid, or create_negatives. Input is case- and separator-insensitive. |
| action_params required | object Action parameters. For set_state, |
| page | integer >= 1 Default: 1 |
| per_page | integer [ 1 .. 100 ] Default: 25 |
{- "profile_id": "9007199254740993",
- "trigger": "string",
- "ad_type": "string",
- "action": "string",
- "action_params": { },
- "page": 1,
- "per_page": 25
}{- "data": [
- {
- "campaign_settings": {
- "bid_strategy": "string",
- "placement_adjustments": {
- "top_of_search": 0,
- "rest_of_search": 0,
- "product_page": 0,
- "home_page": 0
}
}
}
], - "pagination": {
- "page": 1,
- "per_page": 1,
- "total": 0,
- "last_page": 0
}, - "totals": {
- "property1": 0,
- "property2": 0
}, - "meta": {
- "time_periods": [
- "string"
], - "variables": {
- "property1": "string",
- "property2": "string"
}
}
}Creates a v2 segment for the body profile_id; it must belong to the API key. Run POST /segments/validate and POST /segments/preview first to check the trigger and matching entities. Negative segment types can be previewed but cannot be persisted.
| profile_id required | string (NumericString) ^[1-9][0-9]*$ A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| name required | string [ 1 .. 255 ] characters |
| trigger required | string non-empty |
| ad_type required | string non-empty A writable ad type: campaigns, ad_groups, ads (or accepted alias product_ads), keywords, targets, keywords_and_targets, search_terms, or placements. Input is case- and separator-insensitive. |
| action required | string non-empty set_state, set_budget, set_default_bid, set_bid, or create_negatives. Input is case- and separator-insensitive. |
| action_params | object Default: {} See preview action_params semantics. Unknown properties are ignored by the request parser. |
| frequency | string Default: "daily" Canonical modes are after_every_data_sync, daily, weekly, monthly, and manual. Input is case- and separator-insensitive; manually is an accepted alias for manual. Re-applying weekly or monthly resets its schedule anchor to today. |
| enabled | boolean Default: true |
{- "profile_id": "9007199254740993",
- "name": "string",
- "trigger": "string",
- "ad_type": "string",
- "action": "string",
- "action_params": { },
- "frequency": "daily",
- "enabled": true
}{- "data": {
- "id": "9007199254740997",
- "profile_id": "9007199254740993",
- "name": "Pause low-performing targets",
- "enabled": true,
- "ad_type": "targets",
- "trigger": "clicks > 20",
- "action": "set_state",
- "action_params": {
- "value": 2
}, - "frequency": "daily",
- "last_run": null,
- "created_at": "2026-08-29T12:00:00Z",
- "updated_at": "2026-08-29T12:00:00Z"
}
}| id required | string^[+-]?[0-9]+$ Segment ID. The implementation parses a signed base-10 bigint; successful segment IDs are positive decimal strings. |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Amazon Advertising profile ID owned by the API key. |
{- "data": {
- "id": "9007199254740997",
- "profile_id": "9007199254740993",
- "name": "Pause low-performing targets",
- "enabled": true,
- "ad_type": "targets",
- "trigger": "clicks > 20",
- "action": "set_state",
- "action_params": {
- "value": 2
}, - "frequency": "daily",
- "last_run": null,
- "created_at": "2026-08-29T12:00:00Z",
- "updated_at": "2026-08-29T12:00:00Z"
}
}Updates only supplied fields. Updating ad_type revalidates the existing trigger if no trigger is supplied. Negative segment types cannot be persisted. paused: true pauses future scheduled runs without disabling the segment; enabled: false also skips future open runs.
| id required | string^[+-]?[0-9]+$ Segment ID. The implementation parses a signed base-10 bigint; successful segment IDs are positive decimal strings. |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Amazon Advertising profile ID owned by the API key. |
| name | string [ 1 .. 255 ] characters |
| trigger | string non-empty |
| ad_type | string non-empty Writable segment ad type; input is case- and separator-insensitive. |
| action | string non-empty set_state, set_budget, set_default_bid, set_bid, or create_negatives; input is case- and separator-insensitive. |
| action_params | object See preview action_params semantics. |
| frequency | string after_every_data_sync, daily, weekly, monthly, or manual; input is case- and separator-insensitive and manually aliases manual. A non-manual mode conflicts with an existing clock schedule. |
| enabled | boolean |
| paused | boolean Sets or clears the segment pause timestamp. |
{- "name": "string",
- "trigger": "string",
- "ad_type": "string",
- "action": "string",
- "action_params": { },
- "frequency": "string",
- "enabled": true,
- "paused": true
}{- "data": {
- "id": "9007199254740997",
- "profile_id": "9007199254740993",
- "name": "Pause low-performing targets",
- "enabled": false,
- "ad_type": "targets",
- "trigger": "clicks > 20",
- "action": "set_state",
- "action_params": {
- "value": 2
}, - "frequency": "daily",
- "last_run": null,
- "created_at": "2026-08-29T12:00:00Z",
- "updated_at": "2026-08-29T12:05:00Z"
}
}Disables the segment, marks it deleted, clears its next schedule cursor, and skips future open scheduled runs.
| id required | string^[+-]?[0-9]+$ Segment ID. The implementation parses a signed base-10 bigint; successful segment IDs are positive decimal strings. |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Amazon Advertising profile ID owned by the API key. |
{- "success": true
}Returns the timezone choices for a segment owned by the API-key profile.
| id required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740997 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
{- "data": [
- {
- "value": "America/Los_Angeles",
- "label": "Pacific Time"
}
]
}Returns data: null when the owned segment has no stored clock schedule.
| id required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740997 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
{- "data": null
}The segment must use manual frequency and cannot be a negative segment. A schedule definition is either a cron schedule (kind: cron, timezone, cron_expression) or one-time schedule (kind: once, timezone, run_once_at).
| id required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740997 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| kind required | any Value: "cron" |
| timezone required | string |
| cron_expression required | string |
{- "kind": "cron",
- "timezone": "America/Los_Angeles",
- "cron_expression": "0 9 * * 1-5"
}{- "data": {
- "schedule": {
- "kind": "cron",
- "timezone": "America/Los_Angeles"
}, - "occurrences": [ ]
}
}| id required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740997 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
{- "data": {
- "deleted": true
}
}Validates a proposed schedule and returns its future occurrences without saving it. The segment must use manual frequency and cannot be a negative segment.
| id required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740997 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| kind required | any Value: "cron" |
| timezone required | string |
| cron_expression required | string |
{- "kind": "once",
- "timezone": "America/Los_Angeles",
- "run_once_at": "2026-09-01T16:00:00.000Z"
}{- "data": {
- "occurrences": [
- "2026-09-01T16:00:00.000Z"
]
}
}Lists profile-scoped records of MerchJar changes. The default date window is the 30 calendar days ending today, calculated when the request is handled.
| page | integer >= 1 Default: 1 One-based page number. Missing, non-positive, or non-numeric values fall back to 1. |
| per_page | integer [ 1 .. 100 ] Default: 25 Results per page. Missing, non-positive, or non-numeric values fall back to 25; values above 100 are capped at 100. |
| from | string Example: from=2026-03-01 Inclusive UTC start date. Send an ISO calendar date such as |
| to | string Example: to=2026-03-31 Inclusive UTC end date. Send an ISO calendar date such as |
| target_type | string Enum: "campaigns" "ad_groups" "product_ads" "keywords" "targets" "campaign_negative_keywords" "negative_keywords" "negative_targets" "portfolios" "promotions" "recipes" "search_terms" "ads" "placements" Filter by affected entity type. |
| source_type | string Enum: "smart_bids" "promotion" "recipe" "bulk_action" Filter by the type of source that initiated the audit log. |
| source_id | string^[1-9][0-9]*$ Example: source_id=9007199254740995 Filter by source ID. Send the ID as a decimal string so clients do not lose bigint precision. |
| count | string^(?:gt|gte|lt|lte|eq|neq):-?[0-9]+$|^between:... Example: count=gt:10 Filter on |
| sort | string Default: "-created_at" Sort by |
| profileid required | string <= 19 characters ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "data": [
- {
- "id": "string",
- "profile_id": "string",
- "target_type": "string",
- "source_type": "string",
- "source_id": "string",
- "meta": { },
- "created_at": "string",
- "updated_at": "string"
}
], - "pagination": {
- "page": 1,
- "per_page": 1,
- "total": 0,
- "last_page": 1
}
}Returns items only after verifying that the parent audit log belongs to the requested profile. The item data is retrieved from MerchJar's internal Laravel service and bigint identifiers are re-serialized as strings.
| id required | string^[1-9][0-9]*$ Example: 789 Audit-log ID as a decimal string. |
| page | integer >= 1 Default: 1 One-based page number. Missing, non-positive, or non-numeric values fall back to 1. |
| per_page | integer [ 1 .. 100 ] Default: 25 Results per page. Missing, non-positive, or non-numeric values fall back to 25; values above 100 are capped at 100. |
| target_type | string Enum: "campaigns" "ad_groups" "product_ads" "keywords" "targets" "campaign_negative_keywords" "negative_keywords" "negative_targets" "portfolios" "promotions" "recipes" "search_terms" "ads" "placements" Filter item rows by target entity type. |
| target_id | string^[1-9][0-9]*$ Example: target_id=9007199254740997 Filter item rows by affected entity ID. Send the ID as a decimal string so clients do not lose bigint precision. |
| profileid required | string <= 19 characters ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "data": [
- {
- "id": "string",
- "audit_log_id": "string",
- "target_id": "string",
- "target_type": "string",
- "meta": { },
- "created_at": "string",
- "updated_at": "string"
}
], - "pagination": {
- "page": 1,
- "per_page": 1,
- "total": 0,
- "last_page": 1
}, - "audit_log": {
- "id": "string",
- "profile_id": "string",
- "target_type": "string",
- "source_type": "string",
- "source_id": "string",
- "meta": { },
- "created_at": "string",
- "updated_at": "string"
}
}Returns the profile-scoped legacy bid-history stream, newest first with hash as the tie-breaker. MerchJar selects the change type from entity_type: campaign budgets, ad-group default bids, and keyword or target bids.
| entity_type required | string Enum: "campaigns" "ad_groups" "keywords" "targets" |
| entity_id required | string^[1-9][0-9]*$ Example: 9007199254740997 Positive PostgreSQL-signed-bigint entity ID encoded as a decimal string (maximum |
| page | integer >= 1 Default: 1 One-based page number. Missing, non-positive, or non-numeric values fall back to 1; values above 21474836 are capped. |
| per_page | integer [ 1 .. 100 ] Default: 25 Results per page. Missing, non-positive, or non-numeric values fall back to 25; values above 100 are capped at 100. |
| profileid required | string <= 19 characters ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "data": [
- {
- "entity_id": "string",
- "entity_type": "campaigns",
- "change_type": "BUDGET_AMOUNT",
- "previous_value": "string",
- "new_value": "string",
- "timestamp": "string",
- "hash": "string",
- "profile_id": "string"
}
], - "pagination": {
- "page": 1,
- "per_page": 1,
- "total": 0,
- "last_page": 1
}
}Queues a CSV import for the selected entity type. The request body must be UTF-8 text/csv and no larger than 25 MiB. Set dry_run=true to validate without applying mutations.
| entityType required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" Example: campaign |
| dry_run | boolean |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
entity_id,field,value 9007199254740995,Priority,high
{- "job": {
- "id": "job_01HXYZ",
- "status": "queued"
}
}Queues a CSV export for the selected entity type.
| entityType required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" Example: campaign |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "job": {
- "id": "job_01HXYZ",
- "status": "queued"
}
}| jobId required | string Example: job_01HXYZ |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "job": {
- "id": "job_01HXYZ",
- "status": "queued"
}
}| jobId required | string Example: job_01HXYZ |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "job": {
- "id": "job_01HXYZ",
- "status": "queued"
}
}| jobId required | string Example: job_01HXYZ |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
row,error 2,invalid value
| jobId required | string Example: job_01HXYZ |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
entity_id,field,value 9007199254740995,Priority,high
| entityType required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" Example: campaign |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "version": "1",
- "definitions": [ ],
- "definition_count": 0,
- "value_count": 0
}| entityType required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" Example: campaign |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
| entity_ids required | Array of strings (NumericString) non-empty [ items^[1-9][0-9]*$ ] |
{- "entity_ids": [
- "9007199254740995"
]
}{- "values": [ ]
}| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
| entity_type required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" |
| name required | string |
| description | string or null |
| data_type required | integer Enum: 1 2 3 |
{- "entity_type": "campaign",
- "name": "Priority",
- "data_type": 1
}{- "definition": {
- "id": "1",
- "name": "Priority"
}
}| definitionId required | string (NumericString) ^[1-9][0-9]*$ Example: 1 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
| entity_type required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" |
| expected_version required | string (NumericString) ^[1-9][0-9]*$ A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| name required | string |
| description | string or null |
{- "entity_type": "campaign",
- "expected_version": "1",
- "name": "Priority"
}{- "definition": {
- "id": "1",
- "name": "Priority"
}
}| definitionId required | string (NumericString) ^[1-9][0-9]*$ Example: 1 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
| entity_type required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" |
| expected_version required | string (NumericString) ^[1-9][0-9]*$ A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| disable_dependants | boolean |
{- "entity_type": "campaign",
- "expected_version": "1"
}{- "values": [ ]
}| entityType required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" Example: campaign |
| entity_id | string (NumericString) ^[1-9][0-9]*$ Example: entity_id=9007199254740995 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| entity_ids | string Example: entity_ids=9007199254740995,9007199254740996 |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "values": [ ]
}| entityType required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" Example: campaign |
| definitionId required | string (NumericString) ^[1-9][0-9]*$ Example: 1 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| limit | integer [ 1 .. 200 ] Example: limit=100 |
| after_entity_id | string (NumericString) ^[1-9][0-9]*$ Example: after_entity_id=9007199254740995 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "values": [ ]
}| entityType required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" Example: campaign |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
required | Array of objects |
| source_reference | string or null <= 100 characters |
{- "mutations": [
- {
- "field_definition_id": "1",
- "entity_id": "9007199254740995",
- "operation": "set",
- "value": "high"
}
]
}{- "values": [ ]
}| entityType required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" Example: campaign |
| entityId required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740995 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| definition_id | string (NumericString) ^[1-9][0-9]*$ Example: definition_id=1 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| limit | integer [ 1 .. 200 ] Example: limit=100 |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
{- "values": [ ]
}| historyId required | string (NumericString) ^[1-9][0-9]*$ Example: 1 A positive base-10 integer encoded as a string. Use this for profile IDs and entity IDs so values larger than JavaScript's safe integer limit retain their precision. |
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive decimal Amazon Advertising profile ID owned by the API-key user. |
| entity_type required | string (CustomFieldEntityType) Enum: "campaign" "ad_group" "target" "ad" |
| expected_version required | string or null^[1-9][0-9]*$ |
{- "entity_type": "campaign",
- "expected_version": "1"
}{- "values": [ ]
}Creates between 1 and 1,000 Sponsored Products campaigns for the API-key-authorized profileid header. The request schema is strict: profile_id and every other undeclared field are rejected before MerchJar calls Amazon. The 200 response is Amazon's raw batch envelope, without a MerchJar wrapper. A success or partialSuccess result queues local projection; browse data is eventually consistent and the response does not report projection completion. An error-only Amazon envelope is also passed through, but does not queue a receipt. MerchJar provides no idempotency guarantee and does not automatically retry creates; if the outcome is unknown, verify Amazon or the normal read state before retrying. This router does not currently install the API-key rate limit middleware, so it does not emit the standard rate limit headers or 429/503 rate limit responses.
| profileid required | string^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-... Example: 9007199254740993 Positive PostgreSQL signed-bigint Amazon Advertising profile ID owned by the API key. Send it as a decimal string, never as a JavaScript number. |
required | Array of objects [ 1 .. 1000 ] items |
{- "campaigns": [
- {
- "adProduct": "SPONSORED_PRODUCTS",
- "name": "string",
- "state": "ENABLED",
- "autoCreationSettings": {
- "autoCreateTargets": true,
- "autoManageCampaign": true
}
}
]
}{- "error": [
- null
], - "success": [
- null
], - "partialSuccess": [
- null
]
}Creates between 1 and 1,000 Sponsored Products ad groups for the API-key-authorized profileid header. The request schema is strict: profile_id and every other undeclared field are rejected before MerchJar calls Amazon. campaignId is forwarded directly to Amazon; MerchJar does not locally check that the campaign exists or is compatible. The 200 response is Amazon's raw batch envelope, without a MerchJar wrapper. A success or partialSuccess result queues local projection; browse data is eventually consistent and the response does not report projection completion. An error-only Amazon envelope is also passed through, but does not queue a receipt. MerchJar provides no idempotency guarantee and does not automatically retry creates; if the outcome is unknown, verify Amazon or the normal read state before retrying. This router does not currently install the API-key rate limit middleware, so it does not emit the standard rate limit headers or 429/503 rate limit responses.
| profileid required | string^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-... Example: 9007199254740993 Positive PostgreSQL signed-bigint Amazon Advertising profile ID owned by the API key. Send it as a decimal string, never as a JavaScript number. |
required | Array of objects [ 1 .. 1000 ] items |
{- "adGroups": [
- {
- "adProduct": "SPONSORED_PRODUCTS",
- "campaignId": "9007199254740995",
- "name": "string",
- "state": "ENABLED"
}
]
}{- "error": [
- null
], - "success": [
- null
], - "partialSuccess": [
- null
]
}Creates between 1 and 1,000 Sponsored Products product ads for the API-key-authorized profileid header. This is deliberately not generic unified-v1 ad creation: each item supports only PRODUCT_AD with exactly one productCreative / advertisedProduct creative. The request schema is strict: profile_id, marketplace/global-store identity, headline, and every other undeclared field are rejected before MerchJar calls Amazon. The 200 response is Amazon's raw batch envelope, without a MerchJar wrapper. A success or partialSuccess result queues local projection; browse data is eventually consistent and the response does not report projection completion. An error-only Amazon envelope is also passed through, but does not queue a receipt. MerchJar provides no idempotency guarantee and does not automatically retry creates; if the outcome is unknown, verify Amazon or the normal read state before retrying. This router does not currently install the API-key rate limit middleware, so it does not emit the standard rate limit headers or 429/503 rate limit responses.
| profileid required | string^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-... Example: 9007199254740993 Positive PostgreSQL signed-bigint Amazon Advertising profile ID owned by the API key. Send it as a decimal string, never as a JavaScript number. |
required | Array of objects [ 1 .. 1000 ] items |
{- "ads": [
- {
- "adProduct": "SPONSORED_PRODUCTS",
- "adType": "PRODUCT_AD",
- "adGroupId": "9007199254740995",
- "state": "ENABLED",
- "creative": {
- "productCreative": {
- "productCreativeSettings": {
- "advertisedProduct": {
- "productId": "string",
- "productIdType": "ASIN"
}
}
}
}
}
]
}{- "error": [
- null
], - "success": [
- null
], - "partialSuccess": [
- null
]
}Creates between 1 and 1,000 negative Sponsored Products product targets for the API-key-authorized profileid header. Each target must have an ad-group parent, negative: true, targetType: PRODUCT, PRODUCT_EXACT matching, and an ASIN. The request schema is strict: unknown fields are rejected before MerchJar calls Amazon. A success or partialSuccess result queues local projection; an error-only envelope does not. MerchJar provides no idempotency guarantee and does not automatically retry creates; if the outcome is unknown, verify Amazon or the normal read state before retrying. This endpoint does not install the standard API-key rate limit middleware, so it does not emit the standard rate limit headers or standard 429 or 503 rate limit responses.
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive Amazon Advertising profile ID owned by the API key. Send it as a decimal string, never as a JavaScript number. |
required | Array of objects [ 1 .. 1000 ] items |
{- "targets": [
- {
- "adGroupId": "9007199254740995",
- "adProduct": "SPONSORED_PRODUCTS",
- "negative": true,
- "state": "ENABLED",
- "targetType": "PRODUCT",
- "targetDetails": {
- "productTarget": {
- "matchType": "PRODUCT_EXACT",
- "productId": "B012345678",
- "productIdType": "ASIN"
}
}
}
]
}{- "error": [
- { }
], - "success": [
- { }
], - "partialSuccess": [
- { }
]
}Creates between 1 and 1,000 Sponsored Products targets for the API-key-authorized profileid header. The request schema is strict: unknown fields are rejected before MerchJar calls Amazon. The response is Amazon's raw batch envelope. A success or partialSuccess result queues local projection; an error-only envelope does not. MerchJar provides no idempotency guarantee and does not automatically retry creates; if the outcome is unknown, verify Amazon or the normal read state before retrying. This endpoint does not install the standard API-key rate limit middleware, so it does not emit the standard rate limit headers or standard 429 or 503 rate limit responses.
| profileid required | string (NumericString) ^[1-9][0-9]*$ Example: 9007199254740993 Positive Amazon Advertising profile ID owned by the API key. Send it as a decimal string, never as a JavaScript number. |
required | Array of objects or objects or objects or objects or objects or objects or objects or objects [ 1 .. 1000 ] items One to 1,000 targets. Each target uses exactly one target type and matching target-details shape. |
{- "targets": [
- {
- "adGroupId": "9007199254740995",
- "adProduct": "SPONSORED_PRODUCTS",
- "negative": false,
- "state": "ENABLED",
- "targetType": "PRODUCT",
- "targetDetails": {
- "productTarget": {
- "matchType": "PRODUCT_EXACT",
- "productId": "B012345678",
- "productIdType": "ASIN"
}
}
}
]
}{- "success": [
- {
- "index": 0,
- "target": {
- "targetId": "9007199254740997"
}
}
]
}