Pular para o conteúdo

Apply the proposed change of up to 50 opportunities

POST
/v1/ads/{marketplace}/opportunities:apply
curl --request POST \
--url https://open-api.live.gobots.com.br/v1/ads/meli/opportunities:apply \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: 2489E9AD-2EE2-8E00-8EC9-32D5F69181C0' \
--data '{ "opportunity_ids": [ "example" ] }'

One audited action for the whole batch. The answer is 200 whatever the mix of outcomes, with one result.details entry per requested id: an id that is not this merchant’s is a failed detail with reason opportunity_not_found, never a 404 for the call. The responses are never cached.

marketplace
required
string
Allowed values: meli amazon magalu shopee viavarejo b2w whatsapp qa tiktok

Marketplace of the Ads account. Only meli has an adapter in v1; the others answer 501.

Idempotency-Key
required
string format: uuid

One UUID per intent, reused on every retry of that intent. Kept for 24 hours per merchant and route: the same key with the same body answers the original response again (marked Idempotent-Replayed: true), and with a different body answers 409 idempotency_conflict. A request that is not valid never uses up its key.

Media typeapplication/json
object
opportunity_ids
required
Array<string>
>= 1 items <= 50 items

Example generated

{
"opportunity_ids": [
"example"
]
}

The batch reached a terminal state.

Media typeapplication/json
object
result
required
object
status
required

The state of an action. applied, partially_applied, failed and dismissed are terminal.

string
Allowed values: awaiting_confirmation pending reconciling unknown applied partially_applied failed dismissed
reason

A closed code, never free text. outcome_unknown means the marketplace’s answer could not be read and the change must be verified by hand.

string
Allowed values: budget_below_minimum budget_above_maximum campaign_ended invalid_roas_target advertiser_suspended campaign_not_editable ad_group_not_found opportunity_not_found opportunity_not_applicable opportunity_locked not_found unmapped origin_misconfigured origin_overloaded origin_rejected_request origin_protocol_error outcome_unknown not_dispatched
applied_as

Present when an opportunity that proposed removing an ad was applied as a pause.

string
Allowed values: pause
details
required

One entry per requested target on a batch; the targets that failed on partially_applied.

Array<object>
object
target_type
required
string
Allowed values: campaign ad_group opportunity
target_id
required
string
status
required
string
Allowed values: applied failed pending
reason

A closed code, never free text. outcome_unknown means the marketplace’s answer could not be read and the change must be verified by hand.

string
Allowed values: budget_below_minimum budget_above_maximum campaign_ended invalid_roas_target advertiser_suspended campaign_not_editable ad_group_not_found opportunity_not_found opportunity_not_applicable opportunity_locked not_found unmapped origin_misconfigured origin_overloaded origin_rejected_request origin_protocol_error outcome_unknown not_dispatched
meta
required
object
action_id
required
string
/^act_[0-9A-HJKMNP-TV-Z]{26}$/

Example

{
"result": {
"status": "awaiting_confirmation",
"reason": "budget_below_minimum",
"applied_as": "pause",
"details": [
{
"target_type": "campaign",
"status": "applied",
"reason": "budget_below_minimum"
}
]
}
}
RateLimit-Policy
required
string

The policies that apply to this endpoint group, as draft-ietf-httpapi-ratelimit-headers policy members: "<group>";q=<quota>;w=<window seconds>.

RateLimit
required
string

The state of the endpoint group’s window: "<group>";r=<remaining>;t=<seconds to reset>.

Idempotent-Replayed
boolean

Present and true only when this response is a stored replay of an earlier identical request.

The write is still moving: result.status is pending, reconciling or unknown. Poll the action named by Location until it is terminal. The response is never cached.

Media typeapplication/json
object
result
required
object
status
required

The state of an action. applied, partially_applied, failed and dismissed are terminal.

string
Allowed values: awaiting_confirmation pending reconciling unknown applied partially_applied failed dismissed
reason

A closed code, never free text. outcome_unknown means the marketplace’s answer could not be read and the change must be verified by hand.

string
Allowed values: budget_below_minimum budget_above_maximum campaign_ended invalid_roas_target advertiser_suspended campaign_not_editable ad_group_not_found opportunity_not_found opportunity_not_applicable opportunity_locked not_found unmapped origin_misconfigured origin_overloaded origin_rejected_request origin_protocol_error outcome_unknown not_dispatched
applied_as

Present when an opportunity that proposed removing an ad was applied as a pause.

string
Allowed values: pause
details
required

One entry per requested target on a batch; the targets that failed on partially_applied.

Array<object>
object
target_type
required
string
Allowed values: campaign ad_group opportunity
target_id
required
string
status
required
string
Allowed values: applied failed pending
reason

A closed code, never free text. outcome_unknown means the marketplace’s answer could not be read and the change must be verified by hand.

string
Allowed values: budget_below_minimum budget_above_maximum campaign_ended invalid_roas_target advertiser_suspended campaign_not_editable ad_group_not_found opportunity_not_found opportunity_not_applicable opportunity_locked not_found unmapped origin_misconfigured origin_overloaded origin_rejected_request origin_protocol_error outcome_unknown not_dispatched
meta
required
object
action_id
required
string
/^act_[0-9A-HJKMNP-TV-Z]{26}$/

Example

{
"result": {
"status": "awaiting_confirmation",
"reason": "budget_below_minimum",
"applied_as": "pause",
"details": [
{
"target_type": "campaign",
"status": "applied",
"reason": "budget_below_minimum"
}
]
}
}
Location
required
string

The action to poll, /v1/ads/{marketplace}/actions/{action_id}.

RateLimit-Policy
required
string

The policies that apply to this endpoint group, as draft-ietf-httpapi-ratelimit-headers policy members: "<group>";q=<quota>;w=<window seconds>.

RateLimit
required
string

The state of the endpoint group’s window: "<group>";r=<remaining>;t=<seconds to reset>.

The request is not valid: invalid_request (a malformed header, path or body, with the field named), idempotency_key_required, invalid_roas_target (outside 1.0 to 35.0) or invalid_status_transition (an ended campaign cannot be reactivated).

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}
RateLimit-Policy
required
string

The policies that apply to this endpoint group, as draft-ietf-httpapi-ratelimit-headers policy members: "<group>";q=<quota>;w=<window seconds>.

RateLimit
required
string

The state of the endpoint group’s window: "<group>";r=<remaining>;t=<seconds to reset>.

The API key is missing, malformed, unknown, revoked or expired.

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}
WWW-Authenticate
string

Bearer challenge for the API realm.

The merchant does not have the Open API add-on active.

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}

The resource, or a requested store, is not this merchant’s or does not exist; the two are indistinguishable.

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}
RateLimit-Policy
required
string

The policies that apply to this endpoint group, as draft-ietf-httpapi-ratelimit-headers policy members: "<group>";q=<quota>;w=<window seconds>.

RateLimit
required
string

The state of the endpoint group’s window: "<group>";r=<remaining>;t=<seconds to reset>.

idempotency_conflict when the key was used with another body; opportunity_not_applicable when the opportunity was already applied, dismissed or expired; opportunity_locked while another request with the same key, or another apply of the same opportunity, is still running.

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}
RateLimit-Policy
required
string

The policies that apply to this endpoint group, as draft-ietf-httpapi-ratelimit-headers policy members: "<group>";q=<quota>;w=<window seconds>.

RateLimit
required
string

The state of the endpoint group’s window: "<group>";r=<remaining>;t=<seconds to reset>.

The requests-per-minute limit of the endpoint group was exceeded (rate_limited), or the monthly request quota of the merchant is exhausted (quota_exceeded).

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}
RateLimit-Policy
required
string

The policies that apply to this endpoint group, as draft-ietf-httpapi-ratelimit-headers policy members: "<group>";q=<quota>;w=<window seconds>.

RateLimit
required
string

The state of the endpoint group’s window: "<group>";r=<remaining>;t=<seconds to reset>.

Retry-After
required
integer

Seconds to wait before retrying, per RFC 9110.

The route or marketplace is published but its adapter is not available yet.

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}
RateLimit-Policy
required
string

The policies that apply to this endpoint group, as draft-ietf-httpapi-ratelimit-headers policy members: "<group>";q=<quota>;w=<window seconds>.

RateLimit
required
string

The state of the endpoint group’s window: "<group>";r=<remaining>;t=<seconds to reset>.

source_rejected: the marketplace refused the change. The message is one fixed sentence chosen by the reason, never the marketplace’s own text.

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}
RateLimit-Policy
required
string

The policies that apply to this endpoint group, as draft-ietf-httpapi-ratelimit-headers policy members: "<group>";q=<quota>;w=<window seconds>.

RateLimit
required
string

The state of the endpoint group’s window: "<group>";r=<remaining>;t=<seconds to reset>.

The upstream source is unavailable. When the merchant’s entitlement could not be resolved the request is refused before rate limiting, so the RateLimit headers are absent.

Media typeapplication/json
object
code
required

Stable machine readable error code.

string
message
required

Human readable explanation. Never carries raw upstream text.

string
retry_after

Seconds to wait before retrying.

integer
limit

Limit that was exceeded.

integer
remaining

Remaining allowance in the current window.

integer

Example generated

{
"code": "example",
"message": "example",
"retry_after": 1,
"limit": 1,
"remaining": 1
}
RateLimit-Policy
string

As the RateLimit-Policy response header; absent when entitlement could not be resolved.

RateLimit
string

As the RateLimit response header; absent when entitlement could not be resolved.