{
  "openapi": "3.0.1",
  "info": {
    "title": "Rip On Shit",
    "description": "Dry Wit Generator\nGenerate personalized dry, understated humor that rips on topics in your voice. Surgical sarcasm. Allergic to enthusiasm. Deeply suspicious of fluff.",
    "version": "1.2",
    "x-build-id": "SIqHdoydmxaCdbmfS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/alizarin_refrigerator-owner~rip-on-shit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-alizarin_refrigerator-owner-rip-on-shit",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/alizarin_refrigerator-owner~rip-on-shit/runs": {
      "post": {
        "operationId": "runs-sync-alizarin_refrigerator-owner-rip-on-shit",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/alizarin_refrigerator-owner~rip-on-shit/run-sync": {
      "post": {
        "operationId": "run-sync-alizarin_refrigerator-owner-rip-on-shit",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic": {
            "title": "Topic to Rip On",
            "type": "string",
            "description": "What deserves your understated contempt today? (e.g., 'AI hype', 'corporate jargon', 'hustle culture')"
          },
          "topicContext": {
            "title": "Additional Context",
            "type": "string",
            "description": "Any specific angles, recent events, or particular absurdities to focus on"
          },
          "outputStyle": {
            "title": "Output Style",
            "enum": [
              "observation",
              "oneliner",
              "linkedin_post",
              "slack_message",
              "tweet",
              "mixed",
              "spiraling_list",
              "fake_persona_bio",
              "absurd_thesis",
              "kafkaesque_nightmare"
            ],
            "type": "string",
            "description": "How should the wit be structured?",
            "default": "observation"
          },
          "outputCount": {
            "title": "Number of Outputs",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many pieces of wit to generate",
            "default": 3
          },
          "intensityLevel": {
            "title": "Intensity Level",
            "enum": [
              "subtle",
              "standard",
              "pointed",
              "scorched_earth"
            ],
            "type": "string",
            "description": "How pointed should this be?",
            "default": "standard"
          },
          "linkedinProfileUrl": {
            "title": "LinkedIn Profile URL",
            "type": "string",
            "description": "Optional: Your LinkedIn profile to analyze for voice enrichment"
          },
          "googleDocUrl": {
            "title": "Google Doc URL",
            "type": "string",
            "description": "Optional: A Google Doc with writing samples to analyze your voice"
          },
          "additionalVoiceNotes": {
            "title": "Additional Voice Notes",
            "type": "string",
            "description": "Any additional notes about your humor style or preferences"
          },
          "voiceSamples": {
            "title": "Voice Samples (Inline)",
            "type": "string",
            "description": "Paste your actual writing samples here (posts, articles, comments). The AI will analyze these to match your voice. Separate multiple samples with '---'. The more samples, the better the voice match."
          },
          "voiceSamplesUrl": {
            "title": "Voice Samples URL",
            "type": "string",
            "description": "URL to a text file containing voice samples (e.g., GitHub raw file, Cloud Storage URL). Samples should be separated by '---'. This is ideal for large sample collections that persist across runs."
          },
          "voiceKnowledgeBaseName": {
            "title": "Voice Knowledge Base Name",
            "type": "string",
            "description": "Name of the Apify Key-Value Store to persist your voice profile. Use the same name across runs to build up your voice over time. Leave empty to use a one-time voice analysis."
          },
          "addToKnowledgeBase": {
            "title": "Add New Samples to Knowledge Base",
            "type": "boolean",
            "description": "When enabled, new voice samples will be analyzed and added to your persistent knowledge base.",
            "default": false
          },
          "analyzeVoice": {
            "title": "Analyze Voice Patterns",
            "type": "boolean",
            "description": "Use AI to analyze your writing samples and extract voice patterns (phrases, rhythms, humor style). This creates a more accurate voice profile but uses extra API calls.",
            "default": true
          },
          "openaiApiKey": {
            "title": "OpenAI API Key",
            "type": "string",
            "description": "Your OpenAI API key for generation. If no AI key is provided, the actor returns labeled sample output and charges no task events."
          },
          "anthropicApiKey": {
            "title": "Anthropic API Key",
            "type": "string",
            "description": "Your Anthropic API key (alternative to OpenAI). If no AI key is provided, the actor returns labeled sample output and charges no task events."
          },
          "aiModel": {
            "title": "AI Model",
            "enum": [
              "claude-sonnet-5",
              "claude-haiku-4-5-20251001",
              "gpt-4o",
              "gpt-4o-mini",
              "gpt-4-turbo"
            ],
            "type": "string",
            "description": "Which model to use for generation",
            "default": "claude-sonnet-5"
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Optional webhook to send results (Slack, Discord, Zapier, etc.)"
          },
          "webhookPlatform": {
            "title": "Webhook Platform",
            "enum": [
              "slack",
              "discord",
              "zapier",
              "make",
              "n8n",
              "custom"
            ],
            "type": "string",
            "description": "Select your webhook platform for proper formatting",
            "default": "custom"
          },
          "demoMode": {
            "title": "Demo Mode",
            "type": "boolean",
            "description": "ON shows pre-written labeled sample outputs (no AI calls, ignores your topic, charges no task events). OFF with an API key generates content about YOUR specific topic. If no AI key is provided, the actor automatically falls back to the labeled no-charge sample output.",
            "default": false
          },
          "generateImage": {
            "title": "Generate Image",
            "type": "boolean",
            "description": "Generate an AI image for each piece of wit using Gemini 3 Pro (via nanobanana-pro actor). This creates a visual accompaniment that captures the absurdity or satire of the content.",
            "default": true
          },
          "imageStyle": {
            "title": "Image Style",
            "enum": [
              "photorealistic",
              "cinematic",
              "illustration",
              "cartoon",
              "abstract",
              "surreal"
            ],
            "type": "string",
            "description": "Visual style for the generated image",
            "default": "surreal"
          },
          "imageResolution": {
            "title": "Image Resolution",
            "enum": [
              "1024x1024",
              "2048x2048",
              "4096x4096"
            ],
            "type": "string",
            "description": "Size of the generated image",
            "default": "1024x1024"
          },
          "geminiApiKey": {
            "title": "Gemini API Key",
            "type": "string",
            "description": "Your Google Gemini API key for image generation. Required if generateImage is enabled and you want live generation (otherwise uses nanobanana-pro demo mode)."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}