{"openapi":"3.1.0","info":{"title":"smidgen publisher agent API","version":"1.0.0","description":"Delegated API for coding agents after a human signs up and authorizes the agent (RFC 8628). No account-creation endpoints. Full guide: https://smidgen.io/integrations/publisher-agents.md"},"servers":[{"url":"https://smidgen.io"}],"tags":[{"name":"device","description":"RFC 8628 device authorization"},{"name":"agent","description":"Bearer smid_ag_ management API"}],"paths":{"/api/v1/agent/device/code":{"post":{"tags":["device"],"summary":"Start device authorization","operationId":"createDeviceCode","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"client_name":{"type":"string","example":"Cursor"}}}}}},"responses":{"200":{"description":"Device and user codes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCode"}}}}}}},"/api/v1/agent/device/token":{"post":{"tags":["device"],"summary":"Poll for access token","operationId":"pollDeviceToken","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DeviceTokenRequest"}},"application/json":{"schema":{"$ref":"#/components/schemas/DeviceTokenRequest"}}}},"responses":{"200":{"description":"Access token issued once","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessToken"}}}},"400":{"description":"authorization_pending | slow_down | expired_token | access_denied | invalid_grant"}}}},"/api/v1/agent/me":{"get":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"Token and user","operationId":"getAgentMe","responses":{"200":{"description":"Current user and token metadata"}}}},"/api/v1/agent/projects":{"get":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"List projects","operationId":"listProjects","responses":{"200":{"description":"Projects the user owns"}}},"post":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"Create a project (payout wallet allowed only here)","operationId":"createProject","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProject"}}}},"responses":{"201":{"description":"Created"},"403":{"description":"Plan limit"}}}},"/api/v1/agent/projects/{id}":{"get":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"Get project + rules","operationId":"getProject","parameters":[{"$ref":"#/components/parameters/projectId"}],"responses":{"200":{"description":"Project"}}},"patch":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"Update name, site URLs, default price (not payouts)","operationId":"patchProject","parameters":[{"$ref":"#/components/parameters/projectId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchProject"}}}},"responses":{"200":{"description":"Updated"},"403":{"description":"Payout mutation rejected"}}}},"/api/v1/agent/projects/{id}/publisher-key":{"post":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"Mint/rotate WordPress Publisher API key (smid_sk_)","operationId":"rotatePublisherKey","parameters":[{"$ref":"#/components/parameters/projectId"}],"responses":{"200":{"description":"Raw smid_sk_ shown once"}}}},"/api/v1/agent/projects/{id}/rules":{"get":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"List paywall rules","operationId":"listRules","parameters":[{"$ref":"#/components/parameters/projectId"}],"responses":{"200":{"description":"Rules"}}},"put":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"Create or update a paywall rule","operationId":"upsertRule","parameters":[{"$ref":"#/components/parameters/projectId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertRule"}}}},"responses":{"200":{"description":"Rule"}}}},"/api/v1/agent/projects/{id}/rules/{ruleId}":{"delete":{"tags":["agent"],"security":[{"agentToken":[]}],"summary":"Delete a paywall rule","operationId":"deleteRule","parameters":[{"$ref":"#/components/parameters/projectId"},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Deleted"}}}}},"components":{"securitySchemes":{"agentToken":{"type":"http","scheme":"bearer","bearerFormat":"smid_ag_","description":"User-delegated agent token from device flow or dashboard. Scopes: projects:read, projects:write, rules:write, keys:write"}},"parameters":{"projectId":{"name":"id","in":"path","required":true,"description":"Public project id (smid_…), not a secret","schema":{"type":"string","example":"smid_abc"}}},"schemas":{"DeviceCode":{"type":"object","required":["device_code","user_code","verification_uri","expires_in","interval"],"properties":{"device_code":{"type":"string"},"user_code":{"type":"string","example":"WDJB-MJHT"},"verification_uri":{"type":"string","example":"https://smidgen.io/device"},"verification_uri_complete":{"type":"string"},"expires_in":{"type":"integer","example":900},"interval":{"type":"integer","example":5}}},"DeviceTokenRequest":{"type":"object","required":["grant_type","device_code"],"properties":{"grant_type":{"type":"string","enum":["urn:ietf:params:oauth:grant-type:device_code"]},"device_code":{"type":"string"}}},"AccessToken":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","example":"Bearer"},"expires_in":{"type":"integer"},"scope":{"type":"string"}}},"CreateProject":{"type":"object","required":["name","siteUrl"],"properties":{"name":{"type":"string"},"siteUrl":{"type":"string","description":"One origin or newline-separated list"},"evmEnabled":{"type":"boolean"},"evmWallet":{"type":"string"},"evmNetwork":{"type":"string","example":"eip155:8453"},"solanaEnabled":{"type":"boolean"},"solanaWallet":{"type":"string"},"solanaNetwork":{"type":"string"}}},"PatchProject":{"type":"object","properties":{"name":{"type":"string"},"siteUrl":{"type":"string"},"defaultPriceCents":{"type":"integer","minimum":1}}},"UpsertRule":{"type":"object","required":["pathPattern","selector"],"properties":{"pathPattern":{"type":"string"},"selector":{"type":"string"},"name":{"type":"string"},"priceCents":{"type":"integer","minimum":1},"enabled":{"type":"boolean"},"ruleId":{"type":"string"},"origin":{"type":"string"},"selectorType":{"type":"string","enum":["data-attribute","class","css-selector"]}}}}},"externalDocs":{"description":"Human + agent guide","url":"https://smidgen.io/integrations/publisher-agents"}}