> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get scheduling job

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Reports on a scheduling job started by [Start scheduling posts](/api-reference/start-scheduling-posts).

Poll it until `status` is `completed` or `failed`. A completed job carries `result`, the count of what happened to each post it took on. A failed job leaves `result` empty and sets `error` to a fixed message that says nothing about the cause; the posts it had already dealt with keep the status that run gave them and the rest are untouched, so you can start scheduling the same range again.

The social calendar endpoints share two rate limits: 20 requests per minute across creating, editing, deleting and approving posts, and 40 requests per minute across the rest. This endpoint counts against the 40.

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/social-calendar/posts/schedule/{job_id}
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/social-calendar/posts/schedule/{job_id}:
    get:
      summary: Get scheduling job
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Reports on a scheduling job started by [Start scheduling
        posts](/api-reference/start-scheduling-posts).


        Poll it until `status` is `completed` or `failed`. A completed job
        carries `result`, the count of what happened to each post it took on. A
        failed job leaves `result` empty and sets `error` to a fixed message
        that says nothing about the cause; the posts it had already dealt with
        keep the status that run gave them and the rest are untouched, so you
        can start scheduling the same range again.


        The social calendar endpoints share two rate limits: 20 requests per
        minute across creating, editing, deleting and approving posts, and 40
        requests per minute across the rest. This endpoint counts against the
        40.


        <Note>This endpoint accepts a personal API key. Workspace API keys are
        not authorized for it and are rejected with a 403.</Note>
      operationId: >-
        get_schedule_job_api_apps__app_id__social_calendar_posts_schedule__job_id__get
      parameters:
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              ID of the scheduling job, as returned by [Start scheduling
              posts](/api-reference/start-scheduling-posts).
            title: Job Id
          description: >-
            ID of the scheduling job, as returned by [Start scheduling
            posts](/api-reference/start-scheduling-posts).
          example: 68a1c4f0d21b4e0a3c77e912
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose social calendar you want.
            title: App Id
          description: ID of the app whose social calendar you want.
          example: 6820f3a4e7b91d003c45a1f2
      responses:
        '200':
          description: The job's progress, and its result once it completes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScheduleJobResponse'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have editor access to this app, or you used a workspace
            API key.
        '404':
          description: >-
            App not found, the job doesn't belong to this app, or the social
            calendar is not enabled for your account.
        '429':
          description: Rate limit exceeded (40 requests per minute).
components:
  schemas:
    ScheduleJobResponse:
      properties:
        job_id:
          type: string
          title: Job Id
          description: >-
            ID of the scheduling job. Pass it as `job_id` to [Get scheduling
            job](/api-reference/get-scheduling-job).
          example: 68a1c4f0d21b4e0a3c77e912
        status:
          type: string
          title: Status
          description: >-
            State of the job: `pending` before it starts, `running` while it
            hands posts over, then `completed` or `failed`. A range holding
            nothing to schedule comes back `completed` straight away.
          example: pending
        phase:
          type: string
          title: Phase
          description: >-
            How far the job has got, for display only: `pending`, `prepare`,
            `sandbox_sync`, `finalize`, then `completed`. Read `status` to
            decide when the job is done, because these phases change as the
            pipeline does.
          example: finalize
        result:
          anyOf:
            - $ref: '#/components/schemas/MaterializationSummary'
            - type: 'null'
          description: >-
            What happened to the posts the job took on. Set once `status` is
            `completed`, and `null` before that or on a failed job.
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
          description: >-
            Set when `status` is `failed`, and `null` otherwise. It is always
            the same fixed message and carries no detail about the failure, so
            treat it as a flag rather than something to parse or show as a
            reason.
          example: Scheduling failed. Please try again.
      type: object
      required:
        - job_id
        - status
        - phase
      title: ScheduleJobResponse
    MaterializationSummary:
      properties:
        selected:
          type: integer
          title: Selected
          description: >-
            How many posts the job took on: the ones in the range you asked for
            that were waiting to be handed over, which is every approved post
            plus the ones an earlier run left in `needs_reconnect` or
            `not_materialized_plan_limit`. A post still in `proposal` is not
            among them.
          default: 0
          example: 6
        materialized:
          type: integer
          title: Materialized
          description: >-
            How many posts are now handed to the publisher and will go out at
            their scheduled time.
          default: 0
          example: 4
        created_workflows:
          type: integer
          title: Created Workflows
          description: >-
            How many of the handed-over posts needed a new automation created
            for them.
          default: 0
          example: 3
        reused_workflows:
          type: integer
          title: Reused Workflows
          description: >-
            How many of the handed-over posts reused an automation an earlier
            run had already created.
          default: 0
          example: 1
        plan_limited:
          type: integer
          title: Plan Limited
          description: >-
            How many posts weren't handed over because publishing scheduled
            posts needs a paid workspace plan. They stay on the calendar as
            `not_materialized_plan_limit`.
          default: 0
          example: 1
        needs_reconnect:
          type: integer
          title: Needs Reconnect
          description: >-
            How many posts weren't handed over because the app has no single
            connected account with permission to publish to their platform. They
            stay on the calendar as `needs_reconnect`, and a later run picks
            them up.
          default: 0
          example: 1
        failed:
          type: integer
          title: Failed
          description: >-
            How many posts can't be published at all, because their platform
            isn't publishable or their scheduled time had already passed. They
            stay on the calendar as `failed`, and this is final.
          default: 0
          example: 0
        skipped:
          type: integer
          title: Skipped
          description: >-
            How many posts the job left alone because they were deleted or
            changed after it picked them up.
          default: 0
          example: 0
      type: object
      title: SchedulingJobResult
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````