# Your next step

One read-only request tells an agent what to do next, who can do it, and which prerequisites remain.

## Start with one request

After [connecting to an owner](/docs-markdown/authentication), read:

```http
GET /api/v1/readiness
Authorization: Bearer $MARKETINGROUTER_API_KEY
```

Use a live key with campaigns:read, or the signed-in owner session. The workspace is derived from authentication. No owner ID is accepted. This endpoint reads stored state; it never calls Meta, charges, creates a draft, starts a funding review, approves a plan, reserves money or launches ads.

For an existing live campaign, add exactly one campaign_id query parameter. Foreign and missing IDs return 404; sandbox campaigns return live_campaign_required. Unknown or duplicated query parameters return 422.

## Follow next_action

The response includes checks, next_action, actionable_steps, operator_blockers and a funding summary. Each action supplies:

| Field | Meaning |
| --- | --- |
| actor | agent, owner or operator. Never impersonate the owner to bypass approval. |
| method / url | The existing operation or first-party owner review page. A null method means a human handoff. |
| required_scope | Read or write scope for an agent operation. A read-only key can inspect readiness but cannot execute write actions. |
| input_fields | Required context to prepare the request. Read the linked schema for the full body; these are not placeholder values to submit. |
| idempotency | none, new_key_for_new_request or retain_original_request. Persist the exact body and key before any mutation. |
| documentation | The relevant Markdown guide. |

Complete one step, then read readiness again. Checks have stable IDs, codes, status and depends_on IDs. Only actions whose dependencies are complete or not_required appear in actionable_steps. Other actions describe work that will become available later.

Service blockers can coexist with useful agent work: describe the product, create its Page, prepare creative and make a draft while paid activation is unavailable. The endpoint will not recommend a new payment or owner launch before the applicable prerequisites pass. Do not invent a workaround for an operator blocker.

## Keep the owner involved at the right moments

The agent provides the business facts and Page preference, uploads brand assets, and continues provisioning. The owner approves the identity and grants Facebook access where necessary. The agent prepares up to five ads under a shared campaign budget and installs tracking on the customer's site.

For purchase optimization, connect the customer's actual checkout and complete the owner-reviewed test receipt. Advertising balance top-ups are not product purchases. The checkout integration and guard health checks are described in [purchases](/docs-markdown/purchases) and [cost guards](/docs-markdown/cost-guards).

An owner then completes secure payment if needed and approves the exact campaign plan and its maximum total cost. Agent keys cannot perform that approval. Approval may submit the ad for review; neither draft creation nor an approval response guarantees immediate delivery.

## Funding without duplicate payments

funding.required_cents is the campaign's maximum media budget plus its versioned service fee. shortfall_cents compares that total with available credit, unless the campaign already has reserved funds or an exact campaign-specific receipt. All amounts are integer USD cents. Payment costs and taxes are separate checkout terms.

The normal minimum top-up is 2500 cents. A small campaign shortfall does not lower that minimum. Read the current funding terms and maximum top-up from GET /api/v1/balance before preparing a payment request. Readiness is not a price quote.

If a top-up is already pending, resolve it instead of creating a second one. A ready checkout points the owner to the existing payment. A submitted payment points the agent to receipt reconciliation. An uncertain checkout creation requires its original amount and Idempotency-Key; if those were lost, inspect the existing request with support rather than inventing a replacement key.

When credit is present but its receipt sweep is stale, follow POST /api/v1/balance/reconcile. This advances verification of existing payments; it does not charge. Follow its retry_after_seconds until ready or held. A funding hold cannot be bypassed by adding another payment.

## Schedules and launch limits

The stored schedule should start at least five minutes in the future. An expired plan needs a revision and fresh owner review. The current floor is $5 per started schedule day for a lifetime plan, but Meta may require more for a particular campaign. Never increase the owner's authority automatically to meet a minimum.

Daily plans can be prepared, but activation is unavailable until a provider-enforced total spending cap is supported. Readiness points to a lifetime-plan revision; the owner must review it before delivery.

## Interpret status accurately

| Status | Meaning |
| --- | --- |
| action_required | Follow an available agent or owner action. |
| blocked | An operator condition remains; useful setup actions may still be available. |
| waiting | An existing campaign operation or prerequisite is unresolved. |
| ready_for_owner_review | Stored launch prerequisites pass. Give the exact approval page to the owner. |
| monitoring | This campaign already has a lifecycle. Read performance/control history before changing it. It may be paused or completed. |

evidence is always stored_state, and authorizes_spending is always false. A recent tracking observation is accepted for navigation only when it matches the exact destination and is less than a day old. Launch still rechecks live Page permission, tracking, remote creative/plan integrity, receipts and limits. A ready response is not a guarantee that the next mutation succeeds.

For running, paused, completed or uncertain campaigns, readiness points to their existing performance and control history. It does not propose another checkout or launch. Pending/uncertain controls retain their original key and input; terminal failures require reading current state before a new command. See [media buying](/docs-markdown/media-buying).

There is no need to poll an unchanged owner/operator blocker rapidly. Re-read after a relevant change. A retry_after_seconds value applies to an unresolved operation or funding check; it does not authorize a retry with a new identity.
