Appearance
Surfaces
Interactive API Explorer: Explorer
The authoritative surface is the OpenAPI spec:
/influencer/openapi.yaml
Additional surfaces include MCP and CLI (see below). Direct Lambda is not offered for Influencer.
Surface Types (explicit)
API Gateway
- Status: Available.
- Base:
https://api.g3nretailstack.com/influencer - Notes: Primary tenant surface for influencer/affiliate workflows.
Direct Lambda
- Status: Not offered.
- Notes: No direct Lambda surface is documented for Influencer.
CLI
- Status: Available.
- Command:
g3n influencer ...(API Gateway). - Notes: See
cli/README.md.
MCP
- Status: Available.
- Canonical protocol:
https://mcp.g3nretailstack.com/influencer/PROTOCOL.md - Mirror:
https://doc.g3nretailstack.com/influencer/PROTOCOL.md
Auth + tenancy
- Required headers:
x-orgcodeandx-session-guid(user session) orx-api-key(org-bound service account). - Header auth is canonical; body auth is accepted where documented. See /common/headers-identity.html.
- Optional cost attribution:
x-cccode(or request fieldcccode) where supported; see OpenAPI. - Non-associated callers receive
404 not-found(anti-enumeration). - Facility context:
x-logical-guid(required for operational actions; see OpenAPI per-path).x-channel-code(required where documented; see OpenAPI per-path).
Identifier policy
- Direct get/update/status calls require GUID/ID fields (
*_idor legacy*_guidwhere that is the canonical field name). Code-based lookups are resolve/search only. - Responses never include both
*_idand*_guidfor the same record (no dual-field output). - Exceptions (email-based UAS, PVM resolve, MRS
container+record_id) are listed in /common/ids-codes.html.
Request builder (API Gateway)
Headers (canonical)
bash
-H "x-orgcode: $ORGCODE"
-H "x-session-guid: $SESSION_GUID" # or: -H "x-api-key: $API_KEY"
-H "content-type: application/json"Template
bash
curl -sS -X POST "https://api.g3nretailstack.com/influencer/<endpoint>" \
-H "content-type: application/json" \
-H "x-orgcode: $ORGCODE" \
-H "x-session-guid: $SESSION_GUID" \
-d '{"...": "..."}'Notes
- Replace
<endpoint>with a route from the OpenAPI inventory. - Header auth is canonical; body
session_guid/api_keyis accepted where documented.
Comments and inbox surfaces
POST /influencer/comment|comment/get|comment/list|comment/revise|comment/status|comment/reportPOST /influencer/inbox/create|get|list|status|state
Disputes
POST /influencer/dispute/create|get|list|status/set
Endpoint inventory (OpenAPI parity)
Request/response schema names reference OpenAPI component schemas.
| Method | Path | Request schema | Response schema |
|---|---|---|---|
| POST | /attribution/record | AttributionRecordRequest | Envelope |
| POST | /campaign/create | CampaignCreateRequest | CampaignEnvelope |
| POST | /campaign/get | CampaignGetRequest | CampaignEnvelope |
| POST | /campaign/list | CampaignListRequest | CampaignListEnvelope |
| POST | /campaign/status/set | CampaignStatusSetRequest | CampaignEnvelope |
| POST | /comment | CommentAddRequest | CommentEnvelope |
| POST | /comment/get | CommentGetRequest | CommentEnvelope |
| POST | /comment/list | CommentListRequest | CommentListEnvelope |
| POST | /comment/report | CommentReportRequest | CommentReportEnvelope |
| POST | /comment/revise | CommentReviseRequest | CommentEnvelope |
| POST | /comment/status | CommentStatusRequest | CommentEnvelope |
| POST | /discount-tier/get | DiscountTierGetRequest | DiscountTierEnvelope |
| POST | /discount-tier/list | DiscountTierListRequest | DiscountTierListEnvelope |
| POST | /discount-tier/set | DiscountTierSetRequest | DiscountTierEnvelope |
| POST | /dispute/create | DisputeCreateRequest | DisputeEnvelope |
| POST | /dispute/get | DisputeGetRequest | DisputeEnvelope |
| POST | /dispute/list | DisputeListRequest | DisputeListEnvelope |
| POST | /dispute/status/set | DisputeStatusSetRequest | DisputeEnvelope |
| POST | /earnings/clawback | EarningsClawbackRequest | EarningEnvelope |
| POST | /earnings/hold | EarningsHoldRequest | EarningEnvelope |
| POST | /earnings/list | EarningsListRequest | EarningsListEnvelope |
| POST | /earnings/release | EarningsReleaseRequest | EarningEnvelope |
| POST | /inbox/create | InboxCreateRequest | InboxEnvelope |
| POST | /inbox/get | InboxGetRequest | InboxEnvelope |
| POST | /inbox/list | InboxListRequest | InboxListEnvelope |
| POST | /inbox/state | InboxStateRequest | InboxEnvelope |
| POST | /inbox/status | InboxStatusRequest | InboxEnvelope |
| POST | /payout/ready/get | PayoutReadyGetRequest | PayoutReadyEnvelope |
| POST | /payout/ready/set | PayoutReadySetRequest | PayoutReadyEnvelope |
| POST | /payout/submit | PayoutSubmitRequest | PayoutEnvelope |
| POST | /profile/create | InfluencerProfileCreateRequest | InfluencerProfileEnvelope |
| POST | /profile/get | InfluencerProfileGetRequest | InfluencerProfileEnvelope |
| POST | /statement/create | StatementCreateRequest | StatementEnvelope |
| POST | /statement/get | StatementGetRequest | StatementEnvelope |
| POST | /statement/list | StatementListRequest | StatementListEnvelope |
Error tags
Common tags (see /common/error-tags.html for definitions): validation-error, unauthorized, forbidden, not-found, expected-revision-required, conflict, invalid-state, throttled, internal-error.
Example envelopes
Success envelope (shape-only):
json
{
"success": true,
"data": { "example": "see schema for fields" },
"build": { "build_major": "MONDAY", "build_minor": "0000000000", "build_id": "MONDAY-0000000000" },
"stats": { "call": "example", "service": "influencer", "timestamp_utc": "2026-01-21T00:00:00Z" }
}Error envelope (shape-only):
json
{
"success": false,
"error": {
"error_code": "influencer.conflict_revision",
"http_status": 409,
"retryable": false,
"request_id": "req-123",
"trace_id": "trace-abc",
"major": { "tag": "conflict", "message": { "en_US": "Expected revision does not match the current record." } },
"details": { "expected_revision": "3", "current_revision": "4" },
"conflict_snapshot": { "revision": 4 }
},
"build": { "...": "..." },
"stats": { "call": "example", "service": "influencer", "timestamp_utc": "2026-01-21T00:00:00Z", "request_id": "req-123" }
}Role requirements (by endpoint family)
- Read/list:
inf_view(or owner). - Profile + campaign:
inf_manage/inf_campaign_admin(or owner). - Payouts:
inf_finance(or owner).
Idempotency & retries
- Updates require
expected_revision. - Earnings and payouts are not idempotent unless documented.
Common pitfalls
- Attribution windows are enforced; late events may be rejected.
- Anti-enumeration returns 404 for non-associated callers.
Examples (core families)
Profile create
json
{ "profile": { "handle": "creator123", "channel_code": "WEB" }, "reason": "onboarding" }Response (shape):
json
{ "success": true, "data": { "profile_id": "PROF_ID" }, "build": { "...": "..." }, "stats": { "...": "..." } }Payout submit
json
{ "payout_id": "PAYOUT_ID", "expected_revision": "REV", "reason": "monthly" }Response (shape):
json
{ "success": true, "data": { "status": "submitted" }, "build": { "...": "..." }, "stats": { "...": "..." } }