{
  "components": {
    "parameters": {},
    "schemas": {
      "AnalyticsOverviewResponse": {
        "properties": {
          "data": {
            "properties": {
              "from": {
                "type": "string"
              },
              "granularity": {
                "enum": [
                  "day"
                ],
                "type": "string"
              },
              "series": {
                "items": {
                  "properties": {
                    "bucket": {
                      "type": "string"
                    },
                    "metrics": {
                      "$ref": "#/components/schemas/AnalyticsTimeseriesMetrics"
                    }
                  },
                  "required": [
                    "bucket",
                    "metrics"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "to": {
                "type": "string"
              }
            },
            "required": [
              "from",
              "to",
              "granularity",
              "series"
            ],
            "type": "object"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "AnalyticsPost": {
        "properties": {
          "comments": {
            "minimum": 0,
            "type": "integer"
          },
          "content": {
            "type": "string"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "impressions": {
            "minimum": 0,
            "type": "integer"
          },
          "likes": {
            "minimum": 0,
            "type": "integer"
          },
          "media_type": {
            "$ref": "#/components/schemas/PostMediaType"
          },
          "raw_media_urls": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "shares": {
            "minimum": 0,
            "type": "integer"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "content",
          "created_at",
          "raw_media_urls",
          "tags",
          "impressions",
          "likes",
          "comments",
          "shares"
        ],
        "type": "object"
      },
      "AnalyticsPostsResponse": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AnalyticsPost"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "AnalyticsTimeseriesMetrics": {
        "properties": {
          "comments": {
            "minimum": 0,
            "type": "integer"
          },
          "connections": {
            "type": [
              "integer",
              "null"
            ]
          },
          "followers": {
            "type": [
              "integer",
              "null"
            ]
          },
          "impressions": {
            "minimum": 0,
            "type": "integer"
          },
          "likes": {
            "minimum": 0,
            "type": "integer"
          },
          "profile_views": {
            "type": [
              "integer",
              "null"
            ]
          },
          "shares": {
            "minimum": 0,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "Comment": {
        "example": {
          "comment_urn": "urn:li:comment:(activity:7361375991576829952,7361412088340234240)",
          "content": "Same pattern on our side: the teams that shipped weekly beat the ones that shipped perfectly. What's the smallest slice you'd start with?",
          "post_urn": "urn:li:activity:7361375991576829952",
          "posted_at": "2026-06-02T09:14:03.120Z",
          "stats": {
            "impressions_count": 486,
            "like_count": 12,
            "reaction_type_counts": [
              {
                "count": 9,
                "reaction_type": "LIKE"
              },
              {
                "count": 3,
                "reaction_type": "PRAISE"
              }
            ],
            "reply_count": 3
          }
        },
        "properties": {
          "comment_urn": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "post_urn": {
            "type": "string"
          },
          "posted_at": {
            "format": "date-time",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/CommentStats"
          }
        },
        "required": [
          "post_urn",
          "content",
          "posted_at"
        ],
        "type": "object"
      },
      "CommentDraft": {
        "example": {
          "content": "This mirrors what we saw last quarter: the teams that shipped weekly beat the ones that shipped perfectly. Curious how you'd apply it to a smaller team?",
          "created_at": "2026-06-01T13:21:14.456Z",
          "id": "0197c2f4-8b1a-7c3d-9e5f-2a4b6c8d0e1f",
          "post_urn": "urn:li:activity:7361375991576829952",
          "status": "draft",
          "updated_at": "2026-06-01T13:21:14.456Z"
        },
        "properties": {
          "comment_id": {
            "type": "string"
          },
          "comment_urn": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "failure_code": {
            "type": "string"
          },
          "failure_reason": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "post_urn": {
            "type": "string"
          },
          "scheduled_for": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "draft",
              "pending",
              "posted",
              "failed",
              "cancelled"
            ],
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "status",
          "post_urn",
          "content",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "CommentStats": {
        "properties": {
          "impressions_count": {
            "type": "number"
          },
          "like_count": {
            "type": "number"
          },
          "reaction_type_counts": {
            "items": {
              "properties": {
                "count": {
                  "type": "number"
                },
                "reaction_type": {
                  "type": "string"
                }
              },
              "required": [
                "reaction_type",
                "count"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "reply_count": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "Connection": {
        "example": {
          "created_at": "2026-06-01T10:00:00.000Z",
          "scheduled_for": "2026-06-01T14:37:00.000Z",
          "status": "pending",
          "username": "jane-doe"
        },
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "failure_code": {
            "type": "string"
          },
          "failure_reason": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "scheduled_for": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "sent",
              "failed",
              "cancelled"
            ],
            "type": "string"
          },
          "username": {
            "type": "string"
          }
        },
        "required": [
          "username",
          "status",
          "created_at"
        ],
        "type": "object"
      },
      "CreateCommentDraftBody": {
        "example": {
          "content": "This mirrors what we saw last quarter: the teams that shipped weekly beat the ones that shipped perfectly. Curious how you'd apply it to a smaller team?",
          "post_urn": "urn:li:activity:7361375991576829952"
        },
        "properties": {
          "comment_id": {
            "minLength": 1,
            "type": "string"
          },
          "content": {
            "maxLength": 1250,
            "minLength": 1,
            "type": "string"
          },
          "post_urn": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "post_urn",
          "content"
        ],
        "type": "object"
      },
      "CreateMediaUploadUrlBody": {
        "example": {
          "content_type": "image/png",
          "filename": "chart.png"
        },
        "properties": {
          "content_type": {
            "minLength": 1,
            "type": "string"
          },
          "filename": {
            "type": "string"
          }
        },
        "required": [
          "content_type"
        ],
        "type": "object"
      },
      "CreateMediaUploadUrlResponse": {
        "properties": {
          "expires_in": {
            "type": "number"
          },
          "headers": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "media_id": {
            "type": "string"
          },
          "public_url": {
            "type": "string"
          },
          "upload_url": {
            "type": "string"
          }
        },
        "required": [
          "media_id",
          "upload_url",
          "public_url",
          "headers",
          "expires_in"
        ],
        "type": "object"
      },
      "CreatePostDraftBody": {
        "example": {
          "content": "Postman smoke — round-trip step 1"
        },
        "properties": {
          "content": {
            "maxLength": 3000,
            "type": "string"
          },
          "media_ids": {
            "items": {
              "minLength": 1,
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "CuratedFeedSummary": {
        "example": {
          "id": "LinkedIn Growth",
          "name": "LinkedIn Growth",
          "profile_count": 42
        },
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "profile_count": {
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "profile_count"
        ],
        "type": "object"
      },
      "Draft": {
        "example": {
          "content": "Let's kill the fairy tales.\n\nNobody needs another recruiter spinning \"life-changing roles\" at paper unicorns.\n\nYou've heard the pitch. Hype, smoke, and a fresh round of layoffs six months later. Waste of time.\n\nI don't believe in pushing shiny logos or betting your career on vaporware. I won't line your inbox with recycled \"massive opportunity\" spam and pray for replies.\n\nHere's the deal.\n\nIf I'm bringing something to your table, it's because I've turned it upside down first. I vet the founders. I dig into the numbers. I talk to their teams. I want to know if I'd stake my own reputation on it.\n\nIf it doesn't pass, it never reaches you.\n\nThe roles I'm recruiting for now? Real teams, real revenue, real upside. Actual leadership with the track record to back it up. Not just another hype cycle.\n\nYou're not looking for a Hail Mary. You want a seat at a table where execution matters and you're actually trusted to do your job.\n\nThese are those roles.\n\nIf you're tired of the noise, pay attention.\n\nNo fairy dust. Just work that matters.",
          "created_at": "2026-05-27T13:21:14.456Z",
          "id": "11c0da7d-6d9f-4dc2-be03-5051a96ee72e",
          "status": "draft"
        },
        "properties": {
          "content": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "media": {
            "items": {
              "$ref": "#/components/schemas/MediaRef"
            },
            "type": "array"
          },
          "status": {
            "enum": [
              "draft"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "status",
          "content",
          "created_at"
        ],
        "type": "object"
      },
      "EditableCommentDraft": {
        "example": {
          "content": "This mirrors what we saw last quarter: the teams that shipped weekly beat the ones that shipped perfectly. Curious how you'd apply it to a smaller team?",
          "created_at": "2026-06-01T13:21:14.456Z",
          "id": "0197c2f4-8b1a-7c3d-9e5f-2a4b6c8d0e1f",
          "post_urn": "urn:li:activity:7361375991576829952",
          "status": "draft",
          "updated_at": "2026-06-01T13:21:14.456Z"
        },
        "properties": {
          "comment_id": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "post_urn": {
            "type": "string"
          },
          "status": {
            "enum": [
              "draft"
            ],
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "status",
          "post_urn",
          "content",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "EngagementComment": {
        "example": {
          "comment_urn": "urn:li:comment:(activity:7361375991576829952,7361412088340234240)",
          "commenter": {
            "headline": "CEO, Lorefully",
            "linkedin_url": "https://www.linkedin.com/in/amritchandan",
            "name": "Amrit Chandan",
            "urn": "ACoAAAWRwXsBhdNlku1hj-Dl7uc3fVT5QT9f7ns"
          },
          "pinned": false,
          "post_urn": "urn:li:activity:7361375991576829952",
          "posted_at": "2026-06-02T09:14:03.120Z",
          "reply_count": 2,
          "text": "We shipped weekly for a quarter and the compounding was real. How did you handle the review load?"
        },
        "properties": {
          "comment_urn": {
            "type": "string"
          },
          "commenter": {
            "$ref": "#/components/schemas/EngagementCommenter"
          },
          "pinned": {
            "type": "boolean"
          },
          "post_urn": {
            "type": "string"
          },
          "posted_at": {
            "format": "date-time",
            "type": "string"
          },
          "reply_count": {
            "type": "integer"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "post_urn",
          "text",
          "reply_count"
        ],
        "type": "object"
      },
      "EngagementCommenter": {
        "properties": {
          "headline": {
            "type": "string"
          },
          "linkedin_url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "urn": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "EngagementPost": {
        "example": {
          "author": {
            "followers_count": 18742,
            "headline": "CEO, Lorefully",
            "name": "Amrit Chandan",
            "profile_url": "https://www.linkedin.com/in/amritchandan"
          },
          "content_type": "text",
          "metrics": {
            "comments": 37,
            "likes": 412,
            "shares": 9
          },
          "post_urn": "urn:li:activity:7361375991576829952",
          "posted_at": "2026-06-02T09:14:03.120Z",
          "text": "We shipped weekly for a quarter. Here is what compounded, and what broke.",
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:7361375991576829952/"
        },
        "properties": {
          "author": {
            "$ref": "#/components/schemas/EngagementPostAuthor"
          },
          "content_type": {
            "enum": [
              "text",
              "image",
              "video",
              "article",
              "document",
              "share"
            ],
            "type": "string"
          },
          "metrics": {
            "properties": {
              "comments": {
                "minimum": 0,
                "type": "integer"
              },
              "likes": {
                "minimum": 0,
                "type": "integer"
              },
              "shares": {
                "minimum": 0,
                "type": "integer"
              }
            },
            "required": [
              "likes",
              "comments",
              "shares"
            ],
            "type": "object"
          },
          "post_urn": {
            "type": "string"
          },
          "posted_at": {
            "format": "date-time",
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "post_urn",
          "text",
          "metrics"
        ],
        "type": "object"
      },
      "EngagementPostAuthor": {
        "properties": {
          "followers_count": {
            "type": "integer"
          },
          "headline": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "profile_url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ErrorBody": {
        "example": {
          "code": "validation_failed",
          "details": {
            "fields": [
              {
                "code": "required_one_of",
                "message": "Provide content, or media_ids for a media-only draft. A draft cannot have neither.",
                "path": "body"
              }
            ]
          },
          "message": "Request validation failed."
        },
        "properties": {
          "code": {
            "enum": [
              "validation_failed",
              "invalid_cursor",
              "invalid_limit",
              "invalid_json",
              "payload_too_large",
              "missing_api_key",
              "invalid_api_key",
              "account_unavailable",
              "payment_failed",
              "insufficient_plan",
              "insufficient_credits",
              "feature_disabled",
              "draft_ownership_mismatch",
              "post_not_found",
              "draft_not_found",
              "list_not_found",
              "lead_not_found",
              "media_not_found",
              "route_not_found",
              "comment_draft_not_found",
              "comment_not_found",
              "connection_not_found",
              "like_not_found",
              "method_not_allowed",
              "draft_already_committed",
              "draft_already_scheduled",
              "list_member_already_exists",
              "comment_already_committed",
              "comment_commit_blocked",
              "comment_not_cancellable",
              "connection_request_blocked",
              "connection_not_cancellable",
              "like_blocked",
              "like_not_cancellable",
              "draft_content_too_long",
              "schedule_in_past",
              "unsupported_media_type",
              "media_conflict",
              "analytics_invalid_range",
              "url_content_unavailable",
              "rate_limit_exceeded",
              "agent_budget_exceeded",
              "internal_error",
              "not_implemented",
              "upstream_unavailable"
            ],
            "type": "string"
          },
          "details": {
            "additionalProperties": {},
            "type": "object"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object"
      },
      "ErrorEnvelope": {
        "example": {
          "error": {
            "code": "validation_failed",
            "details": {
              "fields": [
                {
                  "code": "required_one_of",
                  "message": "Provide content, or media_ids for a media-only draft. A draft cannot have neither.",
                  "path": "body"
                }
              ]
            },
            "message": "Request validation failed."
          },
          "meta": {
            "api_version": "v1",
            "request_id": "req_a8f3e2c1"
          }
        },
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorBody"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "error",
          "meta"
        ],
        "type": "object"
      },
      "HealthzResponse": {
        "properties": {
          "product": {
            "enum": [
              "taplio",
              "tweethunter"
            ],
            "type": "string"
          },
          "status": {
            "enum": [
              "ok"
            ],
            "type": "string"
          }
        },
        "required": [
          "status",
          "product"
        ],
        "type": "object"
      },
      "Inspiration": {
        "example": {
          "author": {
            "followers_count": 18742,
            "headline": "Founder @ Acme · Helping B2B teams book more meetings",
            "image": "https://media.licdn.com/dms/image/v2/janedoe.jpg",
            "name": "Jane Doe",
            "profile_url": "https://www.linkedin.com/in/janedoe"
          },
          "content": "Most cold outreach fails for one reason: it's about you, not them.\n\nFlip it. Lead with their world. The reply rate takes care of itself.",
          "language": "en",
          "metrics": {
            "comments": 87,
            "likes": 1240,
            "shares": 31
          },
          "published_at": "2026-05-04T09:36:10.587Z",
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:7457000200038072320/"
        },
        "properties": {
          "author": {
            "$ref": "#/components/schemas/InspirationAuthor"
          },
          "content": {
            "type": "string"
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "metrics": {
            "$ref": "#/components/schemas/InspirationMetrics"
          },
          "published_at": {
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "content",
          "url",
          "author",
          "language",
          "metrics",
          "published_at"
        ],
        "type": "object"
      },
      "InspirationAuthor": {
        "properties": {
          "followers_count": {
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "headline": {
            "type": [
              "string",
              "null"
            ]
          },
          "image": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "profile_url": {
            "format": "uri",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "name",
          "headline",
          "profile_url",
          "image",
          "followers_count"
        ],
        "type": "object"
      },
      "InspirationMetrics": {
        "properties": {
          "comments": {
            "minimum": 0,
            "type": "integer"
          },
          "likes": {
            "minimum": 0,
            "type": "integer"
          },
          "shares": {
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "likes",
          "comments",
          "shares"
        ],
        "type": "object"
      },
      "Like": {
        "example": {
          "created_at": "2026-06-01T10:00:00.000Z",
          "post_urn": "urn:li:activity:7361375991576829952",
          "scheduled_for": "2026-06-01T14:37:00.000Z",
          "status": "pending",
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:7361375991576829952"
        },
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "failure_code": {
            "type": "string"
          },
          "failure_reason": {
            "type": "string"
          },
          "post_urn": {
            "type": "string"
          },
          "scheduled_for": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "liked",
              "failed",
              "cancelled"
            ],
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "post_urn",
          "url",
          "status",
          "created_at"
        ],
        "type": "object"
      },
      "ListCommentDraftsResponse": {
        "example": {
          "data": [
            {
              "content": "This mirrors what we saw last quarter: the teams that shipped weekly beat the ones that shipped perfectly. Curious how you'd apply it to a smaller team?",
              "created_at": "2026-06-01T13:21:14.456Z",
              "id": "0197c2f4-8b1a-7c3d-9e5f-2a4b6c8d0e1f",
              "post_urn": "urn:li:activity:7361375991576829952",
              "status": "draft",
              "updated_at": "2026-06-01T13:21:14.456Z"
            }
          ],
          "meta": {
            "api_version": "v1",
            "has_more": true,
            "next_cursor": "eyJsYXN0SWQiOiJhYmMxMjMifQ==",
            "request_id": "req_a8f3e2c1"
          }
        },
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/CommentDraft"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "ListCommentsResponse": {
        "example": {
          "data": [
            {
              "comment_urn": "urn:li:comment:(activity:7361375991576829952,7361412088340234240)",
              "content": "Same pattern on our side: the teams that shipped weekly beat the ones that shipped perfectly. What's the smallest slice you'd start with?",
              "post_urn": "urn:li:activity:7361375991576829952",
              "posted_at": "2026-06-02T09:14:03.120Z",
              "stats": {
                "impressions_count": 486,
                "like_count": 12,
                "reaction_type_counts": [
                  {
                    "count": 9,
                    "reaction_type": "LIKE"
                  },
                  {
                    "count": 3,
                    "reaction_type": "PRAISE"
                  }
                ],
                "reply_count": 3
              }
            }
          ],
          "meta": {
            "api_version": "v1",
            "has_more": true,
            "next_cursor": "eyJsYXN0SWQiOiJhYmMxMjMifQ==",
            "request_id": "req_a8f3e2c1"
          }
        },
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Comment"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "ListConnectionsResponse": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Connection"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "ListCuratedFeedsResponse": {
        "example": {
          "data": [
            {
              "id": "LinkedIn Growth",
              "name": "LinkedIn Growth",
              "profile_count": 42
            }
          ],
          "meta": {
            "api_version": "v1",
            "has_more": false,
            "request_id": "req_a8f3e2c1"
          }
        },
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/CuratedFeedSummary"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "ListEngagementCommentsResponse": {
        "example": {
          "data": [
            {
              "comment_urn": "urn:li:comment:(activity:7361375991576829952,7361412088340234240)",
              "commenter": {
                "headline": "CEO, Lorefully",
                "linkedin_url": "https://www.linkedin.com/in/amritchandan",
                "name": "Amrit Chandan",
                "urn": "ACoAAAWRwXsBhdNlku1hj-Dl7uc3fVT5QT9f7ns"
              },
              "pinned": false,
              "post_urn": "urn:li:activity:7361375991576829952",
              "posted_at": "2026-06-02T09:14:03.120Z",
              "reply_count": 2,
              "text": "We shipped weekly for a quarter and the compounding was real. How did you handle the review load?"
            }
          ],
          "meta": {
            "api_version": "v1",
            "has_more": true,
            "next_cursor": "eyJsYXN0SWQiOiJhYmMxMjMifQ==",
            "request_id": "req_a8f3e2c1"
          }
        },
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/EngagementComment"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "ListEngagementFeedResponse": {
        "example": {
          "data": [
            {
              "author": {
                "followers_count": 18742,
                "headline": "CEO, Lorefully",
                "name": "Amrit Chandan",
                "profile_url": "https://www.linkedin.com/in/amritchandan"
              },
              "content_type": "text",
              "metrics": {
                "comments": 37,
                "likes": 412,
                "shares": 9
              },
              "post_urn": "urn:li:activity:7361375991576829952",
              "posted_at": "2026-06-02T09:14:03.120Z",
              "text": "We shipped weekly for a quarter. Here is what compounded, and what broke.",
              "url": "https://www.linkedin.com/feed/update/urn:li:activity:7361375991576829952/"
            }
          ],
          "meta": {
            "api_version": "v1",
            "has_more": true,
            "next_cursor": "eyJsYXN0SWQiOiJhYmMxMjMifQ==",
            "request_id": "req_a8f3e2c1"
          }
        },
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/EngagementPost"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "ListMediaResponse": {
        "properties": {
          "data": {
            "items": {
              "properties": {
                "created_at": {
                  "type": "string"
                },
                "filename": {
                  "type": "string"
                },
                "media_id": {
                  "type": "string"
                },
                "thumbnail": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "media_id",
                "type",
                "url",
                "filename",
                "created_at"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "ListMeta": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Meta"
          },
          {
            "properties": {
              "has_more": {
                "type": "boolean"
              },
              "next_cursor": {
                "type": "string"
              }
            },
            "required": [
              "has_more"
            ],
            "type": "object"
          }
        ],
        "example": {
          "api_version": "v1",
          "has_more": true,
          "next_cursor": "eyJsYXN0SWQiOiJhYmMxMjMifQ==",
          "request_id": "req_a8f3e2c1"
        }
      },
      "MediaRef": {
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "enum": [
              "image",
              "video",
              "document",
              "carousel"
            ],
            "type": "string"
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "id",
          "type"
        ],
        "type": "object"
      },
      "Meta": {
        "example": {
          "api_version": "v1",
          "request_id": "req_a8f3e2c1"
        },
        "properties": {
          "api_version": {
            "enum": [
              "v1"
            ],
            "type": "string"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "request_id",
          "api_version"
        ],
        "type": "object"
      },
      "Post": {
        "example": {
          "content": "test",
          "created_at": "2026-05-04T09:36:10.587Z",
          "id": "a84cb159-1447-45b4-8b0a-9d1c3d418931",
          "media": [],
          "media_type": "text",
          "scheduled_for": "2026-05-04T09:36:29.846Z",
          "sent_at": "2026-05-04T09:36:32.481Z",
          "status": "sent",
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:7457000200038072320/"
        },
        "properties": {
          "content": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "media": {
            "description": "Media attached to this post, for posts published through Taplio and directly on LinkedIn. `url` is a durable copy hosted by Taplio. Can be empty while `media_type` reports an image, video or document, when Taplio does not hold a copy of that media yet or can no longer recover it. Text and article posts return an empty array.",
            "items": {
              "$ref": "#/components/schemas/MediaRef"
            },
            "type": "array"
          },
          "media_type": {
            "$ref": "#/components/schemas/PostMediaType"
          },
          "metrics": {
            "$ref": "#/components/schemas/PostMetrics"
          },
          "scheduled_for": {
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "sent_at": {
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "$ref": "#/components/schemas/PostStatus"
          },
          "url": {
            "format": "uri",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "url",
          "status",
          "content",
          "created_at"
        ],
        "type": "object"
      },
      "PostMediaType": {
        "description": "Format of the post. Absent when the format cannot be determined.",
        "enum": [
          "text",
          "image",
          "video",
          "document",
          "article"
        ],
        "type": "string"
      },
      "PostMetrics": {
        "properties": {
          "comments": {
            "minimum": 0,
            "type": "integer"
          },
          "impressions": {
            "minimum": 0,
            "type": "integer"
          },
          "likes": {
            "minimum": 0,
            "type": "integer"
          },
          "shares": {
            "minimum": 0,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "PostStatus": {
        "enum": [
          "scheduled",
          "sending",
          "sent"
        ],
        "type": "string"
      },
      "QueuedCommentDraft": {
        "example": {
          "content": "This mirrors what we saw last quarter: the teams that shipped weekly beat the ones that shipped perfectly. Curious how you'd apply it to a smaller team?",
          "created_at": "2026-06-01T13:21:14.456Z",
          "id": "0197c2f4-8b1a-7c3d-9e5f-2a4b6c8d0e1f",
          "post_urn": "urn:li:activity:7361375991576829952",
          "scheduled_for": "2026-06-01T14:05:00.000Z",
          "status": "pending",
          "updated_at": "2026-06-01T13:24:52.881Z"
        },
        "properties": {
          "comment_id": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "post_urn": {
            "type": "string"
          },
          "scheduled_for": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "pending"
            ],
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "status",
          "post_urn",
          "content",
          "created_at",
          "updated_at",
          "scheduled_for"
        ],
        "type": "object"
      },
      "SchedulePostDraftBody": {
        "properties": {
          "scheduled_for": {
            "type": "string"
          }
        },
        "required": [
          "scheduled_for"
        ],
        "type": "object"
      },
      "SearchDraftsResponse": {
        "example": {
          "data": [
            {
              "content": "Let's kill the fairy tales.\n\nNobody needs another recruiter spinning \"life-changing roles\" at paper unicorns.\n\nYou've heard the pitch. Hype, smoke, and a fresh round of layoffs six months later. Waste of time.\n\nI don't believe in pushing shiny logos or betting your career on vaporware. I won't line your inbox with recycled \"massive opportunity\" spam and pray for replies.\n\nHere's the deal.\n\nIf I'm bringing something to your table, it's because I've turned it upside down first. I vet the founders. I dig into the numbers. I talk to their teams. I want to know if I'd stake my own reputation on it.\n\nIf it doesn't pass, it never reaches you.\n\nThe roles I'm recruiting for now? Real teams, real revenue, real upside. Actual leadership with the track record to back it up. Not just another hype cycle.\n\nYou're not looking for a Hail Mary. You want a seat at a table where execution matters and you're actually trusted to do your job.\n\nThese are those roles.\n\nIf you're tired of the noise, pay attention.\n\nNo fairy dust. Just work that matters.",
              "created_at": "2026-05-27T13:21:14.456Z",
              "id": "11c0da7d-6d9f-4dc2-be03-5051a96ee72e",
              "status": "draft"
            }
          ],
          "meta": {
            "api_version": "v1",
            "has_more": true,
            "next_cursor": "eyJsYXN0SWQiOiJhYmMxMjMifQ==",
            "request_id": "req_a8f3e2c1"
          }
        },
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Draft"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "SearchInspirationsResponse": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Inspiration"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "SearchPostsResponse": {
        "example": {
          "data": [
            {
              "content": "test",
              "created_at": "2026-05-04T09:36:10.587Z",
              "id": "a84cb159-1447-45b4-8b0a-9d1c3d418931",
              "media": [],
              "media_type": "text",
              "scheduled_for": "2026-05-04T09:36:29.846Z",
              "sent_at": "2026-05-04T09:36:32.481Z",
              "status": "sent",
              "url": "https://www.linkedin.com/feed/update/urn:li:activity:7457000200038072320/"
            },
            {
              "content": "Three lessons from our first year.",
              "created_at": "2026-06-12T08:15:00.000Z",
              "id": "urn:li:activity:7506286955412893698",
              "media": [
                {
                  "id": "3f2b8c1e-5d4a-4f6b-9a7e-2c1d0b9e8f7a.jpg",
                  "type": "image",
                  "url": "https://ez4cast.s3.eu-west-1.amazonaws.com/linkedinPostMedias/7506286955412893698/3f2b8c1e-5d4a-4f6b-9a7e-2c1d0b9e8f7a.jpg"
                }
              ],
              "media_type": "image",
              "sent_at": "2026-06-12T08:15:00.000Z",
              "status": "sent",
              "url": "https://www.linkedin.com/feed/update/urn:li:activity:7506286955412893698/"
            }
          ],
          "meta": {
            "api_version": "v1",
            "has_more": true,
            "next_cursor": "eyJsYXN0SWQiOiJhYmMxMjMifQ==",
            "request_id": "req_a8f3e2c1"
          }
        },
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Post"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/ListMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "type": "object"
      },
      "UpdateCommentDraftBody": {
        "example": {
          "content": "Great breakdown. The weekly-shipping point is the one I'd steal for my own team."
        },
        "properties": {
          "content": {
            "maxLength": 1250,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "content"
        ],
        "type": "object"
      },
      "UpdatePostDraftBody": {
        "example": {
          "content": "Postman smoke — round-trip step 3 (updated)"
        },
        "properties": {
          "content": {
            "maxLength": 3000,
            "type": "string"
          },
          "media_ids": {
            "items": {
              "minLength": 1,
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "UploadMediaFromUrlBody": {
        "example": {
          "url": "https://images.example.com/photo.jpg"
        },
        "properties": {
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "UploadMediaToPostDraftBody": {
        "properties": {
          "file": {
            "description": "Image or video file to attach to the draft.",
            "format": "binary",
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "description": "Per-user API key from Taplio settings. Pass as `Authorization: Bearer <key>`. No scopes in MVP.",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "REST API for Taplio platform actions.",
    "title": "Taplio REST API",
    "version": "v1",
    "x-logo": {
      "altText": "Taplio",
      "href": "https://taplio.com",
      "url": "./logo_taplio_color.png"
    }
  },
  "openapi": "3.1.0",
  "paths": {
    "/v1/analytics/overview": {
      "get": {
        "description": "Time-series of account + post metrics bucketed by day over the requested window. `from`/`to` are `YYYY-MM-DD` (UTC); omit them to use the default window. `metrics` is an optional comma-separated subset (e.g. `followers,impressions`); omit it to return all metrics.",
        "parameters": [
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "granularity",
            "required": false,
            "schema": {
              "default": "day",
              "enum": [
                "day"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "metrics",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalyticsOverviewResponse"
                }
              }
            },
            "description": "Daily metric time-series for the window."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Account analytics overview",
        "tags": [
          "Analytics"
        ]
      }
    },
    "/v1/analytics/posts": {
      "get": {
        "description": "Paginated list of the account’s posts with their engagement metrics over the requested window. `from`/`to` are `YYYY-MM-DD` (UTC).",
        "parameters": [
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalyticsPostsResponse"
                }
              }
            },
            "description": "Paginated list of posts with metrics."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Per-post analytics",
        "tags": [
          "Analytics"
        ]
      }
    },
    "/v1/comments": {
      "get": {
        "description": "The authenticated user's own comment history, newest first, whichever surface posted each comment (this API, the Taplio app, or directly on LinkedIn). Engagement stats are not live: they refresh periodically, so a fresh comment carries none yet. `post_urn` narrows to one post, including replies under other people's comments there, and in that mode `limit` counts comments exactly. Without `post_urn`, `limit` counts the posts you have commented on, so a page can hold more comments than `limit` when you left several on one post.",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "post_urn",
            "required": false,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListCommentsResponse"
                }
              }
            },
            "description": "Paginated list of the user’s comments."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List the user's posted comments",
        "tags": [
          "Comments"
        ]
      }
    },
    "/v1/comments/drafts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "draft",
                "pending",
                "posted",
                "failed",
                "cancelled"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListCommentDraftsResponse"
                }
              }
            },
            "description": "Paginated list of comment drafts."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List comment drafts",
        "tags": [
          "Comments"
        ]
      },
      "post": {
        "description": "Stores a comment to post later on `post_urn`, or as a reply to `comment_id` when one is given. `comment_id` takes the `comment_urn` served by GET /v1/engagement/comments, in any of LinkedIn's spellings; a bare comment id is rejected, since the urn also carries the post id the comment is filed under and that id is not `post_urn`. `content` is capped at 1250 characters, LinkedIn's comment limit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCommentDraftBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EditableCommentDraft"
                }
              }
            },
            "description": "Comment draft created."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Create a comment draft",
        "tags": [
          "Comments"
        ]
      }
    },
    "/v1/comments/drafts/{id}": {
      "delete": {
        "description": "Discards a draft that has not been committed. Once it leaves `draft` the request is refused with `409 comment_already_committed`; a committed comment cannot be called back this way.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Comment draft discarded."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Discard a comment draft",
        "tags": [
          "Comments"
        ]
      },
      "get": {
        "description": "The draft doubles as the comment's status record for its whole life, so this is how a commit is followed: `draft` is still editable with nothing queued, `pending` is committed and waiting for its send slot with nothing on LinkedIn yet, `posted` is live with `comment_urn` set, and `failed` or `cancelled` are final, with `failure_reason` and `failure_code` saying why the comment never went out.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentDraft"
                }
              }
            },
            "description": "Single comment draft."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Get a comment draft",
        "tags": [
          "Comments"
        ]
      },
      "patch": {
        "description": "Rewrites the text of a draft that has not been committed. Once it leaves `draft` the edit is refused with `409 comment_already_committed`.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCommentDraftBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EditableCommentDraft"
                }
              }
            },
            "description": "Updated comment draft."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Update a comment draft",
        "tags": [
          "Comments"
        ]
      }
    },
    "/v1/comments/drafts/{id}/cancel": {
      "post": {
        "description": "Cancels a committed comment that has not left the send queue yet, so it never reaches LinkedIn. The draft stays as the record, with `status: cancelled`, a `failure_reason` and a `failure_code`. Refused with `409 comment_not_cancellable` when the draft was never committed, was already posted, is in a final state, or is being sent; `reason` in the details says which. Never charges a credit.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentDraft"
                }
              }
            },
            "description": "The draft, now cancelled."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Cancel a queued comment",
        "tags": [
          "Comments"
        ]
      }
    },
    "/v1/comments/drafts/{id}/commit": {
      "post": {
        "description": "Queues the draft for posting; nothing reaches LinkedIn during this request. `scheduled_for` is when the comment is due to go out, following the account's sending schedule, so it can be minutes away or much later. Poll `GET /v1/comments/drafts/{id}` to follow the outcome. Costs 1 reply credit, charged when the comment posts: with none left the commit fails with `403 insufficient_credits` and the draft is left as it was. A commit the account cannot currently post is refused with `409 comment_commit_blocked`, which carries the reason.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueuedCommentDraft"
                }
              }
            },
            "description": "Draft queued; returns the pending draft."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Commit a comment draft",
        "tags": [
          "Comments"
        ]
      }
    },
    "/v1/comments/{comment_urn}": {
      "get": {
        "description": "The post is derived from the comment urn, so `post_urn` is optional; pass it when you have it (from a draft or a list item) for the most reliable lookup. A urn that cannot be read and comes without `post_urn` answers `404 comment_not_found`. Some older comments are not addressable here and appear only in `GET /v1/comments`.",
        "parameters": [
          {
            "in": "path",
            "name": "comment_urn",
            "required": true,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "post_urn",
            "required": false,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Comment"
                }
              }
            },
            "description": "Single comment with its latest stats."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Get one posted comment",
        "tags": [
          "Comments"
        ]
      }
    },
    "/v1/connections": {
      "get": {
        "description": "Every connection request this account has queued, newest first, whatever became of each one. Use it to see who has already been asked before requesting anyone else — a recipient already listed as `pending` or `sent` does not need a second request. Paginated: pass the `next_cursor` from `meta` to walk further back.",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListConnectionsResponse"
                }
              }
            },
            "description": "Paginated list of connection requests, newest first."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List connection requests",
        "tags": [
          "Connections"
        ]
      },
      "post": {
        "description": "Queues a connection request for `username`; nothing reaches LinkedIn during this request. `scheduled_for` is when the invitation is due to go out, following the account's sending schedule, so it can be minutes away or much later. Calling it again for a recipient already queued answers `200` with the request in flight instead of stacking a second invitation, so it is safe to retry. The invitation carries no note: LinkedIn caps noted invitations far lower than plain ones, and by account tier, so a plain one is far likelier to land. A request the account cannot currently send is refused with `409 connection_request_blocked`, which carries the reason.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "username": {
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "username"
                ],
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Connection"
                }
              }
            },
            "description": "A request for this recipient was already in flight."
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Connection"
                }
              }
            },
            "description": "Connection request queued."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Request a connection",
        "tags": [
          "Connections"
        ]
      }
    },
    "/v1/connections/{username}": {
      "get": {
        "description": "The latest connection request this account queued for `username`, whatever became of it. `pending` while it waits in the send queue, `sent` once it left, `failed` or `cancelled` with the reason otherwise. LinkedIn treats an already-connected recipient and an invitation already pending as success, so both read as `sent`. A recipient this account never requested answers `404 connection_not_found`.",
        "parameters": [
          {
            "in": "path",
            "name": "username",
            "required": true,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Connection"
                }
              }
            },
            "description": "The latest connection request for that recipient."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Get a connection request",
        "tags": [
          "Connections"
        ]
      }
    },
    "/v1/connections/{username}/cancel": {
      "post": {
        "description": "Cancels the latest connection request this account queued for `username`, so it never reaches LinkedIn. The request stays as the record, with `status: cancelled`, a `failure_reason` and a `failure_code`. A recipient this account never requested answers `404 connection_not_found`. Refused with `409 connection_not_cancellable` when the request was already sent, is in a final state, or is being sent; `reason` in the details says which.",
        "parameters": [
          {
            "in": "path",
            "name": "username",
            "required": true,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Connection"
                }
              }
            },
            "description": "The connection request, now cancelled."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Cancel a queued connection request",
        "tags": [
          "Connections"
        ]
      }
    },
    "/v1/engagement/comments": {
      "get": {
        "description": "Other people's comments on the given posts, already narrowed to the ones still worth a reply: the account's own comments, comments it has already replied to, and comments recently hidden in the app are left out. Provide exactly one of `post_ids` or `url`. `post_ids` takes 1 to 10 comma-separated post ids, urns or post urls, typically ids from `GET /v1/engagement/feed`, and answers in one page: `limit` truncates the result, there is no cursor to follow, and sending `cursor` with `post_ids` answers `400` with `must_be_unset` on `cursor`. `url` takes a single LinkedIn post url, share urls included, requires an Enterprise plan and paginates with `cursor`; it ignores `limit` and hands back LinkedIn's own page as it comes. A url that cannot be resolved to a post answers `422 url_content_unavailable`.",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "post_ids",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "url",
            "required": false,
            "schema": {
              "format": "uri",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListEngagementCommentsResponse"
                }
              }
            },
            "description": "List of comments worth replying to."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List comments worth replying to",
        "tags": [
          "Engagement"
        ]
      }
    },
    "/v1/engagement/feed": {
      "get": {
        "description": "Posts worth commenting on, from one of three sources. `source` defaults to `my_posts`, the account's own recent posts, so you can work their comment sections. `curated_feed` serves a curated influencer feed picked with `feed`, which defaults to \"LinkedIn Growth\"; a name that matches no feed answers `400` with the accepted names in `available_feeds`, results leave out posts the account recently replied to or hid in the app, and the feed is refreshed regularly. `feed` is only accepted with `source=curated_feed`; sending it with another source answers `400` with `dependent_required` on `feed`. `for_you` serves the account's latest For You selection, which is not always fresh and is empty on a new account.",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "source",
            "required": false,
            "schema": {
              "default": "my_posts",
              "enum": [
                "my_posts",
                "curated_feed",
                "for_you"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "feed",
            "required": false,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListEngagementFeedResponse"
                }
              }
            },
            "description": "Paginated list of posts worth engaging with."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List posts worth engaging with",
        "tags": [
          "Engagement"
        ]
      }
    },
    "/v1/engagement/feeds": {
      "get": {
        "description": "The curated feed names `feed` accepts on `GET /v1/engagement/feed`. Unpaginated.",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListCuratedFeedsResponse"
                }
              }
            },
            "description": "List of curated feeds."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List curated feeds",
        "tags": [
          "Engagement"
        ]
      }
    },
    "/v1/healthz": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthzResponse"
                }
              }
            },
            "description": "API is alive."
          }
        },
        "security": [],
        "summary": "Liveness probe",
        "tags": [
          "Health"
        ]
      }
    },
    "/v1/inspirations": {
      "get": {
        "description": "Search the viral-post inspiration index. All filters are optional. With none supplied the endpoint browses recent high-performing posts using default thresholds. The days-old window (`min_days_old`/`max_days_old`) and the absolute `from`/`to` window are mutually exclusive; if both are given, the days-old window wins and `from`/`to` are ignored.",
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "required": false,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "min_likes",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 1000,
              "minimum": 0,
              "type": [
                "integer",
                "null"
              ]
            }
          },
          {
            "in": "query",
            "name": "min_comments",
            "required": false,
            "schema": {
              "default": 0,
              "maximum": 1000,
              "minimum": 0,
              "type": [
                "integer",
                "null"
              ]
            }
          },
          {
            "in": "query",
            "name": "max_followers",
            "required": false,
            "schema": {
              "default": 100000,
              "maximum": 100000000,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "max_days_old",
            "required": false,
            "schema": {
              "maximum": 365,
              "minimum": 0,
              "type": [
                "integer",
                "null"
              ]
            }
          },
          {
            "in": "query",
            "name": "min_days_old",
            "required": false,
            "schema": {
              "maximum": 365,
              "minimum": 0,
              "type": [
                "integer",
                "null"
              ]
            }
          },
          {
            "in": "query",
            "name": "min_char_count",
            "required": false,
            "schema": {
              "default": 500,
              "maximum": 10000,
              "minimum": 0,
              "type": [
                "integer",
                "null"
              ]
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "in": "query",
            "name": "lang",
            "required": false,
            "schema": {
              "pattern": "^[a-z]{2}$",
              "type": "string"
            }
          },
          {
            "description": "Only posts written by this member: their linkedin.com/in/ profile url or the handle after /in/. With it, min_likes and min_char_count default to 0 and max_followers to no cap, so a large creator is not filtered out of their own posts.",
            "in": "query",
            "name": "author",
            "required": false,
            "schema": {
              "description": "Only posts written by this member: their linkedin.com/in/ profile url or the handle after /in/. With it, min_likes and min_char_count default to 0 and max_followers to no cap, so a large creator is not filtered out of their own posts.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 30,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchInspirationsResponse"
                }
              }
            },
            "description": "Paginated list of matching inspirations."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Search inspirations",
        "tags": [
          "Inspirations"
        ]
      }
    },
    "/v1/likes": {
      "post": {
        "description": "Queues a like on `post_urn`. That can be a **post** — the activity urn `GET /v1/engagement/feed` serves, a `urn:li:share:` or `urn:li:ugcPost:` urn, or the post's LinkedIn url including a `lnkd.in` short link — or a **comment**, by its `urn:li:comment:(activity:<post id>,<comment id>)` urn as `GET /v1/comments` returns it. A post has two identities, `urn:li:activity:` and `urn:li:ugcPost:`, with different ids; whichever one you name is the one that gets liked and the one every response echoes, so `GET /v1/likes/{post_urn}` matches on it and the same post named the other way is a separate like. A url or a `urn:li:share:` urn is resolved to the activity urn it names. Liking a post and liking one of its comments are two separate likes. A `lnkd.in` link we cannot open, or a share or ugcPost urn LinkedIn will not resolve, answers `422 url_content_unavailable`; anything we cannot read as a post or a comment in the first place answers `400 validation_failed`. Resolving a share or ugcPost urn reads the post from LinkedIn; the like itself is queued, not sent, during this request. `scheduled_for` is when the like is due to go out, following the account's sending schedule and office hours, so it can be minutes away or the next morning. Calling it again for a post already queued answers `200` with the like in flight instead of queueing a second one, so it is safe to retry. A like the account cannot send within its scheduling horizon is refused with `409 like_blocked`. Likes made from the Taplio app's own like button are not tracked here.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "post_urn": {
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "post_urn"
                ],
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Like"
                }
              }
            },
            "description": "A like for this post was already in flight."
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Like"
                }
              }
            },
            "description": "Like queued."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Like a post or comment",
        "tags": [
          "Likes"
        ]
      }
    },
    "/v1/likes/{post_urn}": {
      "get": {
        "description": "The latest like this account queued for `post_urn` — a post or a comment, named by the canonical urn `POST /v1/likes` returned, not by a url — a url's slashes split the path and answer `404 route_not_found` — whatever became of it: `pending` while it waits in the send queue, `liked` once it went out, `failed` or `cancelled` with the reason otherwise. A post this account never asked to like answers `404 like_not_found`, and so does a like made from the Taplio app's own like button.",
        "parameters": [
          {
            "in": "path",
            "name": "post_urn",
            "required": true,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Like"
                }
              }
            },
            "description": "The latest like for that post."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Get a like",
        "tags": [
          "Likes"
        ]
      }
    },
    "/v1/likes/{post_urn}/cancel": {
      "post": {
        "description": "Cancels the latest like this account queued for `post_urn`, so it never reaches LinkedIn. The like stays as the record, with `status: cancelled`, a `failure_reason` and a `failure_code`. A post this account never asked to like answers `404 like_not_found`. Refused with `409 like_not_cancellable` when the like was already sent, is in a final state, or is being sent; `reason` in the details says which.",
        "parameters": [
          {
            "in": "path",
            "name": "post_urn",
            "required": true,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Like"
                }
              }
            },
            "description": "The like, now cancelled."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Cancel a queued like",
        "tags": [
          "Likes"
        ]
      }
    },
    "/v1/posts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/PostStatus"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchPostsResponse"
                }
              }
            },
            "description": "Paginated list of posts."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List posts",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/drafts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchDraftsResponse"
                }
              }
            },
            "description": "Paginated list of post drafts."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List post drafts",
        "tags": [
          "Posts"
        ]
      },
      "post": {
        "description": "Send `content`, or `media_ids` for a media-only draft, or both. A body carrying neither is refused with `400 validation_failed` carrying `required_one_of` on `body`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePostDraftBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Draft"
                }
              }
            },
            "description": "Post draft created."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Create a post draft",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/drafts/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Draft discarded."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Discard a post draft",
        "tags": [
          "Posts"
        ]
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Draft"
                }
              }
            },
            "description": "Single post draft."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Get a post draft",
        "tags": [
          "Posts"
        ]
      },
      "patch": {
        "description": "Both fields are optional and replace what they name: omit `content` to attach media without touching the text. The draft must still end up with text or media. A patch carrying neither field is refused with `required_one_of` on `body`; one that would empty the draft, such as `content: \"\"` on a draft with no media, with `invalid_value` on `body.content`. Both answer `400 validation_failed`.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePostDraftBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Draft"
                }
              }
            },
            "description": "Updated post draft."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Update a post draft",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/drafts/{id}/commit": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            },
            "description": "Post published."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Publish a post draft immediately",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/drafts/{id}/schedule": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulePostDraftBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            },
            "description": "Post draft moved to scheduled state."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Schedule a post draft for later",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/drafts/{id}/unschedule": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Draft"
                }
              }
            },
            "description": "Scheduled post moved back to draft state."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Unschedule a scheduled post, returning it to drafts",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/drafts/{id}/upload": {
      "post": {
        "description": "Accepts multipart/form-data with a single `file` part. The uploaded media is attached to the draft and the updated draft is returned.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/UploadMediaToPostDraftBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Draft"
                }
              }
            },
            "description": "Updated draft with the uploaded media attached."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Upload a file and attach it to a post draft",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/drafts/{id}/upload-url": {
      "post": {
        "description": "Fetches a publicly reachable https `url` and attaches the file to the draft, returning the updated draft. An unfetchable url, an unsupported type or an oversized file is rejected.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UploadMediaFromUrlBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Draft"
                }
              }
            },
            "description": "Updated draft with the attached media."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Attach media to a post draft from a public url",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/media": {
      "get": {
        "description": "Lists media the user has uploaded, most recent first, optionally filtered by a filename substring. Attach any returned `media_id` with `media_ids` on `POST /v1/posts/drafts` or `PATCH /v1/posts/drafts/{id}`.",
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListMediaResponse"
                }
              }
            },
            "description": "List of the user's uploaded media."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "List the user's uploaded media",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/media/upload-url": {
      "post": {
        "description": "Returns a one-time presigned upload url, a `media_id`, and the headers to send with it. PUT the raw bytes to the url, then attach the `media_id` with `media_ids` on `POST /v1/posts/drafts` or `PATCH /v1/posts/drafts/{id}`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMediaUploadUrlBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateMediaUploadUrlResponse"
                }
              }
            },
            "description": "Presigned upload url and media id."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Create a presigned media upload url",
        "tags": [
          "Posts"
        ]
      }
    },
    "/v1/posts/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "pattern": "^(?:[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}|urn:li:[a-zA-Z]+:\\d+|\\d+)$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            },
            "description": "Post detail."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Validation failed."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid API key."
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription payment failed."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Subscription does not allow this request."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource not found."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Resource state precludes this request."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Request semantically rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Rate limit exceeded."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Internal server error."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "Upstream unavailable."
          }
        },
        "summary": "Get a single post",
        "tags": [
          "Posts"
        ]
      }
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ],
  "servers": [
    {
      "description": "Taplio production",
      "url": "https://api.taplio.com"
    }
  ],
  "webhooks": {}
}
